font-ligatures
Version:
Find ligature replacements for any system font
113 lines (99 loc) • 3.08 kB
text/typescript
export type SubstitutionTable = SubstitutionTable.Format1 | SubstitutionTable.Format2;
export namespace SubstitutionTable {
export interface Format1 {
substFormat: 1;
coverage: CoverageTable;
deltaGlyphId: number;
}
export interface Format2 {
substFormat: 2;
coverage: CoverageTable;
substitute: number[];
}
}
export type CoverageTable = CoverageTable.Format1 | CoverageTable.Format2;
export namespace CoverageTable {
export interface Format1 {
format: 1;
glyphs: number[];
}
export interface Format2 {
format: 2;
ranges: {
start: number;
end: number;
index: number;
}[];
}
}
export type ChainingContextualSubstitutionTable = ChainingContextualSubstitutionTable.Format1 |
ChainingContextualSubstitutionTable.Format2 | ChainingContextualSubstitutionTable.Format3;
export namespace ChainingContextualSubstitutionTable {
export interface Format1 {
substFormat: 1;
coverage: CoverageTable;
chainRuleSets: ChainSubRuleTable[][];
}
export interface Format2 {
substFormat: 2;
coverage: CoverageTable;
backtrackClassDef: ClassDefTable;
inputClassDef: ClassDefTable;
lookaheadClassDef: ClassDefTable;
chainClassSet: (null | ChainSubClassRuleTable[])[];
}
export interface Format3 {
substFormat: 3;
backtrackCoverage: CoverageTable[];
inputCoverage: CoverageTable[];
lookaheadCoverage: CoverageTable[];
lookupRecords: SubstitutionLookupRecord[];
}
}
export interface ReverseChainingContextualSingleSubstitutionTable {
substFormat: 1;
coverage: CoverageTable;
backtrackCoverage: CoverageTable[];
lookaheadCoverage: CoverageTable[];
substitutes: number[];
}
export type ClassDefTable = ClassDefTable.Format2;
export namespace ClassDefTable {
export interface Format2 {
format: 2;
ranges: {
start: number;
end: number;
classId: number;
}[];
}
}
export interface SubstitutionLookupRecord {
sequenceIndex: number;
lookupListIndex: number;
}
export type ChainSubRuleTable = ChainSubClassRuleTable;
export interface ChainSubClassRuleTable {
backtrack: number[];
input: number[];
lookahead: number[];
lookupRecords: SubstitutionLookupRecord[];
}
export type Lookup = Lookup.Type1 | Lookup.Type6 | Lookup.Type8;
export namespace Lookup {
export interface Type1 {
lookupType: 1;
lookupFlag: number;
subtables: SubstitutionTable[];
}
export interface Type6 {
lookupType: 6;
lookupFlag: number;
subtables: ChainingContextualSubstitutionTable[];
}
export interface Type8 {
lookupType: 8;
lookupFlag: number;
subtables: ReverseChainingContextualSingleSubstitutionTable[];
}
}