astro-ghostcms/.pnpm-store/v3/files/21/bbf5efee581dec2d7ac7c333d8f...

63 lines
1.9 KiB
Plaintext

// The `GDEF` table contains various glyph properties
// https://docs.microsoft.com/en-us/typography/opentype/spec/gdef
import check from '../check';
import { Parser } from '../parse';
var attachList = function() {
return {
coverage: this.parsePointer(Parser.coverage),
attachPoints: this.parseList(Parser.pointer(Parser.uShortList))
};
};
var caretValue = function() {
var format = this.parseUShort();
check.argument(format === 1 || format === 2 || format === 3,
'Unsupported CaretValue table version.');
if (format === 1) {
return { coordinate: this.parseShort() };
} else if (format === 2) {
return { pointindex: this.parseShort() };
} else if (format === 3) {
// Device / Variation Index tables unsupported
return { coordinate: this.parseShort() };
}
};
var ligGlyph = function() {
return this.parseList(Parser.pointer(caretValue));
};
var ligCaretList = function() {
return {
coverage: this.parsePointer(Parser.coverage),
ligGlyphs: this.parseList(Parser.pointer(ligGlyph))
};
};
var markGlyphSets = function() {
this.parseUShort(); // Version
return this.parseList(Parser.pointer(Parser.coverage));
};
function parseGDEFTable(data, start) {
start = start || 0;
const p = new Parser(data, start);
const tableVersion = p.parseVersion(1);
check.argument(tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,
'Unsupported GDEF table version.');
var gdef = {
version: tableVersion,
classDef: p.parsePointer(Parser.classDef),
attachList: p.parsePointer(attachList),
ligCaretList: p.parsePointer(ligCaretList),
markAttachClassDef: p.parsePointer(Parser.classDef)
};
if (tableVersion >= 1.2) {
gdef.markGlyphSets = p.parsePointer(markGlyphSets);
}
return gdef;
}
export default { parse: parseGDEFTable };