import { type Coverage } from "../../layout/structures/coverage.ts"; import type { int16, uint16 } from "../../types.ts"; import type { Reader } from "../binary/reader.ts"; import type { GposLookup } from "./gpos.ts"; /** Anchor point for attachment */ export interface Anchor { xCoordinate: int16; yCoordinate: int16; /** Contour point index (format 2) */ anchorPoint?: uint16; /** Device table offsets (format 3) */ xDeviceOffset?: uint16; yDeviceOffset?: uint16; } /** Mark record */ export interface MarkRecord { markClass: uint16; markAnchor: Anchor; } /** Mark array */ export interface MarkArray { markRecords: MarkRecord[]; } /** Base record for mark-to-base */ export interface BaseRecord { baseAnchors: (Anchor | null)[]; } /** Ligature attach record */ export interface LigatureAttach { componentRecords: ComponentRecord[]; } /** Component record for ligature */ export interface ComponentRecord { ligatureAnchors: (Anchor | null)[]; } /** Mark2 record for mark-to-mark */ export interface Mark2Record { mark2Anchors: (Anchor | null)[]; } /** Cursive attachment lookup (Type 3) */ export interface CursivePosLookup extends GposLookup { type: 3; subtables: CursivePosSubtable[]; } export interface CursivePosSubtable { coverage: Coverage; entryExitRecords: EntryExitRecord[]; } export interface EntryExitRecord { entryAnchor: Anchor | null; exitAnchor: Anchor | null; } /** Mark-to-base attachment lookup (Type 4) */ export interface MarkBasePosLookup extends GposLookup { type: 4; subtables: MarkBasePosSubtable[]; } export interface MarkBasePosSubtable { markCoverage: Coverage; baseCoverage: Coverage; markClassCount: uint16; markArray: MarkArray; baseArray: BaseRecord[]; } /** Mark-to-ligature attachment lookup (Type 5) */ export interface MarkLigaturePosLookup extends GposLookup { type: 5; subtables: MarkLigaturePosSubtable[]; } export interface MarkLigaturePosSubtable { markCoverage: Coverage; ligatureCoverage: Coverage; markClassCount: uint16; markArray: MarkArray; ligatureArray: LigatureAttach[]; } /** Mark-to-mark attachment lookup (Type 6) */ export interface MarkMarkPosLookup extends GposLookup { type: 6; subtables: MarkMarkPosSubtable[]; } export interface MarkMarkPosSubtable { mark1Coverage: Coverage; mark2Coverage: Coverage; markClassCount: uint16; mark1Array: MarkArray; mark2Array: Mark2Record[]; } export declare function parseAnchor(reader: Reader): Anchor; export declare function parseAnchorAt(reader: Reader, offset: number): Anchor | null; export declare function parseMarkArray(reader: Reader): MarkArray; export declare function parseCursivePos(reader: Reader, subtableOffsets: number[]): CursivePosSubtable[]; export declare function parseMarkBasePos(reader: Reader, subtableOffsets: number[]): MarkBasePosSubtable[]; export declare function parseMarkLigaturePos(reader: Reader, subtableOffsets: number[]): MarkLigaturePosSubtable[]; export declare function parseMarkMarkPos(reader: Reader, subtableOffsets: number[]): MarkMarkPosSubtable[];