
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
{"version":3,"file":"index.js","sources":["src/base.js","src/decorators.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/encodings.js","src/tables/name.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFIndex.js","src/cff/CFFOperand.js","src/cff/CFFDict.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/opentype.js","src/tables/variations.js","src/cff/CFFTop.js","src/cff/CFFFont.js","src/tables/VORG.js","src/tables/EBDT.js","src/tables/EBLC.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/aat.js","src/tables/bsln.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/tables/index.js","src/tables/directory.js","src/utils.js","src/CmapProcessor.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphRun.js","src/layout/GlyphPosition.js","src/aat/AATFeatureMap.js","src/aat/AATLookupTable.js","src/aat/AATStateMachine.js","src/aat/AATMorxProcessor.js","src/aat/AATLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/GlyphIterator.js","src/opentype/OTProcessor.js","src/opentype/GlyphInfo.js","src/opentype/shapers/HangulShaper.js","src/opentype/shapers/indic-data.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/UniversalShaper.js","src/opentype/shapers/index.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/opentype/OTLayoutEngine.js","src/layout/LayoutEngine.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/Glyph.js","src/glyph/TTFGlyph.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/TTFSubset.js","src/subset/CFFSubset.js","src/TTFFont.js","src/tables/WOFFDirectory.js","src/WOFFFont.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/WOFF2Font.js","src/TrueTypeCollection.js","src/DFont.js","src/index.js"],"sourcesContent":["import r from '@foliojs-fork/restructure';\r\nconst fs = require('fs');\r\n\r\nvar fontkit = {};\r\nexport default fontkit;\r\n\r\nfontkit.logErrors = false;\r\n\r\nlet formats = [];\r\nfontkit.registerFormat = function(format) {\r\n formats.push(format);\r\n};\r\n\r\nfontkit.openSync = function(filename, postscriptName) {\r\n let buffer = fs.readFileSync(filename);\r\n return fontkit.create(buffer, postscriptName);\r\n};\r\n\r\nfontkit.open = function(filename, postscriptName, callback) {\r\n if (typeof postscriptName === 'function') {\r\n callback = postscriptName;\r\n postscriptName = null;\r\n }\r\n\r\n fs.readFile(filename, function(err, buffer) {\r\n if (err) { return callback(err); }\r\n\r\n try {\r\n var font = fontkit.create(buffer, postscriptName);\r\n } catch (e) {\r\n return callback(e);\r\n }\r\n\r\n return callback(null, font);\r\n });\r\n\r\n return;\r\n};\r\n\r\nfontkit.create = function(buffer, postscriptName) {\r\n for (let i = 0; i < formats.length; i++) {\r\n let format = formats[i];\r\n if (format.probe(buffer)) {\r\n let font = new format(new r.DecodeStream(buffer));\r\n if (postscriptName) {\r\n return font.getFont(postscriptName);\r\n }\r\n\r\n return font;\r\n }\r\n }\r\n\r\n throw new Error('Unknown font format');\r\n};\r\n\r\nfontkit.defaultLanguage = 'en';\r\nfontkit.setDefaultLanguage = function(lang = 'en') {\r\n fontkit.defaultLanguage = lang;\r\n};","/**\r\n * This decorator caches the results of a getter or method such that\r\n * the results are lazily computed once, and then cached.\r\n * @private\r\n */\r\nexport function cache(target, key, descriptor) {\r\n if (descriptor.get) {\r\n let get = descriptor.get;\r\n descriptor.get = function() {\r\n let value = get.call(this);\r\n Object.defineProperty(this, key, { value });\r\n return value;\r\n };\r\n } else if (typeof descriptor.value === 'function') {\r\n let fn = descriptor.value;\r\n\r\n return {\r\n get() {\r\n let cache = new Map;\r\n function memoized(...args) {\r\n let key = args.length > 0 ? args[0] : 'value';\r\n if (cache.has(key)) {\r\n return cache.get(key);\r\n }\r\n\r\n let result = fn.apply(this, args);\r\n cache.set(key, result);\r\n return result;\r\n };\r\n\r\n Object.defineProperty(this, key, {value: memoized});\r\n return memoized;\r\n }\r\n };\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet SubHeader = new r.Struct({\r\n firstCode: r.uint16,\r\n entryCount: r.uint16,\r\n idDelta: r.int16,\r\n idRangeOffset: r.uint16\r\n});\r\n\r\nlet CmapGroup = new r.Struct({\r\n startCharCode: r.uint32,\r\n endCharCode: r.uint32,\r\n glyphID: r.uint32\r\n});\r\n\r\nlet UnicodeValueRange = new r.Struct({\r\n startUnicodeValue: r.uint24,\r\n additionalCount: r.uint8\r\n});\r\n\r\nlet UVSMapping = new r.Struct({\r\n unicodeValue: r.uint24,\r\n glyphID: r.uint16\r\n});\r\n\r\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\r\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\r\n\r\nlet VarSelectorRecord = new r.Struct({\r\n varSelector: r.uint24,\r\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\r\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\r\n});\r\n\r\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\r\n 0: { // Byte encoding\r\n length: r.uint16, // Total table length in bytes (set to 262 for format 0)\r\n language: r.uint16, // Language code for this encoding subtable, or zero if language-independent\r\n codeMap: new r.LazyArray(r.uint8, 256)\r\n },\r\n\r\n 2: { // High-byte mapping (CJK)\r\n length: r.uint16,\r\n language: r.uint16,\r\n subHeaderKeys: new r.Array(r.uint16, 256),\r\n subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys),\r\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\r\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\r\n },\r\n\r\n 4: { // Segment mapping to delta values\r\n length: r.uint16, // Total table length in bytes\r\n language: r.uint16, // Language code\r\n segCountX2: r.uint16,\r\n segCount: t => t.segCountX2 >> 1,\r\n searchRange: r.uint16,\r\n entrySelector: r.uint16,\r\n rangeShift: r.uint16,\r\n endCode: new r.LazyArray(r.uint16, 'segCount'),\r\n reservedPad: new r.Reserved(r.uint16), // This value should be zero\r\n startCode: new r.LazyArray(r.uint16, 'segCount'),\r\n idDelta: new r.LazyArray(r.int16, 'segCount'),\r\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\r\n glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\r\n },\r\n\r\n 6: { // Trimmed table\r\n length: r.uint16,\r\n language: r.uint16,\r\n firstCode: r.uint16,\r\n entryCount: r.uint16,\r\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\r\n },\r\n\r\n 8: { // mixed 16-bit and 32-bit coverage\r\n reserved: new r.Reserved(r.uint16),\r\n length: r.uint32,\r\n language: r.uint16,\r\n is32: new r.LazyArray(r.uint8, 8192),\r\n nGroups: r.uint32,\r\n groups: new r.LazyArray(CmapGroup, 'nGroups')\r\n },\r\n\r\n 10: { // Trimmed Array\r\n reserved: new r.Reserved(r.uint16),\r\n length: r.uint32,\r\n language: r.uint32,\r\n firstCode: r.uint32,\r\n entryCount: r.uint32,\r\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\r\n },\r\n\r\n 12: { // Segmented coverage\r\n reserved: new r.Reserved(r.uint16),\r\n length: r.uint32,\r\n language: r.uint32,\r\n nGroups: r.uint32,\r\n groups: new r.LazyArray(CmapGroup, 'nGroups')\r\n },\r\n\r\n 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\r\n reserved: new r.Reserved(r.uint16),\r\n length: r.uint32,\r\n language: r.uint32,\r\n nGroups: r.uint32,\r\n groups: new r.LazyArray(CmapGroup, 'nGroups')\r\n },\r\n\r\n 14: { // Unicode Variation Sequences\r\n length: r.uint32,\r\n numRecords: r.uint32,\r\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\r\n }\r\n});\r\n\r\nlet CmapEntry = new r.Struct({\r\n platformID: r.uint16, // Platform identifier\r\n encodingID: r.uint16, // Platform-specific encoding identifier\r\n table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\r\n});\r\n\r\n// character to glyph mapping\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n numSubtables: r.uint16,\r\n tables: new r.Array(CmapEntry, 'numSubtables')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// font header\r\nexport default new r.Struct({\r\n version: r.int32, // 0x00010000 (version 1.0)\r\n revision: r.int32, // set by font manufacturer\r\n checkSumAdjustment: r.uint32,\r\n magicNumber: r.uint32, // set to 0x5F0F3CF5\r\n flags: r.uint16,\r\n unitsPerEm: r.uint16, // range from 64 to 16384\r\n created: new r.Array(r.int32, 2),\r\n modified: new r.Array(r.int32, 2),\r\n xMin: r.int16, // for all glyph bounding boxes\r\n yMin: r.int16, // for all glyph bounding boxes\r\n xMax: r.int16, // for all glyph bounding boxes\r\n yMax: r.int16, // for all glyph bounding boxes\r\n macStyle: new r.Bitfield(r.uint16, [\r\n 'bold', 'italic', 'underline', 'outline',\r\n 'shadow', 'condensed', 'extended'\r\n ]),\r\n lowestRecPPEM: r.uint16, // smallest readable size in pixels\r\n fontDirectionHint: r.int16,\r\n indexToLocFormat: r.int16, // 0 for short offsets, 1 for long\r\n glyphDataFormat: r.int16 // 0 for current format\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// horizontal header\r\nexport default new r.Struct({\r\n version: r.int32,\r\n ascent: r.int16, // Distance from baseline of highest ascender\r\n descent: r.int16, // Distance from baseline of lowest descender\r\n lineGap: r.int16, // Typographic line gap\r\n advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table\r\n minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table\r\n minRightSideBearing: r.int16, // Minimum right sidebearing value\r\n xMaxExtent: r.int16,\r\n caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical\r\n caretSlopeRun: r.int16, // 0 for vertical\r\n caretOffset: r.int16, // Set to 0 for non-slanted fonts\r\n reserved: new r.Reserved(r.int16, 4),\r\n metricDataFormat: r.int16, // 0 for current format\r\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet HmtxEntry = new r.Struct({\r\n advance: r.uint16,\r\n bearing: r.int16\r\n});\r\n\r\nexport default new r.Struct({\r\n metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\r\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// maxiumum profile\r\nexport default new r.Struct({\r\n version: r.int32,\r\n numGlyphs: r.uint16, // The number of glyphs in the font\r\n maxPoints: r.uint16, // Maximum points in a non-composite glyph\r\n maxContours: r.uint16, // Maximum contours in a non-composite glyph\r\n maxComponentPoints: r.uint16, // Maximum points in a composite glyph\r\n maxComponentContours: r.uint16, // Maximum contours in a composite glyph\r\n maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise\r\n maxTwilightPoints: r.uint16, // Maximum points used in Z0\r\n maxStorage: r.uint16, // Number of Storage Area locations\r\n maxFunctionDefs: r.uint16, // Number of FDEFs\r\n maxInstructionDefs: r.uint16, // Number of IDEFs\r\n maxStackElements: r.uint16, // Maximum stack depth\r\n maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions\r\n maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph\r\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\r\n});\r\n","/**\r\n * Gets an encoding name from platform, encoding, and language ids.\r\n * Returned encoding names can be used in iconv-lite to decode text.\r\n */\r\nexport function getEncoding(platformID, encodingID, languageID = 0) {\r\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\r\n return MAC_LANGUAGE_ENCODINGS[languageID];\r\n }\r\n \r\n return ENCODINGS[platformID][encodingID];\r\n}\r\n\r\n// Map of platform ids to encoding ids.\r\nexport const ENCODINGS = [\r\n // unicode\r\n ['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\r\n \r\n // macintosh\r\n // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\r\n // 0\tRoman 17\tMalayalam\r\n // 1\tJapanese\t 18\tSinhalese\r\n // 2\tTraditional Chinese\t 19\tBurmese\r\n // 3\tKorean\t 20\tKhmer\r\n // 4\tArabic\t 21\tThai\r\n // 5\tHebrew\t 22\tLaotian\r\n // 6\tGreek\t 23\tGeorgian\r\n // 7\tRussian\t 24\tArmenian\r\n // 8\tRSymbol\t 25\tSimplified Chinese\r\n // 9\tDevanagari\t 26\tTibetan\r\n // 10\tGurmukhi\t 27\tMongolian\r\n // 11\tGujarati\t 28\tGeez\r\n // 12\tOriya\t 29\tSlavic\r\n // 13\tBengali\t 30\tVietnamese\r\n // 14\tTamil\t 31\tSindhi\r\n // 15\tTelugu\t 32\t(Uninterpreted)\r\n // 16\tKannada\r\n ['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\r\n 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati',\r\n 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\r\n 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', \r\n 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\r\n \r\n // ISO (deprecated)\r\n ['ascii'],\r\n \r\n // windows\r\n // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\r\n ['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']\r\n];\r\n\r\n// Overrides for Mac scripts by language id.\r\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\r\nexport const MAC_LANGUAGE_ENCODINGS = {\r\n 15: 'maciceland',\r\n 17: 'macturkish',\r\n 18: 'maccroatian',\r\n 24: 'maccenteuro',\r\n 25: 'maccenteuro',\r\n 26: 'maccenteuro',\r\n 27: 'maccenteuro',\r\n 28: 'maccenteuro',\r\n 30: 'maciceland',\r\n 37: 'macromania',\r\n 38: 'maccenteuro',\r\n 39: 'maccenteuro',\r\n 40: 'maccenteuro',\r\n 143: 'macinuit', // Unsupported by iconv-lite\r\n 146: 'macgaelic' // Unsupported by iconv-lite\r\n};\r\n\r\n// Map of platform ids to BCP-47 language codes.\r\nexport const LANGUAGES = [\r\n // unicode\r\n [],\r\n \r\n { // macintosh\r\n 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',\r\n 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',\r\n 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',\r\n 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',\r\n 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',\r\n 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',\r\n 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',\r\n 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',\r\n 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',\r\n 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',\r\n 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',\r\n 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',\r\n 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',\r\n 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',\r\n 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',\r\n 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',\r\n 16: 'mt', 46: 'be', 76: 'si', 139: 'su',\r\n 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',\r\n 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',\r\n 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',\r\n 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',\r\n 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',\r\n 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',\r\n 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',\r\n 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',\r\n 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',\r\n 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',\r\n 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',\r\n 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',\r\n 29: 'se', 59: 'ps', 89: 'sw',\r\n },\r\n \r\n // ISO (deprecated)\r\n [],\r\n \r\n { // windows \r\n 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', \r\n 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', \r\n 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', \r\n 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', \r\n 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', \r\n 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', \r\n 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', \r\n 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', \r\n 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', \r\n 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', \r\n 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', \r\n 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', \r\n 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', \r\n 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', \r\n 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', \r\n 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', \r\n 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', \r\n 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', \r\n 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', \r\n 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', \r\n 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', \r\n 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', \r\n 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', \r\n 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', \r\n 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', \r\n 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', \r\n 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', \r\n 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', \r\n 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', \r\n 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', \r\n 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', \r\n 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', \r\n 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', \r\n 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', \r\n 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', \r\n 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', \r\n 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', \r\n 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', \r\n 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', \r\n 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', \r\n 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', \r\n 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', \r\n 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', \r\n 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', \r\n 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', \r\n 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', \r\n 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', \r\n 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', \r\n 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', \r\n 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', \r\n 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', \r\n 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', \r\n }\r\n];\r\n","import r from '@foliojs-fork/restructure';\r\nimport {getEncoding, LANGUAGES} from '../encodings';\r\n\r\nlet NameRecord = new r.Struct({\r\n platformID: r.uint16,\r\n encodingID: r.uint16,\r\n languageID: r.uint16,\r\n nameID: r.uint16,\r\n length: r.uint16,\r\n string: new r.Pointer(r.uint16,\r\n new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\r\n { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\r\n )\r\n});\r\n\r\nlet LangTagRecord = new r.Struct({\r\n length: r.uint16,\r\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\r\n});\r\n\r\nvar NameTable = new r.VersionedStruct(r.uint16, {\r\n 0: {\r\n count: r.uint16,\r\n stringOffset: r.uint16,\r\n records: new r.Array(NameRecord, 'count')\r\n },\r\n 1: {\r\n count: r.uint16,\r\n stringOffset: r.uint16,\r\n records: new r.Array(NameRecord, 'count'),\r\n langTagCount: r.uint16,\r\n langTags: new r.Array(LangTagRecord, 'langTagCount')\r\n }\r\n});\r\n\r\nexport default NameTable;\r\n\r\nconst NAMES = [\r\n 'copyright',\r\n 'fontFamily',\r\n 'fontSubfamily',\r\n 'uniqueSubfamily',\r\n 'fullName',\r\n 'version',\r\n 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\r\n 'trademark',\r\n 'manufacturer',\r\n 'designer',\r\n 'description',\r\n 'vendorURL',\r\n 'designerURL',\r\n 'license',\r\n 'licenseURL',\r\n null, // reserved\r\n 'preferredFamily',\r\n 'preferredSubfamily',\r\n 'compatibleFull',\r\n 'sampleText',\r\n 'postscriptCIDFontName',\r\n 'wwsFamilyName',\r\n 'wwsSubfamilyName'\r\n];\r\n\r\nNameTable.process = function(stream) {\r\n var records = {};\r\n for (let record of this.records) {\r\n // find out what language this is for\r\n let language = LANGUAGES[record.platformID][record.languageID];\r\n\r\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\r\n language = this.langTags[record.languageID - 0x8000].tag;\r\n }\r\n\r\n if (language == null) {\r\n language = record.platformID + '-' + record.languageID;\r\n }\r\n\r\n // if the nameID is >= 256, it is a font feature record (AAT)\r\n let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\r\n if (records[key] == null) {\r\n records[key] = {};\r\n }\r\n\r\n let obj = records[key];\r\n if (record.nameID >= 256) {\r\n obj = obj[record.nameID] || (obj[record.nameID] = {});\r\n }\r\n\r\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\r\n obj[language] = record.string;\r\n }\r\n }\r\n\r\n this.records = records;\r\n};\r\n\r\nNameTable.preEncode = function() {\r\n if (Array.isArray(this.records)) return;\r\n this.version = 0;\r\n\r\n let records = [];\r\n for (let key in this.records) {\r\n let val = this.records[key];\r\n if (key === 'fontFeatures') continue;\r\n\r\n records.push({\r\n platformID: 3,\r\n encodingID: 1,\r\n languageID: 0x409,\r\n nameID: NAMES.indexOf(key),\r\n length: Buffer.byteLength(val.en, 'utf16le'),\r\n string: val.en\r\n });\r\n\r\n if (key === 'postscriptName') {\r\n records.push({\r\n platformID: 1,\r\n encodingID: 0,\r\n languageID: 0,\r\n nameID: NAMES.indexOf(key),\r\n length: val.en.length,\r\n string: val.en\r\n });\r\n }\r\n }\r\n\r\n this.records = records;\r\n this.count = records.length;\r\n this.stringOffset = NameTable.size(this, null, false);\r\n};\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nvar OS2 = new r.VersionedStruct(r.uint16, {\r\n header: {\r\n xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space\r\n usWeightClass: r.uint16, // visual weight of stroke in glyphs\r\n usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)\r\n fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\r\n null, 'noEmbedding', 'viewOnly', 'editable', null,\r\n null, null, null, 'noSubsetting', 'bitmapOnly'\r\n ]),\r\n ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts\r\n ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts\r\n ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts\r\n ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts\r\n ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts\r\n ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts\r\n ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts\r\n ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts\r\n yStrikeoutSize: r.int16, // width of the strikeout stroke\r\n yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline\r\n sFamilyClass: r.int16, // classification of font-family design\r\n panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface\r\n ulCharRange: new r.Array(r.uint32, 4),\r\n vendorID: new r.String(4), // four character identifier for the font vendor\r\n fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font\r\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout',\r\n 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\r\n ]),\r\n usFirstCharIndex: r.uint16, // The minimum Unicode index in this font\r\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\r\n },\r\n\r\n // The Apple version of this table ends here, but the Microsoft one continues on...\r\n 0: {},\r\n\r\n 1: {\r\n typoAscender: r.int16,\r\n typoDescender: r.int16,\r\n typoLineGap: r.int16,\r\n winAscent: r.uint16,\r\n winDescent: r.uint16,\r\n codePageRange: new r.Array(r.uint32, 2)\r\n },\r\n\r\n 2: {\r\n // these should be common with version 1 somehow\r\n typoAscender: r.int16,\r\n typoDescender: r.int16,\r\n typoLineGap: r.int16,\r\n winAscent: r.uint16,\r\n winDescent: r.uint16,\r\n codePageRange: new r.Array(r.uint32, 2),\r\n\r\n xHeight: r.int16,\r\n capHeight: r.int16,\r\n defaultChar: r.uint16,\r\n breakChar: r.uint16,\r\n maxContent: r.uint16\r\n },\r\n\r\n 5: {\r\n typoAscender: r.int16,\r\n typoDescender: r.int16,\r\n typoLineGap: r.int16,\r\n winAscent: r.uint16,\r\n winDescent: r.uint16,\r\n codePageRange: new r.Array(r.uint32, 2),\r\n\r\n xHeight: r.int16,\r\n capHeight: r.int16,\r\n defaultChar: r.uint16,\r\n breakChar: r.uint16,\r\n maxContent: r.uint16,\r\n\r\n usLowerOpticalPointSize: r.uint16,\r\n usUpperOpticalPointSize: r.uint16\r\n }\r\n});\r\n\r\nlet versions = OS2.versions;\r\nversions[3] = versions[4] = versions[2];\r\n\r\nexport default OS2;\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// PostScript information\r\nexport default new r.VersionedStruct(r.fixed32, {\r\n header: { // these fields exist at the top of all versions\r\n italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\r\n underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline\r\n underlineThickness: r.int16, // Suggested values for the underline thickness\r\n isFixedPitch: r.uint32, // Whether the font is monospaced\r\n minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\r\n maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\r\n minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\r\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\r\n },\r\n\r\n 1: {}, // version 1 has no additional fields\r\n\r\n 2: {\r\n numberOfGlyphs: r.uint16,\r\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\r\n names: new r.Array(new r.String(r.uint8))\r\n },\r\n\r\n 2.5: {\r\n numberOfGlyphs: r.uint16,\r\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\r\n },\r\n\r\n 3: {}, // version 3 has no additional fields\r\n\r\n 4: {\r\n map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// An array of predefined values accessible by instructions\r\nexport default new r.Struct({\r\n controlValues: new r.Array(r.int16)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// A list of instructions that are executed once when a font is first used.\r\n// These instructions are known as the font program. The main use of this table\r\n// is for the definition of functions that are used in many different glyph programs.\r\nexport default new r.Struct({\r\n instructions: new r.Array(r.uint8)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\r\n 0: {\r\n offsets: new r.Array(r.uint16)\r\n },\r\n 1: {\r\n offsets: new r.Array(r.uint32)\r\n }\r\n});\r\n\r\nloca.process = function() {\r\n if (this.version === 0) {\r\n for (let i = 0; i < this.offsets.length; i++) {\r\n this.offsets[i] <<= 1;\r\n }\r\n }\r\n};\r\n\r\nloca.preEncode = function() {\r\n if (this.version === 0) {\r\n for (let i = 0; i < this.offsets.length; i++) {\r\n this.offsets[i] >>>= 1;\r\n }\r\n }\r\n};\r\n\r\nexport default loca;\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// Set of instructions executed whenever the point size or font transformation change\r\nexport default new r.Struct({\r\n controlValueProgram: new r.Array(r.uint8)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// only used for encoding\r\nexport default new r.Array(new r.Buffer);\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nexport default class CFFIndex {\r\n constructor(type) {\r\n this.type = type;\r\n }\r\n\r\n getCFFVersion(ctx) {\r\n while (ctx && !ctx.hdrSize) {\r\n ctx = ctx.parent;\r\n }\r\n\r\n return ctx ? ctx.version : -1;\r\n }\r\n\r\n decode(stream, parent) {\r\n let version = this.getCFFVersion(parent);\r\n let count = version >= 2\r\n ? stream.readUInt32BE()\r\n : stream.readUInt16BE();\r\n\r\n if (count === 0) {\r\n return [];\r\n }\r\n\r\n let offSize = stream.readUInt8();\r\n let offsetType;\r\n if (offSize === 1) {\r\n offsetType = r.uint8;\r\n } else if (offSize === 2) {\r\n offsetType = r.uint16;\r\n } else if (offSize === 3) {\r\n offsetType = r.uint24;\r\n } else if (offSize === 4) {\r\n offsetType = r.uint32;\r\n } else {\r\n throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\r\n }\r\n\r\n let ret = [];\r\n let startPos = stream.pos + ((count + 1) * offSize) - 1;\r\n\r\n let start = offsetType.decode(stream);\r\n for (let i = 0; i < count; i++) {\r\n let end = offsetType.decode(stream);\r\n\r\n if (this.type != null) {\r\n let pos = stream.pos;\r\n stream.pos = startPos + start;\r\n\r\n parent.length = end - start;\r\n ret.push(this.type.decode(stream, parent));\r\n stream.pos = pos;\r\n } else {\r\n ret.push({\r\n offset: startPos + start,\r\n length: end - start\r\n });\r\n }\r\n\r\n start = end;\r\n }\r\n\r\n stream.pos = startPos + start;\r\n return ret;\r\n }\r\n\r\n size(arr, parent) {\r\n let size = 2;\r\n if (arr.length === 0) {\r\n return size;\r\n }\r\n\r\n let type = this.type || new r.Buffer;\r\n\r\n // find maximum offset to detminine offset type\r\n let offset = 1;\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n offset += type.size(item, parent);\r\n }\r\n\r\n let offsetType;\r\n if (offset <= 0xff) {\r\n offsetType = r.uint8;\r\n } else if (offset <= 0xffff) {\r\n offsetType = r.uint16;\r\n } else if (offset <= 0xffffff) {\r\n offsetType = r.uint24;\r\n } else if (offset <= 0xffffffff) {\r\n offsetType = r.uint32;\r\n } else {\r\n throw new Error(\"Bad offset in CFFIndex\");\r\n }\r\n\r\n size += 1 + offsetType.size() * (arr.length + 1);\r\n size += offset - 1;\r\n\r\n return size;\r\n }\r\n\r\n encode(stream, arr, parent) {\r\n stream.writeUInt16BE(arr.length);\r\n if (arr.length === 0) {\r\n return;\r\n }\r\n\r\n let type = this.type || new r.Buffer;\r\n\r\n // find maximum offset to detminine offset type\r\n let sizes = [];\r\n let offset = 1;\r\n for (let item of arr) {\r\n let s = type.size(item, parent);\r\n sizes.push(s);\r\n offset += s;\r\n }\r\n\r\n let offsetType;\r\n if (offset <= 0xff) {\r\n offsetType = r.uint8;\r\n } else if (offset <= 0xffff) {\r\n offsetType = r.uint16;\r\n } else if (offset <= 0xffffff) {\r\n offsetType = r.uint24;\r\n } else if (offset <= 0xffffffff) {\r\n offsetType = r.uint32;\r\n } else {\r\n throw new Error(\"Bad offset in CFFIndex\");\r\n }\r\n\r\n // write offset size\r\n stream.writeUInt8(offsetType.size());\r\n\r\n // write elements\r\n offset = 1;\r\n offsetType.encode(stream, offset);\r\n\r\n for (let size of sizes) {\r\n offset += size;\r\n offsetType.encode(stream, offset);\r\n }\r\n\r\n for (let item of arr) {\r\n type.encode(stream, item, parent);\r\n }\r\n\r\n return;\r\n }\r\n}\r\n","const FLOAT_EOF = 0xf;\r\nconst FLOAT_LOOKUP = [\r\n '0', '1', '2', '3', '4', '5', '6', '7',\r\n '8', '9', '.', 'E', 'E-', null, '-'\r\n];\r\n\r\nconst FLOAT_ENCODE_LOOKUP = {\r\n '.': 10,\r\n 'E': 11,\r\n 'E-': 12,\r\n '-': 14\r\n};\r\n\r\nexport default class CFFOperand {\r\n static decode(stream, value) {\r\n if (32 <= value && value <= 246) {\r\n return value - 139;\r\n }\r\n\r\n if (247 <= value && value <= 250) {\r\n return (value - 247) * 256 + stream.readUInt8() + 108;\r\n }\r\n\r\n if (251 <= value && value <= 254) {\r\n return -(value - 251) * 256 - stream.readUInt8() - 108;\r\n }\r\n\r\n if (value === 28) {\r\n return stream.readInt16BE();\r\n }\r\n\r\n if (value === 29) {\r\n return stream.readInt32BE();\r\n }\r\n\r\n if (value === 30) {\r\n let str = '';\r\n while (true) {\r\n let b = stream.readUInt8();\r\n\r\n let n1 = b >> 4;\r\n if (n1 === FLOAT_EOF) { break; }\r\n str += FLOAT_LOOKUP[n1];\r\n\r\n let n2 = b & 15;\r\n if (n2 === FLOAT_EOF) { break; }\r\n str += FLOAT_LOOKUP[n2];\r\n }\r\n\r\n return parseFloat(str);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static size(value) {\r\n // if the value needs to be forced to the largest size (32 bit)\r\n // e.g. for unknown pointers, set to 32768\r\n if (value.forceLarge) {\r\n value = 32768;\r\n }\r\n\r\n if ((value | 0) !== value) { // floating point\r\n let str = '' + value;\r\n return 1 + Math.ceil((str.length + 1) / 2);\r\n\r\n } else if (-107 <= value && value <= 107) {\r\n return 1;\r\n\r\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\r\n return 2;\r\n\r\n } else if (-32768 <= value && value <= 32767) {\r\n return 3;\r\n\r\n } else {\r\n return 5;\r\n }\r\n }\r\n\r\n static encode(stream, value) {\r\n // if the value needs to be forced to the largest size (32 bit)\r\n // e.g. for unknown pointers, save the old value and set to 32768\r\n let val = Number(value);\r\n\r\n if (value.forceLarge) {\r\n stream.writeUInt8(29);\r\n return stream.writeInt32BE(val);\r\n\r\n } else if ((val | 0) !== val) { // floating point\r\n stream.writeUInt8(30);\r\n\r\n let str = '' + val;\r\n for (let i = 0; i < str.length; i += 2) {\r\n let c1 = str[i];\r\n let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\r\n\r\n if (i === str.length - 1) {\r\n var n2 = FLOAT_EOF;\r\n } else {\r\n let c2 = str[i + 1];\r\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\r\n }\r\n\r\n stream.writeUInt8((n1 << 4) | (n2 & 15));\r\n }\r\n\r\n if (n2 !== FLOAT_EOF) {\r\n return stream.writeUInt8((FLOAT_EOF << 4));\r\n }\r\n\r\n } else if (-107 <= val && val <= 107) {\r\n return stream.writeUInt8(val + 139);\r\n\r\n } else if (108 <= val && val <= 1131) {\r\n val -= 108;\r\n stream.writeUInt8((val >> 8) + 247);\r\n return stream.writeUInt8(val & 0xff);\r\n\r\n } else if (-1131 <= val && val <= -108) {\r\n val = -val - 108;\r\n stream.writeUInt8((val >> 8) + 251);\r\n return stream.writeUInt8(val & 0xff);\r\n\r\n } else if (-32768 <= val && val <= 32767) {\r\n stream.writeUInt8(28);\r\n return stream.writeInt16BE(val);\r\n\r\n } else {\r\n stream.writeUInt8(29);\r\n return stream.writeInt32BE(val);\r\n }\r\n }\r\n}\r\n","import isEqual from 'deep-equal';\r\nimport r from '@foliojs-fork/restructure';\r\nimport CFFOperand from './CFFOperand';\r\nimport { PropertyDescriptor } from '@foliojs-fork/restructure/src/utils';\r\n\r\nexport default class CFFDict {\r\n constructor(ops = []) {\r\n this.ops = ops;\r\n this.fields = {};\r\n for (let field of ops) {\r\n let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\r\n this.fields[key] = field;\r\n }\r\n }\r\n\r\n decodeOperands(type, stream, ret, operands) {\r\n if (Array.isArray(type)) {\r\n return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\r\n } else if (type.decode != null) {\r\n return type.decode(stream, ret, operands);\r\n } else {\r\n switch (type) {\r\n case 'number':\r\n case 'offset':\r\n case 'sid':\r\n return operands[0];\r\n case 'boolean':\r\n return !!operands[0];\r\n default:\r\n return operands;\r\n }\r\n }\r\n }\r\n\r\n encodeOperands(type, stream, ctx, operands) {\r\n if (Array.isArray(type)) {\r\n return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\r\n } else if (type.encode != null) {\r\n return type.encode(stream, operands, ctx);\r\n } else if (typeof operands === 'number') {\r\n return [operands];\r\n } else if (typeof operands === 'boolean') {\r\n return [+operands];\r\n } else if (Array.isArray(operands)) {\r\n return operands;\r\n } else {\r\n return [operands];\r\n }\r\n }\r\n\r\n decode(stream, parent) {\r\n let end = stream.pos + parent.length;\r\n let ret = {};\r\n let operands = [];\r\n\r\n // define hidden properties\r\n Object.defineProperties(ret, {\r\n parent: { value: parent },\r\n _startOffset: { value: stream.pos }\r\n });\r\n\r\n // fill in defaults\r\n for (let key in this.fields) {\r\n let field = this.fields[key];\r\n ret[field[1]] = field[3];\r\n }\r\n\r\n while (stream.pos < end) {\r\n let b = stream.readUInt8();\r\n if (b < 28) {\r\n if (b === 12) {\r\n b = (b << 8) | stream.readUInt8();\r\n }\r\n\r\n let field = this.fields[b];\r\n if (!field) {\r\n throw new Error(`Unknown operator ${b}`);\r\n }\r\n\r\n let val = this.decodeOperands(field[2], stream, ret, operands);\r\n if (val != null) {\r\n if (val instanceof PropertyDescriptor) {\r\n Object.defineProperty(ret, field[1], val);\r\n } else {\r\n ret[field[1]] = val;\r\n }\r\n }\r\n\r\n operands = [];\r\n } else {\r\n operands.push(CFFOperand.decode(stream, b));\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n size(dict, parent, includePointers = true) {\r\n let ctx = {\r\n parent,\r\n val: dict,\r\n pointerSize: 0,\r\n startOffset: parent.startOffset || 0\r\n };\r\n\r\n let len = 0;\r\n\r\n for (let k in this.fields) {\r\n let field = this.fields[k];\r\n let val = dict[field[1]];\r\n if (val == null || isEqual(val, field[3])) {\r\n continue;\r\n }\r\n\r\n let operands = this.encodeOperands(field[2], null, ctx, val);\r\n for (let op of operands) {\r\n len += CFFOperand.size(op);\r\n }\r\n\r\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\r\n len += key.length;\r\n }\r\n\r\n if (includePointers) {\r\n len += ctx.pointerSize;\r\n }\r\n\r\n return len;\r\n }\r\n\r\n encode(stream, dict, parent) {\r\n let ctx = {\r\n pointers: [],\r\n startOffset: stream.pos,\r\n parent,\r\n val: dict,\r\n pointerSize: 0\r\n };\r\n\r\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\r\n\r\n for (let field of this.ops) {\r\n let val = dict[field[1]];\r\n if (val == null || isEqual(val, field[3])) {\r\n continue;\r\n }\r\n\r\n let operands = this.encodeOperands(field[2], stream, ctx, val);\r\n for (let op of operands) {\r\n CFFOperand.encode(stream, op);\r\n }\r\n\r\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\r\n for (let op of key) {\r\n stream.writeUInt8(op);\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < ctx.pointers.length) {\r\n let ptr = ctx.pointers[i++];\r\n ptr.type.encode(stream, ptr.val, ptr.parent);\r\n }\r\n\r\n return;\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nexport default class CFFPointer extends r.Pointer {\r\n constructor(type, options = {}) {\r\n if (options.type == null) {\r\n options.type = 'global';\r\n }\r\n\r\n super(null, type, options);\r\n }\r\n\r\n decode(stream, parent, operands) {\r\n this.offsetType = {\r\n decode: () => operands[0]\r\n };\r\n\r\n return super.decode(stream, parent, operands);\r\n }\r\n\r\n encode(stream, value, ctx) {\r\n if (!stream) {\r\n // compute the size (so ctx.pointerSize is correct)\r\n this.offsetType = {\r\n size: () => 0\r\n };\r\n\r\n this.size(value, ctx);\r\n return [new Ptr(0)];\r\n }\r\n\r\n let ptr = null;\r\n this.offsetType = {\r\n encode: (stream, val) => ptr = val\r\n };\r\n\r\n super.encode(stream, value, ctx);\r\n return [new Ptr(ptr)];\r\n }\r\n}\r\n\r\nclass Ptr {\r\n constructor(val) {\r\n this.val = val;\r\n this.forceLarge = true;\r\n }\r\n\r\n valueOf() {\r\n return this.val;\r\n }\r\n}\r\n","import CFFDict from './CFFDict';\r\nimport CFFIndex from './CFFIndex';\r\nimport CFFPointer from './CFFPointer';\r\n\r\nclass CFFBlendOp {\r\n static decode(stream, parent, operands) {\r\n let numBlends = operands.pop();\r\n\r\n // TODO: actually blend. For now just consume the deltas\r\n // since we don't use any of the values anyway.\r\n while (operands.length > numBlends) {\r\n operands.pop();\r\n }\r\n }\r\n}\r\n\r\nexport default new CFFDict([\r\n // key name type default\r\n [6, 'BlueValues', 'delta', null],\r\n [7, 'OtherBlues', 'delta', null],\r\n [8, 'FamilyBlues', 'delta', null],\r\n [9, 'FamilyOtherBlues', 'delta', null],\r\n [[12, 9], 'BlueScale', 'number', 0.039625],\r\n [[12, 10], 'BlueShift', 'number', 7],\r\n [[12, 11], 'BlueFuzz', 'number', 1],\r\n [10, 'StdHW', 'number', null],\r\n [11, 'StdVW', 'number', null],\r\n [[12, 12], 'StemSnapH', 'delta', null],\r\n [[12, 13], 'StemSnapV', 'delta', null],\r\n [[12, 14], 'ForceBold', 'boolean', false],\r\n [[12, 17], 'LanguageGroup', 'number', 0],\r\n [[12, 18], 'ExpansionFactor', 'number', 0.06],\r\n [[12, 19], 'initialRandomSeed', 'number', 0],\r\n [20, 'defaultWidthX', 'number', 0],\r\n [21, 'nominalWidthX', 'number', 0],\r\n [22, 'vsindex', 'number', 0],\r\n [23, 'blend', CFFBlendOp, null],\r\n [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]\r\n]);\r\n","// Automatically generated from Appendix A of the CFF specification; do\r\n// not edit. Length should be 391.\r\nexport default [\r\n \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\r\n \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\r\n \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\r\n \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\r\n \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\r\n \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\r\n \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\r\n \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\r\n \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\r\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\r\n \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\r\n \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\r\n \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\r\n \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\r\n \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\r\n \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\r\n \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\r\n \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\r\n \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\r\n \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\r\n \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\r\n \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\r\n \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\r\n \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\r\n \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\r\n \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\r\n \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\r\n \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\r\n \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\r\n \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\r\n \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\r\n \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\r\n \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\r\n \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\r\n \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\r\n \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\r\n \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\r\n \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\r\n \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\r\n \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\r\n \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\r\n \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\r\n \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\r\n \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\r\n \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\r\n \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\r\n \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\r\n \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\r\n \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\r\n \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\r\n \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\r\n \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\r\n \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\r\n \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\r\n \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\r\n \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\r\n \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\r\n \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\r\n \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\r\n \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\r\n \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\r\n \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\r\n \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\r\n \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\r\n \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\r\n \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\r\n \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\r\n];\r\n","export let StandardEncoding = [\r\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\r\n '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\r\n 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\r\n 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\r\n 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\r\n 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\r\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\r\n 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\r\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\r\n 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\r\n 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\r\n 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\r\n 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\r\n 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\r\n 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\r\n '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\r\n 'lslash', 'oslash', 'oe', 'germandbls'\r\n];\r\n\r\nexport let ExpertEncoding = [\r\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\r\n '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\r\n 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\r\n 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\r\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\r\n 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\r\n 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\r\n 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\r\n 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\r\n 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\r\n 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\r\n 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\r\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\r\n 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\r\n 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\r\n '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\r\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\r\n '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\r\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\r\n 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\r\n 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\r\n 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\r\n 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\r\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\r\n 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\r\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\r\n];\r\n","export let ISOAdobeCharset = [\r\n '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\r\n 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\r\n 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\r\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\r\n 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\r\n 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\r\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\r\n 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\r\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\r\n 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\r\n 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\r\n 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\r\n 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\r\n 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\r\n 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\r\n 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\r\n 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\r\n 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\r\n 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\r\n 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\r\n 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\r\n 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\r\n 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\r\n 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\r\n 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\r\n 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\r\n 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\r\n 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\r\n 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\r\n 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\r\n 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\r\n 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\r\n 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\r\n 'ugrave', 'yacute', 'ydieresis', 'zcaron'\r\n];\r\n\r\nexport let ExpertCharset = [\r\n '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\r\n 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\r\n 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\r\n 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\r\n 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\r\n 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\r\n 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\r\n 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\r\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\r\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\r\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\r\n 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\r\n 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\r\n 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\r\n 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\r\n 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\r\n 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\r\n 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\r\n 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\r\n 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\r\n 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\r\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\r\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\r\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\r\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\r\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\r\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\r\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\r\n 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\r\n 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\r\n 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\r\n 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\r\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\r\n 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\r\n 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\r\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\r\n 'Ydieresissmall'\r\n];\r\n\r\nexport let ExpertSubsetCharset = [\r\n '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\r\n 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\r\n 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\r\n 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\r\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\r\n 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\r\n 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\r\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\r\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\r\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\r\n 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\r\n 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\r\n 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\r\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\r\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\r\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\r\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\r\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\r\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\r\n 'periodinferior', 'commainferior'\r\n];\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n//########################\r\n// Scripts and Languages #\r\n//########################\r\n\r\nlet LangSysTable = new r.Struct({\r\n reserved: new r.Reserved(r.uint16),\r\n reqFeatureIndex: r.uint16,\r\n featureCount: r.uint16,\r\n featureIndexes: new r.Array(r.uint16, 'featureCount')\r\n});\r\n\r\nlet LangSysRecord = new r.Struct({\r\n tag: new r.String(4),\r\n langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\r\n});\r\n\r\nlet Script = new r.Struct({\r\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\r\n count: r.uint16,\r\n langSysRecords: new r.Array(LangSysRecord, 'count')\r\n});\r\n\r\nlet ScriptRecord = new r.Struct({\r\n tag: new r.String(4),\r\n script: new r.Pointer(r.uint16, Script, { type: 'parent' })\r\n});\r\n\r\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\r\n\r\n//#######################\r\n// Features and Lookups #\r\n//#######################\r\n\r\nexport let Feature = new r.Struct({\r\n featureParams: r.uint16, // pointer\r\n lookupCount: r.uint16,\r\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\r\n});\r\n\r\nlet FeatureRecord = new r.Struct({\r\n tag: new r.String(4),\r\n feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })\r\n});\r\n\r\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\r\n\r\nlet LookupFlags = new r.Struct({\r\n markAttachmentType: r.uint8,\r\n flags: new r.Bitfield(r.uint8, [\r\n 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\r\n 'ignoreMarks', 'useMarkFilteringSet'\r\n ])\r\n});\r\n\r\nexport function LookupList(SubTable) {\r\n let Lookup = new r.Struct({\r\n lookupType: r.uint16,\r\n flags: LookupFlags,\r\n subTableCount: r.uint16,\r\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\r\n markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\r\n });\r\n\r\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\r\n}\r\n\r\n//#################\r\n// Coverage Table #\r\n//#################\r\n\r\nlet RangeRecord = new r.Struct({\r\n start: r.uint16,\r\n end: r.uint16,\r\n startCoverageIndex: r.uint16\r\n});\r\n\r\nexport let Coverage = new r.VersionedStruct(r.uint16, {\r\n 1: {\r\n glyphCount: r.uint16,\r\n glyphs: new r.Array(r.uint16, 'glyphCount')\r\n },\r\n 2: {\r\n rangeCount: r.uint16,\r\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\r\n }\r\n});\r\n\r\n//#########################\r\n// Class Definition Table #\r\n//#########################\r\n\r\nlet ClassRangeRecord = new r.Struct({\r\n start: r.uint16,\r\n end: r.uint16,\r\n class: r.uint16\r\n});\r\n\r\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\r\n 1: { // Class array\r\n startGlyph: r.uint16,\r\n glyphCount: r.uint16,\r\n classValueArray: new r.Array(r.uint16, 'glyphCount')\r\n },\r\n 2: { // Class ranges\r\n classRangeCount: r.uint16,\r\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\r\n }\r\n});\r\n\r\n//###############\r\n// Device Table #\r\n//###############\r\n\r\nexport let Device = new r.Struct({\r\n a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\r\n b: r.uint16, // endSize for Device, innerIndex for VariationIndex\r\n deltaFormat: r.uint16\r\n});\r\n\r\n//#############################################\r\n// Contextual Substitution/Positioning Tables #\r\n//#############################################\r\n\r\nlet LookupRecord = new r.Struct({\r\n sequenceIndex: r.uint16,\r\n lookupListIndex: r.uint16\r\n});\r\n\r\nlet Rule = new r.Struct({\r\n glyphCount: r.uint16,\r\n lookupCount: r.uint16,\r\n input: new r.Array(r.uint16, t => t.glyphCount - 1),\r\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\r\n});\r\n\r\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\r\n\r\nlet ClassRule = new r.Struct({\r\n glyphCount: r.uint16,\r\n lookupCount: r.uint16,\r\n classes: new r.Array(r.uint16, t => t.glyphCount - 1),\r\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\r\n});\r\n\r\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\r\n\r\nexport let Context = new r.VersionedStruct(r.uint16, {\r\n 1: { // Simple context\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n ruleSetCount: r.uint16,\r\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\r\n },\r\n 2: { // Class-based context\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n classDef: new r.Pointer(r.uint16, ClassDef),\r\n classSetCnt: r.uint16,\r\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\r\n },\r\n 3: {\r\n glyphCount: r.uint16,\r\n lookupCount: r.uint16,\r\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\r\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\r\n }\r\n});\r\n\r\n//######################################################\r\n// Chaining Contextual Substitution/Positioning Tables #\r\n//######################################################\r\n\r\nlet ChainRule = new r.Struct({\r\n backtrackGlyphCount: r.uint16,\r\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\r\n inputGlyphCount: r.uint16,\r\n input: new r.Array(r.uint16, t => t.inputGlyphCount - 1),\r\n lookaheadGlyphCount: r.uint16,\r\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\r\n lookupCount: r.uint16,\r\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\r\n});\r\n\r\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\r\n\r\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\r\n 1: { // Simple context glyph substitution\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n chainCount: r.uint16,\r\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\r\n },\r\n\r\n 2: { // Class-based chaining context\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\r\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\r\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\r\n chainCount: r.uint16,\r\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\r\n },\r\n\r\n 3: { // Coverage-based chaining context\r\n backtrackGlyphCount: r.uint16,\r\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\r\n inputGlyphCount: r.uint16,\r\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\r\n lookaheadGlyphCount: r.uint16,\r\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\r\n lookupCount: r.uint16,\r\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\r\n }\r\n});\r\n","import {Feature} from './opentype';\r\nimport r from '@foliojs-fork/restructure';\r\n\r\n/*******************\r\n * Variation Store *\r\n *******************/\r\n\r\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\r\nlet RegionAxisCoordinates = new r.Struct({\r\n startCoord: F2DOT14,\r\n peakCoord: F2DOT14,\r\n endCoord: F2DOT14\r\n});\r\n\r\nlet VariationRegionList = new r.Struct({\r\n axisCount: r.uint16,\r\n regionCount: r.uint16,\r\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\r\n});\r\n\r\nlet DeltaSet = new r.Struct({\r\n shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\r\n regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\r\n deltas: t => t.shortDeltas.concat(t.regionDeltas)\r\n});\r\n\r\nlet ItemVariationData = new r.Struct({\r\n itemCount: r.uint16,\r\n shortDeltaCount: r.uint16,\r\n regionIndexCount: r.uint16,\r\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\r\n deltaSets: new r.Array(DeltaSet, 'itemCount')\r\n});\r\n\r\nexport let ItemVariationStore = new r.Struct({\r\n format: r.uint16,\r\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\r\n variationDataCount: r.uint16,\r\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\r\n});\r\n\r\n/**********************\r\n * Feature Variations *\r\n **********************/\r\n\r\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\r\n 1: {\r\n axisIndex: r.uint16,\r\n axisIndex: r.uint16,\r\n filterRangeMinValue: F2DOT14,\r\n filterRangeMaxValue: F2DOT14\r\n }\r\n});\r\n\r\nlet ConditionSet = new r.Struct({\r\n conditionCount: r.uint16,\r\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\r\n});\r\n\r\nlet FeatureTableSubstitutionRecord = new r.Struct({\r\n featureIndex: r.uint16,\r\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\r\n});\r\n\r\nlet FeatureTableSubstitution = new r.Struct({\r\n version: r.fixed32,\r\n substitutionCount: r.uint16,\r\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\r\n});\r\n\r\nlet FeatureVariationRecord = new r.Struct({\r\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\r\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\r\n});\r\n\r\nexport let FeatureVariations = new r.Struct({\r\n majorVersion: r.uint16,\r\n minorVersion: r.uint16,\r\n featureVariationRecordCount: r.uint32,\r\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport { resolveLength } from '@foliojs-fork/restructure/src/utils';\r\nimport CFFDict from './CFFDict';\r\nimport CFFIndex from './CFFIndex';\r\nimport CFFPointer from './CFFPointer';\r\nimport CFFPrivateDict from './CFFPrivateDict';\r\nimport StandardStrings from './CFFStandardStrings';\r\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\r\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\r\nimport { ItemVariationStore } from '../tables/variations';\r\n\r\n// Checks if an operand is an index of a predefined value,\r\n// otherwise delegates to the provided type.\r\nclass PredefinedOp {\r\n constructor(predefinedOps, type) {\r\n this.predefinedOps = predefinedOps;\r\n this.type = type;\r\n }\r\n\r\n decode(stream, parent, operands) {\r\n if (this.predefinedOps[operands[0]]) {\r\n return this.predefinedOps[operands[0]];\r\n }\r\n\r\n return this.type.decode(stream, parent, operands);\r\n }\r\n\r\n size(value, ctx) {\r\n return this.type.size(value, ctx);\r\n }\r\n\r\n encode(stream, value, ctx) {\r\n let index = this.predefinedOps.indexOf(value);\r\n if (index !== -1) {\r\n return index;\r\n }\r\n\r\n return this.type.encode(stream, value, ctx);\r\n }\r\n}\r\n\r\nclass CFFEncodingVersion extends r.Number {\r\n constructor() {\r\n super('UInt8');\r\n }\r\n\r\n decode(stream) {\r\n return r.uint8.decode(stream) & 0x7f;\r\n }\r\n}\r\n\r\nlet Range1 = new r.Struct({\r\n first: r.uint16,\r\n nLeft: r.uint8\r\n});\r\n\r\nlet Range2 = new r.Struct({\r\n first: r.uint16,\r\n nLeft: r.uint16\r\n});\r\n\r\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\r\n 0: {\r\n nCodes: r.uint8,\r\n codes: new r.Array(r.uint8, 'nCodes')\r\n },\r\n\r\n 1: {\r\n nRanges: r.uint8,\r\n ranges: new r.Array(Range1, 'nRanges')\r\n }\r\n\r\n // TODO: supplement?\r\n});\r\n\r\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\r\n\r\n// Decodes an array of ranges until the total\r\n// length is equal to the provided length.\r\nclass RangeArray extends r.Array {\r\n decode(stream, parent) {\r\n let length = resolveLength(this.length, stream, parent);\r\n let count = 0;\r\n let res = [];\r\n while (count < length) {\r\n let range = this.type.decode(stream, parent);\r\n range.offset = count;\r\n count += range.nLeft + 1;\r\n res.push(range);\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n\r\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\r\n 0: {\r\n glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\r\n },\r\n\r\n 1: {\r\n ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\r\n },\r\n\r\n 2: {\r\n ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\r\n }\r\n});\r\n\r\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\r\n\r\nlet FDRange3 = new r.Struct({\r\n first: r.uint16,\r\n fd: r.uint8\r\n});\r\n\r\nlet FDRange4 = new r.Struct({\r\n first: r.uint32,\r\n fd: r.uint16\r\n});\r\n\r\nlet FDSelect = new r.VersionedStruct(r.uint8, {\r\n 0: {\r\n fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\r\n },\r\n\r\n 3: {\r\n nRanges: r.uint16,\r\n ranges: new r.Array(FDRange3, 'nRanges'),\r\n sentinel: r.uint16\r\n },\r\n\r\n 4: {\r\n nRanges: r.uint32,\r\n ranges: new r.Array(FDRange4, 'nRanges'),\r\n sentinel: r.uint32\r\n }\r\n});\r\n\r\nlet ptr = new CFFPointer(CFFPrivateDict);\r\nclass CFFPrivateOp {\r\n decode(stream, parent, operands) {\r\n parent.length = operands[0];\r\n return ptr.decode(stream, parent, [operands[1]]);\r\n }\r\n\r\n size(dict, ctx) {\r\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\r\n }\r\n\r\n encode(stream, dict, ctx) {\r\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\r\n }\r\n}\r\n\r\nlet FontDict = new CFFDict([\r\n // key name type(s) default\r\n [18, 'Private', new CFFPrivateOp, null],\r\n [[12, 38], 'FontName', 'sid', null],\r\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\r\n [[12, 5], 'PaintType', 'number', 0],\r\n]);\r\n\r\nlet CFFTopDict = new CFFDict([\r\n // key name type(s) default\r\n [[12, 30], 'ROS', ['sid', 'sid', 'number'], null],\r\n\r\n [0, 'version', 'sid', null],\r\n [1, 'Notice', 'sid', null],\r\n [[12, 0], 'Copyright', 'sid', null],\r\n [2, 'FullName', 'sid', null],\r\n [3, 'FamilyName', 'sid', null],\r\n [4, 'Weight', 'sid', null],\r\n [[12, 1], 'isFixedPitch', 'boolean', false],\r\n [[12, 2], 'ItalicAngle', 'number', 0],\r\n [[12, 3], 'UnderlinePosition', 'number', -100],\r\n [[12, 4], 'UnderlineThickness', 'number', 50],\r\n [[12, 5], 'PaintType', 'number', 0],\r\n [[12, 6], 'CharstringType', 'number', 2],\r\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\r\n [13, 'UniqueID', 'number', null],\r\n [5, 'FontBBox', 'array', [0, 0, 0, 0]],\r\n [[12, 8], 'StrokeWidth', 'number', 0],\r\n [14, 'XUID', 'array', null],\r\n [15, 'charset', CFFCharset, ISOAdobeCharset],\r\n [16, 'Encoding', CFFEncoding, StandardEncoding],\r\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\r\n [18, 'Private', new CFFPrivateOp, null],\r\n [[12, 20], 'SyntheticBase', 'number', null],\r\n [[12, 21], 'PostScript', 'sid', null],\r\n [[12, 22], 'BaseFontName', 'sid', null],\r\n [[12, 23], 'BaseFontBlend', 'delta', null],\r\n\r\n // CID font specific\r\n [[12, 31], 'CIDFontVersion', 'number', 0],\r\n [[12, 32], 'CIDFontRevision', 'number', 0],\r\n [[12, 33], 'CIDFontType', 'number', 0],\r\n [[12, 34], 'CIDCount', 'number', 8720],\r\n [[12, 35], 'UIDBase', 'number', null],\r\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\r\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\r\n [[12, 38], 'FontName', 'sid', null]\r\n]);\r\n\r\nlet VariationStore = new r.Struct({\r\n length: r.uint16,\r\n itemVariationStore: ItemVariationStore\r\n})\r\n\r\nlet CFF2TopDict = new CFFDict([\r\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\r\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\r\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\r\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\r\n [24, 'vstore', new CFFPointer(VariationStore), null],\r\n [25, 'maxstack', 'number', 193]\r\n]);\r\n\r\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\r\n 1: {\r\n hdrSize: r.uint8,\r\n offSize: r.uint8,\r\n nameIndex: new CFFIndex(new r.String('length')),\r\n topDictIndex: new CFFIndex(CFFTopDict),\r\n stringIndex: new CFFIndex(new r.String('length')),\r\n globalSubrIndex: new CFFIndex\r\n },\r\n\r\n 2: {\r\n hdrSize: r.uint8,\r\n length: r.uint16,\r\n topDict: CFF2TopDict,\r\n globalSubrIndex: new CFFIndex\r\n }\r\n});\r\n\r\nexport default CFFTop;\r\n","import r from '@foliojs-fork/restructure';\r\nimport CFFIndex from './CFFIndex';\r\nimport CFFTop from './CFFTop';\r\nimport CFFPrivateDict from './CFFPrivateDict';\r\nimport standardStrings from './CFFStandardStrings';\r\n\r\nclass CFFFont {\r\n constructor(stream) {\r\n this.stream = stream;\r\n this.decode();\r\n }\r\n\r\n static decode(stream) {\r\n return new CFFFont(stream);\r\n }\r\n\r\n decode() {\r\n let start = this.stream.pos;\r\n let top = CFFTop.decode(this.stream);\r\n for (let key in top) {\r\n let val = top[key];\r\n this[key] = val;\r\n }\r\n\r\n if (this.version < 2) {\r\n if (this.topDictIndex.length !== 1) {\r\n throw new Error(\"Only a single font is allowed in CFF\");\r\n }\r\n\r\n this.topDict = this.topDictIndex[0];\r\n }\r\n\r\n this.isCIDFont = this.topDict.ROS != null;\r\n return this;\r\n }\r\n\r\n string(sid) {\r\n if (this.version >= 2) {\r\n return null;\r\n }\r\n\r\n if (sid < standardStrings.length) {\r\n return standardStrings[sid];\r\n }\r\n\r\n return this.stringIndex[sid - standardStrings.length];\r\n }\r\n\r\n get postscriptName() {\r\n if (this.version < 2) {\r\n return this.nameIndex[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get fullName() {\r\n return this.string(this.topDict.FullName);\r\n }\r\n\r\n get familyName() {\r\n return this.string(this.topDict.FamilyName);\r\n }\r\n\r\n getCharString(glyph) {\r\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\r\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\r\n }\r\n\r\n getGlyphName(gid) {\r\n // CFF2 glyph names are in the post table.\r\n if (this.version >= 2) {\r\n return null;\r\n }\r\n\r\n // CID-keyed fonts don't have glyph names\r\n if (this.isCIDFont) {\r\n return null;\r\n }\r\n\r\n let { charset } = this.topDict;\r\n if (Array.isArray(charset)) {\r\n return charset[gid];\r\n }\r\n\r\n if (gid === 0) {\r\n return '.notdef';\r\n }\r\n\r\n gid -= 1;\r\n\r\n switch (charset.version) {\r\n case 0:\r\n return this.string(charset.glyphs[gid]);\r\n\r\n case 1:\r\n case 2:\r\n for (let i = 0; i < charset.ranges.length; i++) {\r\n let range = charset.ranges[i];\r\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\r\n return this.string(range.first + (gid - range.offset));\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n fdForGlyph(gid) {\r\n if (!this.topDict.FDSelect) {\r\n return null;\r\n }\r\n\r\n switch (this.topDict.FDSelect.version) {\r\n case 0:\r\n return this.topDict.FDSelect.fds[gid];\r\n\r\n case 3:\r\n case 4:\r\n let { ranges } = this.topDict.FDSelect;\r\n let low = 0;\r\n let high = ranges.length - 1;\r\n\r\n while (low <= high) {\r\n let mid = (low + high) >> 1;\r\n\r\n if (gid < ranges[mid].first) {\r\n high = mid - 1;\r\n } else if (mid < high && gid >= ranges[mid + 1].first) {\r\n low = mid + 1;\r\n } else {\r\n return ranges[mid].fd;\r\n }\r\n }\r\n default:\r\n throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\r\n }\r\n }\r\n\r\n privateDictForGlyph(gid) {\r\n if (this.topDict.FDSelect) {\r\n let fd = this.fdForGlyph(gid);\r\n if (this.topDict.FDArray[fd]) {\r\n return this.topDict.FDArray[fd].Private;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n if (this.version < 2) {\r\n return this.topDict.Private;\r\n }\r\n\r\n return this.topDict.FDArray[0].Private;\r\n }\r\n}\r\n\r\nexport default CFFFont;\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet VerticalOrigin = new r.Struct({\r\n glyphIndex: r.uint16,\r\n vertOriginY: r.int16\r\n});\r\n\r\nexport default new r.Struct({\r\n majorVersion: r.uint16,\r\n minorVersion: r.uint16,\r\n defaultVertOriginY: r.int16,\r\n numVertOriginYMetrics: r.uint16,\r\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nexport let BigMetrics = new r.Struct({\r\n height: r.uint8,\r\n width: r.uint8,\r\n horiBearingX: r.int8,\r\n horiBearingY: r.int8,\r\n horiAdvance: r.uint8,\r\n vertBearingX: r.int8,\r\n vertBearingY: r.int8,\r\n vertAdvance: r.uint8\r\n});\r\n\r\nexport let SmallMetrics = new r.Struct({\r\n height: r.uint8,\r\n width: r.uint8,\r\n bearingX: r.int8,\r\n bearingY: r.int8,\r\n advance: r.uint8\r\n});\r\n\r\nlet EBDTComponent = new r.Struct({\r\n glyph: r.uint16,\r\n xOffset: r.int8,\r\n yOffset: r.int8\r\n});\r\n\r\nclass ByteAligned {}\r\n\r\nclass BitAligned {}\r\n\r\nexport let glyph = new r.VersionedStruct('version', {\r\n 1: {\r\n metrics: SmallMetrics,\r\n data: ByteAligned\r\n },\r\n\r\n 2: {\r\n metrics: SmallMetrics,\r\n data: BitAligned\r\n },\r\n\r\n // format 3 is deprecated\r\n // format 4 is not supported by Microsoft\r\n\r\n 5: {\r\n data: BitAligned\r\n },\r\n\r\n 6: {\r\n metrics: BigMetrics,\r\n data: ByteAligned\r\n },\r\n\r\n 7: {\r\n metrics: BigMetrics,\r\n data: BitAligned\r\n },\r\n\r\n 8: {\r\n metrics: SmallMetrics,\r\n pad: new r.Reserved(r.uint8),\r\n numComponents: r.uint16,\r\n components: new r.Array(EBDTComponent, 'numComponents')\r\n },\r\n\r\n 9: {\r\n metrics: BigMetrics,\r\n pad: new r.Reserved(r.uint8),\r\n numComponents: r.uint16,\r\n components: new r.Array(EBDTComponent, 'numComponents')\r\n },\r\n\r\n 17: {\r\n metrics: SmallMetrics,\r\n dataLen: r.uint32,\r\n data: new r.Buffer('dataLen')\r\n },\r\n\r\n 18: {\r\n metrics: BigMetrics,\r\n dataLen: r.uint32,\r\n data: new r.Buffer('dataLen')\r\n },\r\n\r\n 19: {\r\n dataLen: r.uint32,\r\n data: new r.Buffer('dataLen')\r\n }\r\n});\r\n\r\n","import r from '@foliojs-fork/restructure';\r\nimport {BigMetrics} from './EBDT';\r\n\r\nlet SBitLineMetrics = new r.Struct({\r\n ascender: r.int8,\r\n descender: r.int8,\r\n widthMax: r.uint8,\r\n caretSlopeNumerator: r.int8,\r\n caretSlopeDenominator: r.int8,\r\n caretOffset: r.int8,\r\n minOriginSB: r.int8,\r\n minAdvanceSB: r.int8,\r\n maxBeforeBL: r.int8,\r\n minAfterBL: r.int8,\r\n pad: new r.Reserved(r.int8, 2)\r\n});\r\n\r\nlet CodeOffsetPair = new r.Struct({\r\n glyphCode: r.uint16,\r\n offset: r.uint16\r\n});\r\n\r\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\r\n header: {\r\n imageFormat: r.uint16,\r\n imageDataOffset: r.uint32\r\n },\r\n\r\n 1: {\r\n offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\r\n },\r\n\r\n 2: {\r\n imageSize: r.uint32,\r\n bigMetrics: BigMetrics\r\n },\r\n\r\n 3: {\r\n offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\r\n },\r\n\r\n 4: {\r\n numGlyphs: r.uint32,\r\n glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\r\n },\r\n\r\n 5: {\r\n imageSize: r.uint32,\r\n bigMetrics: BigMetrics,\r\n numGlyphs: r.uint32,\r\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\r\n }\r\n});\r\n\r\nlet IndexSubtableArray = new r.Struct({\r\n firstGlyphIndex: r.uint16,\r\n lastGlyphIndex: r.uint16,\r\n subtable: new r.Pointer(r.uint32, IndexSubtable)\r\n});\r\n\r\nlet BitmapSizeTable = new r.Struct({\r\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\r\n indexTablesSize: r.uint32,\r\n numberOfIndexSubTables: r.uint32,\r\n colorRef: r.uint32,\r\n hori: SBitLineMetrics,\r\n vert: SBitLineMetrics,\r\n startGlyphIndex: r.uint16,\r\n endGlyphIndex: r.uint16,\r\n ppemX: r.uint8,\r\n ppemY: r.uint8,\r\n bitDepth: r.uint8,\r\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint32, // 0x00020000\r\n numSizes: r.uint32,\r\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet ImageTable = new r.Struct({\r\n ppem: r.uint16,\r\n resolution: r.uint16,\r\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\r\n});\r\n\r\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\r\n// It includes several image tables with images for each bitmap glyph\r\n// of several different sizes.\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\r\n numImgTables: r.uint32,\r\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet LayerRecord = new r.Struct({\r\n gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).\r\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\r\n}); // be less than numPaletteEntries in the CPAL table, except for\r\n // the special case noted below. Each palette entry is 16 bits.\r\n // A palette index of 0xFFFF is a special case indicating that\r\n // the text foreground color should be used.\r\n\r\nlet BaseGlyphRecord = new r.Struct({\r\n gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only\r\n // and is not rendered for color.\r\n firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\r\n // There will be numLayers consecutive entries for this base glyph.\r\n numLayers: r.uint16\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n numBaseGlyphRecords: r.uint16,\r\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\r\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\r\n numLayerRecords: r.uint16\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet ColorRecord = new r.Struct({\r\n blue: r.uint8,\r\n green: r.uint8,\r\n red: r.uint8,\r\n alpha: r.uint8\r\n});\r\n\r\nexport default new r.VersionedStruct(r.uint16, {\r\n header: {\r\n numPaletteEntries: r.uint16,\r\n numPalettes: r.uint16,\r\n numColorRecords: r.uint16,\r\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\r\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\r\n },\r\n 0: {},\r\n 1: {\r\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\r\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\r\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\r\nimport {ItemVariationStore} from './variations';\r\n\r\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\r\n 1: { // Design units only\r\n coordinate: r.int16 // X or Y value, in design units\r\n },\r\n\r\n 2: { // Design units plus contour point\r\n coordinate: r.int16, // X or Y value, in design units\r\n referenceGlyph: r.uint16, // GlyphID of control glyph\r\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\r\n },\r\n\r\n 3: { // Design units plus Device table\r\n coordinate: r.int16, // X or Y value, in design units\r\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\r\n }\r\n});\r\n\r\nlet BaseValues = new r.Struct({\r\n defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList\r\n baseCoordCount: r.uint16,\r\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\r\n});\r\n\r\nlet FeatMinMaxRecord = new r.Struct({\r\n tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList\r\n minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\r\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL\r\n});\r\n\r\nlet MinMax = new r.Struct({\r\n minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\r\n maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\r\n featMinMaxCount: r.uint16, // May be 0\r\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\r\n});\r\n\r\nlet BaseLangSysRecord = new r.Struct({\r\n tag: new r.String(4), // 4-byte language system identification tag\r\n minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\r\n});\r\n\r\nlet BaseScript = new r.Struct({\r\n baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL\r\n defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL\r\n baseLangSysCount: r.uint16, // May be 0\r\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\r\n});\r\n\r\nlet BaseScriptRecord = new r.Struct({\r\n tag: new r.String(4), // 4-byte script identification tag\r\n script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\r\n});\r\n\r\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\r\n\r\n// Array of 4-byte baseline identification tags-must be in alphabetical order\r\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\r\n\r\nlet Axis = new r.Struct({\r\n baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL\r\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\r\n});\r\n\r\nexport default new r.VersionedStruct(r.uint32, {\r\n header: {\r\n horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL\r\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\r\n },\r\n\r\n 0x00010000: {},\r\n 0x00010001: {\r\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\r\nimport {ItemVariationStore} from './variations';\r\n\r\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\r\nlet AttachList = new r.Struct({\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n glyphCount: r.uint16,\r\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\r\n});\r\n\r\nlet CaretValue = new r.VersionedStruct(r.uint16, {\r\n 1: { // Design units only\r\n coordinate: r.int16\r\n },\r\n\r\n 2: { // Contour point\r\n caretValuePoint: r.uint16\r\n },\r\n\r\n 3: { // Design units plus Device table\r\n coordinate: r.int16,\r\n deviceTable: new r.Pointer(r.uint16, Device)\r\n }\r\n});\r\n\r\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\r\n\r\nlet LigCaretList = new r.Struct({\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n ligGlyphCount: r.uint16,\r\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\r\n});\r\n\r\nlet MarkGlyphSetsDef = new r.Struct({\r\n markSetTableFormat: r.uint16,\r\n markSetCount: r.uint16,\r\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\r\n});\r\n\r\nexport default new r.VersionedStruct(r.uint32, {\r\n header: {\r\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\r\n attachList: new r.Pointer(r.uint16, AttachList),\r\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\r\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\r\n },\r\n\r\n 0x00010000: {},\r\n 0x00010002: {\r\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\r\n },\r\n 0x00010003: {\r\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\r\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\r\nimport {FeatureVariations} from './variations';\r\n\r\nlet ValueFormat = new r.Bitfield(r.uint16, [\r\n 'xPlacement', 'yPlacement',\r\n 'xAdvance', 'yAdvance',\r\n 'xPlaDevice', 'yPlaDevice',\r\n 'xAdvDevice', 'yAdvDevice'\r\n]);\r\n\r\nlet types = {\r\n xPlacement: r.int16,\r\n yPlacement: r.int16,\r\n xAdvance: r.int16,\r\n yAdvance: r.int16,\r\n xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\r\n yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\r\n xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\r\n yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\r\n};\r\n\r\nclass ValueRecord {\r\n constructor(key = 'valueFormat') {\r\n this.key = key;\r\n }\r\n\r\n buildStruct(parent) {\r\n let struct = parent;\r\n while (!struct[this.key] && struct.parent) {\r\n struct = struct.parent;\r\n }\r\n\r\n if (!struct[this.key]) return;\r\n\r\n let fields = {};\r\n fields.rel = () => struct._startOffset;\r\n\r\n let format = struct[this.key];\r\n for (let key in format) {\r\n if (format[key]) {\r\n fields[key] = types[key];\r\n }\r\n }\r\n\r\n return new r.Struct(fields);\r\n }\r\n\r\n size(val, ctx) {\r\n return this.buildStruct(ctx).size(val, ctx);\r\n }\r\n\r\n decode(stream, parent) {\r\n let res = this.buildStruct(parent).decode(stream, parent);\r\n delete res.rel;\r\n return res;\r\n }\r\n}\r\n\r\nlet PairValueRecord = new r.Struct({\r\n secondGlyph: r.uint16,\r\n value1: new ValueRecord('valueFormat1'),\r\n value2: new ValueRecord('valueFormat2')\r\n});\r\n\r\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\r\n\r\nlet Class2Record = new r.Struct({\r\n value1: new ValueRecord('valueFormat1'),\r\n value2: new ValueRecord('valueFormat2')\r\n});\r\n\r\nlet Anchor = new r.VersionedStruct(r.uint16, {\r\n 1: { // Design units only\r\n xCoordinate: r.int16,\r\n yCoordinate: r.int16\r\n },\r\n\r\n 2: { // Design units plus contour point\r\n xCoordinate: r.int16,\r\n yCoordinate: r.int16,\r\n anchorPoint: r.uint16\r\n },\r\n\r\n 3: { // Design units plus Device tables\r\n xCoordinate: r.int16,\r\n yCoordinate: r.int16,\r\n xDeviceTable: new r.Pointer(r.uint16, Device),\r\n yDeviceTable: new r.Pointer(r.uint16, Device)\r\n }\r\n});\r\n\r\nlet EntryExitRecord = new r.Struct({\r\n entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\r\n exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\r\n});\r\n\r\nlet MarkRecord = new r.Struct({\r\n class: r.uint16,\r\n markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\r\n});\r\n\r\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\r\n\r\nlet BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\r\nlet BaseArray = new r.Array(BaseRecord, r.uint16);\r\n\r\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\r\nlet LigatureAttach = new r.Array(ComponentRecord, r.uint16);\r\nlet LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\r\n\r\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\r\n 1: new r.VersionedStruct(r.uint16, { // Single Adjustment\r\n 1: { // Single positioning value\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n valueFormat: ValueFormat,\r\n value: new ValueRecord()\r\n },\r\n 2: {\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n valueFormat: ValueFormat,\r\n valueCount: r.uint16,\r\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\r\n }\r\n }),\r\n\r\n 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\r\n 1: { // Adjustments for glyph pairs\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n valueFormat1: ValueFormat,\r\n valueFormat2: ValueFormat,\r\n pairSetCount: r.uint16,\r\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\r\n },\r\n\r\n 2: { // Class pair adjustment\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n valueFormat1: ValueFormat,\r\n valueFormat2: ValueFormat,\r\n classDef1: new r.Pointer(r.uint16, ClassDef),\r\n classDef2: new r.Pointer(r.uint16, ClassDef),\r\n class1Count: r.uint16,\r\n class2Count: r.uint16,\r\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\r\n }\r\n }),\r\n\r\n 3: { // Cursive Attachment Positioning\r\n format: r.uint16,\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n entryExitCount: r.uint16,\r\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\r\n },\r\n\r\n 4: { // MarkToBase Attachment Positioning\r\n format: r.uint16,\r\n markCoverage: new r.Pointer(r.uint16, Coverage),\r\n baseCoverage: new r.Pointer(r.uint16, Coverage),\r\n classCount: r.uint16,\r\n markArray: new r.Pointer(r.uint16, MarkArray),\r\n baseArray: new r.Pointer(r.uint16, BaseArray)\r\n },\r\n\r\n 5: { // MarkToLigature Attachment Positioning\r\n format: r.uint16,\r\n markCoverage: new r.Pointer(r.uint16, Coverage),\r\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\r\n classCount: r.uint16,\r\n markArray: new r.Pointer(r.uint16, MarkArray),\r\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\r\n },\r\n\r\n 6: { // MarkToMark Attachment Positioning\r\n format: r.uint16,\r\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\r\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\r\n classCount: r.uint16,\r\n mark1Array: new r.Pointer(r.uint16, MarkArray),\r\n mark2Array: new r.Pointer(r.uint16, BaseArray)\r\n },\r\n\r\n 7: Context, // Contextual positioning\r\n 8: ChainingContext, // Chaining contextual positioning\r\n\r\n 9: { // Extension Positioning\r\n posFormat: r.uint16,\r\n lookupType: r.uint16, // cannot also be 9\r\n extension: new r.Pointer(r.uint32, GPOSLookup)\r\n }\r\n});\r\n\r\n// Fix circular reference\r\nGPOSLookup.versions[9].extension.type = GPOSLookup;\r\n\r\nexport default new r.VersionedStruct(r.uint32, {\r\n header: {\r\n scriptList: new r.Pointer(r.uint16, ScriptList),\r\n featureList: new r.Pointer(r.uint16, FeatureList),\r\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\r\n },\r\n\r\n 0x00010000: {},\r\n 0x00010001: {\r\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\r\n }\r\n});\r\n\r\n// export GPOSLookup for JSTF table\r\nexport { GPOSLookup };\r\n","import r from '@foliojs-fork/restructure';\r\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\r\nimport {FeatureVariations} from './variations';\r\n\r\nlet Sequence = new r.Array(r.uint16, r.uint16);\r\nlet AlternateSet = Sequence;\r\n\r\nlet Ligature = new r.Struct({\r\n glyph: r.uint16,\r\n compCount: r.uint16,\r\n components: new r.Array(r.uint16, t => t.compCount - 1)\r\n});\r\n\r\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\r\n\r\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\r\n 1: new r.VersionedStruct(r.uint16, {// Single Substitution\r\n 1: {\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n deltaGlyphID: r.int16\r\n },\r\n 2: {\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n glyphCount: r.uint16,\r\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\r\n }\r\n }),\r\n\r\n 2: { // Multiple Substitution\r\n substFormat: r.uint16,\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n count: r.uint16,\r\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\r\n },\r\n\r\n 3: { // Alternate Substitution\r\n substFormat: r.uint16,\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n count: r.uint16,\r\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\r\n },\r\n\r\n 4: { // Ligature Substitution\r\n substFormat: r.uint16,\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n count: r.uint16,\r\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\r\n },\r\n\r\n 5: Context, // Contextual Substitution\r\n 6: ChainingContext, // Chaining Contextual Substitution\r\n\r\n 7: { // Extension Substitution\r\n substFormat: r.uint16,\r\n lookupType: r.uint16, // cannot also be 7\r\n extension: new r.Pointer(r.uint32, GSUBLookup)\r\n },\r\n\r\n 8: { // Reverse Chaining Contextual Single Substitution\r\n substFormat: r.uint16,\r\n coverage: new r.Pointer(r.uint16, Coverage),\r\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\r\n lookaheadGlyphCount: r.uint16,\r\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\r\n glyphCount: r.uint16,\r\n substitutes: new r.Array(r.uint16, 'glyphCount')\r\n }\r\n});\r\n\r\n// Fix circular reference\r\nGSUBLookup.versions[7].extension.type = GSUBLookup;\r\n\r\nexport default new r.VersionedStruct(r.uint32, {\r\n header: {\r\n scriptList: new r.Pointer(r.uint16, ScriptList),\r\n featureList: new r.Pointer(r.uint16, FeatureList),\r\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\r\n },\r\n\r\n 0x00010000: {},\r\n 0x00010001: {\r\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\r\nimport { GPOSLookup } from './GPOS';\r\n\r\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\r\n\r\nlet JstfPriority = new r.Struct({\r\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\r\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\r\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\r\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\r\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\r\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\r\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\r\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\r\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\r\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\r\n});\r\n\r\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\r\n\r\nlet JstfLangSysRecord = new r.Struct({\r\n tag: new r.String(4),\r\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\r\n});\r\n\r\nlet JstfScript = new r.Struct({\r\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\r\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\r\n langSysCount: r.uint16,\r\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\r\n});\r\n\r\nlet JstfScriptRecord = new r.Struct({\r\n tag: new r.String(4),\r\n script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint32, // should be 0x00010000\r\n scriptCount: r.uint16,\r\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport {resolveLength} from '@foliojs-fork/restructure/src/utils';\r\nimport {ItemVariationStore} from './variations';\r\n\r\n// TODO: add this to restructure\r\nclass VariableSizeNumber {\r\n constructor(size) {\r\n this._size = size;\r\n }\r\n\r\n decode(stream, parent) {\r\n switch (this.size(0, parent)) {\r\n case 1: return stream.readUInt8();\r\n case 2: return stream.readUInt16BE();\r\n case 3: return stream.readUInt24BE();\r\n case 4: return stream.readUInt32BE();\r\n }\r\n }\r\n\r\n size(val, parent) {\r\n return resolveLength(this._size, null, parent);\r\n }\r\n}\r\n\r\nlet MapDataEntry = new r.Struct({\r\n entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\r\n outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\r\n innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\r\n});\r\n\r\nlet DeltaSetIndexMap = new r.Struct({\r\n entryFormat: r.uint16,\r\n mapCount: r.uint16,\r\n mapData: new r.Array(MapDataEntry, 'mapCount')\r\n});\r\n\r\nexport default new r.Struct({\r\n majorVersion: r.uint16,\r\n minorVersion: r.uint16,\r\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\r\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\r\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\r\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet Signature = new r.Struct({\r\n format: r.uint32,\r\n length: r.uint32,\r\n offset: r.uint32\r\n});\r\n\r\nlet SignatureBlock = new r.Struct({\r\n reserved: new r.Reserved(r.uint16, 2),\r\n cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature\r\n signature: new r.Buffer('cbSignature')\r\n});\r\n\r\nexport default new r.Struct({\r\n ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)\r\n usNumSigs: r.uint16, // Number of signatures in the table\r\n usFlag: r.uint16, // Permission flags\r\n signatures: new r.Array(Signature, 'usNumSigs'),\r\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet GaspRange = new r.Struct({\r\n rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem\r\n rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\r\n 'grayscale', 'gridfit',\r\n 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\r\n ])\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint16, // set to 0\r\n numRanges: r.uint16,\r\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet DeviceRecord = new r.Struct({\r\n pixelSize: r.uint8,\r\n maximumWidth: r.uint8,\r\n widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\r\n});\r\n\r\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n numRecords: r.int16,\r\n sizeDeviceRecord: r.int32,\r\n records: new r.Array(DeviceRecord, 'numRecords')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet KernPair = new r.Struct({\r\n left: r.uint16,\r\n right: r.uint16,\r\n value: r.int16\r\n});\r\n\r\nlet ClassTable = new r.Struct({\r\n firstGlyph: r.uint16,\r\n nGlyphs: r.uint16,\r\n offsets: new r.Array(r.uint16, 'nGlyphs'),\r\n max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\r\n});\r\n\r\nlet Kern2Array = new r.Struct({\r\n off: t => t._startOffset - t.parent.parent._startOffset,\r\n len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\r\n values: new r.LazyArray(r.int16, 'len')\r\n});\r\n\r\nlet KernSubtable = new r.VersionedStruct('format', {\r\n 0: {\r\n nPairs: r.uint16,\r\n searchRange: r.uint16,\r\n entrySelector: r.uint16,\r\n rangeShift: r.uint16,\r\n pairs: new r.Array(KernPair, 'nPairs')\r\n },\r\n\r\n 2: {\r\n rowWidth: r.uint16,\r\n leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\r\n rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\r\n array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\r\n },\r\n\r\n 3: {\r\n glyphCount: r.uint16,\r\n kernValueCount: r.uint8,\r\n leftClassCount: r.uint8,\r\n rightClassCount: r.uint8,\r\n flags: r.uint8,\r\n kernValue: new r.Array(r.int16, 'kernValueCount'),\r\n leftClass: new r.Array(r.uint8, 'glyphCount'),\r\n rightClass: new r.Array(r.uint8, 'glyphCount'),\r\n kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\r\n }\r\n});\r\n\r\nlet KernTable = new r.VersionedStruct('version', {\r\n 0: { // Microsoft uses this format\r\n subVersion: r.uint16, // Microsoft has an extra sub-table version number\r\n length: r.uint16, // Length of the subtable, in bytes\r\n format: r.uint8, // Format of subtable\r\n coverage: new r.Bitfield(r.uint8, [\r\n 'horizontal', // 1 if table has horizontal data, 0 if vertical\r\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\r\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\r\n 'override' // If set to 1 the value in this table replaces the accumulated value\r\n ]),\r\n subtable: KernSubtable,\r\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\r\n },\r\n 1: { // Apple uses this format\r\n length: r.uint32,\r\n coverage: new r.Bitfield(r.uint8, [\r\n null, null, null, null, null,\r\n 'variation', // Set if table has variation kerning values\r\n 'crossStream', // Set if table has cross-stream kerning values\r\n 'vertical' // Set if table has vertical kerning values\r\n ]),\r\n format: r.uint8,\r\n tupleIndex: r.uint16,\r\n subtable: KernSubtable,\r\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\r\n }\r\n});\r\n\r\nexport default new r.VersionedStruct(r.uint16, {\r\n 0: { // Microsoft Version\r\n nTables: r.uint16,\r\n tables: new r.Array(KernTable, 'nTables')\r\n },\r\n\r\n 1: { // Apple Version\r\n reserved: new r.Reserved(r.uint16), // the other half of the version number\r\n nTables: r.uint32,\r\n tables: new r.Array(KernTable, 'nTables')\r\n }\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// Linear Threshold table\r\n// Records the ppem for each glyph at which the scaling becomes linear again,\r\n// despite instructions effecting the advance width\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n numGlyphs: r.uint16,\r\n yPels: new r.Array(r.uint8, 'numGlyphs')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// PCL 5 Table\r\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n fontNumber: r.uint32,\r\n pitch: r.uint16,\r\n xHeight: r.uint16,\r\n style: r.uint16,\r\n typeFamily: r.uint16,\r\n capHeight: r.uint16,\r\n symbolSet: r.uint16,\r\n typeface: new r.String(16),\r\n characterComplement: new r.String(8),\r\n fileName: new r.String(6),\r\n strokeWeight: new r.String(1),\r\n widthType: new r.String(1),\r\n serifStyle: r.uint8,\r\n reserved: new r.Reserved(r.uint8)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// VDMX tables contain ascender/descender overrides for certain (usually small)\r\n// sizes. This is needed in order to match font metrics on Windows.\r\n\r\nlet Ratio = new r.Struct({\r\n bCharSet: r.uint8, // Character set\r\n xRatio: r.uint8, // Value to use for x-Ratio\r\n yStartRatio: r.uint8, // Starting y-Ratio value\r\n yEndRatio: r.uint8 // Ending y-Ratio value\r\n});\r\n\r\nlet vTable = new r.Struct({\r\n yPelHeight: r.uint16, // yPelHeight to which values apply\r\n yMax: r.int16, // Maximum value (in pels) for this yPelHeight\r\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\r\n});\r\n\r\nlet VdmxGroup = new r.Struct({\r\n recs: r.uint16, // Number of height records in this group\r\n startsz: r.uint8, // Starting yPelHeight\r\n endsz: r.uint8, // Ending yPelHeight\r\n entries: new r.Array(vTable, 'recs') // The VDMX records\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint16, // Version number (0 or 1)\r\n numRecs: r.uint16, // Number of VDMX groups present\r\n numRatios: r.uint16, // Number of aspect ratio groupings\r\n ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges\r\n offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range\r\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// Vertical Header Table\r\nexport default new r.Struct({\r\n version: r.uint16, // Version number of the Vertical Header Table\r\n ascent: r.int16, // The vertical typographic ascender for this font\r\n descent: r.int16, // The vertical typographic descender for this font\r\n lineGap: r.int16, // The vertical typographic line gap for this font\r\n advanceHeightMax: r.int16, // The maximum advance height measurement found in the font\r\n minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font\r\n minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font\r\n yMaxExtent: r.int16,\r\n caretSlopeRise: r.int16, // Caret slope (rise/run)\r\n caretSlopeRun: r.int16,\r\n caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts\r\n reserved: new r.Reserved(r.int16, 4),\r\n metricDataFormat: r.int16, // Set to 0\r\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet VmtxEntry = new r.Struct({\r\n advance: r.uint16, // The advance height of the glyph\r\n bearing: r.int16 // The top sidebearing of the glyph\r\n});\r\n\r\n// Vertical Metrics Table\r\nexport default new r.Struct({\r\n metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\r\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet shortFrac = new r.Fixed(16, 'BE', 14);\r\n\r\nlet Correspondence = new r.Struct({\r\n fromCoord: shortFrac,\r\n toCoord: shortFrac\r\n});\r\n\r\nlet Segment = new r.Struct({\r\n pairCount: r.uint16,\r\n correspondence: new r.Array(Correspondence, 'pairCount')\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.fixed32,\r\n axisCount: r.uint32,\r\n segment: new r.Array(Segment, 'axisCount')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nclass UnboundedArrayAccessor {\r\n constructor(type, stream, parent) {\r\n this.type = type;\r\n this.stream = stream;\r\n this.parent = parent;\r\n this.base = this.stream.pos;\r\n this._items = [];\r\n }\r\n\r\n getItem(index) {\r\n if (this._items[index] == null) {\r\n let pos = this.stream.pos;\r\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\r\n this._items[index] = this.type.decode(this.stream, this.parent);\r\n this.stream.pos = pos;\r\n }\r\n\r\n return this._items[index];\r\n }\r\n\r\n inspect() {\r\n return `[UnboundedArray ${this.type.constructor.name}]`;\r\n }\r\n}\r\n\r\nexport class UnboundedArray extends r.Array {\r\n constructor(type) {\r\n super(type, 0);\r\n }\r\n\r\n decode(stream, parent) {\r\n return new UnboundedArrayAccessor(this.type, stream, parent);\r\n }\r\n}\r\n\r\nexport let LookupTable = function(ValueType = r.uint16) {\r\n // Helper class that makes internal structures invisible to pointers\r\n class Shadow {\r\n constructor(type) {\r\n this.type = type;\r\n }\r\n\r\n decode(stream, ctx) {\r\n ctx = ctx.parent.parent;\r\n return this.type.decode(stream, ctx);\r\n }\r\n\r\n size(val, ctx) {\r\n ctx = ctx.parent.parent;\r\n return this.type.size(val, ctx);\r\n }\r\n\r\n encode(stream, val, ctx) {\r\n ctx = ctx.parent.parent;\r\n return this.type.encode(stream, val, ctx);\r\n }\r\n }\r\n\r\n ValueType = new Shadow(ValueType);\r\n\r\n let BinarySearchHeader = new r.Struct({\r\n unitSize: r.uint16,\r\n nUnits: r.uint16,\r\n searchRange: r.uint16,\r\n entrySelector: r.uint16,\r\n rangeShift: r.uint16\r\n });\r\n\r\n let LookupSegmentSingle = new r.Struct({\r\n lastGlyph: r.uint16,\r\n firstGlyph: r.uint16,\r\n value: ValueType\r\n });\r\n\r\n let LookupSegmentArray = new r.Struct({\r\n lastGlyph: r.uint16,\r\n firstGlyph: r.uint16,\r\n values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\r\n });\r\n\r\n let LookupSingle = new r.Struct({\r\n glyph: r.uint16,\r\n value: ValueType\r\n });\r\n\r\n return new r.VersionedStruct(r.uint16, {\r\n 0: {\r\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\r\n },\r\n 2: {\r\n binarySearchHeader: BinarySearchHeader,\r\n segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\r\n },\r\n 4: {\r\n binarySearchHeader: BinarySearchHeader,\r\n segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\r\n },\r\n 6: {\r\n binarySearchHeader: BinarySearchHeader,\r\n segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\r\n },\r\n 8: {\r\n firstGlyph: r.uint16,\r\n count: r.uint16,\r\n values: new r.Array(ValueType, 'count')\r\n }\r\n });\r\n};\r\n\r\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\r\n let entry = Object.assign({\r\n newState: r.uint16,\r\n flags: r.uint16\r\n }, entryData);\r\n\r\n let Entry = new r.Struct(entry);\r\n let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\r\n\r\n let StateHeader = new r.Struct({\r\n nClasses: r.uint32,\r\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\r\n stateArray: new r.Pointer(r.uint32, StateArray),\r\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\r\n });\r\n\r\n return StateHeader;\r\n}\r\n\r\n// This is the old version of the StateTable structure\r\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\r\n let ClassLookupTable = new r.Struct({\r\n version() { return 8; }, // simulate LookupTable\r\n firstGlyph: r.uint16,\r\n values: new r.Array(r.uint8, r.uint16)\r\n });\r\n\r\n let entry = Object.assign({\r\n newStateOffset: r.uint16,\r\n // convert offset to stateArray index\r\n newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\r\n flags: r.uint16\r\n }, entryData);\r\n\r\n let Entry = new r.Struct(entry);\r\n let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\r\n\r\n let StateHeader1 = new r.Struct({\r\n nClasses: r.uint16,\r\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\r\n stateArray: new r.Pointer(r.uint16, StateArray),\r\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\r\n });\r\n\r\n return StateHeader1;\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\nimport { LookupTable } from './aat';\r\n\r\nlet BslnSubtable = new r.VersionedStruct('format', {\r\n 0: { // Distance-based, no mapping\r\n deltas: new r.Array(r.int16, 32)\r\n },\r\n\r\n 1: { // Distance-based, with mapping\r\n deltas: new r.Array(r.int16, 32),\r\n mappingData: new LookupTable(r.uint16)\r\n },\r\n\r\n 2: { // Control point-based, no mapping\r\n standardGlyph: r.uint16,\r\n controlPoints: new r.Array(r.uint16, 32)\r\n },\r\n\r\n 3: { // Control point-based, with mapping\r\n standardGlyph: r.uint16,\r\n controlPoints: new r.Array(r.uint16, 32),\r\n mappingData: new LookupTable(r.uint16)\r\n }\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.fixed32,\r\n format: r.uint16,\r\n defaultBaseline: r.uint16,\r\n subtable: BslnSubtable\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet Setting = new r.Struct({\r\n setting: r.uint16,\r\n nameIndex: r.int16,\r\n name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\r\n});\r\n\r\nlet FeatureName = new r.Struct({\r\n feature: r.uint16,\r\n nSettings: r.uint16,\r\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\r\n featureFlags: new r.Bitfield(r.uint8, [\r\n null, null, null, null, null, null,\r\n 'hasDefault', 'exclusive'\r\n ]),\r\n defaultSetting: r.uint8,\r\n nameIndex: r.int16,\r\n name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.fixed32,\r\n featureNameCount: r.uint16,\r\n reserved1: new r.Reserved(r.uint16),\r\n reserved2: new r.Reserved(r.uint32),\r\n featureNames: new r.Array(FeatureName, 'featureNameCount')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet Axis = new r.Struct({\r\n axisTag: new r.String(4),\r\n minValue: r.fixed32,\r\n defaultValue: r.fixed32,\r\n maxValue: r.fixed32,\r\n flags: r.uint16,\r\n nameID: r.uint16,\r\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\r\n});\r\n\r\nlet Instance = new r.Struct({\r\n nameID: r.uint16,\r\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\r\n flags: r.uint16,\r\n coord: new r.Array(r.fixed32, t => t.parent.axisCount),\r\n postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.fixed32,\r\n offsetToData: r.uint16,\r\n countSizePairs: r.uint16,\r\n axisCount: r.uint16,\r\n axisSize: r.uint16,\r\n instanceCount: r.uint16,\r\n instanceSize: r.uint16,\r\n axis: new r.Array(Axis, 'axisCount'),\r\n instance: new r.Array(Instance, 'instanceCount')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nlet shortFrac = new r.Fixed(16, 'BE', 14);\r\nclass Offset {\r\n static decode(stream, parent) {\r\n // In short format, offsets are multiplied by 2.\r\n // This doesn't seem to be documented by Apple, but it\r\n // is implemented this way in Freetype.\r\n return parent.flags\r\n ? stream.readUInt32BE()\r\n : stream.readUInt16BE() * 2;\r\n }\r\n}\r\n\r\nlet gvar = new r.Struct({\r\n version: r.uint16,\r\n reserved: new r.Reserved(r.uint16),\r\n axisCount: r.uint16,\r\n globalCoordCount: r.uint16,\r\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\r\n glyphCount: r.uint16,\r\n flags: r.uint16,\r\n offsetToData: r.uint32,\r\n offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\r\n});\r\n\r\nexport default gvar;\r\n","import r from '@foliojs-fork/restructure';\r\nimport { LookupTable, StateTable1 } from './aat';\r\n\r\nlet ClassTable = new r.Struct({\r\n length: r.uint16,\r\n coverage: r.uint16,\r\n subFeatureFlags: r.uint32,\r\n stateTable: new StateTable1\r\n});\r\n\r\nlet WidthDeltaRecord = new r.Struct({\r\n justClass: r.uint32,\r\n beforeGrowLimit: r.fixed32,\r\n beforeShrinkLimit: r.fixed32,\r\n afterGrowLimit: r.fixed32,\r\n afterShrinkLimit: r.fixed32,\r\n growFlags: r.uint16,\r\n shrinkFlags: r.uint16\r\n});\r\n\r\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\r\n\r\nlet ActionData = new r.VersionedStruct('actionType', {\r\n 0: { // Decomposition action\r\n lowerLimit: r.fixed32,\r\n upperLimit: r.fixed32,\r\n order: r.uint16,\r\n glyphs: new r.Array(r.uint16, r.uint16)\r\n },\r\n\r\n 1: { // Unconditional add glyph action\r\n addGlyph: r.uint16\r\n },\r\n\r\n 2: { // Conditional add glyph action\r\n substThreshold: r.fixed32,\r\n addGlyph: r.uint16,\r\n substGlyph: r.uint16\r\n },\r\n\r\n 3: {}, // Stretch glyph action (no data, not supported by CoreText)\r\n\r\n 4: { // Ductile glyph action (not supported by CoreText)\r\n variationAxis: r.uint32,\r\n minimumLimit: r.fixed32,\r\n noStretchValue: r.fixed32,\r\n maximumLimit: r.fixed32\r\n },\r\n\r\n 5: { // Repeated add glyph action\r\n flags: r.uint16,\r\n glyph: r.uint16\r\n }\r\n});\r\n\r\nlet Action = new r.Struct({\r\n actionClass: r.uint16,\r\n actionType: r.uint16,\r\n actionLength: r.uint32,\r\n actionData: ActionData,\r\n padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\r\n});\r\n\r\nlet PostcompensationAction = new r.Array(Action, r.uint32);\r\nlet PostCompensationTable = new r.Struct({\r\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\r\n});\r\n\r\nlet JustificationTable = new r.Struct({\r\n classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\r\n wdcOffset: r.uint16,\r\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\r\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint32,\r\n format: r.uint16,\r\n horizontal: new r.Pointer(r.uint16, JustificationTable),\r\n vertical: new r.Pointer(r.uint16, JustificationTable)\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\r\n\r\nlet LigatureData = {\r\n action: r.uint16\r\n};\r\n\r\nlet ContextualData = {\r\n markIndex: r.uint16,\r\n currentIndex: r.uint16\r\n};\r\n\r\nlet InsertionData = {\r\n currentInsertIndex: r.uint16,\r\n markedInsertIndex: r.uint16\r\n};\r\n\r\nlet SubstitutionTable = new r.Struct({\r\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\r\n});\r\n\r\nlet SubtableData = new r.VersionedStruct('type', {\r\n 0: { // Indic Rearrangement Subtable\r\n stateTable: new StateTable\r\n },\r\n\r\n 1: { // Contextual Glyph Substitution Subtable\r\n stateTable: new StateTable(ContextualData),\r\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\r\n },\r\n\r\n 2: { // Ligature subtable\r\n stateTable: new StateTable(LigatureData),\r\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\r\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\r\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\r\n },\r\n\r\n 4: { // Non-contextual Glyph Substitution Subtable\r\n lookupTable: new LookupTable\r\n },\r\n\r\n 5: { // Glyph Insertion Subtable\r\n stateTable: new StateTable(InsertionData),\r\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\r\n }\r\n});\r\n\r\nlet Subtable = new r.Struct({\r\n length: r.uint32,\r\n coverage: r.uint24,\r\n type: r.uint8,\r\n subFeatureFlags: r.uint32,\r\n table: SubtableData,\r\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\r\n});\r\n\r\nlet FeatureEntry = new r.Struct({\r\n featureType: r.uint16,\r\n featureSetting: r.uint16,\r\n enableFlags: r.uint32,\r\n disableFlags: r.uint32\r\n});\r\n\r\nlet MorxChain = new r.Struct({\r\n defaultFlags: r.uint32,\r\n chainLength: r.uint32,\r\n nFeatureEntries: r.uint32,\r\n nSubtables: r.uint32,\r\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\r\n subtables: new r.Array(Subtable, 'nSubtables')\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.uint16,\r\n unused: new r.Reserved(r.uint16),\r\n nChains: r.uint32,\r\n chains: new r.Array(MorxChain, 'nChains')\r\n});\r\n","import r from '@foliojs-fork/restructure';\r\nimport { LookupTable } from './aat';\r\n\r\nlet OpticalBounds = new r.Struct({\r\n left: r.int16,\r\n top: r.int16,\r\n right: r.int16,\r\n bottom: r.int16\r\n});\r\n\r\nexport default new r.Struct({\r\n version: r.fixed32,\r\n format: r.uint16,\r\n lookupTable: new LookupTable(OpticalBounds)\r\n});\r\n","let tables = {};\r\nexport default tables;\r\n\r\n// Required Tables\r\nimport cmap from './cmap';\r\nimport head from './head';\r\nimport hhea from './hhea';\r\nimport hmtx from './hmtx';\r\nimport maxp from './maxp';\r\nimport name from './name';\r\nimport OS2 from './OS2';\r\nimport post from './post';\r\n\r\ntables.cmap = cmap;\r\ntables.head = head;\r\ntables.hhea = hhea;\r\ntables.hmtx = hmtx;\r\ntables.maxp = maxp;\r\ntables.name = name;\r\ntables['OS/2'] = OS2;\r\ntables.post = post;\r\n\r\n\r\n// TrueType Outlines\r\nimport cvt from './cvt';\r\nimport fpgm from './fpgm';\r\nimport loca from './loca';\r\nimport prep from './prep';\r\nimport glyf from './glyf';\r\n\r\ntables.fpgm = fpgm;\r\ntables.loca = loca;\r\ntables.prep = prep;\r\ntables['cvt '] = cvt;\r\ntables.glyf = glyf;\r\n\r\n\r\n// PostScript Outlines\r\nimport CFFFont from '../cff/CFFFont';\r\nimport VORG from './VORG';\r\n\r\ntables['CFF '] = CFFFont;\r\ntables['CFF2'] = CFFFont;\r\ntables.VORG = VORG;\r\n\r\n\r\n// Bitmap Glyphs\r\nimport EBLC from './EBLC';\r\nimport sbix from './sbix';\r\nimport COLR from './COLR';\r\nimport CPAL from './CPAL';\r\n\r\ntables.EBLC = EBLC;\r\ntables.CBLC = tables.EBLC;\r\ntables.sbix = sbix;\r\ntables.COLR = COLR;\r\ntables.CPAL = CPAL;\r\n\r\n\r\n// Advanced OpenType Tables\r\nimport BASE from './BASE';\r\nimport GDEF from './GDEF';\r\nimport GPOS from './GPOS';\r\nimport GSUB from './GSUB';\r\nimport JSTF from './JSTF';\r\n\r\ntables.BASE = BASE;\r\ntables.GDEF = GDEF;\r\ntables.GPOS = GPOS;\r\ntables.GSUB = GSUB;\r\ntables.JSTF = JSTF;\r\n\r\n// OpenType variations tables\r\nimport HVAR from './HVAR';\r\n\r\ntables.HVAR = HVAR;\r\n\r\n// Other OpenType Tables\r\nimport DSIG from './DSIG';\r\nimport gasp from './gasp';\r\nimport hdmx from './hdmx';\r\nimport kern from './kern';\r\nimport LTSH from './LTSH';\r\nimport PCLT from './PCLT';\r\nimport VDMX from './VDMX';\r\nimport vhea from './vhea';\r\nimport vmtx from './vmtx';\r\n\r\ntables.DSIG = DSIG;\r\ntables.gasp = gasp;\r\ntables.hdmx = hdmx;\r\ntables.kern = kern;\r\ntables.LTSH = LTSH;\r\ntables.PCLT = PCLT;\r\ntables.VDMX = VDMX;\r\ntables.vhea = vhea;\r\ntables.vmtx = vmtx;\r\n\r\n\r\n// Apple Advanced Typography Tables\r\nimport avar from './avar';\r\nimport bsln from './bsln';\r\nimport feat from './feat';\r\nimport fvar from './fvar';\r\nimport gvar from './gvar';\r\nimport just from './just';\r\nimport morx from './morx';\r\nimport opbd from './opbd';\r\n\r\ntables.avar = avar;\r\ntables.bsln = bsln;\r\ntables.feat = feat;\r\ntables.fvar = fvar;\r\ntables.gvar = gvar;\r\ntables.just = just;\r\ntables.morx = morx;\r\ntables.opbd = opbd;\r\n","import r from '@foliojs-fork/restructure';\r\nimport Tables from './';\r\n\r\nlet TableEntry = new r.Struct({\r\n tag: new r.String(4),\r\n checkSum: r.uint32,\r\n offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),\r\n length: r.uint32\r\n});\r\n\r\nlet Directory = new r.Struct({\r\n tag: new r.String(4),\r\n numTables: r.uint16,\r\n searchRange: r.uint16,\r\n entrySelector: r.uint16,\r\n rangeShift: r.uint16,\r\n tables: new r.Array(TableEntry, 'numTables')\r\n});\r\n\r\nDirectory.process = function() {\r\n let tables = {};\r\n for (let table of this.tables) {\r\n tables[table.tag] = table;\r\n }\r\n\r\n this.tables = tables;\r\n};\r\n\r\nDirectory.preEncode = function(stream) {\r\n let tables = [];\r\n for (let tag in this.tables) {\r\n let table = this.tables[tag];\r\n if (table) {\r\n tables.push({\r\n tag: tag,\r\n checkSum: 0,\r\n offset: new r.VoidPointer(Tables[tag], table),\r\n length: Tables[tag].size(table)\r\n });\r\n }\r\n }\r\n\r\n this.tag = 'true';\r\n this.numTables = tables.length;\r\n this.tables = tables;\r\n\r\n let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\r\n let maxPowerOf2 = Math.pow(2, maxExponentFor2);\r\n\r\n this.searchRange = maxPowerOf2 * 16;\r\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\r\n this.rangeShift = this.numTables * 16 - this.searchRange;\r\n};\r\n\r\nexport default Directory;\r\n","export function binarySearch(arr, cmp) {\r\n let min = 0;\r\n let max = arr.length - 1;\r\n while (min <= max) {\r\n let mid = (min + max) >> 1;\r\n let res = cmp(arr[mid]);\r\n\r\n if (res < 0) {\r\n max = mid - 1;\r\n } else if (res > 0) {\r\n min = mid + 1;\r\n } else {\r\n return mid;\r\n }\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nexport function range(index, end) {\r\n let range = [];\r\n while (index < end) {\r\n range.push(index++);\r\n }\r\n return range;\r\n}\r\n","import {binarySearch} from './utils';\r\nimport {getEncoding} from './encodings';\r\nimport {cache} from './decorators';\r\nimport {range} from './utils';\r\n\r\n// iconv-lite is an optional dependency.\r\ntry {\r\n var iconv = require('iconv-lite');\r\n} catch (err) {}\r\n\r\nexport default class CmapProcessor {\r\n constructor(cmapTable) {\r\n // Attempt to find a Unicode cmap first\r\n this.encoding = null;\r\n this.cmap = this.findSubtable(cmapTable, [\r\n // 32-bit subtables\r\n [3, 10],\r\n [0, 6],\r\n [0, 4],\r\n\r\n // 16-bit subtables\r\n [3, 1],\r\n [0, 3],\r\n [0, 2],\r\n [0, 1],\r\n [0, 0]\r\n ]);\r\n\r\n // If not unicode cmap was found, and iconv-lite is installed,\r\n // take the first table with a supported encoding.\r\n if (!this.cmap && iconv) {\r\n for (let cmap of cmapTable.tables) {\r\n let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\r\n if (iconv.encodingExists(encoding)) {\r\n this.cmap = cmap.table;\r\n this.encoding = encoding;\r\n }\r\n }\r\n }\r\n\r\n if (!this.cmap) {\r\n throw new Error(\"Could not find a supported cmap table\");\r\n }\r\n\r\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\r\n if (this.uvs && this.uvs.version !== 14) {\r\n this.uvs = null;\r\n }\r\n }\r\n\r\n findSubtable(cmapTable, pairs) {\r\n for (let [platformID, encodingID] of pairs) {\r\n for (let cmap of cmapTable.tables) {\r\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\r\n return cmap.table;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n lookup(codepoint, variationSelector) {\r\n // If there is no Unicode cmap in this font, we need to re-encode\r\n // the codepoint in the encoding that the cmap supports.\r\n if (this.encoding) {\r\n let buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\r\n codepoint = 0;\r\n for (let i = 0; i < buf.length; i++) {\r\n codepoint = (codepoint << 8) | buf[i];\r\n }\r\n\r\n // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\r\n } else if (variationSelector) {\r\n let gid = this.getVariationSelector(codepoint, variationSelector);\r\n if (gid) {\r\n return gid;\r\n }\r\n }\r\n\r\n let cmap = this.cmap;\r\n switch (cmap.version) {\r\n case 0:\r\n return cmap.codeMap.get(codepoint) || 0;\r\n\r\n case 4: {\r\n let min = 0;\r\n let max = cmap.segCount - 1;\r\n while (min <= max) {\r\n let mid = (min + max) >> 1;\r\n\r\n if (codepoint < cmap.startCode.get(mid)) {\r\n max = mid - 1;\r\n } else if (codepoint > cmap.endCode.get(mid)) {\r\n min = mid + 1;\r\n } else {\r\n let rangeOffset = cmap.idRangeOffset.get(mid);\r\n let gid;\r\n\r\n if (rangeOffset === 0) {\r\n gid = codepoint + cmap.idDelta.get(mid);\r\n } else {\r\n let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\r\n gid = cmap.glyphIndexArray.get(index) || 0;\r\n if (gid !== 0) {\r\n gid += cmap.idDelta.get(mid);\r\n }\r\n }\r\n\r\n return gid & 0xffff;\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n case 8:\r\n throw new Error('TODO: cmap format 8');\r\n\r\n case 6:\r\n case 10:\r\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\r\n\r\n case 12:\r\n case 13: {\r\n let min = 0;\r\n let max = cmap.nGroups - 1;\r\n while (min <= max) {\r\n let mid = (min + max) >> 1;\r\n let group = cmap.groups.get(mid);\r\n\r\n if (codepoint < group.startCharCode) {\r\n max = mid - 1;\r\n } else if (codepoint > group.endCharCode) {\r\n min = mid + 1;\r\n } else {\r\n if (cmap.version === 12) {\r\n return group.glyphID + (codepoint - group.startCharCode);\r\n } else {\r\n return group.glyphID;\r\n }\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n case 14:\r\n throw new Error('TODO: cmap format 14');\r\n\r\n default:\r\n throw new Error(`Unknown cmap format ${cmap.version}`);\r\n }\r\n }\r\n\r\n getVariationSelector(codepoint, variationSelector) {\r\n if (!this.uvs) {\r\n return 0;\r\n }\r\n\r\n let selectors = this.uvs.varSelectors.toArray();\r\n let i = binarySearch(selectors, x => variationSelector - x.varSelector);\r\n let sel = selectors[i];\r\n\r\n if (i !== -1 && sel.defaultUVS) {\r\n i = binarySearch(sel.defaultUVS, x =>\r\n codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\r\n );\r\n }\r\n\r\n if (i !== -1 && sel.nonDefaultUVS) {\r\n i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\r\n if (i !== -1) {\r\n return sel.nonDefaultUVS[i].glyphID;\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n @cache\r\n getCharacterSet() {\r\n let cmap = this.cmap;\r\n switch (cmap.version) {\r\n case 0:\r\n return range(0, cmap.codeMap.length);\r\n\r\n case 4: {\r\n let res = [];\r\n let endCodes = cmap.endCode.toArray();\r\n for (let i = 0; i < endCodes.length; i++) {\r\n let tail = endCodes[i] + 1;\r\n let start = cmap.startCode.get(i);\r\n res.push(...range(start, tail));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n case 8:\r\n throw new Error('TODO: cmap format 8');\r\n\r\n case 6:\r\n case 10:\r\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\r\n\r\n case 12:\r\n case 13: {\r\n let res = [];\r\n for (let group of cmap.groups.toArray()) {\r\n res.push(...range(group.startCharCode, group.endCharCode + 1));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n case 14:\r\n throw new Error('TODO: cmap format 14');\r\n\r\n default:\r\n throw new Error(`Unknown cmap format ${cmap.version}`);\r\n }\r\n }\r\n\r\n @cache\r\n codePointsForGlyph(gid) {\r\n let cmap = this.cmap;\r\n switch (cmap.version) {\r\n case 0: {\r\n let res = [];\r\n for (let i = 0; i < 256; i++) {\r\n if (cmap.codeMap.get(i) === gid) {\r\n res.push(i);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n case 4: {\r\n let res = [];\r\n for (let i = 0; i < cmap.segCount; i++) {\r\n let end = cmap.endCode.get(i);\r\n let start = cmap.startCode.get(i);\r\n let rangeOffset = cmap.idRangeOffset.get(i);\r\n let delta = cmap.idDelta.get(i);\r\n\r\n for (var c = start; c <= end; c++) {\r\n let g = 0;\r\n if (rangeOffset === 0) {\r\n g = c + delta;\r\n } else {\r\n let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\r\n g = cmap.glyphIndexArray.get(index) || 0;\r\n if (g !== 0) {\r\n g += delta;\r\n }\r\n }\r\n\r\n if (g === gid) {\r\n res.push(c);\r\n }\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n case 12: {\r\n let res = [];\r\n for (let group of cmap.groups.toArray()) {\r\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\r\n res.push(group.startCharCode + (gid - group.glyphID));\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n case 13: {\r\n let res = [];\r\n for (let group of cmap.groups.toArray()) {\r\n if (gid === group.glyphID) {\r\n res.push(...range(group.startCharCode, group.endCharCode + 1));\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n default:\r\n throw new Error(`Unknown cmap format ${cmap.version}`);\r\n }\r\n }\r\n}\r\n","import {binarySearch} from '../utils';\r\n\r\nexport default class KernProcessor {\r\n constructor(font) {\r\n this.kern = font.kern;\r\n }\r\n\r\n process(glyphs, positions) {\r\n for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\r\n let left = glyphs[glyphIndex].id;\r\n let right = glyphs[glyphIndex + 1].id;\r\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\r\n }\r\n }\r\n\r\n getKerning(left, right) {\r\n let res = 0;\r\n\r\n for (let table of this.kern.tables) {\r\n if (table.coverage.crossStream) {\r\n continue;\r\n }\r\n\r\n switch (table.version) {\r\n case 0:\r\n if (!table.coverage.horizontal) {\r\n continue;\r\n }\r\n\r\n break;\r\n case 1:\r\n if (table.coverage.vertical || table.coverage.variation) {\r\n continue;\r\n }\r\n\r\n break;\r\n default:\r\n throw new Error(`Unsupported kerning table version ${table.version}`);\r\n }\r\n\r\n let val = 0;\r\n let s = table.subtable;\r\n switch (table.format) {\r\n case 0:\r\n let pairIdx = binarySearch(s.pairs, function (pair) {\r\n return (left - pair.left) || (right - pair.right);\r\n });\r\n\r\n if (pairIdx >= 0) {\r\n val = s.pairs[pairIdx].value;\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n let leftOffset = 0, rightOffset = 0;\r\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\r\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\r\n } else {\r\n leftOffset = s.array.off;\r\n }\r\n\r\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\r\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\r\n }\r\n\r\n let index = (leftOffset + rightOffset - s.array.off) / 2;\r\n val = s.array.values.get(index);\r\n break;\r\n\r\n case 3:\r\n if (left >= s.glyphCount || right >= s.glyphCount) {\r\n return 0;\r\n }\r\n\r\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\r\n break;\r\n\r\n default:\r\n throw new Error(`Unsupported kerning sub-table format ${table.format}`);\r\n }\r\n\r\n // Microsoft supports the override flag, which resets the result\r\n // Otherwise, the sum of the results from all subtables is returned\r\n if (table.coverage.override) {\r\n res = val;\r\n } else {\r\n res += val;\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import unicode from 'unicode-properties';\r\n\r\n/**\r\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\r\n * for positioning marks relative to base glyphs. It uses the unicode\r\n * combining class property to position marks.\r\n *\r\n * Based on code from Harfbuzz, thanks!\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\r\n */\r\nexport default class UnicodeLayoutEngine {\r\n constructor(font) {\r\n this.font = font;\r\n }\r\n\r\n positionGlyphs(glyphs, positions) {\r\n // find each base + mark cluster, and position the marks relative to the base\r\n let clusterStart = 0;\r\n let clusterEnd = 0;\r\n for (let index = 0; index < glyphs.length; index++) {\r\n let glyph = glyphs[index];\r\n if (glyph.isMark) { // TODO: handle ligatures\r\n clusterEnd = index;\r\n } else {\r\n if (clusterStart !== clusterEnd) {\r\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\r\n }\r\n\r\n clusterStart = clusterEnd = index;\r\n }\r\n }\r\n\r\n if (clusterStart !== clusterEnd) {\r\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n positionCluster(glyphs, positions, clusterStart, clusterEnd) {\r\n let base = glyphs[clusterStart];\r\n let baseBox = base.cbox.copy();\r\n\r\n // adjust bounding box for ligature glyphs\r\n if (base.codePoints.length > 1) {\r\n // LTR. TODO: RTL support.\r\n baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\r\n }\r\n\r\n let xOffset = -positions[clusterStart].xAdvance;\r\n let yOffset = 0;\r\n let yGap = this.font.unitsPerEm / 16;\r\n\r\n // position each of the mark glyphs relative to the base glyph\r\n for (let index = clusterStart + 1; index <= clusterEnd; index++) {\r\n let mark = glyphs[index];\r\n let markBox = mark.cbox;\r\n let position = positions[index];\r\n\r\n let combiningClass = this.getCombiningClass(mark.codePoints[0]);\r\n\r\n if (combiningClass !== 'Not_Reordered') {\r\n position.xOffset = position.yOffset = 0;\r\n\r\n // x positioning\r\n switch (combiningClass) {\r\n case 'Double_Above':\r\n case 'Double_Below':\r\n // LTR. TODO: RTL support.\r\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\r\n break;\r\n\r\n case 'Attached_Below_Left':\r\n case 'Below_Left':\r\n case 'Above_Left':\r\n // left align\r\n position.xOffset += baseBox.minX - markBox.minX;\r\n break;\r\n\r\n case 'Attached_Above_Right':\r\n case 'Below_Right':\r\n case 'Above_Right':\r\n // right align\r\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\r\n break;\r\n\r\n default: // Attached_Below, Attached_Above, Below, Above, other\r\n // center align\r\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\r\n }\r\n\r\n // y positioning\r\n switch (combiningClass) {\r\n case 'Double_Below':\r\n case 'Below_Left':\r\n case 'Below':\r\n case 'Below_Right':\r\n case 'Attached_Below_Left':\r\n case 'Attached_Below':\r\n // add a small gap between the glyphs if they are not attached\r\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\r\n baseBox.minY += yGap;\r\n }\r\n\r\n position.yOffset = -baseBox.minY - markBox.maxY;\r\n baseBox.minY += markBox.height;\r\n break;\r\n\r\n case 'Double_Above':\r\n case 'Above_Left':\r\n case 'Above':\r\n case 'Above_Right':\r\n case 'Attached_Above':\r\n case 'Attached_Above_Right':\r\n // add a small gap between the glyphs if they are not attached\r\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\r\n baseBox.maxY += yGap;\r\n }\r\n\r\n position.yOffset = baseBox.maxY - markBox.minY;\r\n baseBox.maxY += markBox.height;\r\n break;\r\n }\r\n\r\n position.xAdvance = position.yAdvance = 0;\r\n position.xOffset += xOffset;\r\n position.yOffset += yOffset;\r\n\r\n } else {\r\n xOffset -= position.xAdvance;\r\n yOffset -= position.yAdvance;\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n getCombiningClass(codePoint) {\r\n let combiningClass = unicode.getCombiningClass(codePoint);\r\n\r\n // Thai / Lao need some per-character work\r\n if ((codePoint & ~0xff) === 0x0e00) {\r\n if (combiningClass === 'Not_Reordered') {\r\n switch (codePoint) {\r\n case 0x0e31:\r\n case 0x0e34:\r\n case 0x0e35:\r\n case 0x0e36:\r\n case 0x0e37:\r\n case 0x0e47:\r\n case 0x0e4c:\r\n case 0x0e3d:\r\n case 0x0e4e:\r\n return 'Above_Right';\r\n\r\n case 0x0eb1:\r\n case 0x0eb4:\r\n case 0x0eb5:\r\n case 0x0eb6:\r\n case 0x0eb7:\r\n case 0x0ebb:\r\n case 0x0ecc:\r\n case 0x0ecd:\r\n return 'Above';\r\n\r\n case 0x0ebc:\r\n return 'Below';\r\n }\r\n } else if (codePoint === 0x0e3a) { // virama\r\n return 'Below_Right';\r\n }\r\n }\r\n\r\n switch (combiningClass) {\r\n // Hebrew\r\n\r\n case 'CCC10': // sheva\r\n case 'CCC11': // hataf segol\r\n case 'CCC12': // hataf patah\r\n case 'CCC13': // hataf qamats\r\n case 'CCC14': // hiriq\r\n case 'CCC15': // tsere\r\n case 'CCC16': // segol\r\n case 'CCC17': // patah\r\n case 'CCC18': // qamats\r\n case 'CCC20': // qubuts\r\n case 'CCC22': // meteg\r\n return 'Below';\r\n\r\n case 'CCC23': // rafe\r\n return 'Attached_Above';\r\n\r\n case 'CCC24': // shin dot\r\n return 'Above_Right';\r\n\r\n case 'CCC25': // sin dot\r\n case 'CCC19': // holam\r\n return 'Above_Left';\r\n\r\n case 'CCC26': // point varika\r\n return 'Above';\r\n\r\n case 'CCC21': // dagesh\r\n break;\r\n\r\n // Arabic and Syriac\r\n\r\n case 'CCC27': // fathatan\r\n case 'CCC28': // dammatan\r\n case 'CCC30': // fatha\r\n case 'CCC31': // damma\r\n case 'CCC33': // shadda\r\n case 'CCC34': // sukun\r\n case 'CCC35': // superscript alef\r\n case 'CCC36': // superscript alaph\r\n return 'Above';\r\n\r\n case 'CCC29': // kasratan\r\n case 'CCC32': // kasra\r\n return 'Below';\r\n\r\n // Thai\r\n\r\n case 'CCC103': // sara u / sara uu\r\n return 'Below_Right';\r\n\r\n case 'CCC107': // mai\r\n return 'Above_Right';\r\n\r\n // Lao\r\n\r\n case 'CCC118': // sign u / sign uu\r\n return 'Below';\r\n\r\n case 'CCC122': // mai\r\n return 'Above';\r\n\r\n // Tibetan\r\n\r\n case 'CCC129': // sign aa\r\n case 'CCC132': // sign u\r\n return 'Below';\r\n\r\n case 'CCC130': // sign i\r\n return 'Above';\r\n }\r\n\r\n return combiningClass;\r\n }\r\n}\r\n","/**\r\n * Represents a glyph bounding box\r\n */\r\nexport default class BBox {\r\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\r\n /**\r\n * The minimum X position in the bounding box\r\n * @type {number}\r\n */\r\n this.minX = minX;\r\n\r\n /**\r\n * The minimum Y position in the bounding box\r\n * @type {number}\r\n */\r\n this.minY = minY;\r\n\r\n /**\r\n * The maxmimum X position in the bounding box\r\n * @type {number}\r\n */\r\n this.maxX = maxX;\r\n\r\n /**\r\n * The maxmimum Y position in the bounding box\r\n * @type {number}\r\n */\r\n this.maxY = maxY;\r\n }\r\n\r\n /**\r\n * The width of the bounding box\r\n * @type {number}\r\n */\r\n get width() {\r\n return this.maxX - this.minX;\r\n }\r\n\r\n /**\r\n * The height of the bounding box\r\n * @type {number}\r\n */\r\n get height() {\r\n return this.maxY - this.minY;\r\n }\r\n\r\n addPoint(x, y) {\r\n if (Math.abs(x) !== Infinity) {\r\n if (x < this.minX) {\r\n this.minX = x;\r\n }\r\n\r\n if (x > this.maxX) {\r\n this.maxX = x;\r\n }\r\n }\r\n\r\n if (Math.abs(y) !== Infinity) {\r\n if (y < this.minY) {\r\n this.minY = y;\r\n }\r\n\r\n if (y > this.maxY) {\r\n this.maxY = y;\r\n }\r\n }\r\n }\r\n\r\n copy() {\r\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\r\n }\r\n}\r\n","import unicode from 'unicode-properties';\r\n\r\n// This maps the Unicode Script property to an OpenType script tag\r\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\r\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\r\nconst UNICODE_SCRIPTS = {\r\n Caucasian_Albanian: 'aghb',\r\n Arabic: 'arab',\r\n Imperial_Aramaic: 'armi',\r\n Armenian: 'armn',\r\n Avestan: 'avst',\r\n Balinese: 'bali',\r\n Bamum: 'bamu',\r\n Bassa_Vah: 'bass',\r\n Batak: 'batk',\r\n Bengali: ['bng2', 'beng'],\r\n Bopomofo: 'bopo',\r\n Brahmi: 'brah',\r\n Braille: 'brai',\r\n Buginese: 'bugi',\r\n Buhid: 'buhd',\r\n Chakma: 'cakm',\r\n Canadian_Aboriginal: 'cans',\r\n Carian: 'cari',\r\n Cham: 'cham',\r\n Cherokee: 'cher',\r\n Coptic: 'copt',\r\n Cypriot: 'cprt',\r\n Cyrillic: 'cyrl',\r\n Devanagari: ['dev2', 'deva'],\r\n Deseret: 'dsrt',\r\n Duployan: 'dupl',\r\n Egyptian_Hieroglyphs: 'egyp',\r\n Elbasan: 'elba',\r\n Ethiopic: 'ethi',\r\n Georgian: 'geor',\r\n Glagolitic: 'glag',\r\n Gothic: 'goth',\r\n Grantha: 'gran',\r\n Greek: 'grek',\r\n Gujarati: ['gjr2', 'gujr'],\r\n Gurmukhi: ['gur2', 'guru'],\r\n Hangul: 'hang',\r\n Han: 'hani',\r\n Hanunoo: 'hano',\r\n Hebrew: 'hebr',\r\n Hiragana: 'hira',\r\n Pahawh_Hmong: 'hmng',\r\n Katakana_Or_Hiragana: 'hrkt',\r\n Old_Italic: 'ital',\r\n Javanese: 'java',\r\n Kayah_Li: 'kali',\r\n Katakana: 'kana',\r\n Kharoshthi: 'khar',\r\n Khmer: 'khmr',\r\n Khojki: 'khoj',\r\n Kannada: ['knd2', 'knda'],\r\n Kaithi: 'kthi',\r\n Tai_Tham: 'lana',\r\n Lao: 'lao ',\r\n Latin: 'latn',\r\n Lepcha: 'lepc',\r\n Limbu: 'limb',\r\n Linear_A: 'lina',\r\n Linear_B: 'linb',\r\n Lisu: 'lisu',\r\n Lycian: 'lyci',\r\n Lydian: 'lydi',\r\n Mahajani: 'mahj',\r\n Mandaic: 'mand',\r\n Manichaean: 'mani',\r\n Mende_Kikakui: 'mend',\r\n Meroitic_Cursive: 'merc',\r\n Meroitic_Hieroglyphs: 'mero',\r\n Malayalam: ['mlm2', 'mlym'],\r\n Modi: 'modi',\r\n Mongolian: 'mong',\r\n Mro: 'mroo',\r\n Meetei_Mayek: 'mtei',\r\n Myanmar: ['mym2', 'mymr'],\r\n Old_North_Arabian: 'narb',\r\n Nabataean: 'nbat',\r\n Nko: 'nko ',\r\n Ogham: 'ogam',\r\n Ol_Chiki: 'olck',\r\n Old_Turkic: 'orkh',\r\n Oriya: ['ory2', 'orya'],\r\n Osmanya: 'osma',\r\n Palmyrene: 'palm',\r\n Pau_Cin_Hau: 'pauc',\r\n Old_Permic: 'perm',\r\n Phags_Pa: 'phag',\r\n Inscriptional_Pahlavi: 'phli',\r\n Psalter_Pahlavi: 'phlp',\r\n Phoenician: 'phnx',\r\n Miao: 'plrd',\r\n Inscriptional_Parthian: 'prti',\r\n Rejang: 'rjng',\r\n Runic: 'runr',\r\n Samaritan: 'samr',\r\n Old_South_Arabian: 'sarb',\r\n Saurashtra: 'saur',\r\n Shavian: 'shaw',\r\n Sharada: 'shrd',\r\n Siddham: 'sidd',\r\n Khudawadi: 'sind',\r\n Sinhala: 'sinh',\r\n Sora_Sompeng: 'sora',\r\n Sundanese: 'sund',\r\n Syloti_Nagri: 'sylo',\r\n Syriac: 'syrc',\r\n Tagbanwa: 'tagb',\r\n Takri: 'takr',\r\n Tai_Le: 'tale',\r\n New_Tai_Lue: 'talu',\r\n Tamil: ['tml2', 'taml'],\r\n Tai_Viet: 'tavt',\r\n Telugu: ['tel2', 'telu'],\r\n Tifinagh: 'tfng',\r\n Tagalog: 'tglg',\r\n Thaana: 'thaa',\r\n Thai: 'thai',\r\n Tibetan: 'tibt',\r\n Tirhuta: 'tirh',\r\n Ugaritic: 'ugar',\r\n Vai: 'vai ',\r\n Warang_Citi: 'wara',\r\n Old_Persian: 'xpeo',\r\n Cuneiform: 'xsux',\r\n Yi: 'yi ',\r\n Inherited: 'zinh',\r\n Common: 'zyyy',\r\n Unknown: 'zzzz'\r\n};\r\n\r\nconst OPENTYPE_SCRIPTS = {};\r\nfor (let script in UNICODE_SCRIPTS) {\r\n let tag = UNICODE_SCRIPTS[script];\r\n if (Array.isArray(tag)) {\r\n for (let t of tag) {\r\n OPENTYPE_SCRIPTS[t] = script;\r\n }\r\n } else {\r\n OPENTYPE_SCRIPTS[tag] = script;\r\n }\r\n}\r\n\r\nexport function fromUnicode(script) {\r\n return UNICODE_SCRIPTS[script];\r\n}\r\n\r\nexport function fromOpenType(tag) {\r\n return OPENTYPE_SCRIPTS[tag];\r\n}\r\n\r\nexport function forString(string) {\r\n let len = string.length;\r\n let idx = 0;\r\n while (idx < len) {\r\n let code = string.charCodeAt(idx++);\r\n\r\n // Check if this is a high surrogate\r\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\r\n let next = string.charCodeAt(idx);\r\n\r\n // Check if this is a low surrogate\r\n if (0xdc00 <= next && next <= 0xdfff) {\r\n idx++;\r\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\r\n }\r\n }\r\n\r\n let script = unicode.getScript(code);\r\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\r\n return UNICODE_SCRIPTS[script];\r\n }\r\n }\r\n\r\n return UNICODE_SCRIPTS.Unknown;\r\n}\r\n\r\nexport function forCodePoints(codePoints) {\r\n for (let i = 0; i < codePoints.length; i++) {\r\n let codePoint = codePoints[i];\r\n let script = unicode.getScript(codePoint);\r\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\r\n return UNICODE_SCRIPTS[script];\r\n }\r\n }\r\n\r\n return UNICODE_SCRIPTS.Unknown;\r\n}\r\n\r\n// The scripts in this map are written from right to left\r\nconst RTL = {\r\n arab: true, // Arabic\r\n hebr: true, // Hebrew\r\n syrc: true, // Syriac\r\n thaa: true, // Thaana\r\n cprt: true, // Cypriot Syllabary\r\n khar: true, // Kharosthi\r\n phnx: true, // Phoenician\r\n 'nko ': true, // N'Ko\r\n lydi: true, // Lydian\r\n avst: true, // Avestan\r\n armi: true, // Imperial Aramaic\r\n phli: true, // Inscriptional Pahlavi\r\n prti: true, // Inscriptional Parthian\r\n sarb: true, // Old South Arabian\r\n orkh: true, // Old Turkic, Orkhon Runic\r\n samr: true, // Samaritan\r\n mand: true, // Mandaic, Mandaean\r\n merc: true, // Meroitic Cursive\r\n mero: true, // Meroitic Hieroglyphs\r\n\r\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\r\n mani: true, // Manichaean\r\n mend: true, // Mende Kikakui\r\n nbat: true, // Nabataean\r\n narb: true, // Old North Arabian\r\n palm: true, // Palmyrene\r\n phlp: true // Psalter Pahlavi\r\n};\r\n\r\nexport function direction(script) {\r\n if (RTL[script]) {\r\n return 'rtl';\r\n }\r\n\r\n return 'ltr';\r\n}\r\n","import BBox from '../glyph/BBox';\r\nimport * as Script from '../layout/Script';\r\n\r\n/**\r\n * Represents a run of Glyph and GlyphPosition objects.\r\n * Returned by the font layout method.\r\n */\r\nexport default class GlyphRun {\r\n constructor(glyphs, features, script, language, direction) {\r\n /**\r\n * An array of Glyph objects in the run\r\n * @type {Glyph[]}\r\n */\r\n this.glyphs = glyphs;\r\n\r\n /**\r\n * An array of GlyphPosition objects for each glyph in the run\r\n * @type {GlyphPosition[]}\r\n */\r\n this.positions = null;\r\n\r\n /**\r\n * The script that was requested for shaping. This was either passed in or detected automatically.\r\n * @type {string}\r\n */\r\n this.script = script;\r\n\r\n /**\r\n * The language requested for shaping, as passed in. If `null`, the default language for the\r\n * script was used.\r\n * @type {string}\r\n */\r\n this.language = language || null;\r\n\r\n /**\r\n * The direction requested for shaping, as passed in (either ltr or rtl).\r\n * If `null`, the default direction of the script is used.\r\n * @type {string}\r\n */\r\n this.direction = direction || Script.direction(script);\r\n\r\n /**\r\n * The features requested during shaping. This is a combination of user\r\n * specified features and features chosen by the shaper.\r\n * @type {object}\r\n */\r\n this.features = {};\r\n\r\n // Convert features to an object\r\n if (Array.isArray(features)) {\r\n for (let tag of features) {\r\n this.features[tag] = true;\r\n }\r\n } else if (typeof features === 'object') {\r\n this.features = features;\r\n }\r\n }\r\n\r\n /**\r\n * The total advance width of the run.\r\n * @type {number}\r\n */\r\n get advanceWidth() {\r\n let width = 0;\r\n for (let position of this.positions) {\r\n width += position.xAdvance;\r\n }\r\n\r\n return width;\r\n }\r\n\r\n /**\r\n * The total advance height of the run.\r\n * @type {number}\r\n */\r\n get advanceHeight() {\r\n let height = 0;\r\n for (let position of this.positions) {\r\n height += position.yAdvance;\r\n }\r\n\r\n return height;\r\n }\r\n\r\n /**\r\n * The bounding box containing all glyphs in the run.\r\n * @type {BBox}\r\n */\r\n get bbox() {\r\n let bbox = new BBox;\r\n\r\n let x = 0;\r\n let y = 0;\r\n for (let index = 0; index < this.glyphs.length; index++) {\r\n let glyph = this.glyphs[index];\r\n let p = this.positions[index];\r\n let b = glyph.bbox;\r\n\r\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\r\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\r\n\r\n x += p.xAdvance;\r\n y += p.yAdvance;\r\n }\r\n\r\n return bbox;\r\n }\r\n}\r\n","/**\r\n * Represents positioning information for a glyph in a GlyphRun.\r\n */\r\nexport default class GlyphPosition {\r\n constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\r\n /**\r\n * The amount to move the virtual pen in the X direction after rendering this glyph.\r\n * @type {number}\r\n */\r\n this.xAdvance = xAdvance;\r\n\r\n /**\r\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\r\n * @type {number}\r\n */\r\n this.yAdvance = yAdvance;\r\n\r\n /**\r\n * The offset from the pen position in the X direction at which to render this glyph.\r\n * @type {number}\r\n */\r\n this.xOffset = xOffset;\r\n\r\n /**\r\n * The offset from the pen position in the Y direction at which to render this glyph.\r\n * @type {number}\r\n */\r\n this.yOffset = yOffset;\r\n }\r\n}\r\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\r\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\r\nconst features = {\r\n allTypographicFeatures: {\r\n code: 0,\r\n exclusive: false,\r\n allTypeFeatures: 0\r\n },\r\n ligatures: {\r\n code: 1,\r\n exclusive: false,\r\n requiredLigatures: 0,\r\n commonLigatures: 2,\r\n rareLigatures: 4,\r\n // logos: 6\r\n rebusPictures: 8,\r\n diphthongLigatures: 10,\r\n squaredLigatures: 12,\r\n abbrevSquaredLigatures: 14,\r\n symbolLigatures: 16,\r\n contextualLigatures: 18,\r\n historicalLigatures: 20\r\n },\r\n cursiveConnection: {\r\n code: 2,\r\n exclusive: true,\r\n unconnected: 0,\r\n partiallyConnected: 1,\r\n cursive: 2\r\n },\r\n letterCase: {\r\n code: 3,\r\n exclusive: true\r\n },\r\n // upperAndLowerCase: 0 # deprecated\r\n // allCaps: 1 # deprecated\r\n // allLowerCase: 2 # deprecated\r\n // smallCaps: 3 # deprecated\r\n // initialCaps: 4 # deprecated\r\n // initialCapsAndSmallCaps: 5 # deprecated\r\n verticalSubstitution: {\r\n code: 4,\r\n exclusive: false,\r\n substituteVerticalForms: 0\r\n },\r\n linguisticRearrangement: {\r\n code: 5,\r\n exclusive: false,\r\n linguisticRearrangement: 0\r\n },\r\n numberSpacing: {\r\n code: 6,\r\n exclusive: true,\r\n monospacedNumbers: 0,\r\n proportionalNumbers: 1,\r\n thirdWidthNumbers: 2,\r\n quarterWidthNumbers: 3\r\n },\r\n smartSwash: {\r\n code: 8,\r\n exclusive: false,\r\n wordInitialSwashes: 0,\r\n wordFinalSwashes: 2,\r\n // lineInitialSwashes: 4\r\n // lineFinalSwashes: 6\r\n nonFinalSwashes: 8\r\n },\r\n diacritics: {\r\n code: 9,\r\n exclusive: true,\r\n showDiacritics: 0,\r\n hideDiacritics: 1,\r\n decomposeDiacritics: 2\r\n },\r\n verticalPosition: {\r\n code: 10,\r\n exclusive: true,\r\n normalPosition: 0,\r\n superiors: 1,\r\n inferiors: 2,\r\n ordinals: 3,\r\n scientificInferiors: 4\r\n },\r\n fractions: {\r\n code: 11,\r\n exclusive: true,\r\n noFractions: 0,\r\n verticalFractions: 1,\r\n diagonalFractions: 2\r\n },\r\n overlappingCharacters: {\r\n code: 13,\r\n exclusive: false,\r\n preventOverlap: 0\r\n },\r\n typographicExtras: {\r\n code: 14,\r\n exclusive: false,\r\n // hyphensToEmDash: 0\r\n // hyphenToEnDash: 2\r\n slashedZero: 4\r\n },\r\n // formInterrobang: 6\r\n // smartQuotes: 8\r\n // periodsToEllipsis: 10\r\n mathematicalExtras: {\r\n code: 15,\r\n exclusive: false,\r\n // hyphenToMinus: 0\r\n // asteristoMultiply: 2\r\n // slashToDivide: 4\r\n // inequalityLigatures: 6\r\n // exponents: 8\r\n mathematicalGreek: 10\r\n },\r\n ornamentSets: {\r\n code: 16,\r\n exclusive: true,\r\n noOrnaments: 0,\r\n dingbats: 1,\r\n piCharacters: 2,\r\n fleurons: 3,\r\n decorativeBorders: 4,\r\n internationalSymbols: 5,\r\n mathSymbols: 6\r\n },\r\n characterAlternatives: {\r\n code: 17,\r\n exclusive: true,\r\n noAlternates: 0\r\n },\r\n // user defined options\r\n designComplexity: {\r\n code: 18,\r\n exclusive: true,\r\n designLevel1: 0,\r\n designLevel2: 1,\r\n designLevel3: 2,\r\n designLevel4: 3,\r\n designLevel5: 4\r\n },\r\n styleOptions: {\r\n code: 19,\r\n exclusive: true,\r\n noStyleOptions: 0,\r\n displayText: 1,\r\n engravedText: 2,\r\n illuminatedCaps: 3,\r\n titlingCaps: 4,\r\n tallCaps: 5\r\n },\r\n characterShape: {\r\n code: 20,\r\n exclusive: true,\r\n traditionalCharacters: 0,\r\n simplifiedCharacters: 1,\r\n JIS1978Characters: 2,\r\n JIS1983Characters: 3,\r\n JIS1990Characters: 4,\r\n traditionalAltOne: 5,\r\n traditionalAltTwo: 6,\r\n traditionalAltThree: 7,\r\n traditionalAltFour: 8,\r\n traditionalAltFive: 9,\r\n expertCharacters: 10,\r\n JIS2004Characters: 11,\r\n hojoCharacters: 12,\r\n NLCCharacters: 13,\r\n traditionalNamesCharacters: 14\r\n },\r\n numberCase: {\r\n code: 21,\r\n exclusive: true,\r\n lowerCaseNumbers: 0,\r\n upperCaseNumbers: 1\r\n },\r\n textSpacing: {\r\n code: 22,\r\n exclusive: true,\r\n proportionalText: 0,\r\n monospacedText: 1,\r\n halfWidthText: 2,\r\n thirdWidthText: 3,\r\n quarterWidthText: 4,\r\n altProportionalText: 5,\r\n altHalfWidthText: 6\r\n },\r\n transliteration: {\r\n code: 23,\r\n exclusive: true,\r\n noTransliteration: 0\r\n },\r\n // hanjaToHangul: 1\r\n // hiraganaToKatakana: 2\r\n // katakanaToHiragana: 3\r\n // kanaToRomanization: 4\r\n // romanizationToHiragana: 5\r\n // romanizationToKatakana: 6\r\n // hanjaToHangulAltOne: 7\r\n // hanjaToHangulAltTwo: 8\r\n // hanjaToHangulAltThree: 9\r\n annotation: {\r\n code: 24,\r\n exclusive: true,\r\n noAnnotation: 0,\r\n boxAnnotation: 1,\r\n roundedBoxAnnotation: 2,\r\n circleAnnotation: 3,\r\n invertedCircleAnnotation: 4,\r\n parenthesisAnnotation: 5,\r\n periodAnnotation: 6,\r\n romanNumeralAnnotation: 7,\r\n diamondAnnotation: 8,\r\n invertedBoxAnnotation: 9,\r\n invertedRoundedBoxAnnotation: 10\r\n },\r\n kanaSpacing: {\r\n code: 25,\r\n exclusive: true,\r\n fullWidthKana: 0,\r\n proportionalKana: 1\r\n },\r\n ideographicSpacing: {\r\n code: 26,\r\n exclusive: true,\r\n fullWidthIdeographs: 0,\r\n proportionalIdeographs: 1,\r\n halfWidthIdeographs: 2\r\n },\r\n unicodeDecomposition: {\r\n code: 27,\r\n exclusive: false,\r\n canonicalComposition: 0,\r\n compatibilityComposition: 2,\r\n transcodingComposition: 4\r\n },\r\n rubyKana: {\r\n code: 28,\r\n exclusive: false,\r\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\r\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\r\n rubyKana: 2\r\n },\r\n CJKSymbolAlternatives: {\r\n code: 29,\r\n exclusive: true,\r\n noCJKSymbolAlternatives: 0,\r\n CJKSymbolAltOne: 1,\r\n CJKSymbolAltTwo: 2,\r\n CJKSymbolAltThree: 3,\r\n CJKSymbolAltFour: 4,\r\n CJKSymbolAltFive: 5\r\n },\r\n ideographicAlternatives: {\r\n code: 30,\r\n exclusive: true,\r\n noIdeographicAlternatives: 0,\r\n ideographicAltOne: 1,\r\n ideographicAltTwo: 2,\r\n ideographicAltThree: 3,\r\n ideographicAltFour: 4,\r\n ideographicAltFive: 5\r\n },\r\n CJKVerticalRomanPlacement: {\r\n code: 31,\r\n exclusive: true,\r\n CJKVerticalRomanCentered: 0,\r\n CJKVerticalRomanHBaseline: 1\r\n },\r\n italicCJKRoman: {\r\n code: 32,\r\n exclusive: false,\r\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\r\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\r\n CJKItalicRoman: 2\r\n },\r\n caseSensitiveLayout: {\r\n code: 33,\r\n exclusive: false,\r\n caseSensitiveLayout: 0,\r\n caseSensitiveSpacing: 2\r\n },\r\n alternateKana: {\r\n code: 34,\r\n exclusive: false,\r\n alternateHorizKana: 0,\r\n alternateVertKana: 2\r\n },\r\n stylisticAlternatives: {\r\n code: 35,\r\n exclusive: false,\r\n noStylisticAlternates: 0,\r\n stylisticAltOne: 2,\r\n stylisticAltTwo: 4,\r\n stylisticAltThree: 6,\r\n stylisticAltFour: 8,\r\n stylisticAltFive: 10,\r\n stylisticAltSix: 12,\r\n stylisticAltSeven: 14,\r\n stylisticAltEight: 16,\r\n stylisticAltNine: 18,\r\n stylisticAltTen: 20,\r\n stylisticAltEleven: 22,\r\n stylisticAltTwelve: 24,\r\n stylisticAltThirteen: 26,\r\n stylisticAltFourteen: 28,\r\n stylisticAltFifteen: 30,\r\n stylisticAltSixteen: 32,\r\n stylisticAltSeventeen: 34,\r\n stylisticAltEighteen: 36,\r\n stylisticAltNineteen: 38,\r\n stylisticAltTwenty: 40\r\n },\r\n contextualAlternates: {\r\n code: 36,\r\n exclusive: false,\r\n contextualAlternates: 0,\r\n swashAlternates: 2,\r\n contextualSwashAlternates: 4\r\n },\r\n lowerCase: {\r\n code: 37,\r\n exclusive: true,\r\n defaultLowerCase: 0,\r\n lowerCaseSmallCaps: 1,\r\n lowerCasePetiteCaps: 2\r\n },\r\n upperCase: {\r\n code: 38,\r\n exclusive: true,\r\n defaultUpperCase: 0,\r\n upperCaseSmallCaps: 1,\r\n upperCasePetiteCaps: 2\r\n },\r\n languageTag: { // indices into ltag table\r\n code: 39,\r\n exclusive: true\r\n },\r\n CJKRomanSpacing: {\r\n code: 103,\r\n exclusive: true,\r\n halfWidthCJKRoman: 0,\r\n proportionalCJKRoman: 1,\r\n defaultCJKRoman: 2,\r\n fullWidthCJKRoman: 3\r\n }\r\n};\r\n\r\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\r\n\r\nconst OTMapping = {\r\n rlig: feature('ligatures', 'requiredLigatures'),\r\n clig: feature('ligatures', 'contextualLigatures'),\r\n dlig: feature('ligatures', 'rareLigatures'),\r\n hlig: feature('ligatures', 'historicalLigatures'),\r\n liga: feature('ligatures', 'commonLigatures'),\r\n hist: feature('ligatures', 'historicalLigatures'), // ??\r\n\r\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\r\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\r\n\r\n frac: feature('fractions', 'diagonalFractions'),\r\n dnom: feature('fractions', 'diagonalFractions'), // ??\r\n numr: feature('fractions', 'diagonalFractions'), // ??\r\n afrc: feature('fractions', 'verticalFractions'),\r\n // aalt\r\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\r\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\r\n // unic, vatu, vhal, vjmo, vpal, vrt2\r\n // dist -> trak table?\r\n // kern, vkrn -> kern table\r\n // lfbd + opbd + rtbd -> opbd table?\r\n // mark, mkmk -> acnt table?\r\n // locl -> languageTag + ltag table\r\n\r\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\r\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\r\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\r\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\r\n swsh: feature('contextualAlternates', 'swashAlternates'),\r\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\r\n curs: feature('cursiveConnection', 'cursive'), // ??\r\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\r\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\r\n\r\n init: feature('smartSwash', 'wordInitialSwashes'), // ??\r\n fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\r\n medi: feature('smartSwash', 'nonFinalSwashes'), // ??\r\n med2: feature('smartSwash', 'nonFinalSwashes'), // ??\r\n fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\r\n fina: feature('smartSwash', 'wordFinalSwashes'), // ??\r\n\r\n pkna: feature('kanaSpacing', 'proportionalKana'),\r\n half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\r\n halt: feature('textSpacing', 'altHalfWidthText'),\r\n\r\n hkna: feature('alternateKana', 'alternateHorizKana'),\r\n vkna: feature('alternateKana', 'alternateVertKana'),\r\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\r\n\r\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\r\n lnum: feature('numberCase', 'upperCaseNumbers'),\r\n onum: feature('numberCase', 'lowerCaseNumbers'),\r\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\r\n\r\n // nalt: not enough info. what type of annotation?\r\n // ornm: ditto, which ornament style?\r\n\r\n calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\r\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\r\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\r\n tnum: feature('numberSpacing', 'monospacedNumbers'),\r\n pnum: feature('numberSpacing', 'proportionalNumbers'),\r\n sups: feature('verticalPosition', 'superiors'),\r\n subs: feature('verticalPosition', 'inferiors'),\r\n ordn: feature('verticalPosition', 'ordinals'),\r\n pwid: feature('textSpacing', 'proportionalText'),\r\n hwid: feature('textSpacing', 'halfWidthText'),\r\n qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\r\n twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\r\n fwid: feature('textSpacing', 'proportionalText'), //??\r\n palt: feature('textSpacing', 'altProportionalText'),\r\n trad: feature('characterShape', 'traditionalCharacters'),\r\n smpl: feature('characterShape', 'simplifiedCharacters'),\r\n jp78: feature('characterShape', 'JIS1978Characters'),\r\n jp83: feature('characterShape', 'JIS1983Characters'),\r\n jp90: feature('characterShape', 'JIS1990Characters'),\r\n jp04: feature('characterShape', 'JIS2004Characters'),\r\n expt: feature('characterShape', 'expertCharacters'),\r\n hojo: feature('characterShape', 'hojoCharacters'),\r\n nlck: feature('characterShape', 'NLCCharacters'),\r\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\r\n ruby: feature('rubyKana', 'rubyKana'),\r\n titl: feature('styleOptions', 'titlingCaps'),\r\n zero: feature('typographicExtras', 'slashedZero'),\r\n\r\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\r\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\r\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\r\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\r\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\r\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\r\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\r\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\r\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\r\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\r\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\r\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\r\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\r\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\r\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\r\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\r\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\r\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\r\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\r\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\r\n};\r\n\r\n // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\r\n\r\n// Add cv01-cv99 features\r\nfor (let i = 1; i <= 99; i++) {\r\n OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\r\n}\r\n\r\n// create inverse mapping\r\nlet AATMapping = {};\r\nfor (let ot in OTMapping) {\r\n let aat = OTMapping[ot];\r\n if (AATMapping[aat[0]] == null) {\r\n AATMapping[aat[0]] = {};\r\n }\r\n\r\n AATMapping[aat[0]][aat[1]] = ot;\r\n}\r\n\r\n// Maps an array of OpenType features to AAT features\r\n// in the form of {featureType:{featureSetting:true}}\r\nexport function mapOTToAAT(features) {\r\n let res = {};\r\n for (let k in features) {\r\n let r;\r\n if (r = OTMapping[k]) {\r\n if (res[r[0]] == null) {\r\n res[r[0]] = {};\r\n }\r\n\r\n res[r[0]][r[1]] = features[k];\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// Maps strings in a [featureType, featureSetting]\r\n// to their equivalent number codes\r\nfunction mapFeatureStrings(f) {\r\n let [type, setting] = f;\r\n if (isNaN(type)) {\r\n var typeCode = features[type] && features[type].code;\r\n } else {\r\n var typeCode = type;\r\n }\r\n\r\n if (isNaN(setting)) {\r\n var settingCode = features[type] && features[type][setting];\r\n } else {\r\n var settingCode = setting;\r\n }\r\n\r\n return [typeCode, settingCode];\r\n}\r\n\r\n// Maps AAT features to an array of OpenType features\r\n// Supports both arrays in the form of [[featureType, featureSetting]]\r\n// and objects in the form of {featureType:{featureSetting:true}}\r\n// featureTypes and featureSettings can be either strings or number codes\r\nexport function mapAATToOT(features) {\r\n let res = {};\r\n if (Array.isArray(features)) {\r\n for (let k = 0; k < features.length; k++) {\r\n let r;\r\n let f = mapFeatureStrings(features[k]);\r\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\r\n res[r] = true;\r\n }\r\n }\r\n\r\n } else if (typeof features === 'object') {\r\n for (let type in features) {\r\n let feature = features[type];\r\n for (let setting in feature) {\r\n let r;\r\n let f = mapFeatureStrings([type, setting]);\r\n if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\r\n res[r] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return Object.keys(res);\r\n}\r\n","import {cache} from '../decorators';\r\nimport {range} from '../utils';\r\n\r\nexport default class AATLookupTable {\r\n constructor(table) {\r\n this.table = table;\r\n }\r\n\r\n lookup(glyph) {\r\n switch (this.table.version) {\r\n case 0: // simple array format\r\n return this.table.values.getItem(glyph);\r\n\r\n case 2: // segment format\r\n case 4: {\r\n let min = 0;\r\n let max = this.table.binarySearchHeader.nUnits - 1;\r\n\r\n while (min <= max) {\r\n var mid = (min + max) >> 1;\r\n var seg = this.table.segments[mid];\r\n\r\n // special end of search value\r\n if (seg.firstGlyph === 0xffff) {\r\n return null;\r\n }\r\n\r\n if (glyph < seg.firstGlyph) {\r\n max = mid - 1;\r\n } else if (glyph > seg.lastGlyph) {\r\n min = mid + 1;\r\n } else {\r\n if (this.table.version === 2) {\r\n return seg.value;\r\n } else {\r\n return seg.values[glyph - seg.firstGlyph];\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n case 6: { // lookup single\r\n let min = 0;\r\n let max = this.table.binarySearchHeader.nUnits - 1;\r\n\r\n while (min <= max) {\r\n var mid = (min + max) >> 1;\r\n var seg = this.table.segments[mid];\r\n\r\n // special end of search value\r\n if (seg.glyph === 0xffff) {\r\n return null;\r\n }\r\n\r\n if (glyph < seg.glyph) {\r\n max = mid - 1;\r\n } else if (glyph > seg.glyph) {\r\n min = mid + 1;\r\n } else {\r\n return seg.value;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n case 8: // lookup trimmed\r\n return this.table.values[glyph - this.table.firstGlyph];\r\n\r\n default:\r\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\r\n }\r\n }\r\n\r\n @cache\r\n glyphsForValue(classValue) {\r\n let res = [];\r\n\r\n switch (this.table.version) {\r\n case 2: // segment format\r\n case 4: {\r\n for (let segment of this.table.segments) {\r\n if ((this.table.version === 2 && segment.value === classValue)) {\r\n res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\r\n } else {\r\n for (let index = 0; index < segment.values.length; index++) {\r\n if (segment.values[index] === classValue) {\r\n res.push(segment.firstGlyph + index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 6: { // lookup single\r\n for (let segment of this.table.segments) {\r\n if (segment.value === classValue) {\r\n res.push(segment.glyph);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 8: { // lookup trimmed\r\n for (let i = 0; i < this.table.values.length; i++) {\r\n if (this.table.values[i] === classValue) {\r\n res.push(this.table.firstGlyph + i);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n default:\r\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import AATLookupTable from './AATLookupTable';\r\n\r\nconst START_OF_TEXT_STATE = 0;\r\nconst START_OF_LINE_STATE = 1;\r\n\r\nconst END_OF_TEXT_CLASS = 0;\r\nconst OUT_OF_BOUNDS_CLASS = 1;\r\nconst DELETED_GLYPH_CLASS = 2;\r\nconst END_OF_LINE_CLASS = 3;\r\n\r\nconst DONT_ADVANCE = 0x4000;\r\n\r\nexport default class AATStateMachine {\r\n constructor(stateTable) {\r\n this.stateTable = stateTable;\r\n this.lookupTable = new AATLookupTable(stateTable.classTable);\r\n }\r\n\r\n process(glyphs, reverse, processEntry) {\r\n let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\r\n let index = reverse ? glyphs.length - 1 : 0;\r\n let dir = reverse ? -1 : 1;\r\n\r\n while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\r\n let glyph = null;\r\n let classCode = OUT_OF_BOUNDS_CLASS;\r\n let shouldAdvance = true;\r\n\r\n if (index === glyphs.length || index === -1) {\r\n classCode = END_OF_TEXT_CLASS;\r\n } else {\r\n glyph = glyphs[index];\r\n if (glyph.id === 0xffff) { // deleted glyph\r\n classCode = DELETED_GLYPH_CLASS;\r\n } else {\r\n classCode = this.lookupTable.lookup(glyph.id);\r\n if (classCode == null) {\r\n classCode = OUT_OF_BOUNDS_CLASS;\r\n }\r\n }\r\n }\r\n\r\n let row = this.stateTable.stateArray.getItem(currentState);\r\n let entryIndex = row[classCode];\r\n let entry = this.stateTable.entryTable.getItem(entryIndex);\r\n\r\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\r\n processEntry(glyph, entry, index);\r\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\r\n }\r\n\r\n currentState = entry.newState;\r\n if (shouldAdvance) {\r\n index += dir;\r\n }\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n /**\r\n * Performs a depth-first traversal of the glyph strings\r\n * represented by the state machine.\r\n */\r\n traverse(opts, state = 0, visited = new Set) {\r\n if (visited.has(state)) {\r\n return;\r\n }\r\n\r\n visited.add(state);\r\n\r\n let {nClasses, stateArray, entryTable} = this.stateTable;\r\n let row = stateArray.getItem(state);\r\n\r\n // Skip predefined classes\r\n for (let classCode = 4; classCode < nClasses; classCode++) {\r\n let entryIndex = row[classCode];\r\n let entry = entryTable.getItem(entryIndex);\r\n\r\n // Try all glyphs in the class\r\n for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\r\n if (opts.enter) {\r\n opts.enter(glyph, entry);\r\n }\r\n\r\n if (entry.newState !== 0) {\r\n this.traverse(opts, entry.newState, visited);\r\n }\r\n\r\n if (opts.exit) {\r\n opts.exit(glyph, entry);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import AATStateMachine from './AATStateMachine';\r\nimport AATLookupTable from './AATLookupTable';\r\nimport {cache} from '../decorators';\r\n\r\n// indic replacement flags\r\nconst MARK_FIRST = 0x8000;\r\nconst MARK_LAST = 0x2000;\r\nconst VERB = 0x000F;\r\n\r\n// contextual substitution and glyph insertion flag\r\nconst SET_MARK = 0x8000;\r\n\r\n// ligature entry flags\r\nconst SET_COMPONENT = 0x8000;\r\nconst PERFORM_ACTION = 0x2000;\r\n\r\n// ligature action masks\r\nconst LAST_MASK = 0x80000000;\r\nconst STORE_MASK = 0x40000000;\r\nconst OFFSET_MASK = 0x3FFFFFFF;\r\n\r\nconst VERTICAL_ONLY = 0x800000;\r\nconst REVERSE_DIRECTION = 0x400000;\r\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\r\n\r\n// glyph insertion flags\r\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\r\nconst MARKED_IS_KASHIDA_LIKE = 0x1000;\r\nconst CURRENT_INSERT_BEFORE = 0x0800;\r\nconst MARKED_INSERT_BEFORE = 0x0400;\r\nconst CURRENT_INSERT_COUNT = 0x03E0;\r\nconst MARKED_INSERT_COUNT = 0x001F;\r\n\r\nexport default class AATMorxProcessor {\r\n constructor(font) {\r\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\r\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\r\n this.processLigature = this.processLigature.bind(this);\r\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\r\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\r\n this.font = font;\r\n this.morx = font.morx;\r\n this.inputCache = null;\r\n }\r\n\r\n // Processes an array of glyphs and applies the specified features\r\n // Features should be in the form of {featureType:{featureSetting:boolean}}\r\n process(glyphs, features = {}) {\r\n for (let chain of this.morx.chains) {\r\n let flags = chain.defaultFlags;\r\n\r\n // enable/disable the requested features\r\n for (let feature of chain.features) {\r\n let f;\r\n if (f = features[feature.featureType]) {\r\n if (f[feature.featureSetting]) {\r\n flags &= feature.disableFlags;\r\n flags |= feature.enableFlags;\r\n } else if (f[feature.featureSetting] === false) {\r\n flags |= ~feature.disableFlags;\r\n flags &= ~feature.enableFlags;\r\n }\r\n }\r\n }\r\n\r\n for (let subtable of chain.subtables) {\r\n if (subtable.subFeatureFlags & flags) {\r\n this.processSubtable(subtable, glyphs);\r\n }\r\n }\r\n }\r\n\r\n // remove deleted glyphs\r\n let index = glyphs.length - 1;\r\n while (index >= 0) {\r\n if (glyphs[index].id === 0xffff) {\r\n glyphs.splice(index, 1);\r\n }\r\n\r\n index--;\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n processSubtable(subtable, glyphs) {\r\n this.subtable = subtable;\r\n this.glyphs = glyphs;\r\n if (this.subtable.type === 4) {\r\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\r\n return;\r\n }\r\n\r\n this.ligatureStack = [];\r\n this.markedGlyph = null;\r\n this.firstGlyph = null;\r\n this.lastGlyph = null;\r\n this.markedIndex = null;\r\n\r\n let stateMachine = this.getStateMachine(subtable);\r\n let process = this.getProcessor();\r\n\r\n let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\r\n return stateMachine.process(this.glyphs, reverse, process);\r\n }\r\n\r\n @cache\r\n getStateMachine(subtable) {\r\n return new AATStateMachine(subtable.table.stateTable);\r\n }\r\n\r\n getProcessor() {\r\n switch (this.subtable.type) {\r\n case 0:\r\n return this.processIndicRearragement;\r\n case 1:\r\n return this.processContextualSubstitution;\r\n case 2:\r\n return this.processLigature;\r\n case 4:\r\n return this.processNoncontextualSubstitutions;\r\n case 5:\r\n return this.processGlyphInsertion;\r\n default:\r\n throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\r\n }\r\n }\r\n\r\n processIndicRearragement(glyph, entry, index) {\r\n if (entry.flags & MARK_FIRST) {\r\n this.firstGlyph = index;\r\n }\r\n\r\n if (entry.flags & MARK_LAST) {\r\n this.lastGlyph = index;\r\n }\r\n\r\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\r\n }\r\n\r\n processContextualSubstitution(glyph, entry, index) {\r\n let subsitutions = this.subtable.table.substitutionTable.items;\r\n if (entry.markIndex !== 0xffff) {\r\n let lookup = subsitutions.getItem(entry.markIndex);\r\n let lookupTable = new AATLookupTable(lookup);\r\n glyph = this.glyphs[this.markedGlyph];\r\n var gid = lookupTable.lookup(glyph.id);\r\n if (gid) {\r\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\r\n }\r\n }\r\n\r\n if (entry.currentIndex !== 0xffff) {\r\n let lookup = subsitutions.getItem(entry.currentIndex);\r\n let lookupTable = new AATLookupTable(lookup);\r\n glyph = this.glyphs[index];\r\n var gid = lookupTable.lookup(glyph.id);\r\n if (gid) {\r\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\r\n }\r\n }\r\n\r\n if (entry.flags & SET_MARK) {\r\n this.markedGlyph = index;\r\n }\r\n }\r\n\r\n processLigature(glyph, entry, index) {\r\n if (entry.flags & SET_COMPONENT) {\r\n this.ligatureStack.push(index);\r\n }\r\n\r\n if (entry.flags & PERFORM_ACTION) {\r\n let actions = this.subtable.table.ligatureActions;\r\n let components = this.subtable.table.components;\r\n let ligatureList = this.subtable.table.ligatureList;\r\n\r\n let actionIndex = entry.action;\r\n let last = false;\r\n let ligatureIndex = 0;\r\n let codePoints = [];\r\n let ligatureGlyphs = [];\r\n\r\n while (!last) {\r\n let componentGlyph = this.ligatureStack.pop();\r\n codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\r\n\r\n let action = actions.getItem(actionIndex++);\r\n last = !!(action & LAST_MASK);\r\n let store = !!(action & STORE_MASK);\r\n let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\r\n offset += this.glyphs[componentGlyph].id;\r\n\r\n let component = components.getItem(offset);\r\n ligatureIndex += component;\r\n\r\n if (last || store) {\r\n let ligatureEntry = ligatureList.getItem(ligatureIndex);\r\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\r\n ligatureGlyphs.push(componentGlyph);\r\n ligatureIndex = 0;\r\n codePoints = [];\r\n } else {\r\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\r\n }\r\n }\r\n\r\n // Put ligature glyph indexes back on the stack\r\n this.ligatureStack.push(...ligatureGlyphs);\r\n }\r\n }\r\n\r\n processNoncontextualSubstitutions(subtable, glyphs, index) {\r\n let lookupTable = new AATLookupTable(subtable.table.lookupTable);\r\n\r\n for (index = 0; index < glyphs.length; index++) {\r\n let glyph = glyphs[index];\r\n if (glyph.id !== 0xffff) {\r\n let gid = lookupTable.lookup(glyph.id);\r\n if (gid) { // 0 means do nothing\r\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\r\n let insertions = [];\r\n while (count--) {\r\n let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\r\n insertions.push(this.font.getGlyph(gid));\r\n }\r\n\r\n if (!isBefore) {\r\n glyphIndex++;\r\n }\r\n\r\n this.glyphs.splice(glyphIndex, 0, ...insertions);\r\n }\r\n\r\n processGlyphInsertion(glyph, entry, index) {\r\n if (entry.flags & SET_MARK) {\r\n this.markedIndex = index;\r\n }\r\n\r\n if (entry.markedInsertIndex !== 0xffff) {\r\n let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\r\n let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\r\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\r\n }\r\n\r\n if (entry.currentInsertIndex !== 0xffff) {\r\n let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\r\n let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\r\n this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\r\n }\r\n }\r\n\r\n getSupportedFeatures() {\r\n let features = [];\r\n for (let chain of this.morx.chains) {\r\n for (let feature of chain.features) {\r\n features.push([feature.featureType, feature.featureSetting]);\r\n }\r\n }\r\n\r\n return features;\r\n }\r\n\r\n generateInputs(gid) {\r\n if (!this.inputCache) {\r\n this.generateInputCache();\r\n }\r\n\r\n return this.inputCache[gid] || [];\r\n }\r\n\r\n generateInputCache() {\r\n this.inputCache = {};\r\n\r\n for (let chain of this.morx.chains) {\r\n let flags = chain.defaultFlags;\r\n\r\n for (let subtable of chain.subtables) {\r\n if (subtable.subFeatureFlags & flags) {\r\n this.generateInputsForSubtable(subtable);\r\n }\r\n }\r\n }\r\n }\r\n\r\n generateInputsForSubtable(subtable) {\r\n // Currently, only supporting ligature subtables.\r\n if (subtable.type !== 2) {\r\n return;\r\n }\r\n\r\n let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\r\n if (reverse) {\r\n throw new Error('Reverse subtable, not supported.');\r\n }\r\n\r\n this.subtable = subtable;\r\n this.ligatureStack = [];\r\n\r\n let stateMachine = this.getStateMachine(subtable);\r\n let process = this.getProcessor();\r\n\r\n let input = [];\r\n let stack = [];\r\n this.glyphs = [];\r\n\r\n stateMachine.traverse({\r\n enter: (glyph, entry) => {\r\n let glyphs = this.glyphs;\r\n stack.push({\r\n glyphs: glyphs.slice(),\r\n ligatureStack: this.ligatureStack.slice()\r\n });\r\n\r\n // Add glyph to input and glyphs to process.\r\n let g = this.font.getGlyph(glyph);\r\n input.push(g);\r\n glyphs.push(input[input.length - 1]);\r\n\r\n // Process ligature substitution\r\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\r\n\r\n // Add input to result if only one matching (non-deleted) glyph remains.\r\n let count = 0;\r\n let found = 0;\r\n for (let i = 0; i < glyphs.length && count <= 1; i++) {\r\n if (glyphs[i].id !== 0xffff) {\r\n count++;\r\n found = glyphs[i].id;\r\n }\r\n }\r\n\r\n if (count === 1) {\r\n let result = input.map(g => g.id);\r\n let cache = this.inputCache[found];\r\n if (cache) {\r\n cache.push(result);\r\n } else {\r\n this.inputCache[found] = [result];\r\n }\r\n }\r\n },\r\n\r\n exit: () => {\r\n ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\r\n input.pop();\r\n }\r\n });\r\n }\r\n}\r\n\r\n// swaps the glyphs in rangeA with those in rangeB\r\n// reverse the glyphs inside those ranges if specified\r\n// ranges are in [offset, length] format\r\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\r\n let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\r\n if (reverseB) {\r\n end.reverse();\r\n }\r\n\r\n let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\r\n if (reverseA) {\r\n start.reverse();\r\n }\r\n\r\n glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\r\n return glyphs;\r\n}\r\n\r\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\r\n let length = lastGlyph - firstGlyph + 1;\r\n switch (verb) {\r\n case 0: // no change\r\n return glyphs;\r\n\r\n case 1: // Ax => xA\r\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\r\n\r\n case 2: // xD => Dx\r\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\r\n\r\n case 3: // AxD => DxA\r\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\r\n\r\n case 4: // ABx => xAB\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\r\n\r\n case 5: // ABx => xBA\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\r\n\r\n case 6: // xCD => CDx\r\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\r\n\r\n case 7: // xCD => DCx\r\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\r\n\r\n case 8: // AxCD => CDxA\r\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\r\n\r\n case 9: // AxCD => DCxA\r\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\r\n\r\n case 10: // ABxD => DxAB\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\r\n\r\n case 11: // ABxD => DxBA\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\r\n\r\n case 12: // ABxCD => CDxAB\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\r\n\r\n case 13: // ABxCD => CDxBA\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\r\n\r\n case 14: // ABxCD => DCxAB\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\r\n\r\n case 15: // ABxCD => DCxBA\r\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\r\n\r\n default:\r\n throw new Error(`Unknown verb: ${verb}`);\r\n }\r\n}\r\n","import * as AATFeatureMap from './AATFeatureMap';\r\nimport * as Script from '../layout/Script';\r\nimport AATMorxProcessor from './AATMorxProcessor';\r\n\r\nexport default class AATLayoutEngine {\r\n constructor(font) {\r\n this.font = font;\r\n this.morxProcessor = new AATMorxProcessor(font);\r\n this.fallbackPosition = false;\r\n }\r\n\r\n substitute(glyphRun) {\r\n // AAT expects the glyphs to be in visual order prior to morx processing,\r\n // so reverse the glyphs if the script is right-to-left.\r\n if (glyphRun.direction === 'rtl') {\r\n glyphRun.glyphs.reverse();\r\n }\r\n\r\n this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\r\n }\r\n\r\n getAvailableFeatures(script, language) {\r\n return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\r\n }\r\n\r\n stringsForGlyph(gid) {\r\n let glyphStrings = this.morxProcessor.generateInputs(gid);\r\n let result = new Set;\r\n\r\n for (let glyphs of glyphStrings) {\r\n this._addStrings(glyphs, 0, result, '');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _addStrings(glyphs, index, strings, string) {\r\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\r\n\r\n for (let codePoint of codePoints) {\r\n let s = string + String.fromCodePoint(codePoint);\r\n if (index < glyphs.length - 1) {\r\n this._addStrings(glyphs, index + 1, strings, s);\r\n } else {\r\n strings.add(s);\r\n }\r\n }\r\n }\r\n}\r\n","import * as Script from '../layout/Script';\r\n\r\n/**\r\n * ShapingPlans are used by the OpenType shapers to store which\r\n * features should by applied, and in what order to apply them.\r\n * The features are applied in groups called stages. A feature\r\n * can be applied globally to all glyphs, or locally to only\r\n * specific glyphs.\r\n *\r\n * @private\r\n */\r\nexport default class ShapingPlan {\r\n constructor(font, script, direction) {\r\n this.font = font;\r\n this.script = script;\r\n this.direction = direction;\r\n this.stages = [];\r\n this.globalFeatures = {};\r\n this.allFeatures = {};\r\n }\r\n\r\n /**\r\n * Adds the given features to the last stage.\r\n * Ignores features that have already been applied.\r\n */\r\n _addFeatures(features, global) {\r\n let stageIndex = this.stages.length - 1;\r\n let stage = this.stages[stageIndex];\r\n for (let feature of features) {\r\n if (this.allFeatures[feature] == null) {\r\n stage.push(feature);\r\n this.allFeatures[feature] = stageIndex;\r\n\r\n if (global) {\r\n this.globalFeatures[feature] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add features to the last stage\r\n */\r\n add(arg, global = true) {\r\n if (this.stages.length === 0) {\r\n this.stages.push([]);\r\n }\r\n\r\n if (typeof arg === 'string') {\r\n arg = [arg];\r\n }\r\n\r\n if (Array.isArray(arg)) {\r\n this._addFeatures(arg, global);\r\n } else if (typeof arg === 'object') {\r\n this._addFeatures(arg.global || [], true);\r\n this._addFeatures(arg.local || [], false);\r\n } else {\r\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\r\n }\r\n }\r\n\r\n /**\r\n * Add a new stage\r\n */\r\n addStage(arg, global) {\r\n if (typeof arg === 'function') {\r\n this.stages.push(arg, []);\r\n } else {\r\n this.stages.push([]);\r\n this.add(arg, global);\r\n }\r\n }\r\n\r\n setFeatureOverrides(features) {\r\n if (Array.isArray(features)) {\r\n this.add(features);\r\n } else if (typeof features === 'object') {\r\n for (let tag in features) {\r\n if (features[tag]) {\r\n this.add(tag);\r\n } else if (this.allFeatures[tag] != null) {\r\n let stage = this.stages[this.allFeatures[tag]];\r\n stage.splice(stage.indexOf(tag), 1);\r\n delete this.allFeatures[tag];\r\n delete this.globalFeatures[tag];\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Assigns the global features to the given glyphs\r\n */\r\n assignGlobalFeatures(glyphs) {\r\n for (let glyph of glyphs) {\r\n for (let feature in this.globalFeatures) {\r\n glyph.features[feature] = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Executes the planned stages using the given OTProcessor\r\n */\r\n process(processor, glyphs, positions) {\r\n for (let stage of this.stages) {\r\n if (typeof stage === 'function') {\r\n if (!positions) {\r\n stage(this.font, glyphs, this);\r\n }\r\n\r\n } else if (stage.length > 0) {\r\n processor.applyFeatures(stage, glyphs, positions);\r\n }\r\n }\r\n }\r\n}\r\n","import unicode from 'unicode-properties';\r\n\r\nconst VARIATION_FEATURES = ['rvrn'];\r\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\r\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\r\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\r\nconst VERTICAL_FEATURES = ['vert'];\r\nconst DIRECTIONAL_FEATURES = {\r\n ltr: ['ltra', 'ltrm'],\r\n rtl: ['rtla', 'rtlm']\r\n};\r\n\r\nexport default class DefaultShaper {\r\n static zeroMarkWidths = 'AFTER_GPOS';\r\n static plan(plan, glyphs, features) {\r\n // Plan the features we want to apply\r\n this.planPreprocessing(plan);\r\n this.planFeatures(plan);\r\n this.planPostprocessing(plan, features);\r\n\r\n // Assign the global features to all the glyphs\r\n plan.assignGlobalFeatures(glyphs);\r\n\r\n // Assign local features to glyphs\r\n this.assignFeatures(plan, glyphs);\r\n }\r\n\r\n static planPreprocessing(plan) {\r\n plan.add({\r\n global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\r\n local: FRACTIONAL_FEATURES\r\n });\r\n }\r\n\r\n static planFeatures(plan) {\r\n // Do nothing by default. Let subclasses override this.\r\n }\r\n\r\n static planPostprocessing(plan, userFeatures) {\r\n plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\r\n plan.setFeatureOverrides(userFeatures);\r\n }\r\n\r\n static assignFeatures(plan, glyphs) {\r\n // Enable contextual fractions\r\n for (let i = 0; i < glyphs.length; i++) {\r\n let glyph = glyphs[i];\r\n if (glyph.codePoints[0] === 0x2044) { // fraction slash\r\n let start = i;\r\n let end = i + 1;\r\n\r\n // Apply numerator\r\n while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\r\n glyphs[start - 1].features.numr = true;\r\n glyphs[start - 1].features.frac = true;\r\n start--;\r\n }\r\n\r\n // Apply denominator\r\n while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\r\n glyphs[end].features.dnom = true;\r\n glyphs[end].features.frac = true;\r\n end++;\r\n }\r\n\r\n // Apply fraction slash\r\n glyph.features.frac = true;\r\n i = end - 1;\r\n }\r\n }\r\n }\r\n}\r\n","import DefaultShaper from './DefaultShaper';\r\nimport unicode from 'unicode-properties';\r\nimport UnicodeTrie from 'unicode-trie';\r\n\r\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/data.trie'));\r\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\r\n\r\nconst ShapingClasses = {\r\n Non_Joining: 0,\r\n Left_Joining: 1,\r\n Right_Joining: 2,\r\n Dual_Joining: 3,\r\n Join_Causing: 3,\r\n ALAPH: 4,\r\n 'DALATH RISH': 5,\r\n Transparent: 6\r\n};\r\n\r\nconst ISOL = 'isol';\r\nconst FINA = 'fina';\r\nconst FIN2 = 'fin2';\r\nconst FIN3 = 'fin3';\r\nconst MEDI = 'medi';\r\nconst MED2 = 'med2';\r\nconst INIT = 'init';\r\nconst NONE = null;\r\n\r\n// Each entry is [prevAction, curAction, nextState]\r\nconst STATE_TABLE = [\r\n // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\r\n // State 0: prev was U, not willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ],\r\n\r\n // State 1: prev was R or ISOL/ALAPH, not willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ],\r\n\r\n // State 2: prev was D/L in ISOL form, willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ],\r\n\r\n // State 3: prev was D in FINA form, willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ],\r\n\r\n // State 4: prev was FINA ALAPH, not willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ],\r\n\r\n // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ],\r\n\r\n // State 6: prev was DALATH/RISH, not willing to join.\r\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ]\r\n];\r\n\r\n/**\r\n * This is a shaper for Arabic, and other cursive scripts.\r\n * It uses data from ArabicShaping.txt in the Unicode database,\r\n * compiled to a UnicodeTrie by generate-data.coffee.\r\n *\r\n * The shaping state machine was ported from Harfbuzz.\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\r\n */\r\nexport default class ArabicShaper extends DefaultShaper {\r\n static planFeatures(plan) {\r\n plan.add(['ccmp', 'locl']);\r\n for (let i = 0; i < FEATURES.length; i++) {\r\n let feature = FEATURES[i];\r\n plan.addStage(feature, false);\r\n }\r\n\r\n plan.addStage('mset');\r\n }\r\n\r\n static assignFeatures(plan, glyphs) {\r\n super.assignFeatures(plan, glyphs);\r\n\r\n let prev = -1;\r\n let state = 0;\r\n let actions = [];\r\n\r\n // Apply the state machine to map glyphs to features\r\n for (let i = 0; i < glyphs.length; i++) {\r\n let curAction, prevAction;\r\n var glyph = glyphs[i];\r\n let type = getShapingClass(glyph.codePoints[0]);\r\n if (type === ShapingClasses.Transparent) {\r\n actions[i] = NONE;\r\n continue;\r\n }\r\n\r\n [prevAction, curAction, state] = STATE_TABLE[state][type];\r\n\r\n if (prevAction !== NONE && prev !== -1) {\r\n actions[prev] = prevAction;\r\n }\r\n\r\n actions[i] = curAction;\r\n prev = i;\r\n }\r\n\r\n // Apply the chosen features to their respective glyphs\r\n for (let index = 0; index < glyphs.length; index++) {\r\n let feature;\r\n var glyph = glyphs[index];\r\n if (feature = actions[index]) {\r\n glyph.features[feature] = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction getShapingClass(codePoint) {\r\n let res = trie.get(codePoint);\r\n if (res) {\r\n return res - 1;\r\n }\r\n\r\n let category = unicode.getCategory(codePoint);\r\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\r\n return ShapingClasses.Transparent;\r\n }\r\n\r\n return ShapingClasses.Non_Joining;\r\n}\r\n","export default class GlyphIterator {\r\n constructor(glyphs, options) {\r\n this.glyphs = glyphs;\r\n this.reset(options);\r\n }\r\n\r\n reset(options = {}, index = 0) {\r\n this.options = options;\r\n this.flags = options.flags || {};\r\n this.markAttachmentType = options.markAttachmentType || 0;\r\n this.index = index;\r\n }\r\n\r\n get cur() {\r\n return this.glyphs[this.index] || null;\r\n }\r\n\r\n shouldIgnore(glyph) {\r\n return (this.flags.ignoreMarks && glyph.isMark) ||\r\n (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\r\n (this.flags.ignoreLigatures && glyph.isLigature) ||\r\n (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\r\n }\r\n\r\n move(dir) {\r\n this.index += dir;\r\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\r\n this.index += dir;\r\n }\r\n\r\n if (0 > this.index || this.index >= this.glyphs.length) {\r\n return null;\r\n }\r\n\r\n return this.glyphs[this.index];\r\n }\r\n\r\n next() {\r\n return this.move(+1);\r\n }\r\n\r\n prev() {\r\n return this.move(-1);\r\n }\r\n\r\n peek(count = 1) {\r\n let idx = this.index;\r\n let res = this.increment(count);\r\n this.index = idx;\r\n return res;\r\n }\r\n\r\n peekIndex(count = 1) {\r\n let idx = this.index;\r\n this.increment(count);\r\n let res = this.index;\r\n this.index = idx;\r\n return res;\r\n }\r\n\r\n increment(count = 1) {\r\n let dir = count < 0 ? -1 : 1;\r\n count = Math.abs(count);\r\n while (count--) {\r\n this.move(dir);\r\n }\r\n\r\n return this.glyphs[this.index];\r\n }\r\n}\r\n","import GlyphIterator from './GlyphIterator';\r\nimport * as Script from '../layout/Script';\r\n\r\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\r\n\r\nexport default class OTProcessor {\r\n constructor(font, table) {\r\n this.font = font;\r\n this.table = table;\r\n\r\n this.script = null;\r\n this.scriptTag = null;\r\n\r\n this.language = null;\r\n this.languageTag = null;\r\n\r\n this.features = {};\r\n this.lookups = {};\r\n\r\n // Setup variation substitutions\r\n this.variationsIndex = font._variationProcessor\r\n ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\r\n : -1;\r\n\r\n // initialize to default script + language\r\n this.selectScript();\r\n\r\n // current context (set by applyFeatures)\r\n this.glyphs = [];\r\n this.positions = []; // only used by GPOS\r\n this.ligatureID = 1;\r\n this.currentFeature = null;\r\n }\r\n\r\n findScript(script) {\r\n if (this.table.scriptList == null) {\r\n return null;\r\n }\r\n\r\n if (!Array.isArray(script)) {\r\n script = [ script ];\r\n }\r\n\r\n for (let s of script) {\r\n for (let entry of this.table.scriptList) {\r\n if (entry.tag === s) {\r\n return entry;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n selectScript(script, language, direction) {\r\n let changed = false;\r\n let entry;\r\n if (!this.script || script !== this.scriptTag) {\r\n entry = this.findScript(script);\r\n if (!entry) {\r\n entry = this.findScript(DEFAULT_SCRIPTS);\r\n }\r\n\r\n if (!entry) {\r\n return this.scriptTag;\r\n }\r\n\r\n this.scriptTag = entry.tag;\r\n this.script = entry.script;\r\n this.language = null;\r\n this.languageTag = null;\r\n changed = true;\r\n }\r\n\r\n if (!direction || direction !== this.direction) {\r\n this.direction = direction || Script.direction(script);\r\n }\r\n\r\n if (language && language.length < 4) {\r\n language += ' '.repeat(4 - language.length);\r\n }\r\n\r\n if (!language || language !== this.languageTag) {\r\n this.language = null;\r\n\r\n for (let lang of this.script.langSysRecords) {\r\n if (lang.tag === language) {\r\n this.language = lang.langSys;\r\n this.languageTag = lang.tag;\r\n break;\r\n }\r\n }\r\n\r\n if (!this.language) {\r\n this.language = this.script.defaultLangSys;\r\n this.languageTag = null;\r\n }\r\n\r\n changed = true;\r\n }\r\n\r\n // Build a feature lookup table\r\n if (changed) {\r\n this.features = {};\r\n if (this.language) {\r\n for (let featureIndex of this.language.featureIndexes) {\r\n let record = this.table.featureList[featureIndex];\r\n let substituteFeature = this.substituteFeatureForVariations(featureIndex);\r\n this.features[record.tag] = substituteFeature || record.feature;\r\n }\r\n }\r\n }\r\n\r\n return this.scriptTag;\r\n }\r\n\r\n lookupsForFeatures(userFeatures = [], exclude) {\r\n let lookups = [];\r\n for (let tag of userFeatures) {\r\n let feature = this.features[tag];\r\n if (!feature) {\r\n continue;\r\n }\r\n\r\n for (let lookupIndex of feature.lookupListIndexes) {\r\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\r\n continue;\r\n }\r\n\r\n lookups.push({\r\n feature: tag,\r\n index: lookupIndex,\r\n lookup: this.table.lookupList.get(lookupIndex)\r\n });\r\n }\r\n }\r\n\r\n lookups.sort((a, b) => a.index - b.index);\r\n return lookups;\r\n }\r\n\r\n substituteFeatureForVariations(featureIndex) {\r\n if (this.variationsIndex === -1) {\r\n return null;\r\n }\r\n\r\n let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\r\n let substitutions = record.featureTableSubstitution.substitutions;\r\n for (let substitution of substitutions) {\r\n if (substitution.featureIndex === featureIndex) {\r\n return substitution.alternateFeatureTable;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n findVariationsIndex(coords) {\r\n let variations = this.table.featureVariations;\r\n if (!variations) {\r\n return -1;\r\n }\r\n\r\n let records = variations.featureVariationRecords;\r\n for (let i = 0; i < records.length; i++) {\r\n let conditions = records[i].conditionSet.conditionTable;\r\n if (this.variationConditionsMatch(conditions, coords)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n variationConditionsMatch(conditions, coords) {\r\n return conditions.every(condition => {\r\n let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\r\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\r\n });\r\n }\r\n\r\n applyFeatures(userFeatures, glyphs, advances) {\r\n let lookups = this.lookupsForFeatures(userFeatures);\r\n this.applyLookups(lookups, glyphs, advances);\r\n }\r\n\r\n applyLookups(lookups, glyphs, positions) {\r\n this.glyphs = glyphs;\r\n this.positions = positions;\r\n this.glyphIterator = new GlyphIterator(glyphs);\r\n\r\n for (let {feature, lookup} of lookups) {\r\n this.currentFeature = feature;\r\n this.glyphIterator.reset(lookup.flags);\r\n\r\n while (this.glyphIterator.index < glyphs.length) {\r\n if (!(feature in this.glyphIterator.cur.features)) {\r\n this.glyphIterator.next();\r\n continue;\r\n }\r\n\r\n for (let table of lookup.subTables) {\r\n let res = this.applyLookup(lookup.lookupType, table);\r\n if (res) {\r\n break;\r\n }\r\n }\r\n\r\n this.glyphIterator.next();\r\n }\r\n }\r\n }\r\n\r\n applyLookup(lookup, table) {\r\n throw new Error(\"applyLookup must be implemented by subclasses\");\r\n }\r\n\r\n applyLookupList(lookupRecords) {\r\n let options = this.glyphIterator.options;\r\n let glyphIndex = this.glyphIterator.index;\r\n\r\n for (let lookupRecord of lookupRecords) {\r\n // Reset flags and find glyph index for this lookup record\r\n this.glyphIterator.reset(options, glyphIndex);\r\n this.glyphIterator.increment(lookupRecord.sequenceIndex);\r\n\r\n // Get the lookup and setup flags for subtables\r\n let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\r\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\r\n\r\n // Apply lookup subtables until one matches\r\n for (let table of lookup.subTables) {\r\n if (this.applyLookup(lookup.lookupType, table)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.glyphIterator.reset(options, glyphIndex);\r\n return true;\r\n }\r\n\r\n coverageIndex(coverage, glyph) {\r\n if (glyph == null) {\r\n glyph = this.glyphIterator.cur.id;\r\n }\r\n\r\n switch (coverage.version) {\r\n case 1:\r\n return coverage.glyphs.indexOf(glyph);\r\n\r\n case 2:\r\n for (let range of coverage.rangeRecords) {\r\n if (range.start <= glyph && glyph <= range.end) {\r\n return range.startCoverageIndex + glyph - range.start;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n match(sequenceIndex, sequence, fn, matched) {\r\n let pos = this.glyphIterator.index;\r\n let glyph = this.glyphIterator.increment(sequenceIndex);\r\n let idx = 0;\r\n\r\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\r\n if (matched) {\r\n matched.push(this.glyphIterator.index);\r\n }\r\n\r\n idx++;\r\n glyph = this.glyphIterator.next();\r\n }\r\n\r\n this.glyphIterator.index = pos;\r\n if (idx < sequence.length) {\r\n return false;\r\n }\r\n\r\n return matched || true;\r\n }\r\n\r\n sequenceMatches(sequenceIndex, sequence) {\r\n return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\r\n }\r\n\r\n sequenceMatchIndices(sequenceIndex, sequence) {\r\n return this.match(sequenceIndex, sequence, (component, glyph) => {\r\n // If the current feature doesn't apply to this glyph,\r\n if (!(this.currentFeature in glyph.features)) {\r\n return false;\r\n }\r\n\r\n return component === glyph.id;\r\n }, []);\r\n }\r\n\r\n coverageSequenceMatches(sequenceIndex, sequence) {\r\n return this.match(sequenceIndex, sequence, (coverage, glyph) =>\r\n this.coverageIndex(coverage, glyph.id) >= 0\r\n );\r\n }\r\n\r\n getClassID(glyph, classDef) {\r\n switch (classDef.version) {\r\n case 1: // Class array\r\n let i = glyph - classDef.startGlyph;\r\n if (i >= 0 && i < classDef.classValueArray.length) {\r\n return classDef.classValueArray[i];\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n for (let range of classDef.classRangeRecord) {\r\n if (range.start <= glyph && glyph <= range.end) {\r\n return range.class;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n classSequenceMatches(sequenceIndex, sequence, classDef) {\r\n return this.match(sequenceIndex, sequence, (classID, glyph) =>\r\n classID === this.getClassID(glyph.id, classDef)\r\n );\r\n }\r\n\r\n applyContext(table) {\r\n switch (table.version) {\r\n case 1:\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n let set = table.ruleSets[index];\r\n for (let rule of set) {\r\n if (this.sequenceMatches(1, rule.input)) {\r\n return this.applyLookupList(rule.lookupRecords);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n if (this.coverageIndex(table.coverage) === -1) {\r\n return false;\r\n }\r\n\r\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n set = table.classSet[index];\r\n for (let rule of set) {\r\n if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\r\n return this.applyLookupList(rule.lookupRecords);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case 3:\r\n if (this.coverageSequenceMatches(0, table.coverages)) {\r\n return this.applyLookupList(table.lookupRecords);\r\n }\r\n\r\n break;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n applyChainingContext(table) {\r\n switch (table.version) {\r\n case 1:\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n let set = table.chainRuleSets[index];\r\n for (let rule of set) {\r\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\r\n && this.sequenceMatches(1, rule.input)\r\n && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\r\n return this.applyLookupList(rule.lookupRecords);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n if (this.coverageIndex(table.coverage) === -1) {\r\n return false;\r\n }\r\n\r\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\r\n let rules = table.chainClassSet[index];\r\n if (!rules) {\r\n return false;\r\n }\r\n\r\n for (let rule of rules) {\r\n if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\r\n this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\r\n this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\r\n return this.applyLookupList(rule.lookupRecords);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case 3:\r\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\r\n this.coverageSequenceMatches(0, table.inputCoverage) &&\r\n this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\r\n return this.applyLookupList(table.lookupRecords);\r\n }\r\n\r\n break;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import unicode from 'unicode-properties';\r\nimport OTProcessor from './OTProcessor';\r\n\r\nexport default class GlyphInfo {\r\n constructor(font, id, codePoints = [], features) {\r\n this._font = font;\r\n this.codePoints = codePoints;\r\n this.id = id;\r\n\r\n this.features = {};\r\n if (Array.isArray(features)) {\r\n for (let i = 0; i < features.length; i++) {\r\n let feature = features[i];\r\n this.features[feature] = true;\r\n }\r\n } else if (typeof features === 'object') {\r\n Object.assign(this.features, features);\r\n }\r\n\r\n this.ligatureID = null;\r\n this.ligatureComponent = null;\r\n this.isLigated = false;\r\n this.cursiveAttachment = null;\r\n this.markAttachment = null;\r\n this.shaperInfo = null;\r\n this.substituted = false;\r\n this.isMultiplied = false;\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n set id(id) {\r\n this._id = id;\r\n this.substituted = true;\r\n\r\n let GDEF = this._font.GDEF;\r\n if (GDEF && GDEF.glyphClassDef) {\r\n // TODO: clean this up\r\n let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\r\n this.isBase = classID === 1;\r\n this.isLigature = classID === 2;\r\n this.isMark = classID === 3;\r\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\r\n } else {\r\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\r\n this.isBase = !this.isMark;\r\n this.isLigature = this.codePoints.length > 1;\r\n this.markAttachmentType = 0;\r\n }\r\n }\r\n\r\n copy() {\r\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\r\n }\r\n}\r\n","import DefaultShaper from './DefaultShaper';\r\nimport GlyphInfo from '../GlyphInfo';\r\n\r\n/**\r\n * This is a shaper for the Hangul script, used by the Korean language.\r\n * It does the following:\r\n * - decompose if unsupported by the font:\r\n * <LV> -> <L,V>\r\n * <LVT> -> <L,V,T>\r\n * <LV,T> -> <L,V,T>\r\n *\r\n * - compose if supported by the font:\r\n * <L,V> -> <LV>\r\n * <L,V,T> -> <LVT>\r\n * <LV,T> -> <LVT>\r\n *\r\n * - reorder tone marks (S is any valid syllable):\r\n * <S, M> -> <M, S>\r\n *\r\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\r\n *\r\n * This logic is based on the following documents:\r\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\r\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\r\n */\r\nexport default class HangulShaper extends DefaultShaper {\r\n static zeroMarkWidths = 'NONE';\r\n static planFeatures(plan) {\r\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\r\n }\r\n\r\n static assignFeatures(plan, glyphs) {\r\n let state = 0;\r\n let i = 0;\r\n while (i < glyphs.length) {\r\n let action;\r\n let glyph = glyphs[i];\r\n let code = glyph.codePoints[0];\r\n let type = getType(code);\r\n\r\n [ action, state ] = STATE_TABLE[state][type];\r\n\r\n switch (action) {\r\n case DECOMPOSE:\r\n // Decompose the composed syllable if it is not supported by the font.\r\n if (!plan.font.hasGlyphForCodePoint(code)) {\r\n i = decompose(glyphs, i, plan.font);\r\n }\r\n break;\r\n\r\n case COMPOSE:\r\n // Found a decomposed syllable. Try to compose if supported by the font.\r\n i = compose(glyphs, i, plan.font);\r\n break;\r\n\r\n case TONE_MARK:\r\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\r\n reorderToneMark(glyphs, i, plan.font);\r\n break;\r\n\r\n case INVALID:\r\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\r\n i = insertDottedCircle(glyphs, i, plan.font);\r\n break;\r\n }\r\n\r\n i++;\r\n }\r\n }\r\n}\r\n\r\nconst HANGUL_BASE = 0xac00;\r\nconst HANGUL_END = 0xd7a4;\r\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\r\nconst L_BASE = 0x1100; // lead\r\nconst V_BASE = 0x1161; // vowel\r\nconst T_BASE = 0x11a7; // trail\r\nconst L_COUNT = 19;\r\nconst V_COUNT = 21;\r\nconst T_COUNT = 28;\r\nconst L_END = L_BASE + L_COUNT - 1;\r\nconst V_END = V_BASE + V_COUNT - 1;\r\nconst T_END = T_BASE + T_COUNT - 1;\r\nconst DOTTED_CIRCLE = 0x25cc;\r\n\r\nconst isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\r\nconst isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\r\nconst isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\r\nconst isTone = code => 0x302e <= code && code <= 0x302f;\r\nconst isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;\r\nconst isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\r\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\r\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\r\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\r\n\r\n// Character categories\r\nconst X = 0; // Other character\r\nconst L = 1; // Leading consonant\r\nconst V = 2; // Medial vowel\r\nconst T = 3; // Trailing consonant\r\nconst LV = 4; // Composed <LV> syllable\r\nconst LVT = 5; // Composed <LVT> syllable\r\nconst M = 6; // Tone mark\r\n\r\n// This function classifies a character using the above categories.\r\nfunction getType(code) {\r\n if (isL(code)) { return L; }\r\n if (isV(code)) { return V; }\r\n if (isT(code)) { return T; }\r\n if (isLV(code)) { return LV; }\r\n if (isLVT(code)) { return LVT; }\r\n if (isTone(code)) { return M; }\r\n return X;\r\n}\r\n\r\n// State machine actions\r\nconst NO_ACTION = 0;\r\nconst DECOMPOSE = 1;\r\nconst COMPOSE = 2;\r\nconst TONE_MARK = 4;\r\nconst INVALID = 5;\r\n\r\n// Build a state machine that accepts valid syllables, and applies actions along the way.\r\n// The logic this is implementing is documented at the top of the file.\r\nconst STATE_TABLE = [\r\n // X L V T LV LVT M\r\n // State 0: start state\r\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\r\n\r\n // State 1: <L>\r\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\r\n\r\n // State 2: <L,V> or <LV>\r\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\r\n\r\n // State 3: <L,V,T> or <LVT>\r\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\r\n];\r\n\r\nfunction getGlyph(font, code, features) {\r\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\r\n}\r\n\r\nfunction decompose(glyphs, i, font) {\r\n let glyph = glyphs[i];\r\n let code = glyph.codePoints[0];\r\n\r\n let s = code - HANGUL_BASE;\r\n let t = T_BASE + s % T_COUNT;\r\n s = s / T_COUNT | 0;\r\n let l = L_BASE + s / V_COUNT | 0;\r\n let v = V_BASE + s % V_COUNT;\r\n\r\n // Don't decompose if all of the components are not available\r\n if (!font.hasGlyphForCodePoint(l) ||\r\n !font.hasGlyphForCodePoint(v) ||\r\n (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\r\n return i;\r\n }\r\n\r\n // Replace the current glyph with decomposed L, V, and T glyphs,\r\n // and apply the proper OpenType features to each component.\r\n let ljmo = getGlyph(font, l, glyph.features);\r\n ljmo.features.ljmo = true;\r\n\r\n let vjmo = getGlyph(font, v, glyph.features);\r\n vjmo.features.vjmo = true;\r\n\r\n let insert = [ ljmo, vjmo ];\r\n\r\n if (t > T_BASE) {\r\n let tjmo = getGlyph(font, t, glyph.features);\r\n tjmo.features.tjmo = true;\r\n insert.push(tjmo);\r\n }\r\n\r\n glyphs.splice(i, 1, ...insert);\r\n return i + insert.length - 1;\r\n}\r\n\r\nfunction compose(glyphs, i, font) {\r\n let glyph = glyphs[i];\r\n let code = glyphs[i].codePoints[0];\r\n let type = getType(code);\r\n\r\n let prev = glyphs[i - 1].codePoints[0];\r\n let prevType = getType(prev);\r\n\r\n // Figure out what type of syllable we're dealing with\r\n let lv, ljmo, vjmo, tjmo;\r\n if (prevType === LV && type === T) {\r\n // <LV,T>\r\n lv = prev;\r\n tjmo = glyph;\r\n } else {\r\n if (type === V) {\r\n // <L,V>\r\n ljmo = glyphs[i - 1];\r\n vjmo = glyph;\r\n } else {\r\n // <L,V,T>\r\n ljmo = glyphs[i - 2];\r\n vjmo = glyphs[i - 1];\r\n tjmo = glyph;\r\n }\r\n\r\n let l = ljmo.codePoints[0];\r\n let v = vjmo.codePoints[0];\r\n\r\n // Make sure L and V are combining characters\r\n if (isCombiningL(l) && isCombiningV(v)) {\r\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\r\n }\r\n }\r\n\r\n let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\r\n if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\r\n let s = lv + (t - T_BASE);\r\n\r\n // Replace with a composed glyph if supported by the font,\r\n // otherwise apply the proper OpenType features to each component.\r\n if (font.hasGlyphForCodePoint(s)) {\r\n let del = prevType === V ? 3 : 2;\r\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\r\n return i - del + 1;\r\n }\r\n }\r\n\r\n // Didn't compose (either a non-combining component or unsupported by font).\r\n if (ljmo) { ljmo.features.ljmo = true; }\r\n if (vjmo) { vjmo.features.vjmo = true; }\r\n if (tjmo) { tjmo.features.tjmo = true; }\r\n\r\n if (prevType === LV) {\r\n // Sequence was originally <L,V>, which got combined earlier.\r\n // Either the T was non-combining, or the LVT glyph wasn't supported.\r\n // Decompose the glyph again and apply OT features.\r\n decompose(glyphs, i - 1, font);\r\n return i + 1;\r\n }\r\n\r\n return i;\r\n}\r\n\r\nfunction getLength(code) {\r\n switch (getType(code)) {\r\n case LV:\r\n case LVT:\r\n return 1;\r\n case V:\r\n return 2;\r\n case T:\r\n return 3;\r\n }\r\n}\r\n\r\nfunction reorderToneMark(glyphs, i, font) {\r\n let glyph = glyphs[i];\r\n let code = glyphs[i].codePoints[0];\r\n\r\n // Move tone mark to the beginning of the previous syllable, unless it is zero width\r\n if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\r\n\r\n let prev = glyphs[i - 1].codePoints[0];\r\n let len = getLength(prev);\r\n\r\n glyphs.splice(i, 1);\r\n return glyphs.splice(i - len, 0, glyph);\r\n}\r\n\r\nfunction insertDottedCircle(glyphs, i, font) {\r\n let glyph = glyphs[i];\r\n let code = glyphs[i].codePoints[0];\r\n\r\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\r\n let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\r\n\r\n // If the tone mark is zero width, insert the dotted circle before, otherwise after\r\n let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\r\n glyphs.splice(idx, 0, dottedCircle);\r\n i++;\r\n }\r\n\r\n return i;\r\n}\r\n","// Cateories used in the OpenType spec:\r\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\r\nexport const CATEGORIES = {\r\n X: 1 << 0,\r\n C: 1 << 1,\r\n V: 1 << 2,\r\n N: 1 << 3,\r\n H: 1 << 4,\r\n ZWNJ: 1 << 5,\r\n ZWJ: 1 << 6,\r\n M: 1 << 7,\r\n SM: 1 << 8,\r\n VD: 1 << 9,\r\n A: 1 << 10,\r\n Placeholder: 1 << 11,\r\n Dotted_Circle: 1 << 12,\r\n RS: 1 << 13, // Register Shifter, used in Khmer OT spec.\r\n Coeng: 1 << 14, // Khmer-style Virama.\r\n Repha: 1 << 15, // Atomically-encoded logical or visual repha.\r\n Ra: 1 << 16,\r\n CM: 1 << 17, // Consonant-Medial.\r\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\r\n};\r\n\r\n// Visual positions in a syllable from left to right.\r\nexport const POSITIONS = {\r\n Start: 1 << 0,\r\n\r\n Ra_To_Become_Reph: 1 << 1,\r\n Pre_M: 1 << 2,\r\n Pre_C: 1 << 3,\r\n\r\n Base_C: 1 << 4,\r\n After_Main: 1 << 5,\r\n\r\n Above_C: 1 << 6,\r\n\r\n Before_Sub: 1 << 7,\r\n Below_C: 1 << 8,\r\n After_Sub: 1 << 9,\r\n\r\n Before_Post: 1 << 10,\r\n Post_C: 1 << 11,\r\n After_Post: 1 << 12,\r\n\r\n Final_C: 1 << 13,\r\n SMVD: 1 << 14,\r\n\r\n End: 1 << 15\r\n};\r\n\r\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\r\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\r\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\r\n\r\nexport const INDIC_CONFIGS = {\r\n Default: {\r\n hasOldSpec: false,\r\n virama: 0,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.Before_Post,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Devanagari: {\r\n hasOldSpec: true,\r\n virama: 0x094D,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.Before_Post,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Bengali: {\r\n hasOldSpec: true,\r\n virama: 0x09CD,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Sub,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Gurmukhi: {\r\n hasOldSpec: true,\r\n virama: 0x0A4D,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.Before_Sub,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Gujarati: {\r\n hasOldSpec: true,\r\n virama: 0x0ACD,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.Before_Post,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Oriya: {\r\n hasOldSpec: true,\r\n virama: 0x0B4D,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Main,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Tamil: {\r\n hasOldSpec: true,\r\n virama: 0x0BCD,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Post,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n Telugu: {\r\n hasOldSpec: true,\r\n virama: 0x0C4D,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Post,\r\n rephMode: 'Explicit',\r\n blwfMode: 'Post_Only'\r\n },\r\n\r\n Kannada: {\r\n hasOldSpec: true,\r\n virama: 0x0CCD,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Post,\r\n rephMode: 'Implicit',\r\n blwfMode: 'Post_Only'\r\n },\r\n\r\n Malayalam: {\r\n hasOldSpec: true,\r\n virama: 0x0D4D,\r\n basePos: 'Last',\r\n rephPos: POSITIONS.After_Main,\r\n rephMode: 'Log_Repha',\r\n blwfMode: 'Pre_And_Post'\r\n },\r\n\r\n // Handled by UniversalShaper\r\n // Sinhala: {\r\n // hasOldSpec: false,\r\n // virama: 0x0DCA,\r\n // basePos: 'Last_Sinhala',\r\n // rephPos: POSITIONS.After_Main,\r\n // rephMode: 'Explicit',\r\n // blwfMode: 'Pre_And_Post'\r\n // },\r\n\r\n Khmer: {\r\n hasOldSpec: false,\r\n virama: 0x17D2,\r\n basePos: 'First',\r\n rephPos: POSITIONS.Ra_To_Become_Reph,\r\n rephMode: 'Vis_Repha',\r\n blwfMode: 'Pre_And_Post'\r\n }\r\n};\r\n\r\n// Additional decompositions that aren't in Unicode\r\nexport const INDIC_DECOMPOSITIONS = {\r\n // Khmer\r\n 0x17BE: [0x17C1, 0x17BE],\r\n 0x17BF: [0x17C1, 0x17BF],\r\n 0x17C0: [0x17C1, 0x17C0],\r\n 0x17C4: [0x17C1, 0x17C4],\r\n 0x17C5: [0x17C1, 0x17C5]\r\n};\r\n","import DefaultShaper from './DefaultShaper';\r\nimport StateMachine from 'dfa';\r\nimport UnicodeTrie from 'unicode-trie';\r\nimport unicode from 'unicode-properties';\r\nimport * as Script from '../../layout/Script';\r\nimport GlyphInfo from '../GlyphInfo';\r\nimport indicMachine from './indic.json';\r\nimport useData from './use.json';\r\nimport {\r\n CATEGORIES,\r\n POSITIONS,\r\n CONSONANT_FLAGS,\r\n JOINER_FLAGS,\r\n HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\r\n INDIC_DECOMPOSITIONS\r\n} from './indic-data';\r\n\r\nconst {decompositions} = useData;\r\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/indic.trie'));\r\nconst stateMachine = new StateMachine(indicMachine);\r\n\r\n/**\r\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\r\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\r\n */\r\nexport default class IndicShaper extends DefaultShaper {\r\n static zeroMarkWidths = 'NONE';\r\n static planFeatures(plan) {\r\n plan.addStage(setupSyllables);\r\n\r\n plan.addStage(['locl', 'ccmp']);\r\n\r\n plan.addStage(initialReordering);\r\n\r\n plan.addStage('nukt');\r\n plan.addStage('akhn');\r\n plan.addStage('rphf', false);\r\n plan.addStage('rkrf');\r\n plan.addStage('pref', false);\r\n plan.addStage('blwf', false);\r\n plan.addStage('abvf', false);\r\n plan.addStage('half', false);\r\n plan.addStage('pstf', false);\r\n plan.addStage('vatu');\r\n plan.addStage('cjct');\r\n plan.addStage('cfar', false);\r\n\r\n plan.addStage(finalReordering);\r\n\r\n plan.addStage({\r\n local: ['init'],\r\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\r\n });\r\n\r\n // Setup the indic config for the selected script\r\n plan.unicodeScript = Script.fromOpenType(plan.script);\r\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\r\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\r\n\r\n // TODO: turn off kern (Khmer) and liga features.\r\n }\r\n\r\n static assignFeatures(plan, glyphs) {\r\n // Decompose split matras\r\n // TODO: do this in a more general unicode normalizer\r\n for (let i = glyphs.length - 1; i >= 0; i--) {\r\n let codepoint = glyphs[i].codePoints[0];\r\n let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\r\n if (d) {\r\n let decomposed = d.map(c => {\r\n let g = plan.font.glyphForCodePoint(c);\r\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\r\n });\r\n\r\n glyphs.splice(i, 1, ...decomposed);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction indicCategory(glyph) {\r\n return trie.get(glyph.codePoints[0]) >> 8;\r\n}\r\n\r\nfunction indicPosition(glyph) {\r\n return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\r\n}\r\n\r\nclass IndicInfo {\r\n constructor(category, position, syllableType, syllable) {\r\n this.category = category;\r\n this.position = position;\r\n this.syllableType = syllableType;\r\n this.syllable = syllable;\r\n }\r\n}\r\n\r\nfunction setupSyllables(font, glyphs) {\r\n let syllable = 0;\r\n let last = 0;\r\n for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\r\n if (start > last) {\r\n ++syllable;\r\n for (let i = last; i < start; i++) {\r\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\r\n }\r\n }\r\n\r\n ++syllable;\r\n\r\n // Create shaper info\r\n for (let i = start; i <= end; i++) {\r\n glyphs[i].shaperInfo = new IndicInfo(\r\n 1 << indicCategory(glyphs[i]),\r\n indicPosition(glyphs[i]),\r\n tags[0],\r\n syllable\r\n );\r\n }\r\n\r\n last = end + 1;\r\n }\r\n\r\n if (last < glyphs.length) {\r\n ++syllable;\r\n for (let i = last; i < glyphs.length; i++) {\r\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\r\n }\r\n }\r\n}\r\n\r\nfunction isConsonant(glyph) {\r\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\r\n}\r\n\r\nfunction isJoiner(glyph) {\r\n return glyph.shaperInfo.category & JOINER_FLAGS;\r\n}\r\n\r\nfunction isHalantOrCoeng(glyph) {\r\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\r\n}\r\n\r\nfunction wouldSubstitute(glyphs, feature) {\r\n for (let glyph of glyphs) {\r\n glyph.features = {[feature]: true};\r\n }\r\n\r\n let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\r\n GSUB.applyFeatures([feature], glyphs);\r\n\r\n return glyphs.length === 1;\r\n}\r\n\r\nfunction consonantPosition(font, consonant, virama) {\r\n let glyphs = [virama, consonant, virama];\r\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\r\n return POSITIONS.Below_C;\r\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\r\n return POSITIONS.Post_C;\r\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\r\n return POSITIONS.Post_C;\r\n }\r\n\r\n return POSITIONS.Base_C;\r\n}\r\n\r\nfunction initialReordering(font, glyphs, plan) {\r\n let indicConfig = plan.indicConfig;\r\n let features = font._layoutEngine.engine.GSUBProcessor.features;\r\n\r\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\r\n let virama = font.glyphForCodePoint(indicConfig.virama).id;\r\n if (virama) {\r\n let info = new GlyphInfo(font, virama, [indicConfig.virama]);\r\n for (let i = 0; i < glyphs.length; i++) {\r\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\r\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\r\n }\r\n }\r\n }\r\n\r\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\r\n let {category, syllableType} = glyphs[start].shaperInfo;\r\n\r\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\r\n continue;\r\n }\r\n\r\n if (syllableType === 'broken_cluster' && dottedCircle) {\r\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\r\n g.shaperInfo = new IndicInfo(\r\n 1 << indicCategory(g),\r\n indicPosition(g),\r\n glyphs[start].shaperInfo.syllableType,\r\n glyphs[start].shaperInfo.syllable\r\n );\r\n\r\n // Insert after possible Repha.\r\n let i = start;\r\n while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\r\n i++;\r\n }\r\n\r\n glyphs.splice(i++, 0, g);\r\n end++;\r\n }\r\n\r\n // 1. Find base consonant:\r\n //\r\n // The shaping engine finds the base consonant of the syllable, using the\r\n // following algorithm: starting from the end of the syllable, move backwards\r\n // until a consonant is found that does not have a below-base or post-base\r\n // form (post-base forms have to follow below-base forms), or that is not a\r\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\r\n // stopped at will be the base.\r\n\r\n let base = end;\r\n let limit = start;\r\n let hasReph = false;\r\n\r\n // If the syllable starts with Ra + Halant (in a script that has Reph)\r\n // and has more than one consonant, Ra is excluded from candidates for\r\n // base consonants.\r\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\r\n features.rphf &&\r\n start + 3 <= end && (\r\n (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\r\n (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\r\n )\r\n ) {\r\n // See if it matches the 'rphf' feature.\r\n let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\r\n if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\r\n limit += 2;\r\n while (limit < end && isJoiner(glyphs[limit])) {\r\n limit++;\r\n }\r\n base = start;\r\n hasReph = true;\r\n }\r\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\r\n limit++;\r\n while (limit < end && isJoiner(glyphs[limit])) {\r\n limit++;\r\n }\r\n base = start;\r\n hasReph = true;\r\n }\r\n\r\n switch (indicConfig.basePos) {\r\n case 'Last': {\r\n // starting from the end of the syllable, move backwards\r\n let i = end;\r\n let seenBelow = false;\r\n\r\n do {\r\n let info = glyphs[--i].shaperInfo;\r\n\r\n // until a consonant is found\r\n if (isConsonant(glyphs[i])) {\r\n // that does not have a below-base or post-base form\r\n // (post-base forms have to follow below-base forms),\r\n if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\r\n base = i;\r\n break;\r\n }\r\n\r\n // or that is not a pre-base reordering Ra,\r\n //\r\n // IMPLEMENTATION NOTES:\r\n //\r\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\r\n // by the logic above already.\r\n //\r\n\r\n // or arrive at the first consonant. The consonant stopped at will\r\n // be the base.\r\n if (info.position === POSITIONS.Below_C) {\r\n seenBelow = true;\r\n }\r\n\r\n base = i;\r\n } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\r\n // A ZWJ after a Halant stops the base search, and requests an explicit\r\n // half form.\r\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\r\n // search continues. This is particularly important for Bengali\r\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\r\n break;\r\n }\r\n } while (i > limit);\r\n break;\r\n }\r\n\r\n case 'First': {\r\n // The first consonant is always the base.\r\n base = start;\r\n\r\n // Mark all subsequent consonants as below.\r\n for (let i = base + 1; i < end; i++) {\r\n if (isConsonant(glyphs[i])) {\r\n glyphs[i].shaperInfo.position = POSITIONS.Below_C;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If the syllable starts with Ra + Halant (in a script that has Reph)\r\n // and has more than one consonant, Ra is excluded from candidates for\r\n // base consonants.\r\n //\r\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\r\n if (hasReph && base === start && limit - base <= 2) {\r\n hasReph = false;\r\n }\r\n\r\n // 2. Decompose and reorder Matras:\r\n //\r\n // Each matra and any syllable modifier sign in the cluster are moved to the\r\n // appropriate position relative to the consonant(s) in the cluster. The\r\n // shaping engine decomposes two- or three-part matras into their constituent\r\n // parts before any repositioning. Matra characters are classified by which\r\n // consonant in a conjunct they have affinity for and are reordered to the\r\n // following positions:\r\n //\r\n // o Before first half form in the syllable\r\n // o After subjoined consonants\r\n // o After post-form consonant\r\n // o After main consonant (for above marks)\r\n //\r\n // IMPLEMENTATION NOTES:\r\n //\r\n // The normalize() routine has already decomposed matras for us, so we don't\r\n // need to worry about that.\r\n\r\n // 3. Reorder marks to canonical order:\r\n //\r\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\r\n // if necessary, so that the nukta is first.\r\n //\r\n // IMPLEMENTATION NOTES:\r\n //\r\n // We don't need to do this: the normalize() routine already did this for us.\r\n\r\n // Reorder characters\r\n\r\n for (let i = start; i < base; i++) {\r\n let info = glyphs[i].shaperInfo;\r\n info.position = Math.min(POSITIONS.Pre_C, info.position);\r\n }\r\n\r\n if (base < end) {\r\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\r\n }\r\n\r\n // Mark final consonants. A final consonant is one appearing after a matra,\r\n // like in Khmer.\r\n for (let i = base + 1; i < end; i++) {\r\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\r\n for (let j = i + 1; j < end; j++) {\r\n if (isConsonant(glyphs[j])) {\r\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Handle beginning Ra\r\n if (hasReph) {\r\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\r\n }\r\n\r\n // For old-style Indic script tags, move the first post-base Halant after\r\n // last consonant.\r\n //\r\n // Reports suggest that in some scripts Uniscribe does this only if there\r\n // is *not* a Halant after last consonant already (eg. Kannada), while it\r\n // does it unconditionally in other scripts (eg. Malayalam). We don't\r\n // currently know about other scripts, so we single out Malayalam for now.\r\n //\r\n // Kannada test case:\r\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\r\n // With some versions of Lohit Kannada.\r\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\r\n //\r\n // Malayalam test case:\r\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\r\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\r\n if (plan.isOldSpec) {\r\n let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\r\n for (let i = base + 1; i < end; i++) {\r\n if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\r\n let j;\r\n for (j = end - 1; j > i; j--) {\r\n if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\r\n break;\r\n }\r\n }\r\n\r\n if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\r\n // Move Halant to after last consonant.\r\n let t = glyphs[i];\r\n glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\r\n glyphs[j] = t;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Attach misc marks to previous char to move with them.\r\n let lastPos = POSITIONS.Start;\r\n for (let i = start; i < end; i++) {\r\n let info = glyphs[i].shaperInfo;\r\n if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\r\n info.position = lastPos;\r\n if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\r\n // Uniscribe doesn't move the Halant with Left Matra.\r\n // TEST: U+092B,U+093F,U+094DE\r\n // We follow. This is important for the Sinhala\r\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\r\n // where U+0DD9 is a left matra and U+0DCA is the virama.\r\n // We don't want to move the virama with the left matra.\r\n // TEST: U+0D9A,U+0DDA\r\n for (let j = i; j > start; j--) {\r\n if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\r\n info.position = glyphs[j - 1].shaperInfo.position;\r\n break;\r\n }\r\n }\r\n }\r\n } else if (info.position !== POSITIONS.SMVD) {\r\n lastPos = info.position;\r\n }\r\n }\r\n\r\n // For post-base consonants let them own anything before them\r\n // since the last consonant or matra.\r\n let last = base;\r\n for (let i = base + 1; i < end; i++) {\r\n if (isConsonant(glyphs[i])) {\r\n for (let j = last + 1; j < i; j++) {\r\n if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\r\n glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\r\n }\r\n }\r\n last = i;\r\n } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\r\n last = i;\r\n }\r\n }\r\n\r\n let arr = glyphs.slice(start, end);\r\n arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\r\n glyphs.splice(start, arr.length, ...arr);\r\n\r\n // Find base again\r\n for (let i = start; i < end; i++) {\r\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\r\n base = i;\r\n break;\r\n }\r\n }\r\n\r\n // Setup features now\r\n\r\n // Reph\r\n for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\r\n glyphs[i].features.rphf = true;\r\n }\r\n\r\n // Pre-base\r\n let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\r\n for (let i = start; i < base; i++) {\r\n glyphs[i].features.half = true;\r\n if (blwf) {\r\n glyphs[i].features.blwf = true;\r\n }\r\n }\r\n\r\n // Post-base\r\n for (let i = base + 1; i < end; i++) {\r\n glyphs[i].features.abvf = true;\r\n glyphs[i].features.pstf = true;\r\n glyphs[i].features.blwf = true;\r\n }\r\n\r\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\r\n // Old-spec eye-lash Ra needs special handling. From the\r\n // spec:\r\n //\r\n // \"The feature 'below-base form' is applied to consonants\r\n // having below-base forms and following the base consonant.\r\n // The exception is vattu, which may appear below half forms\r\n // as well as below the base glyph. The feature 'below-base\r\n // form' will be applied to all such occurrences of Ra as well.\"\r\n //\r\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\r\n // with Sanskrit 2003 font.\r\n //\r\n // However, note that Ra,Halant,ZWJ is the correct way to\r\n // request eyelash form of Ra, so we wouldbn't inhibit it\r\n // in that sequence.\r\n //\r\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\r\n for (let i = start; i + 1 < base; i++) {\r\n if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\r\n glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\r\n (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\r\n ) {\r\n glyphs[i].features.blwf = true;\r\n glyphs[i + 1].features.blwf = true;\r\n }\r\n }\r\n }\r\n\r\n let prefLen = 2;\r\n if (features.pref && base + prefLen < end) {\r\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\r\n for (let i = base + 1; i + prefLen - 1 < end; i++) {\r\n let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\r\n if (wouldSubstitute(g, 'pref')) {\r\n for (let j = 0; j < prefLen; j++) {\r\n glyphs[i++].features.pref = true;\r\n }\r\n\r\n // Mark the subsequent stuff with 'cfar'. Used in Khmer.\r\n // Read the feature spec.\r\n // This allows distinguishing the following cases with MS Khmer fonts:\r\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\r\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\r\n if (features.cfar) {\r\n for (; i < end; i++) {\r\n glyphs[i].features.cfar = true;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Apply ZWJ/ZWNJ effects\r\n for (let i = start + 1; i < end; i++) {\r\n if (isJoiner(glyphs[i])) {\r\n let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\r\n let j = i;\r\n\r\n do {\r\n j--;\r\n\r\n // ZWJ/ZWNJ should disable CJCT. They do that by simply\r\n // being there, since we don't skip them for the CJCT\r\n // feature (ie. F_MANUAL_ZWJ)\r\n\r\n // A ZWNJ disables HALF.\r\n if (nonJoiner) {\r\n delete glyphs[j].features.half;\r\n }\r\n } while (j > start && !isConsonant(glyphs[j]));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction finalReordering(font, glyphs, plan) {\r\n let indicConfig = plan.indicConfig;\r\n let features = font._layoutEngine.engine.GSUBProcessor.features;\r\n\r\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\r\n // 4. Final reordering:\r\n //\r\n // After the localized forms and basic shaping forms GSUB features have been\r\n // applied (see below), the shaping engine performs some final glyph\r\n // reordering before applying all the remaining font features to the entire\r\n // cluster.\r\n\r\n let tryPref = !!features.pref;\r\n\r\n // Find base again\r\n let base = start;\r\n for (; base < end; base++) {\r\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\r\n if (tryPref && base + 1 < end) {\r\n for (let i = base + 1; i < end; i++) {\r\n if (glyphs[i].features.pref) {\r\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\r\n // Ok, this was a 'pref' candidate but didn't form any.\r\n // Base is around here...\r\n base = i;\r\n while (base < end && isHalantOrCoeng(glyphs[base])) {\r\n base++;\r\n }\r\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\r\n tryPref = false;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // For Malayalam, skip over unformed below- (but NOT post-) forms.\r\n if (plan.unicodeScript === 'Malayalam') {\r\n for (let i = base + 1; i < end; i++) {\r\n while (i < end && isJoiner(glyphs[i])) {\r\n i++;\r\n }\r\n\r\n if (i === end || !isHalantOrCoeng(glyphs[i])) {\r\n break;\r\n }\r\n\r\n i++; // Skip halant.\r\n while (i < end && isJoiner(glyphs[i])) {\r\n i++;\r\n }\r\n\r\n if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\r\n base = i;\r\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\r\n }\r\n }\r\n }\r\n\r\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\r\n base--;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\r\n base--;\r\n }\r\n\r\n if (base < end) {\r\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\r\n base--;\r\n }\r\n }\r\n\r\n // o Reorder matras:\r\n //\r\n // If a pre-base matra character had been reordered before applying basic\r\n // features, the glyph can be moved closer to the main consonant based on\r\n // whether half-forms had been formed. Actual position for the matra is\r\n // defined as “after last standalone halant glyph, after initial matra\r\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\r\n // halant, position is moved after it.\r\n //\r\n\r\n if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\r\n // If we lost track of base, alas, position before last thingy.\r\n let newPos = base === end ? base - 2 : base - 1;\r\n\r\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\r\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\r\n // We want to position matra after them.\r\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\r\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\r\n newPos--;\r\n }\r\n\r\n // If we found no Halant we are done.\r\n // Otherwise only proceed if the Halant does\r\n // not belong to the Matra itself!\r\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\r\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\r\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\r\n newPos++;\r\n }\r\n } else {\r\n newPos = start; // No move.\r\n }\r\n }\r\n\r\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\r\n // Now go see if there's actually any matras...\r\n for (let i = newPos; i > start; i--) {\r\n if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\r\n let oldPos = i - 1;\r\n if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\r\n base--;\r\n }\r\n\r\n let tmp = glyphs[oldPos];\r\n glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\r\n glyphs[newPos] = tmp;\r\n\r\n newPos--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // o Reorder reph:\r\n //\r\n // Reph’s original position is always at the beginning of the syllable,\r\n // (i.e. it is not reordered at the character reordering stage). However,\r\n // it will be reordered according to the basic-forms shaping results.\r\n // Possible positions for reph, depending on the script, are; after main,\r\n // before post-base consonant forms, and after post-base consonant forms.\r\n\r\n // Two cases:\r\n //\r\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\r\n // we should only move it if the sequence ligated to the repha form.\r\n //\r\n // - If repha is encoded separately and in the logical position, we should only\r\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\r\n // to make it work without the reordering.\r\n if (start + 1 < end &&\r\n glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\r\n (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\r\n ) {\r\n let newRephPos;\r\n let rephPos = indicConfig.rephPos;\r\n let found = false;\r\n\r\n // 1. If reph should be positioned after post-base consonant forms,\r\n // proceed to step 5.\r\n if (rephPos !== POSITIONS.After_Post) {\r\n // 2. If the reph repositioning class is not after post-base: target\r\n // position is after the first explicit halant glyph between the\r\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\r\n // are following this halant, position is moved after it. If such\r\n // position is found, this is the target position. Otherwise,\r\n // proceed to the next step.\r\n //\r\n // Note: in old-implementation fonts, where classifications were\r\n // fixed in shaping engine, there was no case where reph position\r\n // will be found on this step.\r\n newRephPos = start + 1;\r\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\r\n newRephPos++;\r\n }\r\n\r\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\r\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\r\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\r\n newRephPos++;\r\n }\r\n\r\n found = true;\r\n }\r\n\r\n // 3. If reph should be repositioned after the main consonant: find the\r\n // first consonant not ligated with main, or find the first\r\n // consonant that is not a potential pre-base reordering Ra.\r\n if (!found && rephPos === POSITIONS.After_Main) {\r\n newRephPos = base;\r\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\r\n newRephPos++;\r\n }\r\n\r\n found = newRephPos < end;\r\n }\r\n\r\n // 4. If reph should be positioned before post-base consonant, find\r\n // first post-base classified consonant not ligated with main. If no\r\n // consonant is found, the target position should be before the\r\n // first matra, syllable modifier sign or vedic sign.\r\n //\r\n // This is our take on what step 4 is trying to say (and failing, BADLY).\r\n if (!found && rephPos === POSITIONS.After_Sub) {\r\n newRephPos = base;\r\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\r\n newRephPos++;\r\n }\r\n\r\n found = newRephPos < end;\r\n }\r\n }\r\n\r\n // 5. If no consonant is found in steps 3 or 4, move reph to a position\r\n // immediately before the first post-base matra, syllable modifier\r\n // sign or vedic sign that has a reordering class after the intended\r\n // reph position. For example, if the reordering position for reph\r\n // is post-main, it will skip above-base matras that also have a\r\n // post-main position.\r\n if (!found) {\r\n // Copied from step 2.\r\n newRephPos = start + 1;\r\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\r\n newRephPos++;\r\n }\r\n\r\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\r\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\r\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\r\n newRephPos++;\r\n }\r\n\r\n found = true;\r\n }\r\n }\r\n\r\n // 6. Otherwise, reorder reph to the end of the syllable.\r\n if (!found) {\r\n newRephPos = end - 1;\r\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\r\n newRephPos--;\r\n }\r\n\r\n // If the Reph is to be ending up after a Matra,Halant sequence,\r\n // position it before that Halant so it can interact with the Matra.\r\n // However, if it's a plain Consonant,Halant we shouldn't do that.\r\n // Uniscribe doesn't do this.\r\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\r\n if (isHalantOrCoeng(glyphs[newRephPos])) {\r\n for (let i = base + 1; i < newRephPos; i++) {\r\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\r\n newRephPos--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let reph = glyphs[start];\r\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\r\n glyphs[newRephPos] = reph;\r\n\r\n if (start < base && base <= newRephPos) {\r\n base--;\r\n }\r\n }\r\n\r\n // o Reorder pre-base reordering consonants:\r\n //\r\n // If a pre-base reordering consonant is found, reorder it according to\r\n // the following rules:\r\n if (tryPref && base + 1 < end) {\r\n for (let i = base + 1; i < end; i++) {\r\n if (glyphs[i].features.pref) {\r\n // 1. Only reorder a glyph produced by substitution during application\r\n // of the <pref> feature. (Note that a font may shape a Ra consonant with\r\n // the feature generally but block it in certain contexts.)\r\n\r\n // Note: We just check that something got substituted. We don't check that\r\n // the <pref> feature actually did it...\r\n //\r\n // Reorder pref only if it ligated.\r\n if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\r\n // 2. Try to find a target position the same way as for pre-base matra.\r\n // If it is found, reorder pre-base consonant glyph.\r\n //\r\n // 3. If position is not found, reorder immediately before main\r\n // consonant.\r\n let newPos = base;\r\n\r\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\r\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\r\n // We want to position matra after them.\r\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\r\n while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\r\n newPos--;\r\n }\r\n\r\n // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\r\n // split matra, it should be reordered to *before* the left part of such matra.\r\n if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\r\n let oldPos = i;\r\n for (let j = base + 1; j < oldPos; j++) {\r\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\r\n newPos--;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\r\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\r\n if (newPos < end && isJoiner(glyphs[newPos])) {\r\n newPos++;\r\n }\r\n }\r\n\r\n let oldPos = i;\r\n let tmp = glyphs[oldPos];\r\n glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\r\n glyphs[newPos] = tmp;\r\n\r\n if (newPos <= base && base < oldPos) {\r\n base++;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Apply 'init' to the Left Matra if it's a word start.\r\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\r\n glyphs[start].features.init = true;\r\n }\r\n }\r\n}\r\n\r\nfunction nextSyllable(glyphs, start) {\r\n if (start >= glyphs.length) return start;\r\n let syllable = glyphs[start].shaperInfo.syllable;\r\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\r\n return start;\r\n}\r\n","import DefaultShaper from './DefaultShaper';\r\nimport StateMachine from 'dfa';\r\nimport UnicodeTrie from 'unicode-trie';\r\nimport GlyphInfo from '../GlyphInfo';\r\nimport useData from './use.json';\r\n\r\nconst {categories, decompositions} = useData;\r\nconst trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/use.trie'));\r\nconst stateMachine = new StateMachine(useData);\r\n\r\n/**\r\n * This shaper is an implementation of the Universal Shaping Engine, which\r\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\r\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\r\n */\r\nexport default class UniversalShaper extends DefaultShaper {\r\n static zeroMarkWidths = 'BEFORE_GPOS';\r\n static planFeatures(plan) {\r\n plan.addStage(setupSyllables);\r\n\r\n // Default glyph pre-processing group\r\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\r\n\r\n // Reordering group\r\n plan.addStage(clearSubstitutionFlags);\r\n plan.addStage(['rphf'], false);\r\n plan.addStage(recordRphf);\r\n plan.addStage(clearSubstitutionFlags);\r\n plan.addStage(['pref']);\r\n plan.addStage(recordPref);\r\n\r\n // Orthographic unit shaping group\r\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\r\n plan.addStage(reorder);\r\n\r\n // Topographical features\r\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\r\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\r\n\r\n // Standard topographic presentation and positional feature application\r\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\r\n }\r\n\r\n static assignFeatures(plan, glyphs) {\r\n // Decompose split vowels\r\n // TODO: do this in a more general unicode normalizer\r\n for (let i = glyphs.length - 1; i >= 0; i--) {\r\n let codepoint = glyphs[i].codePoints[0];\r\n if (decompositions[codepoint]) {\r\n let decomposed = decompositions[codepoint].map(c => {\r\n let g = plan.font.glyphForCodePoint(c);\r\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\r\n });\r\n\r\n glyphs.splice(i, 1, ...decomposed);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction useCategory(glyph) {\r\n return trie.get(glyph.codePoints[0]);\r\n}\r\n\r\nclass USEInfo {\r\n constructor(category, syllableType, syllable) {\r\n this.category = category;\r\n this.syllableType = syllableType;\r\n this.syllable = syllable;\r\n }\r\n}\r\n\r\nfunction setupSyllables(font, glyphs) {\r\n let syllable = 0;\r\n for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\r\n ++syllable;\r\n\r\n // Create shaper info\r\n for (let i = start; i <= end; i++) {\r\n glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\r\n }\r\n\r\n // Assign rphf feature\r\n let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\r\n for (let i = start; i < start + limit; i++) {\r\n glyphs[i].features.rphf = true;\r\n }\r\n }\r\n}\r\n\r\nfunction clearSubstitutionFlags(font, glyphs) {\r\n for (let glyph of glyphs) {\r\n glyph.substituted = false;\r\n }\r\n}\r\n\r\nfunction recordRphf(font, glyphs) {\r\n for (let glyph of glyphs) {\r\n if (glyph.substituted && glyph.features.rphf) {\r\n // Mark a substituted repha.\r\n glyph.shaperInfo.category = 'R';\r\n }\r\n }\r\n}\r\n\r\nfunction recordPref(font, glyphs) {\r\n for (let glyph of glyphs) {\r\n if (glyph.substituted) {\r\n // Mark a substituted pref as VPre, as they behave the same way.\r\n glyph.shaperInfo.category = 'VPre';\r\n }\r\n }\r\n}\r\n\r\nfunction reorder(font, glyphs) {\r\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\r\n\r\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\r\n let i, j;\r\n let info = glyphs[start].shaperInfo;\r\n let type = info.syllableType;\r\n\r\n // Only a few syllable types need reordering.\r\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\r\n continue;\r\n }\r\n\r\n // Insert a dotted circle glyph in broken clusters.\r\n if (type === 'broken_cluster' && dottedCircle) {\r\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\r\n g.shaperInfo = info;\r\n\r\n // Insert after possible Repha.\r\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\r\n glyphs.splice(++i, 0, g);\r\n end++;\r\n }\r\n\r\n // Move things forward.\r\n if (info.category === 'R' && end - start > 1) {\r\n // Got a repha. Reorder it to after first base, before first halant.\r\n for (i = start + 1; i < end; i++) {\r\n info = glyphs[i].shaperInfo;\r\n if (isBase(info) || isHalant(glyphs[i])) {\r\n // If we hit a halant, move before it; otherwise it's a base: move to it's\r\n // place, and shift things in between backward.\r\n if (isHalant(glyphs[i])) {\r\n i--;\r\n }\r\n\r\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Move things back.\r\n for (i = start, j = end; i < end; i++) {\r\n info = glyphs[i].shaperInfo;\r\n if (isBase(info) || isHalant(glyphs[i])) {\r\n // If we hit a halant, move after it; otherwise it's a base: move to it's\r\n // place, and shift things in between backward.\r\n j = isHalant(glyphs[i]) ? i + 1 : i;\r\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\r\n glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction nextSyllable(glyphs, start) {\r\n if (start >= glyphs.length) return start;\r\n let syllable = glyphs[start].shaperInfo.syllable;\r\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\r\n return start;\r\n}\r\n\r\nfunction isHalant(glyph) {\r\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\r\n}\r\n\r\nfunction isBase(info) {\r\n return info.category === 'B' || info.category === 'GB';\r\n}\r\n","import DefaultShaper from './DefaultShaper';\r\nimport ArabicShaper from './ArabicShaper';\r\nimport HangulShaper from './HangulShaper';\r\nimport IndicShaper from './IndicShaper';\r\nimport UniversalShaper from './UniversalShaper';\r\n\r\nconst SHAPERS = {\r\n arab: ArabicShaper, // Arabic\r\n mong: ArabicShaper, // Mongolian\r\n syrc: ArabicShaper, // Syriac\r\n 'nko ': ArabicShaper, // N'Ko\r\n phag: ArabicShaper, // Phags Pa\r\n mand: ArabicShaper, // Mandaic\r\n mani: ArabicShaper, // Manichaean\r\n phlp: ArabicShaper, // Psalter Pahlavi\r\n\r\n hang: HangulShaper, // Hangul\r\n\r\n bng2: IndicShaper, // Bengali\r\n beng: IndicShaper, // Bengali\r\n dev2: IndicShaper, // Devanagari\r\n deva: IndicShaper, // Devanagari\r\n gjr2: IndicShaper, // Gujarati\r\n gujr: IndicShaper, // Gujarati\r\n guru: IndicShaper, // Gurmukhi\r\n gur2: IndicShaper, // Gurmukhi\r\n knda: IndicShaper, // Kannada\r\n knd2: IndicShaper, // Kannada\r\n mlm2: IndicShaper, // Malayalam\r\n mlym: IndicShaper, // Malayalam\r\n ory2: IndicShaper, // Oriya\r\n orya: IndicShaper, // Oriya\r\n taml: IndicShaper, // Tamil\r\n tml2: IndicShaper, // Tamil\r\n telu: IndicShaper, // Telugu\r\n tel2: IndicShaper, // Telugu\r\n khmr: IndicShaper, // Khmer\r\n\r\n bali: UniversalShaper, // Balinese\r\n batk: UniversalShaper, // Batak\r\n brah: UniversalShaper, // Brahmi\r\n bugi: UniversalShaper, // Buginese\r\n buhd: UniversalShaper, // Buhid\r\n cakm: UniversalShaper, // Chakma\r\n cham: UniversalShaper, // Cham\r\n dupl: UniversalShaper, // Duployan\r\n egyp: UniversalShaper, // Egyptian Hieroglyphs\r\n gran: UniversalShaper, // Grantha\r\n hano: UniversalShaper, // Hanunoo\r\n java: UniversalShaper, // Javanese\r\n kthi: UniversalShaper, // Kaithi\r\n kali: UniversalShaper, // Kayah Li\r\n khar: UniversalShaper, // Kharoshthi\r\n khoj: UniversalShaper, // Khojki\r\n sind: UniversalShaper, // Khudawadi\r\n lepc: UniversalShaper, // Lepcha\r\n limb: UniversalShaper, // Limbu\r\n mahj: UniversalShaper, // Mahajani\r\n // mand: UniversalShaper, // Mandaic\r\n // mani: UniversalShaper, // Manichaean\r\n mtei: UniversalShaper, // Meitei Mayek\r\n modi: UniversalShaper, // Modi\r\n // mong: UniversalShaper, // Mongolian\r\n // 'nko ': UniversalShaper, // N’Ko\r\n hmng: UniversalShaper, // Pahawh Hmong\r\n // phag: UniversalShaper, // Phags-pa\r\n // phlp: UniversalShaper, // Psalter Pahlavi\r\n rjng: UniversalShaper, // Rejang\r\n saur: UniversalShaper, // Saurashtra\r\n shrd: UniversalShaper, // Sharada\r\n sidd: UniversalShaper, // Siddham\r\n sinh: UniversalShaper, // Sinhala\r\n sund: UniversalShaper, // Sundanese\r\n sylo: UniversalShaper, // Syloti Nagri\r\n tglg: UniversalShaper, // Tagalog\r\n tagb: UniversalShaper, // Tagbanwa\r\n tale: UniversalShaper, // Tai Le\r\n lana: UniversalShaper, // Tai Tham\r\n tavt: UniversalShaper, // Tai Viet\r\n takr: UniversalShaper, // Takri\r\n tibt: UniversalShaper, // Tibetan\r\n tfng: UniversalShaper, // Tifinagh\r\n tirh: UniversalShaper, // Tirhuta\r\n\r\n latn: DefaultShaper, // Latin\r\n DFLT: DefaultShaper // Default\r\n};\r\n\r\nexport function choose(script) {\r\n if (!Array.isArray(script)) {\r\n script = [script];\r\n }\r\n\r\n for (let s of script) {\r\n let shaper = SHAPERS[s];\r\n if (shaper) {\r\n return shaper;\r\n }\r\n }\r\n\r\n return DefaultShaper;\r\n}\r\n","import OTProcessor from './OTProcessor';\r\nimport GlyphInfo from './GlyphInfo';\r\n\r\nexport default class GSUBProcessor extends OTProcessor {\r\n applyLookup(lookupType, table) {\r\n switch (lookupType) {\r\n case 1: { // Single Substitution\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n let glyph = this.glyphIterator.cur;\r\n switch (table.version) {\r\n case 1:\r\n glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\r\n break;\r\n\r\n case 2:\r\n glyph.id = table.substitute.get(index);\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n case 2: { // Multiple Substitution\r\n let index = this.coverageIndex(table.coverage);\r\n if (index !== -1) {\r\n let sequence = table.sequences.get(index);\r\n\r\n if (sequence.length === 0) {\r\n // If the sequence length is zero, delete the glyph.\r\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\r\n this.glyphs.splice(this.glyphIterator.index, 1);\r\n return true;\r\n }\r\n\r\n this.glyphIterator.cur.id = sequence[0];\r\n this.glyphIterator.cur.ligatureComponent = 0;\r\n\r\n let features = this.glyphIterator.cur.features;\r\n let curGlyph = this.glyphIterator.cur;\r\n let replacement = sequence.slice(1).map((gid, i) => {\r\n let glyph = new GlyphInfo(this.font, gid, undefined, features);\r\n glyph.shaperInfo = curGlyph.shaperInfo;\r\n glyph.isLigated = curGlyph.isLigated;\r\n glyph.ligatureComponent = i + 1;\r\n glyph.substituted = true;\r\n glyph.isMultiplied = true;\r\n return glyph;\r\n });\r\n\r\n this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n case 3: { // Alternate Substitution\r\n let index = this.coverageIndex(table.coverage);\r\n if (index !== -1) {\r\n let USER_INDEX = 0; // TODO\r\n this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n case 4: { // Ligature Substitution\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n for (let ligature of table.ligatureSets.get(index)) {\r\n let matched = this.sequenceMatchIndices(1, ligature.components);\r\n if (!matched) {\r\n continue;\r\n }\r\n\r\n let curGlyph = this.glyphIterator.cur;\r\n\r\n // Concatenate all of the characters the new ligature will represent\r\n let characters = curGlyph.codePoints.slice();\r\n for (let index of matched) {\r\n characters.push(...this.glyphs[index].codePoints);\r\n }\r\n\r\n // Create the replacement ligature glyph\r\n let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\r\n ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\r\n ligatureGlyph.isLigated = true;\r\n ligatureGlyph.substituted = true;\r\n\r\n // From Harfbuzz:\r\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\r\n // the ligature to keep its old ligature id. This will allow it to attach to\r\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\r\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\r\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\r\n // later, we don't want them to lose their ligature id/component, otherwise\r\n // GPOS will fail to correctly position the mark ligature on top of the\r\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\r\n //\r\n // - If a ligature is formed of components that some of which are also ligatures\r\n // themselves, and those ligature components had marks attached to *their*\r\n // components, we have to attach the marks to the new ligature component\r\n // positions! Now *that*'s tricky! And these marks may be following the\r\n // last component of the whole sequence, so we should loop forward looking\r\n // for them and update them.\r\n //\r\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\r\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\r\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\r\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\r\n // the new ligature with a component value of 2.\r\n //\r\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\r\n let isMarkLigature = curGlyph.isMark;\r\n for (let i = 0; i < matched.length && isMarkLigature; i++) {\r\n isMarkLigature = this.glyphs[matched[i]].isMark;\r\n }\r\n\r\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\r\n\r\n let lastLigID = curGlyph.ligatureID;\r\n let lastNumComps = curGlyph.codePoints.length;\r\n let curComps = lastNumComps;\r\n let idx = this.glyphIterator.index + 1;\r\n\r\n // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\r\n // This allows GPOS to attach marks to the correct ligature components.\r\n for (let matchIndex of matched) {\r\n // Don't assign new ligature components for mark ligatures (see above)\r\n if (isMarkLigature) {\r\n idx = matchIndex;\r\n } else {\r\n while (idx < matchIndex) {\r\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\r\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\r\n this.glyphs[idx].ligatureComponent = ligatureComponent;\r\n idx++;\r\n }\r\n }\r\n\r\n lastLigID = this.glyphs[idx].ligatureID;\r\n lastNumComps = this.glyphs[idx].codePoints.length;\r\n curComps += lastNumComps;\r\n idx++; // skip base glyph\r\n }\r\n\r\n // Adjust ligature components for any marks following\r\n if (lastLigID && !isMarkLigature) {\r\n for (let i = idx; i < this.glyphs.length; i++) {\r\n if (this.glyphs[i].ligatureID === lastLigID) {\r\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\r\n this.glyphs[i].ligatureComponent = ligatureComponent;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Delete the matched glyphs, and replace the current glyph with the ligature glyph\r\n for (let i = matched.length - 1; i >= 0; i--) {\r\n this.glyphs.splice(matched[i], 1);\r\n }\r\n\r\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n case 5: // Contextual Substitution\r\n return this.applyContext(table);\r\n\r\n case 6: // Chaining Contextual Substitution\r\n return this.applyChainingContext(table);\r\n\r\n case 7: // Extension Substitution\r\n return this.applyLookup(table.lookupType, table.extension);\r\n\r\n default:\r\n throw new Error(`GSUB lookupType ${lookupType} is not supported`);\r\n }\r\n }\r\n}\r\n","import OTProcessor from './OTProcessor';\r\n\r\nexport default class GPOSProcessor extends OTProcessor {\r\n applyPositionValue(sequenceIndex, value) {\r\n let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\r\n if (value.xAdvance != null) {\r\n position.xAdvance += value.xAdvance;\r\n }\r\n\r\n if (value.yAdvance != null) {\r\n position.yAdvance += value.yAdvance;\r\n }\r\n\r\n if (value.xPlacement != null) {\r\n position.xOffset += value.xPlacement;\r\n }\r\n\r\n if (value.yPlacement != null) {\r\n position.yOffset += value.yPlacement;\r\n }\r\n\r\n // Adjustments for font variations\r\n let variationProcessor = this.font._variationProcessor;\r\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\r\n if (variationProcessor && variationStore) {\r\n if (value.xPlaDevice) {\r\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\r\n }\r\n\r\n if (value.yPlaDevice) {\r\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\r\n }\r\n\r\n if (value.xAdvDevice) {\r\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\r\n }\r\n\r\n if (value.yAdvDevice) {\r\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\r\n }\r\n }\r\n\r\n // TODO: device tables\r\n }\r\n\r\n applyLookup(lookupType, table) {\r\n switch (lookupType) {\r\n case 1: { // Single positioning value\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n switch (table.version) {\r\n case 1:\r\n this.applyPositionValue(0, table.value);\r\n break;\r\n\r\n case 2:\r\n this.applyPositionValue(0, table.values.get(index));\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n case 2: { // Pair Adjustment Positioning\r\n let nextGlyph = this.glyphIterator.peek();\r\n if (!nextGlyph) {\r\n return false;\r\n }\r\n\r\n let index = this.coverageIndex(table.coverage);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n switch (table.version) {\r\n case 1: // Adjustments for glyph pairs\r\n let set = table.pairSets.get(index);\r\n\r\n for (let pair of set) {\r\n if (pair.secondGlyph === nextGlyph.id) {\r\n this.applyPositionValue(0, pair.value1);\r\n this.applyPositionValue(1, pair.value2);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n\r\n case 2: // Class pair adjustment\r\n let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\r\n let class2 = this.getClassID(nextGlyph.id, table.classDef2);\r\n if (class1 === -1 || class2 === -1) {\r\n return false;\r\n }\r\n\r\n var pair = table.classRecords.get(class1).get(class2);\r\n this.applyPositionValue(0, pair.value1);\r\n this.applyPositionValue(1, pair.value2);\r\n return true;\r\n }\r\n }\r\n\r\n case 3: { // Cursive Attachment Positioning\r\n let nextIndex = this.glyphIterator.peekIndex();\r\n let nextGlyph = this.glyphs[nextIndex];\r\n if (!nextGlyph) {\r\n return false;\r\n }\r\n\r\n let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\r\n if (!curRecord || !curRecord.exitAnchor) {\r\n return false;\r\n }\r\n\r\n let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\r\n if (!nextRecord || !nextRecord.entryAnchor) {\r\n return false;\r\n }\r\n\r\n let entry = this.getAnchor(nextRecord.entryAnchor);\r\n let exit = this.getAnchor(curRecord.exitAnchor);\r\n\r\n let cur = this.positions[this.glyphIterator.index];\r\n let next = this.positions[nextIndex];\r\n\r\n switch (this.direction) {\r\n case 'ltr':\r\n cur.xAdvance = exit.x + cur.xOffset;\r\n\r\n let d = entry.x + next.xOffset;\r\n next.xAdvance -= d;\r\n next.xOffset -= d;\r\n break;\r\n\r\n case 'rtl':\r\n d = exit.x + cur.xOffset;\r\n cur.xAdvance -= d;\r\n cur.xOffset -= d;\r\n next.xAdvance = entry.x + next.xOffset;\r\n break;\r\n }\r\n\r\n if (this.glyphIterator.flags.rightToLeft) {\r\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\r\n cur.yOffset = entry.y - exit.y;\r\n } else {\r\n nextGlyph.cursiveAttachment = this.glyphIterator.index;\r\n cur.yOffset = exit.y - entry.y;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n case 4: { // Mark to base positioning\r\n let markIndex = this.coverageIndex(table.markCoverage);\r\n if (markIndex === -1) {\r\n return false;\r\n }\r\n\r\n // search backward for a base glyph\r\n let baseGlyphIndex = this.glyphIterator.index;\r\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\r\n\r\n if (baseGlyphIndex < 0) {\r\n return false;\r\n }\r\n\r\n let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\r\n if (baseIndex === -1) {\r\n return false;\r\n }\r\n\r\n let markRecord = table.markArray[markIndex];\r\n let baseAnchor = table.baseArray[baseIndex][markRecord.class];\r\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\r\n return true;\r\n }\r\n\r\n case 5: { // Mark to ligature positioning\r\n let markIndex = this.coverageIndex(table.markCoverage);\r\n if (markIndex === -1) {\r\n return false;\r\n }\r\n\r\n // search backward for a base glyph\r\n let baseGlyphIndex = this.glyphIterator.index;\r\n while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\r\n\r\n if (baseGlyphIndex < 0) {\r\n return false;\r\n }\r\n\r\n let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\r\n if (ligIndex === -1) {\r\n return false;\r\n }\r\n\r\n let ligAttach = table.ligatureArray[ligIndex];\r\n let markGlyph = this.glyphIterator.cur;\r\n let ligGlyph = this.glyphs[baseGlyphIndex];\r\n let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\r\n ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\r\n : ligGlyph.codePoints.length - 1;\r\n\r\n let markRecord = table.markArray[markIndex];\r\n let baseAnchor = ligAttach[compIndex][markRecord.class];\r\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\r\n return true;\r\n }\r\n\r\n case 6: { // Mark to mark positioning\r\n let mark1Index = this.coverageIndex(table.mark1Coverage);\r\n if (mark1Index === -1) {\r\n return false;\r\n }\r\n\r\n // get the previous mark to attach to\r\n let prevIndex = this.glyphIterator.peekIndex(-1);\r\n let prev = this.glyphs[prevIndex];\r\n if (!prev || !prev.isMark) {\r\n return false;\r\n }\r\n\r\n let cur = this.glyphIterator.cur;\r\n\r\n // The following logic was borrowed from Harfbuzz\r\n let good = false;\r\n if (cur.ligatureID === prev.ligatureID) {\r\n if (!cur.ligatureID) { // Marks belonging to the same base\r\n good = true;\r\n } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\r\n good = true;\r\n }\r\n } else {\r\n // If ligature ids don't match, it may be the case that one of the marks\r\n // itself is a ligature, in which case match.\r\n if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\r\n good = true;\r\n }\r\n }\r\n\r\n if (!good) {\r\n return false;\r\n }\r\n\r\n let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\r\n if (mark2Index === -1) {\r\n return false;\r\n }\r\n\r\n let markRecord = table.mark1Array[mark1Index];\r\n let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\r\n this.applyAnchor(markRecord, baseAnchor, prevIndex);\r\n return true;\r\n }\r\n\r\n case 7: // Contextual positioning\r\n return this.applyContext(table);\r\n\r\n case 8: // Chaining contextual positioning\r\n return this.applyChainingContext(table);\r\n\r\n case 9: // Extension positioning\r\n return this.applyLookup(table.lookupType, table.extension);\r\n\r\n default:\r\n throw new Error(`Unsupported GPOS table: ${lookupType}`);\r\n }\r\n }\r\n\r\n applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\r\n let baseCoords = this.getAnchor(baseAnchor);\r\n let markCoords = this.getAnchor(markRecord.markAnchor);\r\n\r\n let basePos = this.positions[baseGlyphIndex];\r\n let markPos = this.positions[this.glyphIterator.index];\r\n\r\n markPos.xOffset = baseCoords.x - markCoords.x;\r\n markPos.yOffset = baseCoords.y - markCoords.y;\r\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\r\n }\r\n\r\n getAnchor(anchor) {\r\n // TODO: contour point, device tables\r\n let x = anchor.xCoordinate;\r\n let y = anchor.yCoordinate;\r\n\r\n // Adjustments for font variations\r\n let variationProcessor = this.font._variationProcessor;\r\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\r\n if (variationProcessor && variationStore) {\r\n if (anchor.xDeviceTable) {\r\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\r\n }\r\n\r\n if (anchor.yDeviceTable) {\r\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\r\n }\r\n }\r\n\r\n return {x, y};\r\n }\r\n\r\n applyFeatures(userFeatures, glyphs, advances) {\r\n super.applyFeatures(userFeatures, glyphs, advances);\r\n\r\n for (var i = 0; i < this.glyphs.length; i++) {\r\n this.fixCursiveAttachment(i);\r\n }\r\n\r\n this.fixMarkAttachment();\r\n }\r\n\r\n fixCursiveAttachment(i) {\r\n let glyph = this.glyphs[i];\r\n if (glyph.cursiveAttachment != null) {\r\n let j = glyph.cursiveAttachment;\r\n\r\n glyph.cursiveAttachment = null;\r\n this.fixCursiveAttachment(j);\r\n\r\n this.positions[i].yOffset += this.positions[j].yOffset;\r\n }\r\n }\r\n\r\n fixMarkAttachment() {\r\n for (let i = 0; i < this.glyphs.length; i++) {\r\n let glyph = this.glyphs[i];\r\n if (glyph.markAttachment != null) {\r\n let j = glyph.markAttachment;\r\n\r\n this.positions[i].xOffset += this.positions[j].xOffset;\r\n this.positions[i].yOffset += this.positions[j].yOffset;\r\n\r\n if (this.direction === 'ltr') {\r\n for (let k = j; k < i; k++) {\r\n this.positions[i].xOffset -= this.positions[k].xAdvance;\r\n this.positions[i].yOffset -= this.positions[k].yAdvance;\r\n }\r\n } else {\r\n for (let k = j + 1; k < i + 1; k++) {\r\n this.positions[i].xOffset += this.positions[k].xAdvance;\r\n this.positions[i].yOffset += this.positions[k].yAdvance;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import ShapingPlan from './ShapingPlan';\r\nimport * as Shapers from './shapers';\r\nimport GlyphInfo from './GlyphInfo';\r\nimport GSUBProcessor from './GSUBProcessor';\r\nimport GPOSProcessor from './GPOSProcessor';\r\n\r\nexport default class OTLayoutEngine {\r\n constructor(font) {\r\n this.font = font;\r\n this.glyphInfos = null;\r\n this.plan = null;\r\n this.GSUBProcessor = null;\r\n this.GPOSProcessor = null;\r\n this.fallbackPosition = true;\r\n\r\n if (font.GSUB) {\r\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\r\n }\r\n\r\n if (font.GPOS) {\r\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\r\n }\r\n }\r\n\r\n setup(glyphRun) {\r\n // Map glyphs to GlyphInfo objects so data can be passed between\r\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\r\n this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\r\n\r\n // Select a script based on what is available in GSUB/GPOS.\r\n let script = null;\r\n if (this.GPOSProcessor) {\r\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\r\n }\r\n\r\n if (this.GSUBProcessor) {\r\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\r\n }\r\n\r\n // Choose a shaper based on the script, and setup a shaping plan.\r\n // This determines which features to apply to which glyphs.\r\n this.shaper = Shapers.choose(script);\r\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\r\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\r\n\r\n // Assign chosen features to output glyph run\r\n for (let key in this.plan.allFeatures) {\r\n glyphRun.features[key] = true;\r\n }\r\n }\r\n\r\n substitute(glyphRun) {\r\n if (this.GSUBProcessor) {\r\n this.plan.process(this.GSUBProcessor, this.glyphInfos);\r\n\r\n // Map glyph infos back to normal Glyph objects\r\n glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\r\n }\r\n }\r\n\r\n position(glyphRun) {\r\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\r\n this.zeroMarkAdvances(glyphRun.positions);\r\n }\r\n\r\n if (this.GPOSProcessor) {\r\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\r\n }\r\n\r\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\r\n this.zeroMarkAdvances(glyphRun.positions);\r\n }\r\n\r\n // Reverse the glyphs and positions if the script is right-to-left\r\n if (glyphRun.direction === 'rtl') {\r\n glyphRun.glyphs.reverse();\r\n glyphRun.positions.reverse();\r\n }\r\n\r\n return this.GPOSProcessor && this.GPOSProcessor.features;\r\n }\r\n\r\n zeroMarkAdvances(positions) {\r\n for (let i = 0; i < this.glyphInfos.length; i++) {\r\n if (this.glyphInfos[i].isMark) {\r\n positions[i].xAdvance = 0;\r\n positions[i].yAdvance = 0;\r\n }\r\n }\r\n }\r\n\r\n cleanup() {\r\n this.glyphInfos = null;\r\n this.plan = null;\r\n this.shaper = null;\r\n }\r\n\r\n getAvailableFeatures(script, language) {\r\n let features = [];\r\n\r\n if (this.GSUBProcessor) {\r\n this.GSUBProcessor.selectScript(script, language);\r\n features.push(...Object.keys(this.GSUBProcessor.features));\r\n }\r\n\r\n if (this.GPOSProcessor) {\r\n this.GPOSProcessor.selectScript(script, language);\r\n features.push(...Object.keys(this.GPOSProcessor.features));\r\n }\r\n\r\n return features;\r\n }\r\n}\r\n","import KernProcessor from './KernProcessor';\r\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\r\nimport GlyphRun from './GlyphRun';\r\nimport GlyphPosition from './GlyphPosition';\r\nimport * as Script from './Script';\r\nimport unicode from 'unicode-properties';\r\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\r\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\r\n\r\nexport default class LayoutEngine {\r\n constructor(font) {\r\n this.font = font;\r\n this.unicodeLayoutEngine = null;\r\n this.kernProcessor = null;\r\n\r\n // Choose an advanced layout engine. We try the AAT morx table first since more\r\n // scripts are currently supported because the shaping logic is built into the font.\r\n if (this.font.morx) {\r\n this.engine = new AATLayoutEngine(this.font);\r\n\r\n } else if (this.font.GSUB || this.font.GPOS) {\r\n this.engine = new OTLayoutEngine(this.font);\r\n }\r\n }\r\n\r\n layout(string, features, script, language, direction) {\r\n // Make the features parameter optional\r\n if (typeof features === 'string') {\r\n direction = language;\r\n language = script;\r\n script = features;\r\n features = [];\r\n }\r\n\r\n // Map string to glyphs if needed\r\n if (typeof string === 'string') {\r\n // Attempt to detect the script from the string if not provided.\r\n if (script == null) {\r\n script = Script.forString(string);\r\n }\r\n\r\n var glyphs = this.font.glyphsForString(string);\r\n } else {\r\n // Attempt to detect the script from the glyph code points if not provided.\r\n if (script == null) {\r\n let codePoints = [];\r\n for (let glyph of string) {\r\n codePoints.push(...glyph.codePoints);\r\n }\r\n\r\n script = Script.forCodePoints(codePoints);\r\n }\r\n\r\n var glyphs = string;\r\n }\r\n\r\n let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\r\n\r\n // Return early if there are no glyphs\r\n if (glyphs.length === 0) {\r\n glyphRun.positions = [];\r\n return glyphRun;\r\n }\r\n\r\n // Setup the advanced layout engine\r\n if (this.engine && this.engine.setup) {\r\n this.engine.setup(glyphRun);\r\n }\r\n\r\n // Substitute and position the glyphs\r\n this.substitute(glyphRun);\r\n this.position(glyphRun);\r\n\r\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\r\n\r\n // Let the layout engine clean up any state it might have\r\n if (this.engine && this.engine.cleanup) {\r\n this.engine.cleanup();\r\n }\r\n\r\n return glyphRun;\r\n }\r\n\r\n substitute(glyphRun) {\r\n // Call the advanced layout engine to make substitutions\r\n if (this.engine && this.engine.substitute) {\r\n this.engine.substitute(glyphRun);\r\n }\r\n }\r\n\r\n position(glyphRun) {\r\n // Get initial glyph positions\r\n glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\r\n let positioned = null;\r\n\r\n // Call the advanced layout engine. Returns the features applied.\r\n if (this.engine && this.engine.position) {\r\n positioned = this.engine.position(glyphRun);\r\n }\r\n\r\n // if there is no GPOS table, use unicode properties to position marks.\r\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\r\n if (!this.unicodeLayoutEngine) {\r\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\r\n }\r\n\r\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\r\n }\r\n\r\n // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\r\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\r\n if (!this.kernProcessor) {\r\n this.kernProcessor = new KernProcessor(this.font);\r\n }\r\n\r\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\r\n glyphRun.features.kern = true;\r\n }\r\n }\r\n\r\n hideDefaultIgnorables(glyphs, positions) {\r\n let space = this.font.glyphForCodePoint(0x20);\r\n for (let i = 0; i < glyphs.length; i++) {\r\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\r\n glyphs[i] = space;\r\n positions[i].xAdvance = 0;\r\n positions[i].yAdvance = 0;\r\n }\r\n }\r\n }\r\n\r\n isDefaultIgnorable(ch) {\r\n // From DerivedCoreProperties.txt in the Unicode database,\r\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\r\n // Harfbuzz and Uniscribe do.\r\n let plane = ch >> 16;\r\n if (plane === 0) {\r\n // BMP\r\n switch (ch >> 8) {\r\n \tcase 0x00: return ch === 0x00AD;\r\n \tcase 0x03: return ch === 0x034F;\r\n \tcase 0x06: return ch === 0x061C;\r\n \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\r\n \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\r\n \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\r\n \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\r\n \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\r\n \tdefault: return false;\r\n }\r\n } else {\r\n // Other planes\r\n switch (plane) {\r\n \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\r\n \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\r\n \tdefault: return false;\r\n }\r\n }\r\n }\r\n\r\n getAvailableFeatures(script, language) {\r\n let features = [];\r\n\r\n if (this.engine) {\r\n features.push(...this.engine.getAvailableFeatures(script, language));\r\n }\r\n\r\n if (this.font.kern && features.indexOf('kern') === -1) {\r\n features.push('kern');\r\n }\r\n\r\n return features;\r\n }\r\n\r\n stringsForGlyph(gid) {\r\n let result = new Set;\r\n\r\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\r\n for (let codePoint of codePoints) {\r\n result.add(String.fromCodePoint(codePoint));\r\n }\r\n\r\n if (this.engine && this.engine.stringsForGlyph) {\r\n for (let string of this.engine.stringsForGlyph(gid)) {\r\n result.add(string);\r\n }\r\n }\r\n\r\n return Array.from(result);\r\n }\r\n}\r\n","import BBox from './BBox';\r\n\r\nconst SVG_COMMANDS = {\r\n moveTo: 'M',\r\n lineTo: 'L',\r\n quadraticCurveTo: 'Q',\r\n bezierCurveTo: 'C',\r\n closePath: 'Z'\r\n};\r\n\r\n/**\r\n * Path objects are returned by glyphs and represent the actual\r\n * vector outlines for each glyph in the font. Paths can be converted\r\n * to SVG path data strings, or to functions that can be applied to\r\n * render the path to a graphics context.\r\n */\r\nexport default class Path {\r\n constructor() {\r\n this.commands = [];\r\n this._bbox = null;\r\n this._cbox = null;\r\n }\r\n\r\n /**\r\n * Compiles the path to a JavaScript function that can be applied with\r\n * a graphics context in order to render the path.\r\n * @return {string}\r\n */\r\n toFunction() {\r\n return ctx => {\r\n this.commands.forEach(c => {\r\n return ctx[c.command].apply(ctx, c.args)\r\n })\r\n };\r\n }\r\n\r\n /**\r\n * Converts the path to an SVG path data string\r\n * @return {string}\r\n */\r\n toSVG() {\r\n let cmds = this.commands.map(c => {\r\n let args = c.args.map(arg => Math.round(arg * 100) / 100);\r\n return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\r\n });\r\n\r\n return cmds.join('');\r\n }\r\n\r\n /**\r\n * Gets the \"control box\" of a path.\r\n * This is like the bounding box, but it includes all points including\r\n * control points of bezier segments and is much faster to compute than\r\n * the real bounding box.\r\n * @type {BBox}\r\n */\r\n get cbox() {\r\n if (!this._cbox) {\r\n let cbox = new BBox;\r\n for (let command of this.commands) {\r\n for (let i = 0; i < command.args.length; i += 2) {\r\n cbox.addPoint(command.args[i], command.args[i + 1]);\r\n }\r\n }\r\n\r\n this._cbox = Object.freeze(cbox);\r\n }\r\n\r\n return this._cbox;\r\n }\r\n\r\n /**\r\n * Gets the exact bounding box of the path by evaluating curve segments.\r\n * Slower to compute than the control box, but more accurate.\r\n * @type {BBox}\r\n */\r\n get bbox() {\r\n if (this._bbox) {\r\n return this._bbox;\r\n }\r\n\r\n let bbox = new BBox;\r\n let cx = 0, cy = 0;\r\n\r\n let f = t => (\r\n Math.pow(1 - t, 3) * p0[i]\r\n + 3 * Math.pow(1 - t, 2) * t * p1[i]\r\n + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\r\n + Math.pow(t, 3) * p3[i]\r\n );\r\n\r\n for (let c of this.commands) {\r\n switch (c.command) {\r\n case 'moveTo':\r\n case 'lineTo':\r\n let [x, y] = c.args;\r\n bbox.addPoint(x, y);\r\n cx = x;\r\n cy = y;\r\n break;\r\n\r\n case 'quadraticCurveTo':\r\n case 'bezierCurveTo':\r\n if (c.command === 'quadraticCurveTo') {\r\n // http://fontforge.org/bezier.html\r\n var [qp1x, qp1y, p3x, p3y] = c.args;\r\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\r\n var cp1y = cy + 2 / 3 * (qp1y - cy);\r\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\r\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\r\n } else {\r\n var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\r\n }\r\n\r\n // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\r\n bbox.addPoint(p3x, p3y);\r\n\r\n var p0 = [cx, cy];\r\n var p1 = [cp1x, cp1y];\r\n var p2 = [cp2x, cp2y];\r\n var p3 = [p3x, p3y];\r\n\r\n for (var i = 0; i <= 1; i++) {\r\n let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\r\n let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\r\n c = 3 * p1[i] - 3 * p0[i];\r\n\r\n if (a === 0) {\r\n if (b === 0) {\r\n continue;\r\n }\r\n\r\n let t = -c / b;\r\n if (0 < t && t < 1) {\r\n if (i === 0) {\r\n bbox.addPoint(f(t), bbox.maxY);\r\n } else if (i === 1) {\r\n bbox.addPoint(bbox.maxX, f(t));\r\n }\r\n }\r\n\r\n continue;\r\n }\r\n\r\n let b2ac = Math.pow(b, 2) - 4 * c * a;\r\n if (b2ac < 0) {\r\n continue;\r\n }\r\n\r\n let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\r\n if (0 < t1 && t1 < 1) {\r\n if (i === 0) {\r\n bbox.addPoint(f(t1), bbox.maxY);\r\n } else if (i === 1) {\r\n bbox.addPoint(bbox.maxX, f(t1));\r\n }\r\n }\r\n\r\n let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\r\n if (0 < t2 && t2 < 1) {\r\n if (i === 0) {\r\n bbox.addPoint(f(t2), bbox.maxY);\r\n } else if (i === 1) {\r\n bbox.addPoint(bbox.maxX, f(t2));\r\n }\r\n }\r\n }\r\n\r\n cx = p3x;\r\n cy = p3y;\r\n break;\r\n }\r\n }\r\n\r\n return this._bbox = Object.freeze(bbox);\r\n }\r\n\r\n /**\r\n * Applies a mapping function to each point in the path.\r\n * @param {function} fn\r\n * @return {Path}\r\n */\r\n mapPoints(fn) {\r\n let path = new Path;\r\n\r\n for (let c of this.commands) {\r\n let args = [];\r\n for (let i = 0; i < c.args.length; i += 2) {\r\n let [x, y] = fn(c.args[i], c.args[i + 1]);\r\n args.push(x, y);\r\n }\r\n\r\n path[c.command](...args);\r\n }\r\n\r\n return path;\r\n }\r\n\r\n /**\r\n * Transforms the path by the given matrix.\r\n */\r\n transform(m0, m1, m2, m3, m4, m5) {\r\n return this.mapPoints((x, y) => {\r\n x = m0 * x + m2 * y + m4;\r\n y = m1 * x + m3 * y + m5;\r\n return [x, y];\r\n });\r\n }\r\n\r\n /**\r\n * Translates the path by the given offset.\r\n */\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n }\r\n\r\n /**\r\n * Rotates the path by the given angle (in radians).\r\n */\r\n rotate(angle) {\r\n let cos = Math.cos(angle);\r\n let sin = Math.sin(angle);\r\n return this.transform(cos, sin, -sin, cos, 0, 0);\r\n }\r\n\r\n /**\r\n * Scales the path.\r\n */\r\n scale(scaleX, scaleY = scaleX) {\r\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\r\n }\r\n}\r\n\r\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\r\n Path.prototype[command] = function(...args) {\r\n this._bbox = this._cbox = null;\r\n this.commands.push({\r\n command,\r\n args\r\n });\r\n\r\n return this;\r\n };\r\n}\r\n","export default [\r\n '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\r\n 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\r\n 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\r\n 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\r\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\r\n 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\r\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\r\n 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\r\n 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\r\n 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\r\n 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\r\n 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\r\n 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\r\n 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\r\n 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\r\n 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\r\n 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\r\n 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\r\n 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\r\n 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\r\n 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\r\n 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\r\n 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\r\n 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\r\n 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\r\n];\r\n","import { cache } from '../decorators';\r\nimport Path from './Path';\r\nimport unicode from 'unicode-properties';\r\nimport StandardNames from './StandardNames';\r\n\r\n/**\r\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\r\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\r\n *\r\n * You do not create glyph objects directly. They are created by various methods on the font object.\r\n * There are several subclasses of the base Glyph class internally that may be returned depending\r\n * on the font format, but they all inherit from this class.\r\n */\r\nexport default class Glyph {\r\n constructor(id, codePoints, font) {\r\n /**\r\n * The glyph id in the font\r\n * @type {number}\r\n */\r\n this.id = id;\r\n\r\n /**\r\n * An array of unicode code points that are represented by this glyph.\r\n * There can be multiple code points in the case of ligatures and other glyphs\r\n * that represent multiple visual characters.\r\n * @type {number[]}\r\n */\r\n this.codePoints = codePoints;\r\n this._font = font;\r\n\r\n // TODO: get this info from GDEF if available\r\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\r\n this.isLigature = this.codePoints.length > 1;\r\n }\r\n\r\n _getPath() {\r\n return new Path();\r\n }\r\n\r\n _getCBox() {\r\n return this.path.cbox;\r\n }\r\n\r\n _getBBox() {\r\n return this.path.bbox;\r\n }\r\n\r\n _getTableMetrics(table) {\r\n if (this.id < table.metrics.length) {\r\n return table.metrics.get(this.id);\r\n }\r\n\r\n let metric = table.metrics.get(table.metrics.length - 1);\r\n let res = {\r\n advance: metric ? metric.advance : 0,\r\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\r\n };\r\n\r\n return res;\r\n }\r\n\r\n _getMetrics(cbox) {\r\n if (this._metrics) { return this._metrics; }\r\n\r\n let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\r\n\r\n // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\r\n if (this._font.vmtx) {\r\n var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\r\n\r\n } else {\r\n let os2;\r\n if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\r\n\r\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\r\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\r\n var topBearing = os2.typoAscender - cbox.maxY;\r\n\r\n } else {\r\n let { hhea } = this._font;\r\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\r\n var topBearing = hhea.ascent - cbox.maxY;\r\n }\r\n }\r\n\r\n if (this._font._variationProcessor && this._font.HVAR) {\r\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\r\n }\r\n\r\n return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\r\n }\r\n\r\n /**\r\n * The glyph’s control box.\r\n * This is often the same as the bounding box, but is faster to compute.\r\n * Because of the way bezier curves are defined, some of the control points\r\n * can be outside of the bounding box. Where `bbox` takes this into account,\r\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\r\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\r\n * for a more detailed description.\r\n *\r\n * @type {BBox}\r\n */\r\n @cache\r\n get cbox() {\r\n return this._getCBox();\r\n }\r\n\r\n /**\r\n * The glyph’s bounding box, i.e. the rectangle that encloses the\r\n * glyph outline as tightly as possible.\r\n * @type {BBox}\r\n */\r\n @cache\r\n get bbox() {\r\n return this._getBBox();\r\n }\r\n\r\n /**\r\n * A vector Path object representing the glyph outline.\r\n * @type {Path}\r\n */\r\n @cache\r\n get path() {\r\n // Cache the path so we only decode it once\r\n // Decoding is actually performed by subclasses\r\n return this._getPath();\r\n }\r\n\r\n /**\r\n * Returns a path scaled to the given font size.\r\n * @param {number} size\r\n * @return {Path}\r\n */\r\n getScaledPath(size) {\r\n let scale = 1 / this._font.unitsPerEm * size;\r\n return this.path.scale(scale);\r\n }\r\n\r\n /**\r\n * The glyph's advance width.\r\n * @type {number}\r\n */\r\n @cache\r\n get advanceWidth() {\r\n return this._getMetrics().advanceWidth;\r\n }\r\n\r\n /**\r\n * The glyph's advance height.\r\n * @type {number}\r\n */\r\n @cache\r\n get advanceHeight() {\r\n return this._getMetrics().advanceHeight;\r\n }\r\n\r\n get ligatureCaretPositions() {}\r\n\r\n _getName() {\r\n let { post } = this._font;\r\n if (!post) {\r\n return null;\r\n }\r\n\r\n switch (post.version) {\r\n case 1:\r\n return StandardNames[this.id];\r\n\r\n case 2:\r\n let id = post.glyphNameIndex[this.id];\r\n if (id < StandardNames.length) {\r\n return StandardNames[id];\r\n }\r\n\r\n return post.names[id - StandardNames.length];\r\n\r\n case 2.5:\r\n return StandardNames[this.id + post.offsets[this.id]];\r\n\r\n case 4:\r\n return String.fromCharCode(post.map[this.id]);\r\n }\r\n }\r\n\r\n /**\r\n * The glyph's name\r\n * @type {string}\r\n */\r\n @cache\r\n get name() {\r\n return this._getName();\r\n }\r\n\r\n /**\r\n * Renders the glyph to the given graphics context, at the specified font size.\r\n * @param {CanvasRenderingContext2d} ctx\r\n * @param {number} size\r\n */\r\n render(ctx, size) {\r\n ctx.save();\r\n\r\n let scale = 1 / this._font.head.unitsPerEm * size;\r\n ctx.scale(scale, scale);\r\n\r\n let fn = this.path.toFunction();\r\n fn(ctx);\r\n ctx.fill();\r\n\r\n ctx.restore();\r\n }\r\n}\r\n","import Glyph from './Glyph';\r\nimport Path from './Path';\r\nimport BBox from './BBox';\r\nimport r from '@foliojs-fork/restructure';\r\n\r\n// The header for both simple and composite glyphs\r\nlet GlyfHeader = new r.Struct({\r\n numberOfContours: r.int16, // if negative, this is a composite glyph\r\n xMin: r.int16,\r\n yMin: r.int16,\r\n xMax: r.int16,\r\n yMax: r.int16\r\n});\r\n\r\n// Flags for simple glyphs\r\nconst ON_CURVE = 1 << 0;\r\nconst X_SHORT_VECTOR = 1 << 1;\r\nconst Y_SHORT_VECTOR = 1 << 2;\r\nconst REPEAT = 1 << 3;\r\nconst SAME_X = 1 << 4;\r\nconst SAME_Y = 1 << 5;\r\n\r\n// Flags for composite glyphs\r\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\r\nconst ARGS_ARE_XY_VALUES = 1 << 1;\r\nconst ROUND_XY_TO_GRID = 1 << 2;\r\nconst WE_HAVE_A_SCALE = 1 << 3;\r\nconst MORE_COMPONENTS = 1 << 5;\r\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\r\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\r\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\r\nconst USE_MY_METRICS = 1 << 9;\r\nconst OVERLAP_COMPOUND = 1 << 10;\r\nconst SCALED_COMPONENT_OFFSET = 1 << 11;\r\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\r\n\r\n// Represents a point in a simple glyph\r\nexport class Point {\r\n constructor(onCurve, endContour, x = 0, y = 0) {\r\n this.onCurve = onCurve;\r\n this.endContour = endContour;\r\n this.x = x;\r\n this.y = y;\r\n }\r\n\r\n copy() {\r\n return new Point(this.onCurve, this.endContour, this.x, this.y);\r\n }\r\n}\r\n\r\n// Represents a component in a composite glyph\r\nclass Component {\r\n constructor(glyphID, dx, dy) {\r\n this.glyphID = glyphID;\r\n this.dx = dx;\r\n this.dy = dy;\r\n this.pos = 0;\r\n this.scaleX = this.scaleY = 1;\r\n this.scale01 = this.scale10 = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a TrueType glyph.\r\n */\r\nexport default class TTFGlyph extends Glyph {\r\n // Parses just the glyph header and returns the bounding box\r\n _getCBox(internal) {\r\n // We need to decode the glyph if variation processing is requested,\r\n // so it's easier just to recompute the path's cbox after decoding.\r\n if (this._font._variationProcessor && !internal) {\r\n return this.path.cbox;\r\n }\r\n\r\n let stream = this._font._getTableStream('glyf');\r\n stream.pos += this._font.loca.offsets[this.id];\r\n let glyph = GlyfHeader.decode(stream);\r\n\r\n let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\r\n return Object.freeze(cbox);\r\n }\r\n\r\n // Parses a single glyph coordinate\r\n _parseGlyphCoord(stream, prev, short, same) {\r\n if (short) {\r\n var val = stream.readUInt8();\r\n if (!same) {\r\n val = -val;\r\n }\r\n\r\n val += prev;\r\n } else {\r\n if (same) {\r\n var val = prev;\r\n } else {\r\n var val = prev + stream.readInt16BE();\r\n }\r\n }\r\n\r\n return val;\r\n }\r\n\r\n // Decodes the glyph data into points for simple glyphs,\r\n // or components for composite glyphs\r\n _decode() {\r\n let glyfPos = this._font.loca.offsets[this.id];\r\n let nextPos = this._font.loca.offsets[this.id + 1];\r\n\r\n // Nothing to do if there is no data for this glyph\r\n if (glyfPos === nextPos) { return null; }\r\n\r\n let stream = this._font._getTableStream('glyf');\r\n stream.pos += glyfPos;\r\n let startPos = stream.pos;\r\n\r\n let glyph = GlyfHeader.decode(stream);\r\n\r\n if (glyph.numberOfContours > 0) {\r\n this._decodeSimple(glyph, stream);\r\n\r\n } else if (glyph.numberOfContours < 0) {\r\n this._decodeComposite(glyph, stream, startPos);\r\n }\r\n\r\n return glyph;\r\n }\r\n\r\n _decodeSimple(glyph, stream) {\r\n // this is a simple glyph\r\n glyph.points = [];\r\n\r\n let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\r\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\r\n\r\n let flags = [];\r\n let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\r\n\r\n while (flags.length < numCoords) {\r\n var flag = stream.readUInt8();\r\n flags.push(flag);\r\n\r\n // check for repeat flag\r\n if (flag & REPEAT) {\r\n let count = stream.readUInt8();\r\n for (let j = 0; j < count; j++) {\r\n flags.push(flag);\r\n }\r\n }\r\n }\r\n\r\n for (var i = 0; i < flags.length; i++) {\r\n var flag = flags[i];\r\n let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\r\n glyph.points.push(point);\r\n }\r\n\r\n let px = 0;\r\n for (var i = 0; i < flags.length; i++) {\r\n var flag = flags[i];\r\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\r\n }\r\n\r\n let py = 0;\r\n for (var i = 0; i < flags.length; i++) {\r\n var flag = flags[i];\r\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\r\n }\r\n\r\n if (this._font._variationProcessor) {\r\n let points = glyph.points.slice();\r\n points.push(...this._getPhantomPoints(glyph));\r\n\r\n this._font._variationProcessor.transformPoints(this.id, points);\r\n glyph.phantomPoints = points.slice(-4);\r\n }\r\n\r\n return;\r\n }\r\n\r\n _decodeComposite(glyph, stream, offset = 0) {\r\n // this is a composite glyph\r\n glyph.components = [];\r\n let haveInstructions = false;\r\n let flags = MORE_COMPONENTS;\r\n\r\n while (flags & MORE_COMPONENTS) {\r\n flags = stream.readUInt16BE();\r\n let gPos = stream.pos - offset;\r\n let glyphID = stream.readUInt16BE();\r\n if (!haveInstructions) {\r\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\r\n }\r\n\r\n if (flags & ARG_1_AND_2_ARE_WORDS) {\r\n var dx = stream.readInt16BE();\r\n var dy = stream.readInt16BE();\r\n } else {\r\n var dx = stream.readInt8();\r\n var dy = stream.readInt8();\r\n }\r\n\r\n var component = new Component(glyphID, dx, dy);\r\n component.pos = gPos;\r\n\r\n if (flags & WE_HAVE_A_SCALE) {\r\n // fixed number with 14 bits of fraction\r\n component.scaleX =\r\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n\r\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\r\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n\r\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\r\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\r\n }\r\n\r\n glyph.components.push(component);\r\n }\r\n\r\n if (this._font._variationProcessor) {\r\n let points = [];\r\n for (let j = 0; j < glyph.components.length; j++) {\r\n var component = glyph.components[j];\r\n points.push(new Point(true, true, component.dx, component.dy));\r\n }\r\n\r\n points.push(...this._getPhantomPoints(glyph));\r\n\r\n this._font._variationProcessor.transformPoints(this.id, points);\r\n glyph.phantomPoints = points.splice(-4, 4);\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let point = points[i];\r\n glyph.components[i].dx = point.x;\r\n glyph.components[i].dy = point.y;\r\n }\r\n }\r\n\r\n return haveInstructions;\r\n }\r\n\r\n _getPhantomPoints(glyph) {\r\n let cbox = this._getCBox(true);\r\n if (this._metrics == null) {\r\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\r\n }\r\n\r\n let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\r\n\r\n return [\r\n new Point(false, true, glyph.xMin - leftBearing, 0),\r\n new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\r\n new Point(false, true, 0, glyph.yMax + topBearing),\r\n new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\r\n ];\r\n }\r\n\r\n // Decodes font data, resolves composite glyphs, and returns an array of contours\r\n _getContours() {\r\n let glyph = this._decode();\r\n if (!glyph) {\r\n return [];\r\n }\r\n\r\n let points = [];\r\n\r\n if (glyph.numberOfContours < 0) {\r\n // resolve composite glyphs\r\n for (let component of glyph.components) {\r\n let contours = this._font.getGlyph(component.glyphID)._getContours();\r\n for (let i = 0; i < contours.length; i++) {\r\n let contour = contours[i];\r\n for (let j = 0; j < contour.length; j++) {\r\n let point = contour[j];\r\n let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\r\n let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\r\n points.push(new Point(point.onCurve, point.endContour, x, y));\r\n }\r\n }\r\n }\r\n } else {\r\n points = glyph.points || [];\r\n }\r\n\r\n // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\r\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\r\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\r\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\r\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\r\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\r\n }\r\n\r\n let contours = [];\r\n let cur = [];\r\n for (let k = 0; k < points.length; k++) {\r\n var point = points[k];\r\n cur.push(point);\r\n if (point.endContour) {\r\n contours.push(cur);\r\n cur = [];\r\n }\r\n }\r\n\r\n return contours;\r\n }\r\n\r\n _getMetrics() {\r\n if (this._metrics) {\r\n return this._metrics;\r\n }\r\n\r\n let cbox = this._getCBox(true);\r\n super._getMetrics(cbox);\r\n\r\n if (this._font._variationProcessor && !this._font.HVAR) {\r\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\r\n this.path;\r\n }\r\n\r\n return this._metrics;\r\n }\r\n\r\n // Converts contours to a Path object that can be rendered\r\n _getPath() {\r\n let contours = this._getContours();\r\n let path = new Path;\r\n\r\n for (let i = 0; i < contours.length; i++) {\r\n let contour = contours[i];\r\n let firstPt = contour[0];\r\n let lastPt = contour[contour.length - 1];\r\n let start = 0;\r\n\r\n if (firstPt.onCurve) {\r\n // The first point will be consumed by the moveTo command, so skip in the loop\r\n var curvePt = null;\r\n start = 1;\r\n } else {\r\n if (lastPt.onCurve) {\r\n // Start at the last point if the first point is off curve and the last point is on curve\r\n firstPt = lastPt;\r\n } else {\r\n // Start at the middle if both the first and last points are off curve\r\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\r\n }\r\n\r\n var curvePt = firstPt;\r\n }\r\n\r\n path.moveTo(firstPt.x, firstPt.y);\r\n\r\n for (let j = start; j < contour.length; j++) {\r\n let pt = contour[j];\r\n let prevPt = j === 0 ? firstPt : contour[j - 1];\r\n\r\n if (prevPt.onCurve && pt.onCurve) {\r\n path.lineTo(pt.x, pt.y);\r\n\r\n } else if (prevPt.onCurve && !pt.onCurve) {\r\n var curvePt = pt;\r\n\r\n } else if (!prevPt.onCurve && !pt.onCurve) {\r\n let midX = (prevPt.x + pt.x) / 2;\r\n let midY = (prevPt.y + pt.y) / 2;\r\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\r\n var curvePt = pt;\r\n\r\n } else if (!prevPt.onCurve && pt.onCurve) {\r\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\r\n var curvePt = null;\r\n\r\n } else {\r\n throw new Error(\"Unknown TTF path state\");\r\n }\r\n }\r\n\r\n // Connect the first and last points\r\n if (curvePt) {\r\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\r\n }\r\n\r\n path.closePath();\r\n }\r\n\r\n return path;\r\n }\r\n}\r\n","import Glyph from './Glyph';\r\nimport Path from './Path';\r\n\r\n/**\r\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\r\n */\r\nexport default class CFFGlyph extends Glyph {\r\n _getName() {\r\n if (this._font.CFF2) {\r\n return super._getName();\r\n }\r\n\r\n return this._font['CFF '].getGlyphName(this.id);\r\n }\r\n\r\n bias(s) {\r\n if (s.length < 1240) {\r\n return 107;\r\n } else if (s.length < 33900) {\r\n return 1131;\r\n } else {\r\n return 32768;\r\n }\r\n }\r\n\r\n _getPath() {\r\n let cff = this._font.CFF2 || this._font['CFF '];\r\n let { stream } = cff;\r\n let str = cff.topDict.CharStrings[this.id];\r\n let end = str.offset + str.length;\r\n stream.pos = str.offset;\r\n\r\n let path = new Path;\r\n let stack = [];\r\n let trans = [];\r\n\r\n let width = null;\r\n let nStems = 0;\r\n let x = 0, y = 0;\r\n let usedGsubrs;\r\n let usedSubrs;\r\n let open = false;\r\n\r\n this._usedGsubrs = usedGsubrs = {};\r\n this._usedSubrs = usedSubrs = {};\r\n\r\n let gsubrs = cff.globalSubrIndex || [];\r\n let gsubrsBias = this.bias(gsubrs);\r\n\r\n let privateDict = cff.privateDictForGlyph(this.id) || {};\r\n let subrs = privateDict.Subrs || [];\r\n let subrsBias = this.bias(subrs);\r\n\r\n let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\r\n let vsindex = privateDict.vsindex;\r\n let variationProcessor = this._font._variationProcessor;\r\n\r\n function checkWidth() {\r\n if (width == null) {\r\n width = stack.shift() + privateDict.nominalWidthX;\r\n }\r\n }\r\n\r\n function parseStems() {\r\n if (stack.length % 2 !== 0) {\r\n checkWidth();\r\n }\r\n\r\n nStems += stack.length >> 1;\r\n return stack.length = 0;\r\n }\r\n\r\n function moveTo(x, y) {\r\n if (open) {\r\n path.closePath();\r\n }\r\n\r\n path.moveTo(x, y);\r\n open = true;\r\n }\r\n\r\n let parse = function() {\r\n while (stream.pos < end) {\r\n let op = stream.readUInt8();\r\n if (op < 32) {\r\n switch (op) {\r\n case 1: // hstem\r\n case 3: // vstem\r\n case 18: // hstemhm\r\n case 23: // vstemhm\r\n parseStems();\r\n break;\r\n\r\n case 4: // vmoveto\r\n if (stack.length > 1) {\r\n checkWidth();\r\n }\r\n\r\n y += stack.shift();\r\n moveTo(x, y);\r\n break;\r\n\r\n case 5: // rlineto\r\n while (stack.length >= 2) {\r\n x += stack.shift();\r\n y += stack.shift();\r\n path.lineTo(x, y);\r\n }\r\n break;\r\n\r\n case 6: // hlineto\r\n case 7: // vlineto\r\n let phase = op === 6;\r\n while (stack.length >= 1) {\r\n if (phase) {\r\n x += stack.shift();\r\n } else {\r\n y += stack.shift();\r\n }\r\n\r\n path.lineTo(x, y);\r\n phase = !phase;\r\n }\r\n break;\r\n\r\n case 8: // rrcurveto\r\n while (stack.length > 0) {\r\n var c1x = x + stack.shift();\r\n var c1y = y + stack.shift();\r\n var c2x = c1x + stack.shift();\r\n var c2y = c1y + stack.shift();\r\n x = c2x + stack.shift();\r\n y = c2y + stack.shift();\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n }\r\n break;\r\n\r\n case 10: // callsubr\r\n let index = stack.pop() + subrsBias;\r\n let subr = subrs[index];\r\n if (subr) {\r\n usedSubrs[index] = true;\r\n var p = stream.pos;\r\n var e = end;\r\n stream.pos = subr.offset;\r\n end = subr.offset + subr.length;\r\n parse();\r\n stream.pos = p;\r\n end = e;\r\n }\r\n break;\r\n\r\n case 11: // return\r\n if (cff.version >= 2) {\r\n break;\r\n }\r\n return;\r\n\r\n case 14: // endchar\r\n if (cff.version >= 2) {\r\n break;\r\n }\r\n\r\n if (stack.length > 0) {\r\n checkWidth();\r\n }\r\n\r\n if (open) {\r\n path.closePath();\r\n open = false;\r\n }\r\n break;\r\n\r\n case 15: { // vsindex\r\n if (cff.version < 2) {\r\n throw new Error('vsindex operator not supported in CFF v1');\r\n }\r\n\r\n vsindex = stack.pop();\r\n break;\r\n }\r\n\r\n case 16: { // blend\r\n if (cff.version < 2) {\r\n throw new Error('blend operator not supported in CFF v1');\r\n }\r\n\r\n if (!variationProcessor) {\r\n throw new Error('blend operator in non-variation font');\r\n }\r\n\r\n let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\r\n let numBlends = stack.pop();\r\n let numOperands = numBlends * blendVector.length;\r\n let delta = stack.length - numOperands;\r\n let base = delta - numBlends;\r\n\r\n for (let i = 0; i < numBlends; i++) {\r\n let sum = stack[base + i];\r\n for (let j = 0; j < blendVector.length; j++) {\r\n sum += blendVector[j] * stack[delta++];\r\n }\r\n\r\n stack[base + i] = sum;\r\n }\r\n\r\n while (numOperands--) {\r\n stack.pop();\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 19: // hintmask\r\n case 20: // cntrmask\r\n parseStems();\r\n stream.pos += (nStems + 7) >> 3;\r\n break;\r\n\r\n case 21: // rmoveto\r\n if (stack.length > 2) {\r\n checkWidth();\r\n }\r\n\r\n x += stack.shift();\r\n y += stack.shift();\r\n moveTo(x, y);\r\n break;\r\n\r\n case 22: // hmoveto\r\n if (stack.length > 1) {\r\n checkWidth();\r\n }\r\n\r\n x += stack.shift();\r\n moveTo(x, y);\r\n break;\r\n\r\n case 24: // rcurveline\r\n while (stack.length >= 8) {\r\n var c1x = x + stack.shift();\r\n var c1y = y + stack.shift();\r\n var c2x = c1x + stack.shift();\r\n var c2y = c1y + stack.shift();\r\n x = c2x + stack.shift();\r\n y = c2y + stack.shift();\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n }\r\n\r\n x += stack.shift();\r\n y += stack.shift();\r\n path.lineTo(x, y);\r\n break;\r\n\r\n case 25: // rlinecurve\r\n while (stack.length >= 8) {\r\n x += stack.shift();\r\n y += stack.shift();\r\n path.lineTo(x, y);\r\n }\r\n\r\n var c1x = x + stack.shift();\r\n var c1y = y + stack.shift();\r\n var c2x = c1x + stack.shift();\r\n var c2y = c1y + stack.shift();\r\n x = c2x + stack.shift();\r\n y = c2y + stack.shift();\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n break;\r\n\r\n case 26: // vvcurveto\r\n if (stack.length % 2) {\r\n x += stack.shift();\r\n }\r\n\r\n while (stack.length >= 4) {\r\n c1x = x;\r\n c1y = y + stack.shift();\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n x = c2x;\r\n y = c2y + stack.shift();\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n }\r\n break;\r\n\r\n case 27: // hhcurveto\r\n if (stack.length % 2) {\r\n y += stack.shift();\r\n }\r\n\r\n while (stack.length >= 4) {\r\n c1x = x + stack.shift();\r\n c1y = y;\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n x = c2x + stack.shift();\r\n y = c2y;\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n }\r\n break;\r\n\r\n case 28: // shortint\r\n stack.push(stream.readInt16BE());\r\n break;\r\n\r\n case 29: // callgsubr\r\n index = stack.pop() + gsubrsBias;\r\n subr = gsubrs[index];\r\n if (subr) {\r\n usedGsubrs[index] = true;\r\n var p = stream.pos;\r\n var e = end;\r\n stream.pos = subr.offset;\r\n end = subr.offset + subr.length;\r\n parse();\r\n stream.pos = p;\r\n end = e;\r\n }\r\n break;\r\n\r\n case 30: // vhcurveto\r\n case 31: // hvcurveto\r\n phase = op === 31;\r\n while (stack.length >= 4) {\r\n if (phase) {\r\n c1x = x + stack.shift();\r\n c1y = y;\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n y = c2y + stack.shift();\r\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\r\n } else {\r\n c1x = x;\r\n c1y = y + stack.shift();\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n x = c2x + stack.shift();\r\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\r\n }\r\n\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\r\n phase = !phase;\r\n }\r\n break;\r\n\r\n case 12:\r\n op = stream.readUInt8();\r\n switch (op) {\r\n case 3: // and\r\n let a = stack.pop();\r\n let b = stack.pop();\r\n stack.push(a && b ? 1 : 0);\r\n break;\r\n\r\n case 4: // or\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a || b ? 1 : 0);\r\n break;\r\n\r\n case 5: // not\r\n a = stack.pop();\r\n stack.push(a ? 0 : 1);\r\n break;\r\n\r\n case 9: // abs\r\n a = stack.pop();\r\n stack.push(Math.abs(a));\r\n break;\r\n\r\n case 10: // add\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a + b);\r\n break;\r\n\r\n case 11: // sub\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a - b);\r\n break;\r\n\r\n case 12: // div\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a / b);\r\n break;\r\n\r\n case 14: // neg\r\n a = stack.pop();\r\n stack.push(-a);\r\n break;\r\n\r\n case 15: // eq\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a === b ? 1 : 0);\r\n break;\r\n\r\n case 18: // drop\r\n stack.pop();\r\n break;\r\n\r\n case 20: // put\r\n let val = stack.pop();\r\n let idx = stack.pop();\r\n trans[idx] = val;\r\n break;\r\n\r\n case 21: // get\r\n idx = stack.pop();\r\n stack.push(trans[idx] || 0);\r\n break;\r\n\r\n case 22: // ifelse\r\n let s1 = stack.pop();\r\n let s2 = stack.pop();\r\n let v1 = stack.pop();\r\n let v2 = stack.pop();\r\n stack.push(v1 <= v2 ? s1 : s2);\r\n break;\r\n\r\n case 23: // random\r\n stack.push(Math.random());\r\n break;\r\n\r\n case 24: // mul\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(a * b);\r\n break;\r\n\r\n case 26: // sqrt\r\n a = stack.pop();\r\n stack.push(Math.sqrt(a));\r\n break;\r\n\r\n case 27: // dup\r\n a = stack.pop();\r\n stack.push(a, a);\r\n break;\r\n\r\n case 28: // exch\r\n a = stack.pop();\r\n b = stack.pop();\r\n stack.push(b, a);\r\n break;\r\n\r\n case 29: // index\r\n idx = stack.pop();\r\n if (idx < 0) {\r\n idx = 0;\r\n } else if (idx > stack.length - 1) {\r\n idx = stack.length - 1;\r\n }\r\n\r\n stack.push(stack[idx]);\r\n break;\r\n\r\n case 30: // roll\r\n let n = stack.pop();\r\n let j = stack.pop();\r\n\r\n if (j >= 0) {\r\n while (j > 0) {\r\n var t = stack[n - 1];\r\n for (let i = n - 2; i >= 0; i--) {\r\n stack[i + 1] = stack[i];\r\n }\r\n\r\n stack[0] = t;\r\n j--;\r\n }\r\n } else {\r\n while (j < 0) {\r\n var t = stack[0];\r\n for (let i = 0; i <= n; i++) {\r\n stack[i] = stack[i + 1];\r\n }\r\n\r\n stack[n - 1] = t;\r\n j++;\r\n }\r\n }\r\n break;\r\n\r\n case 34: // hflex\r\n c1x = x + stack.shift();\r\n c1y = y;\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n let c3x = c2x + stack.shift();\r\n let c3y = c2y;\r\n let c4x = c3x + stack.shift();\r\n let c4y = c3y;\r\n let c5x = c4x + stack.shift();\r\n let c5y = c4y;\r\n let c6x = c5x + stack.shift();\r\n let c6y = c5y;\r\n x = c6x;\r\n y = c6y;\r\n\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\r\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\r\n break;\r\n\r\n case 35: // flex\r\n let pts = [];\r\n\r\n for (let i = 0; i <= 5; i++) {\r\n x += stack.shift();\r\n y += stack.shift();\r\n pts.push(x, y);\r\n }\r\n\r\n path.bezierCurveTo(...pts.slice(0, 6));\r\n path.bezierCurveTo(...pts.slice(6));\r\n stack.shift(); // fd\r\n break;\r\n\r\n case 36: // hflex1\r\n c1x = x + stack.shift();\r\n c1y = y + stack.shift();\r\n c2x = c1x + stack.shift();\r\n c2y = c1y + stack.shift();\r\n c3x = c2x + stack.shift();\r\n c3y = c2y;\r\n c4x = c3x + stack.shift();\r\n c4y = c3y;\r\n c5x = c4x + stack.shift();\r\n c5y = c4y + stack.shift();\r\n c6x = c5x + stack.shift();\r\n c6y = c5y;\r\n x = c6x;\r\n y = c6y;\r\n\r\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\r\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\r\n break;\r\n\r\n case 37: // flex1\r\n let startx = x;\r\n let starty = y;\r\n\r\n pts = [];\r\n for (let i = 0; i <= 4; i++) {\r\n x += stack.shift();\r\n y += stack.shift();\r\n pts.push(x, y);\r\n }\r\n\r\n if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\r\n x += stack.shift();\r\n y = starty;\r\n } else {\r\n x = startx;\r\n y += stack.shift();\r\n }\r\n\r\n pts.push(x, y);\r\n path.bezierCurveTo(...pts.slice(0, 6));\r\n path.bezierCurveTo(...pts.slice(6));\r\n break;\r\n\r\n default:\r\n throw new Error(`Unknown op: 12 ${op}`);\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(`Unknown op: ${op}`);\r\n }\r\n\r\n } else if (op < 247) {\r\n stack.push(op - 139);\r\n } else if (op < 251) {\r\n var b1 = stream.readUInt8();\r\n stack.push((op - 247) * 256 + b1 + 108);\r\n } else if (op < 255) {\r\n var b1 = stream.readUInt8();\r\n stack.push(-(op - 251) * 256 - b1 - 108);\r\n } else {\r\n stack.push(stream.readInt32BE() / 65536);\r\n }\r\n }\r\n };\r\n\r\n parse();\r\n\r\n if (open) {\r\n path.closePath();\r\n }\r\n\r\n return path;\r\n }\r\n}\r\n","import TTFGlyph from './TTFGlyph';\r\nimport r from '@foliojs-fork/restructure';\r\n\r\nlet SBIXImage = new r.Struct({\r\n originX: r.uint16,\r\n originY: r.uint16,\r\n type: new r.String(4),\r\n data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\r\n});\r\n\r\n/**\r\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\r\n */\r\nexport default class SBIXGlyph extends TTFGlyph {\r\n /**\r\n * Returns an object representing a glyph image at the given point size.\r\n * The object has a data property with a Buffer containing the actual image data,\r\n * along with the image type, and origin.\r\n *\r\n * @param {number} size\r\n * @return {object}\r\n */\r\n getImageForSize(size) {\r\n for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\r\n var table = this._font.sbix.imageTables[i];\r\n if (table.ppem >= size) { break; }\r\n }\r\n\r\n let offsets = table.imageOffsets;\r\n let start = offsets[this.id];\r\n let end = offsets[this.id + 1];\r\n\r\n if (start === end) {\r\n return null;\r\n }\r\n\r\n this._font.stream.pos = start;\r\n return SBIXImage.decode(this._font.stream, {buflen: end - start});\r\n }\r\n\r\n render(ctx, size) {\r\n let img = this.getImageForSize(size);\r\n if (img != null) {\r\n let scale = size / this._font.unitsPerEm;\r\n ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\r\n }\r\n\r\n if (this._font.sbix.flags.renderOutlines) {\r\n super.render(ctx, size);\r\n }\r\n }\r\n}\r\n","import Glyph from './Glyph';\r\nimport BBox from './BBox';\r\n\r\nclass COLRLayer {\r\n constructor(glyph, color) {\r\n this.glyph = glyph;\r\n this.color = color;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\r\n * Each glyph in this format contain a list of colored layers, each\r\n * of which is another vector glyph.\r\n */\r\nexport default class COLRGlyph extends Glyph {\r\n _getBBox() {\r\n let bbox = new BBox;\r\n for (let i = 0; i < this.layers.length; i++) {\r\n let layer = this.layers[i];\r\n let b = layer.glyph.bbox;\r\n bbox.addPoint(b.minX, b.minY);\r\n bbox.addPoint(b.maxX, b.maxY);\r\n }\r\n\r\n return bbox;\r\n }\r\n\r\n /**\r\n * Returns an array of objects containing the glyph and color for\r\n * each layer in the composite color glyph.\r\n * @type {object[]}\r\n */\r\n get layers() {\r\n let cpal = this._font.CPAL;\r\n let colr = this._font.COLR;\r\n let low = 0;\r\n let high = colr.baseGlyphRecord.length - 1;\r\n\r\n while (low <= high) {\r\n let mid = (low + high) >> 1;\r\n var rec = colr.baseGlyphRecord[mid];\r\n\r\n if (this.id < rec.gid) {\r\n high = mid - 1;\r\n } else if (this.id > rec.gid) {\r\n low = mid + 1;\r\n } else {\r\n var baseLayer = rec;\r\n break;\r\n }\r\n }\r\n\r\n // if base glyph not found in COLR table,\r\n // default to normal glyph from glyf or CFF\r\n if (baseLayer == null) {\r\n var g = this._font._getBaseGlyph(this.id);\r\n var color = {\r\n red: 0,\r\n green: 0,\r\n blue: 0,\r\n alpha: 255\r\n };\r\n\r\n return [new COLRLayer(g, color)];\r\n }\r\n\r\n // otherwise, return an array of all the layers\r\n let layers = [];\r\n for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\r\n var rec = colr.layerRecords[i];\r\n var color = cpal.colorRecords[rec.paletteIndex];\r\n var g = this._font._getBaseGlyph(rec.gid);\r\n layers.push(new COLRLayer(g, color));\r\n }\r\n\r\n return layers;\r\n }\r\n\r\n render(ctx, size) {\r\n for (let {glyph, color} of this.layers) {\r\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\r\n glyph.render(ctx, size);\r\n }\r\n\r\n return;\r\n }\r\n}\r\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\r\nconst TUPLE_COUNT_MASK = 0x0fff;\r\nconst EMBEDDED_TUPLE_COORD = 0x8000;\r\nconst INTERMEDIATE_TUPLE = 0x4000;\r\nconst PRIVATE_POINT_NUMBERS = 0x2000;\r\nconst TUPLE_INDEX_MASK = 0x0fff;\r\nconst POINTS_ARE_WORDS = 0x80;\r\nconst POINT_RUN_COUNT_MASK = 0x7f;\r\nconst DELTAS_ARE_ZERO = 0x80;\r\nconst DELTAS_ARE_WORDS = 0x40;\r\nconst DELTA_RUN_COUNT_MASK = 0x3f;\r\n\r\n/**\r\n * This class is transforms TrueType glyphs according to the data from\r\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\r\n * These tables allow infinite adjustments to glyph weight, width, slant,\r\n * and optical size without the designer needing to specify every exact style.\r\n *\r\n * Apple's documentation for these tables is not great, so thanks to the\r\n * Freetype project for figuring much of this out.\r\n *\r\n * @private\r\n */\r\nexport default class GlyphVariationProcessor {\r\n constructor(font, coords) {\r\n this.font = font;\r\n this.normalizedCoords = this.normalizeCoords(coords);\r\n this.blendVectors = new Map;\r\n }\r\n\r\n normalizeCoords(coords) {\r\n // the default mapping is linear along each axis, in two segments:\r\n // from the minValue to defaultValue, and from defaultValue to maxValue.\r\n let normalized = [];\r\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\r\n let axis = this.font.fvar.axis[i];\r\n if (coords[i] < axis.defaultValue) {\r\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\r\n } else {\r\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\r\n }\r\n }\r\n\r\n // if there is an avar table, the normalized value is calculated\r\n // by interpolating between the two nearest mapped values.\r\n if (this.font.avar) {\r\n for (var i = 0; i < this.font.avar.segment.length; i++) {\r\n let segment = this.font.avar.segment[i];\r\n for (let j = 0; j < segment.correspondence.length; j++) {\r\n let pair = segment.correspondence[j];\r\n if (j >= 1 && normalized[i] < pair.fromCoord) {\r\n let prev = segment.correspondence[j - 1];\r\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\r\n (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\r\n prev.toCoord;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n transformPoints(gid, glyphPoints) {\r\n if (!this.font.fvar || !this.font.gvar) { return; }\r\n\r\n let { gvar } = this.font;\r\n if (gid >= gvar.glyphCount) { return; }\r\n\r\n let offset = gvar.offsets[gid];\r\n if (offset === gvar.offsets[gid + 1]) { return; }\r\n\r\n // Read the gvar data for this glyph\r\n let { stream } = this.font;\r\n stream.pos = offset;\r\n if (stream.pos >= stream.length) {\r\n return;\r\n }\r\n\r\n let tupleCount = stream.readUInt16BE();\r\n let offsetToData = offset + stream.readUInt16BE();\r\n\r\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\r\n var here = stream.pos;\r\n stream.pos = offsetToData;\r\n var sharedPoints = this.decodePoints();\r\n offsetToData = stream.pos;\r\n stream.pos = here;\r\n }\r\n\r\n let origPoints = glyphPoints.map(pt => pt.copy());\r\n\r\n tupleCount &= TUPLE_COUNT_MASK;\r\n for (let i = 0; i < tupleCount; i++) {\r\n let tupleDataSize = stream.readUInt16BE();\r\n let tupleIndex = stream.readUInt16BE();\r\n\r\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\r\n var tupleCoords = [];\r\n for (let a = 0; a < gvar.axisCount; a++) {\r\n tupleCoords.push(stream.readInt16BE() / 16384);\r\n }\r\n\r\n } else {\r\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\r\n throw new Error('Invalid gvar table');\r\n }\r\n\r\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\r\n }\r\n\r\n if (tupleIndex & INTERMEDIATE_TUPLE) {\r\n var startCoords = [];\r\n for (let a = 0; a < gvar.axisCount; a++) {\r\n startCoords.push(stream.readInt16BE() / 16384);\r\n }\r\n\r\n var endCoords = [];\r\n for (let a = 0; a < gvar.axisCount; a++) {\r\n endCoords.push(stream.readInt16BE() / 16384);\r\n }\r\n }\r\n\r\n // Get the factor at which to apply this tuple\r\n let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\r\n if (factor === 0) {\r\n offsetToData += tupleDataSize;\r\n continue;\r\n }\r\n\r\n var here = stream.pos;\r\n stream.pos = offsetToData;\r\n\r\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\r\n var points = this.decodePoints();\r\n } else {\r\n var points = sharedPoints;\r\n }\r\n\r\n // points.length = 0 means there are deltas for all points\r\n let nPoints = points.length === 0 ? glyphPoints.length : points.length;\r\n let xDeltas = this.decodeDeltas(nPoints);\r\n let yDeltas = this.decodeDeltas(nPoints);\r\n\r\n if (points.length === 0) { // all points\r\n for (let i = 0; i < glyphPoints.length; i++) {\r\n var point = glyphPoints[i];\r\n point.x += Math.round(xDeltas[i] * factor);\r\n point.y += Math.round(yDeltas[i] * factor);\r\n }\r\n } else {\r\n let outPoints = origPoints.map(pt => pt.copy());\r\n let hasDelta = glyphPoints.map(() => false);\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let idx = points[i];\r\n if (idx < glyphPoints.length) {\r\n let point = outPoints[idx];\r\n hasDelta[idx] = true;\r\n\r\n point.x += Math.round(xDeltas[i] * factor);\r\n point.y += Math.round(yDeltas[i] * factor);\r\n }\r\n }\r\n\r\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\r\n\r\n for (let i = 0; i < glyphPoints.length; i++) {\r\n let deltaX = outPoints[i].x - origPoints[i].x;\r\n let deltaY = outPoints[i].y - origPoints[i].y;\r\n\r\n glyphPoints[i].x += deltaX;\r\n glyphPoints[i].y += deltaY;\r\n }\r\n }\r\n\r\n offsetToData += tupleDataSize;\r\n stream.pos = here;\r\n }\r\n }\r\n\r\n decodePoints() {\r\n let stream = this.font.stream;\r\n let count = stream.readUInt8();\r\n\r\n if (count & POINTS_ARE_WORDS) {\r\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\r\n }\r\n\r\n let points = new Uint16Array(count);\r\n let i = 0;\r\n let point = 0;\r\n while (i < count) {\r\n let run = stream.readUInt8();\r\n let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\r\n let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\r\n\r\n for (let j = 0; j < runCount && i < count; j++) {\r\n point += fn.call(stream);\r\n points[i++] = point;\r\n }\r\n }\r\n\r\n return points;\r\n }\r\n\r\n decodeDeltas(count) {\r\n let stream = this.font.stream;\r\n let i = 0;\r\n let deltas = new Int16Array(count);\r\n\r\n while (i < count) {\r\n let run = stream.readUInt8();\r\n let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\r\n\r\n if (run & DELTAS_ARE_ZERO) {\r\n i += runCount;\r\n\r\n } else {\r\n let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\r\n for (let j = 0; j < runCount && i < count; j++) {\r\n deltas[i++] = fn.call(stream);\r\n }\r\n }\r\n }\r\n\r\n return deltas;\r\n }\r\n\r\n tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\r\n let normalized = this.normalizedCoords;\r\n let { gvar } = this.font;\r\n let factor = 1;\r\n\r\n for (let i = 0; i < gvar.axisCount; i++) {\r\n if (tupleCoords[i] === 0) {\r\n continue;\r\n }\r\n\r\n if (normalized[i] === 0) {\r\n return 0;\r\n }\r\n\r\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\r\n if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\r\n (normalized[i] > Math.max(0, tupleCoords[i]))) {\r\n return 0;\r\n }\r\n\r\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\r\n } else {\r\n if ((normalized[i] < startCoords[i]) ||\r\n (normalized[i] > endCoords[i])) {\r\n return 0;\r\n\r\n } else if (normalized[i] < tupleCoords[i]) {\r\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\r\n\r\n } else {\r\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\r\n }\r\n }\r\n }\r\n\r\n return factor;\r\n }\r\n\r\n // Interpolates points without delta values.\r\n // Needed for the Ø and Q glyphs in Skia.\r\n // Algorithm from Freetype.\r\n interpolateMissingDeltas(points, inPoints, hasDelta) {\r\n if (points.length === 0) {\r\n return;\r\n }\r\n\r\n let point = 0;\r\n while (point < points.length) {\r\n let firstPoint = point;\r\n\r\n // find the end point of the contour\r\n let endPoint = point;\r\n let pt = points[endPoint];\r\n while (!pt.endContour) {\r\n pt = points[++endPoint];\r\n }\r\n\r\n // find the first point that has a delta\r\n while (point <= endPoint && !hasDelta[point]) {\r\n point++;\r\n }\r\n\r\n if (point > endPoint) {\r\n continue;\r\n }\r\n\r\n let firstDelta = point;\r\n let curDelta = point;\r\n point++;\r\n\r\n while (point <= endPoint) {\r\n // find the next point with a delta, and interpolate intermediate points\r\n if (hasDelta[point]) {\r\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\r\n curDelta = point;\r\n }\r\n\r\n point++;\r\n }\r\n\r\n // shift contour if we only have a single delta\r\n if (curDelta === firstDelta) {\r\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\r\n } else {\r\n // otherwise, handle the remaining points at the end and beginning of the contour\r\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\r\n\r\n if (firstDelta > 0) {\r\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\r\n }\r\n }\r\n\r\n point = endPoint + 1;\r\n }\r\n }\r\n\r\n deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\r\n if (p1 > p2) {\r\n return;\r\n }\r\n\r\n let iterable = ['x', 'y'];\r\n for (let i = 0; i < iterable.length; i++) {\r\n let k = iterable[i];\r\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\r\n var p = ref1;\r\n ref1 = ref2;\r\n ref2 = p;\r\n }\r\n\r\n let in1 = inPoints[ref1][k];\r\n let in2 = inPoints[ref2][k];\r\n let out1 = outPoints[ref1][k];\r\n let out2 = outPoints[ref2][k];\r\n\r\n // If the reference points have the same coordinate but different\r\n // delta, inferred delta is zero. Otherwise interpolate.\r\n if (in1 !== in2 || out1 === out2) {\r\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\r\n\r\n for (let p = p1; p <= p2; p++) {\r\n let out = inPoints[p][k];\r\n\r\n if (out <= in1) {\r\n out += out1 - in1;\r\n } else if (out >= in2) {\r\n out += out2 - in2;\r\n } else {\r\n out = out1 + (out - in1) * scale;\r\n }\r\n\r\n outPoints[p][k] = out;\r\n }\r\n }\r\n }\r\n }\r\n\r\n deltaShift(p1, p2, ref, inPoints, outPoints) {\r\n let deltaX = outPoints[ref].x - inPoints[ref].x;\r\n let deltaY = outPoints[ref].y - inPoints[ref].y;\r\n\r\n if (deltaX === 0 && deltaY === 0) {\r\n return;\r\n }\r\n\r\n for (let p = p1; p <= p2; p++) {\r\n if (p !== ref) {\r\n outPoints[p].x += deltaX;\r\n outPoints[p].y += deltaY;\r\n }\r\n }\r\n }\r\n\r\n getAdvanceAdjustment(gid, table) {\r\n let outerIndex, innerIndex;\r\n\r\n if (table.advanceWidthMapping) {\r\n let idx = gid;\r\n if (idx >= table.advanceWidthMapping.mapCount) {\r\n idx = table.advanceWidthMapping.mapCount - 1;\r\n }\r\n\r\n let entryFormat = table.advanceWidthMapping.entryFormat;\r\n ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\r\n } else {\r\n outerIndex = 0;\r\n innerIndex = gid;\r\n }\r\n\r\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\r\n }\r\n\r\n // See pseudo code from `Font Variations Overview'\r\n // in the OpenType specification.\r\n getDelta(itemStore, outerIndex, innerIndex) {\r\n if (outerIndex >= itemStore.itemVariationData.length) {\r\n return 0;\r\n }\r\n\r\n let varData = itemStore.itemVariationData[outerIndex];\r\n if (innerIndex >= varData.deltaSets.length) {\r\n return 0;\r\n }\r\n\r\n let deltaSet = varData.deltaSets[innerIndex];\r\n let blendVector = this.getBlendVector(itemStore, outerIndex);\r\n let netAdjustment = 0;\r\n\r\n for (let master = 0; master < varData.regionIndexCount; master++) {\r\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\r\n }\r\n\r\n return netAdjustment;\r\n }\r\n\r\n getBlendVector(itemStore, outerIndex) {\r\n let varData = itemStore.itemVariationData[outerIndex];\r\n if (this.blendVectors.has(varData)) {\r\n return this.blendVectors.get(varData);\r\n }\r\n\r\n let normalizedCoords = this.normalizedCoords;\r\n let blendVector = [];\r\n\r\n // outer loop steps through master designs to be blended\r\n for (let master = 0; master < varData.regionIndexCount; master++) {\r\n let scalar = 1;\r\n let regionIndex = varData.regionIndexes[master];\r\n let axes = itemStore.variationRegionList.variationRegions[regionIndex];\r\n\r\n // inner loop steps through axes in this region\r\n for (let j = 0; j < axes.length; j++) {\r\n let axis = axes[j];\r\n let axisScalar;\r\n\r\n // compute the scalar contribution of this axis\r\n // ignore invalid ranges\r\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\r\n axisScalar = 1;\r\n\r\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\r\n axisScalar = 1;\r\n\r\n // peak of 0 means ignore this axis\r\n } else if (axis.peakCoord === 0) {\r\n axisScalar = 1;\r\n\r\n // ignore this region if coords are out of range\r\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\r\n axisScalar = 0;\r\n\r\n // calculate a proportional factor\r\n } else {\r\n if (normalizedCoords[j] === axis.peakCoord) {\r\n axisScalar = 1;\r\n } else if (normalizedCoords[j] < axis.peakCoord) {\r\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\r\n (axis.peakCoord - axis.startCoord + Number.EPSILON);\r\n } else {\r\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\r\n (axis.endCoord - axis.peakCoord + Number.EPSILON);\r\n }\r\n }\r\n\r\n // take product of all the axis scalars\r\n scalar *= axisScalar;\r\n }\r\n\r\n blendVector[master] = scalar;\r\n }\r\n\r\n this.blendVectors.set(varData, blendVector);\r\n return blendVector;\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nconst resolved = Promise.resolve();\r\n\r\nexport default class Subset {\r\n constructor(font) {\r\n this.font = font;\r\n this.glyphs = [];\r\n this.mapping = {};\r\n\r\n // always include the missing glyph\r\n this.includeGlyph(0);\r\n }\r\n\r\n includeGlyph(glyph) {\r\n if (typeof glyph === 'object') {\r\n glyph = glyph.id;\r\n }\r\n\r\n if (this.mapping[glyph] == null) {\r\n this.glyphs.push(glyph);\r\n this.mapping[glyph] = this.glyphs.length - 1;\r\n }\r\n\r\n return this.mapping[glyph];\r\n }\r\n\r\n encodeStream() {\r\n let s = new r.EncodeStream();\r\n\r\n resolved.then(() => {\r\n this.encode(s);\r\n return s.end();\r\n });\r\n\r\n return s;\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\n\r\n// Flags for simple glyphs\r\nconst ON_CURVE = 1 << 0;\r\nconst X_SHORT_VECTOR = 1 << 1;\r\nconst Y_SHORT_VECTOR = 1 << 2;\r\nconst REPEAT = 1 << 3;\r\nconst SAME_X = 1 << 4;\r\nconst SAME_Y = 1 << 5;\r\n\r\nclass Point {\r\n static size(val) {\r\n return val >= 0 && val <= 255 ? 1 : 2;\r\n }\r\n\r\n static encode(stream, value) {\r\n if (value >= 0 && value <= 255) {\r\n stream.writeUInt8(value);\r\n } else {\r\n stream.writeInt16BE(value);\r\n }\r\n }\r\n}\r\n\r\nlet Glyf = new r.Struct({\r\n numberOfContours: r.int16, // if negative, this is a composite glyph\r\n xMin: r.int16,\r\n yMin: r.int16,\r\n xMax: r.int16,\r\n yMax: r.int16,\r\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\r\n instructions: new r.Array(r.uint8, r.uint16),\r\n flags: new r.Array(r.uint8, 0),\r\n xPoints: new r.Array(Point, 0),\r\n yPoints: new r.Array(Point, 0)\r\n});\r\n\r\n/**\r\n * Encodes TrueType glyph outlines\r\n */\r\nexport default class TTFGlyphEncoder {\r\n encodeSimple(path, instructions = []) {\r\n let endPtsOfContours = [];\r\n let xPoints = [];\r\n let yPoints = [];\r\n let flags = [];\r\n let same = 0;\r\n let lastX = 0, lastY = 0, lastFlag = 0;\r\n let pointCount = 0;\r\n\r\n for (let i = 0; i < path.commands.length; i++) {\r\n let c = path.commands[i];\r\n\r\n for (let j = 0; j < c.args.length; j += 2) {\r\n let x = c.args[j];\r\n let y = c.args[j + 1];\r\n let flag = 0;\r\n\r\n // If the ending point of a quadratic curve is the midpoint\r\n // between the control point and the control point of the next\r\n // quadratic curve, we can omit the ending point.\r\n if (c.command === 'quadraticCurveTo' && j === 2) {\r\n let next = path.commands[i + 1];\r\n if (next && next.command === 'quadraticCurveTo') {\r\n let midX = (lastX + next.args[0]) / 2;\r\n let midY = (lastY + next.args[1]) / 2;\r\n\r\n if (x === midX && y === midY) {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n // All points except control points are on curve.\r\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\r\n flag |= ON_CURVE;\r\n }\r\n\r\n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\r\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\r\n\r\n if (flag === lastFlag && same < 255) {\r\n flags[flags.length - 1] |= REPEAT;\r\n same++;\r\n } else {\r\n if (same > 0) {\r\n flags.push(same);\r\n same = 0;\r\n }\r\n\r\n flags.push(flag);\r\n lastFlag = flag;\r\n }\r\n\r\n lastX = x;\r\n lastY = y;\r\n pointCount++;\r\n }\r\n\r\n if (c.command === 'closePath') {\r\n endPtsOfContours.push(pointCount - 1);\r\n }\r\n }\r\n\r\n // Close the path if the last command didn't already\r\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\r\n endPtsOfContours.push(pointCount - 1);\r\n }\r\n\r\n let bbox = path.bbox;\r\n let glyf = {\r\n numberOfContours: endPtsOfContours.length,\r\n xMin: bbox.minX,\r\n yMin: bbox.minY,\r\n xMax: bbox.maxX,\r\n yMax: bbox.maxY,\r\n endPtsOfContours: endPtsOfContours,\r\n instructions: instructions,\r\n flags: flags,\r\n xPoints: xPoints,\r\n yPoints: yPoints\r\n };\r\n\r\n let size = Glyf.size(glyf);\r\n let tail = 4 - (size % 4);\r\n\r\n let stream = new r.EncodeStream(size + tail);\r\n Glyf.encode(stream, glyf);\r\n\r\n // Align to 4-byte length\r\n if (tail !== 0) {\r\n stream.fill(0, tail);\r\n }\r\n\r\n return stream.buffer;\r\n }\r\n\r\n _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\r\n let diff = value - last;\r\n\r\n if (value === last) {\r\n flag |= sameFlag;\r\n } else {\r\n if (-255 <= diff && diff <= 255) {\r\n flag |= shortFlag;\r\n if (diff < 0) {\r\n diff = -diff;\r\n } else {\r\n flag |= sameFlag;\r\n }\r\n }\r\n\r\n points.push(diff);\r\n }\r\n\r\n return flag;\r\n }\r\n}\r\n","import cloneDeep from 'clone';\r\nimport Subset from './Subset';\r\nimport Directory from '../tables/directory';\r\nimport Tables from '../tables';\r\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\r\n\r\nexport default class TTFSubset extends Subset {\r\n constructor(font) {\r\n super(font);\r\n this.glyphEncoder = new TTFGlyphEncoder;\r\n }\r\n\r\n _addGlyph(gid) {\r\n let glyph = this.font.getGlyph(gid);\r\n let glyf = glyph._decode();\r\n\r\n // get the offset to the glyph from the loca table\r\n let curOffset = this.font.loca.offsets[gid];\r\n let nextOffset = this.font.loca.offsets[gid + 1];\r\n\r\n let stream = this.font._getTableStream('glyf');\r\n stream.pos += curOffset;\r\n\r\n let buffer = stream.readBuffer(nextOffset - curOffset);\r\n\r\n // if it is a compound glyph, include its components\r\n if (glyf && glyf.numberOfContours < 0) {\r\n buffer = Buffer.from(buffer);\r\n for (let component of glyf.components) {\r\n gid = this.includeGlyph(component.glyphID);\r\n buffer.writeUInt16BE(gid, component.pos);\r\n }\r\n } else if (glyf && this.font._variationProcessor) {\r\n // If this is a TrueType variation glyph, re-encode the path\r\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\r\n }\r\n\r\n this.glyf.push(buffer);\r\n this.loca.offsets.push(this.offset);\r\n\r\n this.hmtx.metrics.push({\r\n advance: glyph.advanceWidth,\r\n bearing: glyph._getMetrics().leftBearing\r\n });\r\n\r\n this.offset += buffer.length;\r\n return this.glyf.length - 1;\r\n }\r\n\r\n encode(stream) {\r\n // tables required by PDF spec:\r\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\r\n //\r\n // additional tables required for standalone fonts:\r\n // name, cmap, OS/2, post\r\n\r\n this.glyf = [];\r\n this.offset = 0;\r\n this.loca = {\r\n offsets: [],\r\n version: this.font.loca.version\r\n };\r\n\r\n this.hmtx = {\r\n metrics: [],\r\n bearings: []\r\n };\r\n\r\n // include all the glyphs\r\n // not using a for loop because we need to support adding more\r\n // glyphs to the array as we go, and CoffeeScript caches the length.\r\n let i = 0;\r\n while (i < this.glyphs.length) {\r\n this._addGlyph(this.glyphs[i++]);\r\n }\r\n\r\n let maxp = cloneDeep(this.font.maxp);\r\n maxp.numGlyphs = this.glyf.length;\r\n\r\n this.loca.offsets.push(this.offset);\r\n\r\n let head = cloneDeep(this.font.head);\r\n head.indexToLocFormat = this.loca.version;\r\n\r\n let hhea = cloneDeep(this.font.hhea);\r\n hhea.numberOfMetrics = this.hmtx.metrics.length;\r\n\r\n // map = []\r\n // for index in [0...256]\r\n // if index < @numGlyphs\r\n // map[index] = index\r\n // else\r\n // map[index] = 0\r\n //\r\n // cmapTable =\r\n // version: 0\r\n // length: 262\r\n // language: 0\r\n // codeMap: map\r\n //\r\n // cmap =\r\n // version: 0\r\n // numSubtables: 1\r\n // tables: [\r\n // platformID: 1\r\n // encodingID: 0\r\n // table: cmapTable\r\n // ]\r\n\r\n // TODO: subset prep, cvt, fpgm?\r\n Directory.encode(stream, {\r\n tables: {\r\n head,\r\n hhea,\r\n loca: this.loca,\r\n maxp,\r\n 'cvt ': this.font['cvt '],\r\n prep: this.font.prep,\r\n glyf: this.glyf,\r\n hmtx: this.hmtx,\r\n fpgm: this.font.fpgm\r\n\r\n // name: clone @font.name\r\n // 'OS/2': clone @font['OS/2']\r\n // post: clone @font.post\r\n // cmap: cmap\r\n }\r\n });\r\n }\r\n}\r\n","import Subset from './Subset';\r\nimport CFFTop from '../cff/CFFTop';\r\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\r\nimport standardStrings from '../cff/CFFStandardStrings';\r\n\r\nexport default class CFFSubset extends Subset {\r\n constructor(font) {\r\n super(font);\r\n\r\n this.cff = this.font['CFF '];\r\n if (!this.cff) {\r\n throw new Error('Not a CFF Font');\r\n }\r\n }\r\n\r\n subsetCharstrings() {\r\n this.charstrings = [];\r\n let gsubrs = {};\r\n\r\n for (let gid of this.glyphs) {\r\n this.charstrings.push(this.cff.getCharString(gid));\r\n\r\n let glyph = this.font.getGlyph(gid);\r\n let path = glyph.path; // this causes the glyph to be parsed\r\n\r\n for (let subr in glyph._usedGsubrs) {\r\n gsubrs[subr] = true;\r\n }\r\n }\r\n\r\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\r\n }\r\n\r\n subsetSubrs(subrs, used) {\r\n let res = [];\r\n for (let i = 0; i < subrs.length; i++) {\r\n let subr = subrs[i];\r\n if (used[i]) {\r\n this.cff.stream.pos = subr.offset;\r\n res.push(this.cff.stream.readBuffer(subr.length));\r\n } else {\r\n res.push(Buffer.from([11])); // return\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n subsetFontdict(topDict) {\r\n topDict.FDArray = [];\r\n topDict.FDSelect = {\r\n version: 0,\r\n fds: []\r\n };\r\n\r\n let used_fds = {};\r\n let used_subrs = [];\r\n let fd_select = {};\r\n for (let gid of this.glyphs) {\r\n let fd = this.cff.fdForGlyph(gid);\r\n if (fd == null) {\r\n continue;\r\n }\r\n\r\n if (!used_fds[fd]) {\r\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\r\n used_subrs.push({});\r\n fd_select[fd] = topDict.FDArray.length - 1;\r\n }\r\n\r\n used_fds[fd] = true;\r\n topDict.FDSelect.fds.push(fd_select[fd]);\r\n\r\n let glyph = this.font.getGlyph(gid);\r\n let path = glyph.path; // this causes the glyph to be parsed\r\n for (let subr in glyph._usedSubrs) {\r\n used_subrs[fd_select[fd]][subr] = true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < topDict.FDArray.length; i++) {\r\n let dict = topDict.FDArray[i];\r\n delete dict.FontName;\r\n if (dict.Private && dict.Private.Subrs) {\r\n dict.Private = Object.assign({}, dict.Private);\r\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n createCIDFontdict(topDict) {\r\n let used_subrs = {};\r\n for (let gid of this.glyphs) {\r\n let glyph = this.font.getGlyph(gid);\r\n let path = glyph.path; // this causes the glyph to be parsed\r\n\r\n for (let subr in glyph._usedSubrs) {\r\n used_subrs[subr] = true;\r\n }\r\n }\r\n\r\n let privateDict = Object.assign({}, this.cff.topDict.Private);\r\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\r\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\r\n }\r\n\r\n topDict.FDArray = [{ Private: privateDict }];\r\n return topDict.FDSelect = {\r\n version: 3,\r\n nRanges: 1,\r\n ranges: [{ first: 0, fd: 0 }],\r\n sentinel: this.charstrings.length\r\n };\r\n }\r\n\r\n addString(string) {\r\n if (!string) {\r\n return null;\r\n }\r\n\r\n if (!this.strings) {\r\n this.strings = [];\r\n }\r\n\r\n this.strings.push(string);\r\n return standardStrings.length + this.strings.length - 1;\r\n }\r\n\r\n encode(stream) {\r\n this.subsetCharstrings();\r\n\r\n let charset = {\r\n version: this.charstrings.length > 255 ? 2 : 1,\r\n ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\r\n };\r\n\r\n let topDict = Object.assign({}, this.cff.topDict);\r\n topDict.Private = null;\r\n topDict.charset = charset;\r\n topDict.Encoding = null;\r\n topDict.CharStrings = this.charstrings;\r\n\r\n for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\r\n topDict[key] = this.addString(this.cff.string(topDict[key]));\r\n }\r\n\r\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\r\n topDict.CIDCount = this.charstrings.length;\r\n\r\n if (this.cff.isCIDFont) {\r\n this.subsetFontdict(topDict);\r\n } else {\r\n this.createCIDFontdict(topDict);\r\n }\r\n\r\n let top = {\r\n version: 1,\r\n hdrSize: this.cff.hdrSize,\r\n offSize: 4,\r\n header: this.cff.header,\r\n nameIndex: [this.cff.postscriptName],\r\n topDictIndex: [topDict],\r\n stringIndex: this.strings,\r\n globalSubrIndex: this.gsubrs\r\n };\r\n\r\n CFFTop.encode(stream, top);\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\nimport { cache } from './decorators';\r\nimport fontkit from './base';\r\nimport Directory from './tables/directory';\r\nimport tables from './tables';\r\nimport CmapProcessor from './CmapProcessor';\r\nimport LayoutEngine from './layout/LayoutEngine';\r\nimport TTFGlyph from './glyph/TTFGlyph';\r\nimport CFFGlyph from './glyph/CFFGlyph';\r\nimport SBIXGlyph from './glyph/SBIXGlyph';\r\nimport COLRGlyph from './glyph/COLRGlyph';\r\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\r\nimport TTFSubset from './subset/TTFSubset';\r\nimport CFFSubset from './subset/CFFSubset';\r\nimport BBox from './glyph/BBox';\r\n\r\n/**\r\n * This is the base class for all SFNT-based font formats in fontkit.\r\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\r\n */\r\nexport default class TTFFont {\r\n static probe(buffer) {\r\n let format = buffer.toString('ascii', 0, 4);\r\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\r\n }\r\n\r\n constructor(stream, variationCoords = null) {\r\n this.defaultLanguage = null;\r\n this.stream = stream;\r\n this.variationCoords = variationCoords;\r\n\r\n this._directoryPos = this.stream.pos;\r\n this._tables = {};\r\n this._glyphs = {};\r\n this._decodeDirectory();\r\n\r\n // define properties for each table to lazily parse\r\n for (let tag in this.directory.tables) {\r\n let table = this.directory.tables[tag];\r\n if (tables[tag] && table.length > 0) {\r\n Object.defineProperty(this, tag, {\r\n get: this._getTable.bind(this, table)\r\n });\r\n }\r\n }\r\n }\r\n\r\n setDefaultLanguage(lang = null) {\r\n this.defaultLanguage = lang;\r\n }\r\n\r\n _getTable(table) {\r\n if (!(table.tag in this._tables)) {\r\n try {\r\n this._tables[table.tag] = this._decodeTable(table);\r\n } catch (e) {\r\n if (fontkit.logErrors) {\r\n console.error(`Error decoding table ${table.tag}`);\r\n console.error(e.stack);\r\n }\r\n }\r\n }\r\n\r\n return this._tables[table.tag];\r\n }\r\n\r\n _getTableStream(tag) {\r\n let table = this.directory.tables[tag];\r\n if (table) {\r\n this.stream.pos = table.offset;\r\n return this.stream;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _decodeDirectory() {\r\n return this.directory = Directory.decode(this.stream, {_startOffset: 0});\r\n }\r\n\r\n _decodeTable(table) {\r\n let pos = this.stream.pos;\r\n\r\n let stream = this._getTableStream(table.tag);\r\n let result = tables[table.tag].decode(stream, this, table.length);\r\n\r\n this.stream.pos = pos;\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets a string from the font's `name` table\r\n * `lang` is a BCP-47 language code.\r\n * @return {string}\r\n */\r\n getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\r\n let record = this.name && this.name.records[key];\r\n if (record) {\r\n // Attempt to retrieve the entry, depending on which translation is available:\r\n return (\r\n record[lang]\r\n || record[this.defaultLanguage]\r\n || record[fontkit.defaultLanguage]\r\n || record['en']\r\n || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\r\n || null\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\r\n * @type {string}\r\n */\r\n get postscriptName() {\r\n return this.getName('postscriptName');\r\n }\r\n\r\n /**\r\n * The font's full name, e.g. \"Helvetica Bold\"\r\n * @type {string}\r\n */\r\n get fullName() {\r\n return this.getName('fullName');\r\n }\r\n\r\n /**\r\n * The font's family name, e.g. \"Helvetica\"\r\n * @type {string}\r\n */\r\n get familyName() {\r\n return this.getName('fontFamily');\r\n }\r\n\r\n /**\r\n * The font's sub-family, e.g. \"Bold\".\r\n * @type {string}\r\n */\r\n get subfamilyName() {\r\n return this.getName('fontSubfamily');\r\n }\r\n\r\n /**\r\n * The font's copyright information\r\n * @type {string}\r\n */\r\n get copyright() {\r\n return this.getName('copyright');\r\n }\r\n\r\n /**\r\n * The font's version number\r\n * @type {string}\r\n */\r\n get version() {\r\n return this.getName('version');\r\n }\r\n\r\n /**\r\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\r\n * @type {number}\r\n */\r\n get ascent() {\r\n return this.hhea.ascent;\r\n }\r\n\r\n /**\r\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\r\n * @type {number}\r\n */\r\n get descent() {\r\n return this.hhea.descent;\r\n }\r\n\r\n /**\r\n * The amount of space that should be included between lines\r\n * @type {number}\r\n */\r\n get lineGap() {\r\n return this.hhea.lineGap;\r\n }\r\n\r\n /**\r\n * The offset from the normal underline position that should be used\r\n * @type {number}\r\n */\r\n get underlinePosition() {\r\n return this.post.underlinePosition;\r\n }\r\n\r\n /**\r\n * The weight of the underline that should be used\r\n * @type {number}\r\n */\r\n get underlineThickness() {\r\n return this.post.underlineThickness;\r\n }\r\n\r\n /**\r\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\r\n * @type {number}\r\n */\r\n get italicAngle() {\r\n return this.post.italicAngle;\r\n }\r\n\r\n /**\r\n * The height of capital letters above the baseline.\r\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\r\n * @type {number}\r\n */\r\n get capHeight() {\r\n let os2 = this['OS/2'];\r\n return os2 ? os2.capHeight : this.ascent;\r\n }\r\n\r\n /**\r\n * The height of lower case letters in the font.\r\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\r\n * @type {number}\r\n */\r\n get xHeight() {\r\n let os2 = this['OS/2'];\r\n return os2 ? os2.xHeight : 0;\r\n }\r\n\r\n /**\r\n * The number of glyphs in the font.\r\n * @type {number}\r\n */\r\n get numGlyphs() {\r\n return this.maxp.numGlyphs;\r\n }\r\n\r\n /**\r\n * The size of the font’s internal coordinate grid\r\n * @type {number}\r\n */\r\n get unitsPerEm() {\r\n return this.head.unitsPerEm;\r\n }\r\n\r\n /**\r\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\r\n * @type {BBox}\r\n */\r\n @cache\r\n get bbox() {\r\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\r\n }\r\n\r\n @cache\r\n get _cmapProcessor() {\r\n return new CmapProcessor(this.cmap);\r\n }\r\n\r\n /**\r\n * An array of all of the unicode code points supported by the font.\r\n * @type {number[]}\r\n */\r\n @cache\r\n get characterSet() {\r\n return this._cmapProcessor.getCharacterSet();\r\n }\r\n\r\n /**\r\n * Returns whether there is glyph in the font for the given unicode code point.\r\n *\r\n * @param {number} codePoint\r\n * @return {boolean}\r\n */\r\n hasGlyphForCodePoint(codePoint) {\r\n return !!this._cmapProcessor.lookup(codePoint);\r\n }\r\n\r\n /**\r\n * Maps a single unicode code point to a Glyph object.\r\n * Does not perform any advanced substitutions (there is no context to do so).\r\n *\r\n * @param {number} codePoint\r\n * @return {Glyph}\r\n */\r\n glyphForCodePoint(codePoint) {\r\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\r\n }\r\n\r\n /**\r\n * Returns an array of Glyph objects for the given string.\r\n * This is only a one-to-one mapping from characters to glyphs.\r\n * For most uses, you should use font.layout (described below), which\r\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\r\n *\r\n * @param {string} string\r\n * @return {Glyph[]}\r\n */\r\n glyphsForString(string) {\r\n let glyphs = [];\r\n let len = string.length;\r\n let idx = 0;\r\n let last = -1;\r\n let state = -1;\r\n\r\n while (idx <= len) {\r\n let code = 0;\r\n let nextState = 0;\r\n\r\n if (idx < len) {\r\n // Decode the next codepoint from UTF 16\r\n code = string.charCodeAt(idx++);\r\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\r\n let next = string.charCodeAt(idx);\r\n if (0xdc00 <= next && next <= 0xdfff) {\r\n idx++;\r\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\r\n }\r\n }\r\n\r\n // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\r\n nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\r\n } else {\r\n idx++;\r\n }\r\n\r\n if (state === 0 && nextState === 1) {\r\n // Variation selector following normal codepoint.\r\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\r\n } else if (state === 0 && nextState === 0) {\r\n // Normal codepoint following normal codepoint.\r\n glyphs.push(this.glyphForCodePoint(last));\r\n }\r\n\r\n last = code;\r\n state = nextState;\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n @cache\r\n get _layoutEngine() {\r\n return new LayoutEngine(this);\r\n }\r\n\r\n /**\r\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\r\n *\r\n * @param {string} string\r\n * @param {string[]} [userFeatures]\r\n * @param {string} [script]\r\n * @param {string} [language]\r\n * @param {string} [direction]\r\n * @return {GlyphRun}\r\n */\r\n layout(string, userFeatures, script, language, direction) {\r\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\r\n }\r\n\r\n /**\r\n * Returns an array of strings that map to the given glyph id.\r\n * @param {number} gid - glyph id\r\n */\r\n stringsForGlyph(gid) {\r\n return this._layoutEngine.stringsForGlyph(gid);\r\n }\r\n\r\n /**\r\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\r\n * (or mapped AAT tags) supported by the font.\r\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\r\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\r\n *\r\n * @type {string[]}\r\n */\r\n get availableFeatures() {\r\n return this._layoutEngine.getAvailableFeatures();\r\n }\r\n\r\n getAvailableFeatures(script, language) {\r\n return this._layoutEngine.getAvailableFeatures(script, language);\r\n }\r\n\r\n _getBaseGlyph(glyph, characters = []) {\r\n if (!this._glyphs[glyph]) {\r\n if (this.directory.tables.glyf) {\r\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\r\n\r\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\r\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\r\n }\r\n }\r\n\r\n return this._glyphs[glyph] || null;\r\n }\r\n\r\n /**\r\n * Returns a glyph object for the given glyph id.\r\n * You can pass the array of code points this glyph represents for\r\n * your use later, and it will be stored in the glyph object.\r\n *\r\n * @param {number} glyph\r\n * @param {number[]} characters\r\n * @return {Glyph}\r\n */\r\n getGlyph(glyph, characters = []) {\r\n if (!this._glyphs[glyph]) {\r\n if (this.directory.tables.sbix) {\r\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\r\n\r\n } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\r\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\r\n\r\n } else {\r\n this._getBaseGlyph(glyph, characters);\r\n }\r\n }\r\n\r\n return this._glyphs[glyph] || null;\r\n }\r\n\r\n /**\r\n * Returns a Subset for this font.\r\n * @return {Subset}\r\n */\r\n createSubset() {\r\n if (this.directory.tables['CFF ']) {\r\n return new CFFSubset(this);\r\n }\r\n\r\n return new TTFSubset(this);\r\n }\r\n\r\n /**\r\n * Returns an object describing the available variation axes\r\n * that this font supports. Keys are setting tags, and values\r\n * contain the axis name, range, and default value.\r\n *\r\n * @type {object}\r\n */\r\n @cache\r\n get variationAxes() {\r\n let res = {};\r\n if (!this.fvar) {\r\n return res;\r\n }\r\n\r\n for (let axis of this.fvar.axis) {\r\n res[axis.axisTag.trim()] = {\r\n name: axis.name.en,\r\n min: axis.minValue,\r\n default: axis.defaultValue,\r\n max: axis.maxValue\r\n };\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Returns an object describing the named variation instances\r\n * that the font designer has specified. Keys are variation names\r\n * and values are the variation settings for this instance.\r\n *\r\n * @type {object}\r\n */\r\n @cache\r\n get namedVariations() {\r\n let res = {};\r\n if (!this.fvar) {\r\n return res;\r\n }\r\n\r\n for (let instance of this.fvar.instance) {\r\n let settings = {};\r\n for (let i = 0; i < this.fvar.axis.length; i++) {\r\n let axis = this.fvar.axis[i];\r\n settings[axis.axisTag.trim()] = instance.coord[i];\r\n }\r\n\r\n res[instance.name.en] = settings;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Returns a new font with the given variation settings applied.\r\n * Settings can either be an instance name, or an object containing\r\n * variation tags as specified by the `variationAxes` property.\r\n *\r\n * @param {object} settings\r\n * @return {TTFFont}\r\n */\r\n getVariation(settings) {\r\n if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\r\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\r\n }\r\n\r\n if (typeof settings === 'string') {\r\n settings = this.namedVariations[settings];\r\n }\r\n\r\n if (typeof settings !== 'object') {\r\n throw new Error('Variation settings must be either a variation name or settings object.');\r\n }\r\n\r\n // normalize the coordinates\r\n let coords = this.fvar.axis.map((axis, i) => {\r\n let axisTag = axis.axisTag.trim();\r\n if (axisTag in settings) {\r\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\r\n } else {\r\n return axis.defaultValue;\r\n }\r\n });\r\n\r\n let stream = new r.DecodeStream(this.stream.buffer);\r\n stream.pos = this._directoryPos;\r\n\r\n let font = new TTFFont(stream, coords);\r\n font._tables = this._tables;\r\n\r\n return font;\r\n }\r\n\r\n @cache\r\n get _variationProcessor() {\r\n if (!this.fvar) {\r\n return null;\r\n }\r\n\r\n let variationCoords = this.variationCoords;\r\n\r\n // Ignore if no variation coords and not CFF2\r\n if (!variationCoords && !this.CFF2) {\r\n return null;\r\n }\r\n\r\n if (!variationCoords) {\r\n variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\r\n }\r\n\r\n return new GlyphVariationProcessor(this, variationCoords);\r\n }\r\n\r\n // Standardized format plugin API\r\n getFont(name) {\r\n return this.getVariation(name);\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\nimport tables from './';\r\n\r\nlet WOFFDirectoryEntry = new r.Struct({\r\n tag: new r.String(4),\r\n offset: new r.Pointer(r.uint32, 'void', {type: 'global'}),\r\n compLength: r.uint32,\r\n length: r.uint32,\r\n origChecksum: r.uint32\r\n});\r\n\r\nlet WOFFDirectory = new r.Struct({\r\n tag: new r.String(4), // should be 'wOFF'\r\n flavor: r.uint32,\r\n length: r.uint32,\r\n numTables: r.uint16,\r\n reserved: new r.Reserved(r.uint16),\r\n totalSfntSize: r.uint32,\r\n majorVersion: r.uint16,\r\n minorVersion: r.uint16,\r\n metaOffset: r.uint32,\r\n metaLength: r.uint32,\r\n metaOrigLength: r.uint32,\r\n privOffset: r.uint32,\r\n privLength: r.uint32,\r\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\r\n});\r\n\r\nWOFFDirectory.process = function() {\r\n let tables = {};\r\n for (let table of this.tables) {\r\n tables[table.tag] = table;\r\n }\r\n\r\n this.tables = tables;\r\n};\r\n\r\nexport default WOFFDirectory;\r\n","import TTFFont from './TTFFont';\r\nimport WOFFDirectory from './tables/WOFFDirectory';\r\nimport tables from './tables';\r\nimport inflate from 'tiny-inflate';\r\nimport r from '@foliojs-fork/restructure';\r\n\r\nexport default class WOFFFont extends TTFFont {\r\n static probe(buffer) {\r\n return buffer.toString('ascii', 0, 4) === 'wOFF';\r\n }\r\n\r\n _decodeDirectory() {\r\n this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\r\n }\r\n\r\n _getTableStream(tag) {\r\n let table = this.directory.tables[tag];\r\n if (table) {\r\n this.stream.pos = table.offset;\r\n\r\n if (table.compLength < table.length) {\r\n this.stream.pos += 2; // skip deflate header\r\n let outBuffer = Buffer.alloc(table.length);\r\n let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\r\n return new r.DecodeStream(buf);\r\n } else {\r\n return this.stream;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import TTFGlyph from './TTFGlyph';\r\n\r\n/**\r\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\r\n */\r\nexport default class WOFF2Glyph extends TTFGlyph {\r\n _decode() {\r\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\r\n return this._font._transformedGlyphs[this.id];\r\n }\r\n\r\n _getCBox() {\r\n return this.path.bbox;\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\n\r\nconst Base128 = {\r\n decode(stream) {\r\n let result = 0;\r\n let iterable = [0, 1, 2, 3, 4];\r\n for (let j = 0; j < iterable.length; j++) {\r\n let i = iterable[j];\r\n let code = stream.readUInt8();\r\n\r\n // If any of the top seven bits are set then we're about to overflow.\r\n if (result & 0xe0000000) {\r\n throw new Error('Overflow');\r\n }\r\n\r\n result = (result << 7) | (code & 0x7f);\r\n if ((code & 0x80) === 0) {\r\n return result;\r\n }\r\n }\r\n\r\n throw new Error('Bad base 128 number');\r\n }\r\n};\r\n\r\nlet knownTags = [\r\n 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\r\n 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\r\n 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\r\n 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\r\n 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\r\n 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\r\n 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\r\n];\r\n\r\nlet WOFF2DirectoryEntry = new r.Struct({\r\n flags: r.uint8,\r\n customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\r\n tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\r\n length: Base128,\r\n transformVersion: t => (t.flags >>> 6) & 0x03,\r\n transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\r\n transformLength: new r.Optional(Base128, t => t.transformed)\r\n});\r\n\r\nlet WOFF2Directory = new r.Struct({\r\n tag: new r.String(4), // should be 'wOF2'\r\n flavor: r.uint32,\r\n length: r.uint32,\r\n numTables: r.uint16,\r\n reserved: new r.Reserved(r.uint16),\r\n totalSfntSize: r.uint32,\r\n totalCompressedSize: r.uint32,\r\n majorVersion: r.uint16,\r\n minorVersion: r.uint16,\r\n metaOffset: r.uint32,\r\n metaLength: r.uint32,\r\n metaOrigLength: r.uint32,\r\n privOffset: r.uint32,\r\n privLength: r.uint32,\r\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\r\n});\r\n\r\nWOFF2Directory.process = function() {\r\n let tables = {};\r\n for (let i = 0; i < this.tables.length; i++) {\r\n let table = this.tables[i];\r\n tables[table.tag] = table;\r\n }\r\n\r\n return this.tables = tables;\r\n};\r\n\r\nexport default WOFF2Directory;\r\n","import r from '@foliojs-fork/restructure';\r\nimport brotli from 'brotli/decompress';\r\nimport TTFFont from './TTFFont';\r\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\r\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\r\nimport WOFF2Directory from './tables/WOFF2Directory';\r\n\r\n/**\r\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\r\n * See spec here: http://www.w3.org/TR/WOFF2/\r\n */\r\nexport default class WOFF2Font extends TTFFont {\r\n static probe(buffer) {\r\n return buffer.toString('ascii', 0, 4) === 'wOF2';\r\n }\r\n\r\n _decodeDirectory() {\r\n this.directory = WOFF2Directory.decode(this.stream);\r\n this._dataPos = this.stream.pos;\r\n }\r\n\r\n _decompress() {\r\n // decompress data and setup table offsets if we haven't already\r\n if (!this._decompressed) {\r\n this.stream.pos = this._dataPos;\r\n let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\r\n\r\n let decompressedSize = 0;\r\n for (let tag in this.directory.tables) {\r\n let entry = this.directory.tables[tag];\r\n entry.offset = decompressedSize;\r\n decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\r\n }\r\n\r\n let decompressed = brotli(buffer, decompressedSize);\r\n if (!decompressed) {\r\n throw new Error('Error decoding compressed data in WOFF2');\r\n }\r\n\r\n this.stream = new r.DecodeStream(Buffer.from(decompressed));\r\n this._decompressed = true;\r\n }\r\n }\r\n\r\n _decodeTable(table) {\r\n this._decompress();\r\n return super._decodeTable(table);\r\n }\r\n\r\n // Override this method to get a glyph and return our\r\n // custom subclass if there is a glyf table.\r\n _getBaseGlyph(glyph, characters = []) {\r\n if (!this._glyphs[glyph]) {\r\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\r\n if (!this._transformedGlyphs) { this._transformGlyfTable(); }\r\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\r\n\r\n } else {\r\n return super._getBaseGlyph(glyph, characters);\r\n }\r\n }\r\n }\r\n\r\n _transformGlyfTable() {\r\n this._decompress();\r\n this.stream.pos = this.directory.tables.glyf.offset;\r\n let table = GlyfTable.decode(this.stream);\r\n let glyphs = [];\r\n\r\n for (let index = 0; index < table.numGlyphs; index++) {\r\n let glyph = {};\r\n let nContours = table.nContours.readInt16BE();\r\n glyph.numberOfContours = nContours;\r\n\r\n if (nContours > 0) { // simple glyph\r\n let nPoints = [];\r\n let totalPoints = 0;\r\n\r\n for (let i = 0; i < nContours; i++) {\r\n let r = read255UInt16(table.nPoints);\r\n totalPoints += r;\r\n nPoints.push(totalPoints);\r\n }\r\n\r\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\r\n for (let i = 0; i < nContours; i++) {\r\n glyph.points[nPoints[i] - 1].endContour = true;\r\n }\r\n\r\n var instructionSize = read255UInt16(table.glyphs);\r\n\r\n } else if (nContours < 0) { // composite glyph\r\n let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\r\n if (haveInstructions) {\r\n var instructionSize = read255UInt16(table.glyphs);\r\n }\r\n }\r\n\r\n glyphs.push(glyph);\r\n }\r\n\r\n this._transformedGlyphs = glyphs;\r\n }\r\n}\r\n\r\n// Special class that accepts a length and returns a sub-stream for that data\r\nclass Substream {\r\n constructor(length) {\r\n this.length = length;\r\n this._buf = new r.Buffer(length);\r\n }\r\n\r\n decode(stream, parent) {\r\n return new r.DecodeStream(this._buf.decode(stream, parent));\r\n }\r\n}\r\n\r\n// This struct represents the entire glyf table\r\nlet GlyfTable = new r.Struct({\r\n version: r.uint32,\r\n numGlyphs: r.uint16,\r\n indexFormat: r.uint16,\r\n nContourStreamSize: r.uint32,\r\n nPointsStreamSize: r.uint32,\r\n flagStreamSize: r.uint32,\r\n glyphStreamSize: r.uint32,\r\n compositeStreamSize: r.uint32,\r\n bboxStreamSize: r.uint32,\r\n instructionStreamSize: r.uint32,\r\n nContours: new Substream('nContourStreamSize'),\r\n nPoints: new Substream('nPointsStreamSize'),\r\n flags: new Substream('flagStreamSize'),\r\n glyphs: new Substream('glyphStreamSize'),\r\n composites: new Substream('compositeStreamSize'),\r\n bboxes: new Substream('bboxStreamSize'),\r\n instructions: new Substream('instructionStreamSize')\r\n});\r\n\r\nconst WORD_CODE = 253;\r\nconst ONE_MORE_BYTE_CODE2 = 254;\r\nconst ONE_MORE_BYTE_CODE1 = 255;\r\nconst LOWEST_U_CODE = 253;\r\n\r\nfunction read255UInt16(stream) {\r\n let code = stream.readUInt8();\r\n\r\n if (code === WORD_CODE) {\r\n return stream.readUInt16BE();\r\n }\r\n\r\n if (code === ONE_MORE_BYTE_CODE1) {\r\n return stream.readUInt8() + LOWEST_U_CODE;\r\n }\r\n\r\n if (code === ONE_MORE_BYTE_CODE2) {\r\n return stream.readUInt8() + LOWEST_U_CODE * 2;\r\n }\r\n\r\n return code;\r\n}\r\n\r\nfunction withSign(flag, baseval) {\r\n return flag & 1 ? baseval : -baseval;\r\n}\r\n\r\nfunction decodeTriplet(flags, glyphs, nPoints) {\r\n let y;\r\n let x = y = 0;\r\n let res = [];\r\n\r\n for (let i = 0; i < nPoints; i++) {\r\n let dx = 0, dy = 0;\r\n let flag = flags.readUInt8();\r\n let onCurve = !(flag >> 7);\r\n flag &= 0x7f;\r\n\r\n if (flag < 10) {\r\n dx = 0;\r\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\r\n\r\n } else if (flag < 20) {\r\n dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\r\n dy = 0;\r\n\r\n } else if (flag < 84) {\r\n var b0 = flag - 20;\r\n var b1 = glyphs.readUInt8();\r\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\r\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\r\n\r\n } else if (flag < 120) {\r\n var b0 = flag - 84;\r\n dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\r\n dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\r\n\r\n } else if (flag < 124) {\r\n var b1 = glyphs.readUInt8();\r\n let b2 = glyphs.readUInt8();\r\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\r\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\r\n\r\n } else {\r\n dx = withSign(flag, glyphs.readUInt16BE());\r\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\r\n }\r\n\r\n x += dx;\r\n y += dy;\r\n res.push(new Point(onCurve, false, x, y));\r\n }\r\n\r\n return res;\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\nimport TTFFont from './TTFFont';\r\nimport Directory from './tables/directory';\r\nimport tables from './tables';\r\n\r\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\r\n 0x00010000: {\r\n numFonts: r.uint32,\r\n offsets: new r.Array(r.uint32, 'numFonts')\r\n },\r\n 0x00020000: {\r\n numFonts: r.uint32,\r\n offsets: new r.Array(r.uint32, 'numFonts'),\r\n dsigTag: r.uint32,\r\n dsigLength: r.uint32,\r\n dsigOffset: r.uint32\r\n }\r\n});\r\n\r\nexport default class TrueTypeCollection {\r\n static probe(buffer) {\r\n return buffer.toString('ascii', 0, 4) === 'ttcf';\r\n }\r\n\r\n constructor(stream) {\r\n this.stream = stream;\r\n if (stream.readString(4) !== 'ttcf') {\r\n throw new Error('Not a TrueType collection');\r\n }\r\n\r\n this.header = TTCHeader.decode(stream);\r\n }\r\n\r\n getFont(name) {\r\n for (let offset of this.header.offsets) {\r\n let stream = new r.DecodeStream(this.stream.buffer);\r\n stream.pos = offset;\r\n let font = new TTFFont(stream);\r\n if (font.postscriptName === name) {\r\n return font;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get fonts() {\r\n let fonts = [];\r\n for (let offset of this.header.offsets) {\r\n let stream = new r.DecodeStream(this.stream.buffer);\r\n stream.pos = offset;\r\n fonts.push(new TTFFont(stream));\r\n }\r\n\r\n return fonts;\r\n }\r\n}\r\n","import r from '@foliojs-fork/restructure';\r\nimport TTFFont from './TTFFont';\r\n\r\nlet DFontName = new r.String(r.uint8);\r\nlet DFontData = new r.Struct({\r\n len: r.uint32,\r\n buf: new r.Buffer('len')\r\n});\r\n\r\nlet Ref = new r.Struct({\r\n id: r.uint16,\r\n nameOffset: r.int16,\r\n attr: r.uint8,\r\n dataOffset: r.uint24,\r\n handle: r.uint32\r\n});\r\n\r\nlet Type = new r.Struct({\r\n name: new r.String(4),\r\n maxTypeIndex: r.uint16,\r\n refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\r\n});\r\n\r\nlet TypeList = new r.Struct({\r\n length: r.uint16,\r\n types: new r.Array(Type, t => t.length + 1)\r\n});\r\n\r\nlet DFontMap = new r.Struct({\r\n reserved: new r.Reserved(r.uint8, 24),\r\n typeList: new r.Pointer(r.uint16, TypeList),\r\n nameListOffset: new r.Pointer(r.uint16, 'void')\r\n});\r\n\r\nlet DFontHeader = new r.Struct({\r\n dataOffset: r.uint32,\r\n map: new r.Pointer(r.uint32, DFontMap),\r\n dataLength: r.uint32,\r\n mapLength: r.uint32\r\n});\r\n\r\nexport default class DFont {\r\n static probe(buffer) {\r\n let stream = new r.DecodeStream(buffer);\r\n\r\n try {\r\n var header = DFontHeader.decode(stream);\r\n } catch (e) {\r\n return false;\r\n }\r\n\r\n for (let type of header.map.typeList.types) {\r\n if (type.name === 'sfnt') {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n constructor(stream) {\r\n this.stream = stream;\r\n this.header = DFontHeader.decode(this.stream);\r\n\r\n for (let type of this.header.map.typeList.types) {\r\n for (let ref of type.refList) {\r\n if (ref.nameOffset >= 0) {\r\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\r\n ref.name = DFontName.decode(this.stream);\r\n } else {\r\n ref.name = null;\r\n }\r\n }\r\n\r\n if (type.name === 'sfnt') {\r\n this.sfnt = type;\r\n }\r\n }\r\n }\r\n\r\n getFont(name) {\r\n if (!this.sfnt) {\r\n return null;\r\n }\r\n\r\n for (let ref of this.sfnt.refList) {\r\n let pos = this.header.dataOffset + ref.dataOffset + 4;\r\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\r\n let font = new TTFFont(stream);\r\n if (font.postscriptName === name) {\r\n return font;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get fonts() {\r\n let fonts = [];\r\n for (let ref of this.sfnt.refList) {\r\n let pos = this.header.dataOffset + ref.dataOffset + 4;\r\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\r\n fonts.push(new TTFFont(stream));\r\n }\r\n\r\n return fonts;\r\n }\r\n}\r\n","import fontkit from './base';\r\nimport TTFFont from './TTFFont';\r\nimport WOFFFont from './WOFFFont';\r\nimport WOFF2Font from './WOFF2Font';\r\nimport TrueTypeCollection from './TrueTypeCollection';\r\nimport DFont from './DFont';\r\n\r\n// Register font formats\r\nfontkit.registerFormat(TTFFont);\r\nfontkit.registerFormat(WOFFFont);\r\nfontkit.registerFormat(WOFF2Font);\r\nfontkit.registerFormat(TrueTypeCollection);\r\nfontkit.registerFormat(DFont);\r\n\r\nexport default fontkit;\r\n"],"names":["fs","require","fontkit","logErrors","formats","registerFormat","format","push","openSync","filename","postscriptName","buffer","readFileSync","create","open","callback","readFile","err","font","e","i","length","probe","r","DecodeStream","getFont","Error","defaultLanguage","setDefaultLanguage","lang","cache","target","key","descriptor","get","value","call","Object","defineProperty","fn","Map","memoized","args","has","result","apply","set","SubHeader","Struct","firstCode","uint16","entryCount","idDelta","int16","idRangeOffset","CmapGroup","startCharCode","uint32","endCharCode","glyphID","UnicodeValueRange","startUnicodeValue","uint24","additionalCount","uint8","UVSMapping","unicodeValue","DefaultUVS","Array","NonDefaultUVS","VarSelectorRecord","varSelector","defaultUVS","Pointer","type","nonDefaultUVS","CmapSubtable","VersionedStruct","language","codeMap","LazyArray","subHeaderKeys","subHeaderCount","t","Math","max","subHeaders","glyphIndexArray","segCountX2","segCount","searchRange","entrySelector","rangeShift","endCode","reservedPad","Reserved","startCode","_currentOffset","glyphIndices","reserved","is32","nGroups","groups","numRecords","varSelectors","CmapEntry","platformID","encodingID","table","lazy","version","numSubtables","tables","int32","revision","checkSumAdjustment","magicNumber","flags","unitsPerEm","created","modified","xMin","yMin","xMax","yMax","macStyle","Bitfield","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","HmtxEntry","advance","bearing","metrics","parent","hhea","bearings","maxp","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","getEncoding","languageID","MAC_LANGUAGE_ENCODINGS","ENCODINGS","LANGUAGES","NameRecord","nameID","string","String","relativeTo","ctx","stringOffset","allowNull","LangTagRecord","tag","NameTable","count","records","langTagCount","langTags","NAMES","process","stream","record","obj","preEncode","isArray","val","indexOf","Buffer","byteLength","en","size","OS2","header","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","ulCharRange","vendorID","fsSelection","usFirstCharIndex","usLastCharIndex","typoAscender","typoDescender","typoLineGap","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContent","usLowerOpticalPointSize","usUpperOpticalPointSize","versions","fixed32","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","numberOfGlyphs","glyphNameIndex","names","offsets","map","controlValues","instructions","loca","controlValueProgram","CFFIndex","constructor","getCFFVersion","hdrSize","decode","readUInt32BE","readUInt16BE","offSize","readUInt8","offsetType","pos","ret","startPos","start","end","offset","arr","item","encode","writeUInt16BE","sizes","s","writeUInt8","FLOAT_EOF","FLOAT_LOOKUP","FLOAT_ENCODE_LOOKUP","CFFOperand","readInt16BE","readInt32BE","str","b","n1","n2","parseFloat","forceLarge","ceil","Number","writeInt32BE","c1","c2","writeInt16BE","CFFDict","ops","fields","field","decodeOperands","operands","op","encodeOperands","defineProperties","_startOffset","PropertyDescriptor","dict","includePointers","pointerSize","startOffset","len","k","isEqual","pointers","pointerOffset","ptr","CFFPointer","options","Ptr","valueOf","CFFBlendOp","numBlends","pop","StandardEncoding","ExpertEncoding","ISOAdobeCharset","ExpertCharset","ExpertSubsetCharset","LangSysTable","reqFeatureIndex","featureCount","featureIndexes","LangSysRecord","langSys","Script","defaultLangSys","langSysRecords","ScriptRecord","script","ScriptList","Feature","featureParams","lookupCount","lookupListIndexes","FeatureRecord","feature","FeatureList","LookupFlags","markAttachmentType","LookupList","SubTable","Lookup","lookupType","subTableCount","subTables","markFilteringSet","Optional","useMarkFilteringSet","RangeRecord","startCoverageIndex","Coverage","glyphCount","glyphs","rangeCount","rangeRecords","ClassRangeRecord","class","ClassDef","startGlyph","classValueArray","classRangeCount","classRangeRecord","Device","a","deltaFormat","LookupRecord","sequenceIndex","lookupListIndex","Rule","input","lookupRecords","RuleSet","ClassRule","classes","ClassSet","Context","coverage","ruleSetCount","ruleSets","classDef","classSetCnt","classSet","coverages","ChainRule","backtrackGlyphCount","backtrack","inputGlyphCount","lookaheadGlyphCount","lookahead","ChainRuleSet","ChainingContext","chainCount","chainRuleSets","backtrackClassDef","inputClassDef","lookaheadClassDef","chainClassSet","backtrackCoverage","inputCoverage","lookaheadCoverage","F2DOT14","Fixed","RegionAxisCoordinates","startCoord","peakCoord","endCoord","VariationRegionList","axisCount","regionCount","variationRegions","DeltaSet","shortDeltas","shortDeltaCount","regionDeltas","int8","regionIndexCount","deltas","concat","ItemVariationData","itemCount","regionIndexes","deltaSets","ItemVariationStore","variationRegionList","variationDataCount","itemVariationData","ConditionTable","axisIndex","filterRangeMinValue","filterRangeMaxValue","ConditionSet","conditionCount","conditionTable","FeatureTableSubstitutionRecord","featureIndex","alternateFeatureTable","FeatureTableSubstitution","substitutionCount","substitutions","FeatureVariationRecord","conditionSet","featureTableSubstitution","FeatureVariations","majorVersion","minorVersion","featureVariationRecordCount","featureVariationRecords","PredefinedOp","predefinedOps","index","CFFEncodingVersion","Range1","first","nLeft","Range2","CFFCustomEncoding","nCodes","codes","nRanges","ranges","CFFEncoding","RangeArray","resolveLength","res","range","CFFCustomCharset","CharStrings","CFFCharset","FDRange3","fd","FDRange4","FDSelect","fds","sentinel","CFFPrivateDict","CFFPrivateOp","FontDict","CFFTopDict","VariationStore","itemVariationStore","CFF2TopDict","CFFTop","fixed16","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDict","CFFFont","top","isCIDFont","ROS","sid","standardStrings","fullName","FullName","familyName","FamilyName","getCharString","glyph","readBuffer","getGlyphName","gid","charset","fdForGlyph","low","high","mid","privateDictForGlyph","FDArray","Private","VerticalOrigin","glyphIndex","vertOriginY","defaultVertOriginY","numVertOriginYMetrics","BigMetrics","height","width","horiBearingX","horiBearingY","horiAdvance","vertBearingX","vertBearingY","vertAdvance","SmallMetrics","bearingX","bearingY","EBDTComponent","xOffset","yOffset","ByteAligned","BitAligned","data","pad","numComponents","components","dataLen","SBitLineMetrics","ascender","descender","widthMax","caretSlopeNumerator","caretSlopeDenominator","minOriginSB","minAdvanceSB","maxBeforeBL","minAfterBL","CodeOffsetPair","glyphCode","IndexSubtable","imageFormat","imageDataOffset","offsetArray","lastGlyphIndex","firstGlyphIndex","imageSize","bigMetrics","glyphArray","glyphCodeArray","IndexSubtableArray","subtable","BitmapSizeTable","indexSubTableArray","indexTablesSize","numberOfIndexSubTables","colorRef","hori","vert","startGlyphIndex","endGlyphIndex","ppemX","ppemY","bitDepth","numSizes","ImageTable","ppem","resolution","imageOffsets","numImgTables","imageTables","LayerRecord","paletteIndex","BaseGlyphRecord","firstLayerIndex","numLayers","numBaseGlyphRecords","baseGlyphRecord","layerRecords","numLayerRecords","ColorRecord","blue","green","red","alpha","numPaletteEntries","numPalettes","numColorRecords","colorRecords","colorRecordIndices","offsetPaletteTypeArray","offsetPaletteLabelArray","offsetPaletteEntryLabelArray","BaseCoord","coordinate","referenceGlyph","baseCoordPoint","deviceTable","BaseValues","defaultIndex","baseCoordCount","baseCoords","FeatMinMaxRecord","minCoord","maxCoord","MinMax","featMinMaxCount","featMinMaxRecords","BaseLangSysRecord","minMax","BaseScript","baseValues","defaultMinMax","baseLangSysCount","baseLangSysRecords","BaseScriptRecord","BaseScriptList","BaseTagList","Axis","baseTagList","baseScriptList","horizAxis","vertAxis","AttachPoint","AttachList","attachPoints","CaretValue","caretValuePoint","LigGlyph","LigCaretList","ligGlyphCount","ligGlyphs","MarkGlyphSetsDef","markSetTableFormat","markSetCount","glyphClassDef","attachList","ligCaretList","markAttachClassDef","markGlyphSetsDef","ValueFormat","types","xPlacement","yPlacement","xAdvance","yAdvance","xPlaDevice","rel","yPlaDevice","xAdvDevice","yAdvDevice","ValueRecord","buildStruct","struct","PairValueRecord","secondGlyph","value1","value2","PairSet","Class2Record","Anchor","xCoordinate","yCoordinate","anchorPoint","xDeviceTable","yDeviceTable","EntryExitRecord","entryAnchor","exitAnchor","MarkRecord","markAnchor","MarkArray","BaseRecord","classCount","BaseArray","ComponentRecord","LigatureAttach","LigatureArray","GPOSLookup","valueFormat","valueCount","values","valueFormat1","valueFormat2","pairSetCount","pairSets","classDef1","classDef2","class1Count","class2Count","classRecords","entryExitCount","entryExitRecords","markCoverage","baseCoverage","markArray","baseArray","ligatureCoverage","ligatureArray","mark1Coverage","mark2Coverage","mark1Array","mark2Array","posFormat","extension","scriptList","featureList","lookupList","featureVariations","Sequence","AlternateSet","Ligature","compCount","LigatureSet","GSUBLookup","deltaGlyphID","substitute","substFormat","sequences","alternateSet","ligatureSets","substitutes","JstfGSUBModList","JstfPriority","shrinkageEnableGSUB","shrinkageDisableGSUB","shrinkageEnableGPOS","shrinkageDisableGPOS","shrinkageJstfMax","extensionEnableGSUB","extensionDisableGSUB","extensionEnableGPOS","extensionDisableGPOS","extensionJstfMax","JstfLangSys","JstfLangSysRecord","jstfLangSys","JstfScript","extenderGlyphs","langSysCount","JstfScriptRecord","scriptCount","VariableSizeNumber","_size","readUInt24BE","MapDataEntry","entry","entryFormat","outerIndex","innerIndex","DeltaSetIndexMap","mapCount","mapData","advanceWidthMapping","LSBMapping","RSBMapping","Signature","SignatureBlock","cbSignature","signature","ulVersion","usNumSigs","usFlag","signatures","signatureBlocks","GaspRange","rangeMaxPPEM","rangeGaspBehavior","numRanges","gaspRanges","DeviceRecord","pixelSize","maximumWidth","widths","sizeDeviceRecord","KernPair","left","right","ClassTable","firstGlyph","nGlyphs","Kern2Array","off","leftTable","rowWidth","KernSubtable","nPairs","pairs","rightTable","array","kernValueCount","leftClassCount","rightClassCount","kernValue","leftClass","rightClass","kernIndex","KernTable","subVersion","padding","tupleIndex","nTables","yPels","fontNumber","pitch","style","typeFamily","symbolSet","typeface","characterComplement","fileName","strokeWeight","widthType","serifStyle","Ratio","bCharSet","xRatio","yStartRatio","yEndRatio","vTable","yPelHeight","VdmxGroup","recs","startsz","endsz","entries","numRecs","numRatios","ratioRanges","advanceHeightMax","minTopSideBearing","minBottomSideBearing","yMaxExtent","VmtxEntry","vhea","shortFrac","Correspondence","fromCoord","toCoord","Segment","pairCount","correspondence","segment","UnboundedArrayAccessor","base","_items","getItem","inspect","name","UnboundedArray","LookupTable","ValueType","Shadow","BinarySearchHeader","unitSize","nUnits","LookupSegmentSingle","lastGlyph","LookupSegmentArray","LookupSingle","binarySearchHeader","segments","StateTable","entryData","assign","newState","Entry","StateArray","nClasses","StateHeader","classTable","stateArray","entryTable","StateTable1","ClassLookupTable","newStateOffset","StateHeader1","BslnSubtable","mappingData","standardGlyph","controlPoints","defaultBaseline","Setting","setting","fontFeatures","FeatureName","nSettings","settingTable","featureFlags","defaultSetting","featureNameCount","reserved1","reserved2","featureNames","axisTag","minValue","defaultValue","maxValue","Instance","coord","postscriptNameID","instanceSize","offsetToData","countSizePairs","axisSize","instanceCount","axis","instance","Offset","gvar","globalCoordCount","globalCoords","subFeatureFlags","stateTable","WidthDeltaRecord","justClass","beforeGrowLimit","beforeShrinkLimit","afterGrowLimit","afterShrinkLimit","growFlags","shrinkFlags","WidthDeltaCluster","ActionData","lowerLimit","upperLimit","order","addGlyph","substThreshold","substGlyph","variationAxis","minimumLimit","noStretchValue","maximumLimit","Action","actionClass","actionType","actionLength","actionData","PostcompensationAction","PostCompensationTable","lookupTable","JustificationTable","wdcOffset","postCompensationTable","widthDeltaClusters","horizontal","vertical","LigatureData","action","ContextualData","markIndex","currentIndex","InsertionData","currentInsertIndex","markedInsertIndex","SubstitutionTable","items","SubtableData","substitutionTable","ligatureActions","ligatureList","insertionActions","Subtable","FeatureEntry","featureType","featureSetting","enableFlags","disableFlags","MorxChain","defaultFlags","chainLength","nFeatureEntries","nSubtables","features","subtables","unused","nChains","chains","OpticalBounds","bottom","cmap","head","hmtx","post","fpgm","prep","cvt","glyf","VORG","EBLC","CBLC","sbix","COLR","CPAL","BASE","GDEF","GPOS","GSUB","JSTF","HVAR","DSIG","gasp","hdmx","kern","LTSH","PCLT","VDMX","vmtx","avar","bsln","feat","fvar","just","morx","opbd","TableEntry","checkSum","Directory","numTables","VoidPointer","Tables","maxExponentFor2","floor","log","LN2","maxPowerOf2","pow","binarySearch","cmp","min","iconv","CmapProcessor","cmapTable","encoding","findSubtable","encodingExists","uvs","lookup","codepoint","variationSelector","buf","fromCodePoint","getVariationSelector","rangeOffset","group","selectors","toArray","x","sel","getCharacterSet","endCodes","tail","codePointsForGlyph","delta","c","g","KernProcessor","positions","id","getKerning","crossStream","variation","pairIdx","pair","leftOffset","rightOffset","override","UnicodeLayoutEngine","positionGlyphs","clusterStart","clusterEnd","isMark","positionCluster","baseBox","cbox","copy","codePoints","minX","yGap","mark","markBox","position","combiningClass","getCombiningClass","maxX","minY","maxY","codePoint","unicode","BBox","Infinity","addPoint","y","abs","UNICODE_SCRIPTS","Caucasian_Albanian","Arabic","Imperial_Aramaic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bopomofo","Brahmi","Braille","Buginese","Buhid","Chakma","Canadian_Aboriginal","Carian","Cham","Cherokee","Coptic","Cypriot","Cyrillic","Devanagari","Deseret","Duployan","Egyptian_Hieroglyphs","Elbasan","Ethiopic","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gurmukhi","Hangul","Han","Hanunoo","Hebrew","Hiragana","Pahawh_Hmong","Katakana_Or_Hiragana","Old_Italic","Javanese","Kayah_Li","Katakana","Kharoshthi","Khmer","Khojki","Kannada","Kaithi","Tai_Tham","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Mandaic","Manichaean","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Malayalam","Modi","Mongolian","Mro","Meetei_Mayek","Myanmar","Old_North_Arabian","Nabataean","Nko","Ogham","Ol_Chiki","Old_Turkic","Oriya","Osmanya","Palmyrene","Pau_Cin_Hau","Old_Permic","Phags_Pa","Inscriptional_Pahlavi","Psalter_Pahlavi","Phoenician","Miao","Inscriptional_Parthian","Rejang","Runic","Samaritan","Old_South_Arabian","Saurashtra","Shavian","Sharada","Siddham","Khudawadi","Sinhala","Sora_Sompeng","Sundanese","Syloti_Nagri","Syriac","Tagbanwa","Takri","Tai_Le","New_Tai_Lue","Tamil","Tai_Viet","Telugu","Tifinagh","Tagalog","Thaana","Thai","Tibetan","Tirhuta","Ugaritic","Vai","Warang_Citi","Old_Persian","Cuneiform","Yi","Inherited","Common","Unknown","OPENTYPE_SCRIPTS","fromOpenType","forString","idx","code","charCodeAt","next","getScript","forCodePoints","RTL","arab","hebr","syrc","thaa","cprt","khar","phnx","lydi","avst","armi","phli","prti","sarb","orkh","samr","mand","merc","mero","mani","mend","nbat","narb","palm","phlp","direction","GlyphRun","advanceWidth","advanceHeight","bbox","p","GlyphPosition","allTypographicFeatures","exclusive","allTypeFeatures","ligatures","requiredLigatures","commonLigatures","rareLigatures","rebusPictures","diphthongLigatures","squaredLigatures","abbrevSquaredLigatures","symbolLigatures","contextualLigatures","historicalLigatures","cursiveConnection","unconnected","partiallyConnected","cursive","letterCase","verticalSubstitution","substituteVerticalForms","linguisticRearrangement","numberSpacing","monospacedNumbers","proportionalNumbers","thirdWidthNumbers","quarterWidthNumbers","smartSwash","wordInitialSwashes","wordFinalSwashes","nonFinalSwashes","diacritics","showDiacritics","hideDiacritics","decomposeDiacritics","verticalPosition","normalPosition","superiors","inferiors","ordinals","scientificInferiors","fractions","noFractions","verticalFractions","diagonalFractions","overlappingCharacters","preventOverlap","typographicExtras","slashedZero","mathematicalExtras","mathematicalGreek","ornamentSets","noOrnaments","dingbats","piCharacters","fleurons","decorativeBorders","internationalSymbols","mathSymbols","characterAlternatives","noAlternates","designComplexity","designLevel1","designLevel2","designLevel3","designLevel4","designLevel5","styleOptions","noStyleOptions","displayText","engravedText","illuminatedCaps","titlingCaps","tallCaps","characterShape","traditionalCharacters","simplifiedCharacters","JIS1978Characters","JIS1983Characters","JIS1990Characters","traditionalAltOne","traditionalAltTwo","traditionalAltThree","traditionalAltFour","traditionalAltFive","expertCharacters","JIS2004Characters","hojoCharacters","NLCCharacters","traditionalNamesCharacters","numberCase","lowerCaseNumbers","upperCaseNumbers","textSpacing","proportionalText","monospacedText","halfWidthText","thirdWidthText","quarterWidthText","altProportionalText","altHalfWidthText","transliteration","noTransliteration","annotation","noAnnotation","boxAnnotation","roundedBoxAnnotation","circleAnnotation","invertedCircleAnnotation","parenthesisAnnotation","periodAnnotation","romanNumeralAnnotation","diamondAnnotation","invertedBoxAnnotation","invertedRoundedBoxAnnotation","kanaSpacing","fullWidthKana","proportionalKana","ideographicSpacing","fullWidthIdeographs","proportionalIdeographs","halfWidthIdeographs","unicodeDecomposition","canonicalComposition","compatibilityComposition","transcodingComposition","rubyKana","CJKSymbolAlternatives","noCJKSymbolAlternatives","CJKSymbolAltOne","CJKSymbolAltTwo","CJKSymbolAltThree","CJKSymbolAltFour","CJKSymbolAltFive","ideographicAlternatives","noIdeographicAlternatives","ideographicAltOne","ideographicAltTwo","ideographicAltThree","ideographicAltFour","ideographicAltFive","CJKVerticalRomanPlacement","CJKVerticalRomanCentered","CJKVerticalRomanHBaseline","italicCJKRoman","CJKItalicRoman","caseSensitiveLayout","caseSensitiveSpacing","alternateKana","alternateHorizKana","alternateVertKana","stylisticAlternatives","noStylisticAlternates","stylisticAltOne","stylisticAltTwo","stylisticAltThree","stylisticAltFour","stylisticAltFive","stylisticAltSix","stylisticAltSeven","stylisticAltEight","stylisticAltNine","stylisticAltTen","stylisticAltEleven","stylisticAltTwelve","stylisticAltThirteen","stylisticAltFourteen","stylisticAltFifteen","stylisticAltSixteen","stylisticAltSeventeen","stylisticAltEighteen","stylisticAltNineteen","stylisticAltTwenty","contextualAlternates","swashAlternates","contextualSwashAlternates","lowerCase","defaultLowerCase","lowerCaseSmallCaps","lowerCasePetiteCaps","upperCase","defaultUpperCase","upperCaseSmallCaps","upperCasePetiteCaps","languageTag","CJKRomanSpacing","halfWidthCJKRoman","proportionalCJKRoman","defaultCJKRoman","fullWidthCJKRoman","selector","OTMapping","rlig","clig","dlig","hlig","liga","hist","smcp","pcap","frac","dnom","numr","afrc","case","ccmp","cpct","valt","swsh","cswh","curs","c2pc","c2sc","init","fin2","medi","med2","fin3","fina","pkna","half","halt","hkna","vkna","ital","lnum","onum","mgrk","calt","vrt2","tnum","pnum","sups","subs","ordn","pwid","hwid","qwid","twid","fwid","palt","trad","smpl","jp78","jp83","jp90","jp04","expt","hojo","nlck","tnam","ruby","titl","zero","ss01","ss02","ss03","ss04","ss05","ss06","ss07","ss08","ss09","ss10","ss11","ss12","ss13","ss14","ss15","ss16","ss17","ss18","ss19","ss20","slice","AATMapping","ot","aat","mapOTToAAT","mapFeatureStrings","f","isNaN","typeCode","settingCode","mapAATToOT","keys","AATLookupTable","seg","glyphsForValue","classValue","START_OF_TEXT_STATE","END_OF_TEXT_CLASS","OUT_OF_BOUNDS_CLASS","DELETED_GLYPH_CLASS","DONT_ADVANCE","AATStateMachine","reverse","processEntry","currentState","dir","classCode","shouldAdvance","row","entryIndex","traverse","opts","state","visited","Set","add","enter","exit","MARK_FIRST","MARK_LAST","VERB","SET_MARK","SET_COMPONENT","PERFORM_ACTION","LAST_MASK","STORE_MASK","OFFSET_MASK","REVERSE_DIRECTION","CURRENT_INSERT_BEFORE","MARKED_INSERT_BEFORE","CURRENT_INSERT_COUNT","MARKED_INSERT_COUNT","AATMorxProcessor","processIndicRearragement","bind","processContextualSubstitution","processLigature","processNoncontextualSubstitutions","processGlyphInsertion","inputCache","chain","processSubtable","splice","ligatureStack","markedGlyph","markedIndex","stateMachine","getStateMachine","getProcessor","reorderGlyphs","subsitutions","getGlyph","actions","actionIndex","last","ligatureIndex","ligatureGlyphs","componentGlyph","unshift","store","component","ligatureEntry","_insertGlyphs","insertionActionIndex","isBefore","insertions","getSupportedFeatures","generateInputs","generateInputCache","generateInputsForSubtable","stack","found","swap","rangeA","rangeB","reverseA","reverseB","verb","AATLayoutEngine","morxProcessor","fallbackPosition","glyphRun","AATFeatureMap","getAvailableFeatures","stringsForGlyph","glyphStrings","_addStrings","strings","_cmapProcessor","ShapingPlan","stages","globalFeatures","allFeatures","_addFeatures","global","stageIndex","stage","arg","local","addStage","setFeatureOverrides","assignGlobalFeatures","processor","applyFeatures","VARIATION_FEATURES","COMMON_FEATURES","FRACTIONAL_FEATURES","HORIZONTAL_FEATURES","DIRECTIONAL_FEATURES","ltr","rtl","DefaultShaper","plan","planPreprocessing","planFeatures","planPostprocessing","assignFeatures","userFeatures","isDigit","trie","UnicodeTrie","__dirname","FEATURES","ShapingClasses","Non_Joining","Left_Joining","Right_Joining","Dual_Joining","Join_Causing","ALAPH","Transparent","ISOL","FINA","FIN2","FIN3","MEDI","MED2","INIT","NONE","STATE_TABLE","ArabicShaper","prev","curAction","prevAction","getShapingClass","category","getCategory","GlyphIterator","reset","cur","shouldIgnore","ignoreMarks","ignoreBaseGlyphs","isBase","ignoreLigatures","isLigature","move","peek","increment","peekIndex","DEFAULT_SCRIPTS","OTProcessor","scriptTag","lookups","variationsIndex","_variationProcessor","findVariationsIndex","normalizedCoords","selectScript","ligatureID","currentFeature","findScript","changed","repeat","substituteFeature","substituteFeatureForVariations","lookupsForFeatures","exclude","lookupIndex","sort","substitution","coords","variations","conditions","variationConditionsMatch","every","condition","advances","applyLookups","glyphIterator","applyLookup","applyLookupList","lookupRecord","coverageIndex","match","sequence","matched","sequenceMatches","sequenceMatchIndices","coverageSequenceMatches","getClassID","classSequenceMatches","classID","applyContext","rule","applyChainingContext","rules","GlyphInfo","_font","ligatureComponent","isLigated","cursiveAttachment","markAttachment","shaperInfo","substituted","isMultiplied","_id","prototype","HangulShaper","getType","DECOMPOSE","hasGlyphForCodePoint","decompose","COMPOSE","compose","TONE_MARK","reorderToneMark","INVALID","insertDottedCircle","HANGUL_BASE","HANGUL_END","HANGUL_COUNT","L_BASE","V_BASE","T_BASE","L_COUNT","V_COUNT","T_COUNT","L_END","V_END","T_END","DOTTED_CIRCLE","isL","isV","isT","isTone","isLVT","isLV","isCombiningL","isCombiningV","isCombiningT","X","L","V","T","LV","LVT","M","NO_ACTION","glyphForCodePoint","l","v","ljmo","vjmo","insert","tjmo","prevType","lv","del","getLength","dottedCircle","CATEGORIES","C","N","H","ZWNJ","ZWJ","SM","VD","A","Placeholder","Dotted_Circle","RS","Coeng","Repha","Ra","CM","Symbol","POSITIONS","Start","Ra_To_Become_Reph","Pre_M","Pre_C","Base_C","After_Main","Above_C","Before_Sub","Below_C","After_Sub","Before_Post","Post_C","After_Post","Final_C","SMVD","End","CONSONANT_FLAGS","JOINER_FLAGS","HALANT_OR_COENG_FLAGS","INDIC_CONFIGS","Default","hasOldSpec","virama","basePos","rephPos","rephMode","blwfMode","INDIC_DECOMPOSITIONS","decompositions","useData","StateMachine","indicMachine","IndicShaper","setupSyllables","initialReordering","finalReordering","unicodeScript","indicConfig","isOldSpec","d","decomposed","indicCategory","indicPosition","IndicInfo","syllableType","syllable","tags","isConsonant","isJoiner","isHalantOrCoeng","wouldSubstitute","_layoutEngine","engine","GSUBProcessor","consonantPosition","consonant","info","nextSyllable","limit","hasReph","rphf","seenBelow","j","disallowDoubleHalants","lastPos","blwf","abvf","pstf","prefLen","pref","cfar","nonJoiner","tryPref","BASE_C","newPos","oldPos","tmp","newRephPos","reph","test","categories","UniversalShaper","clearSubstitutionFlags","recordRphf","recordPref","reorder","useCategory","USEInfo","isHalant","SHAPERS","mong","phag","hang","bng2","beng","dev2","deva","gjr2","gujr","guru","gur2","knda","knd2","mlm2","mlym","ory2","orya","taml","tml2","telu","tel2","khmr","bali","batk","brah","bugi","buhd","cakm","cham","dupl","egyp","gran","hano","java","kthi","kali","khoj","sind","lepc","limb","mahj","mtei","modi","hmng","rjng","saur","shrd","sidd","sinh","sund","sylo","tglg","tagb","tale","lana","tavt","takr","tibt","tfng","tirh","latn","DFLT","choose","shaper","curGlyph","replacement","undefined","USER_INDEX","ligature","characters","ligatureGlyph","isMarkLigature","lastLigID","lastNumComps","curComps","matchIndex","GPOSProcessor","applyPositionValue","variationProcessor","variationStore","getDelta","nextGlyph","class1","class2","nextIndex","curRecord","nextRecord","getAnchor","rightToLeft","baseGlyphIndex","baseIndex","markRecord","baseAnchor","applyAnchor","ligIndex","ligAttach","markGlyph","ligGlyph","compIndex","mark1Index","prevIndex","good","mark2Index","markCoords","markPos","anchor","fixCursiveAttachment","fixMarkAttachment","OTLayoutEngine","glyphInfos","setup","Shapers","glyphInfo","zeroMarkWidths","zeroMarkAdvances","cleanup","LayoutEngine","unicodeLayoutEngine","kernProcessor","layout","glyphsForString","hideDefaultIgnorables","positioned","space","isDefaultIgnorable","ch","plane","from","SVG_COMMANDS","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","closePath","Path","commands","_bbox","_cbox","toFunction","forEach","command","toSVG","cmds","round","join","freeze","cx","cy","p0","p1","p2","p3","qp1x","qp1y","p3x","p3y","cp1x","cp1y","cp2x","cp2y","b2ac","t1","sqrt","t2","mapPoints","path","transform","m0","m1","m2","m3","m4","m5","translate","rotate","angle","cos","sin","scale","scaleX","scaleY","Glyph","_getPath","_getCBox","_getBBox","_getTableMetrics","metric","_getMetrics","_metrics","leftBearing","topBearing","os2","getAdvanceAdjustment","getScaledPath","ligatureCaretPositions","_getName","StandardNames","fromCharCode","render","save","fill","restore","GlyfHeader","numberOfContours","ON_CURVE","X_SHORT_VECTOR","Y_SHORT_VECTOR","REPEAT","SAME_X","SAME_Y","ARG_1_AND_2_ARE_WORDS","WE_HAVE_A_SCALE","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_TWO_BY_TWO","WE_HAVE_INSTRUCTIONS","Point","onCurve","endContour","Component","dx","dy","scale01","scale10","TTFGlyph","internal","_getTableStream","_parseGlyphCoord","short","same","_decode","glyfPos","nextPos","_decodeSimple","_decodeComposite","points","endPtsOfContours","numCoords","flag","point","px","py","_getPhantomPoints","transformPoints","phantomPoints","haveInstructions","gPos","readInt8","_getContours","contours","contour","directory","firstPt","lastPt","curvePt","pt","prevPt","midX","midY","CFFGlyph","CFF2","bias","cff","trans","nStems","usedGsubrs","usedSubrs","_usedGsubrs","_usedSubrs","gsubrs","gsubrsBias","privateDict","subrs","Subrs","subrsBias","vstore","vsindex","checkWidth","shift","nominalWidthX","parseStems","parse","phase","c1x","c1y","c2x","c2y","subr","blendVector","getBlendVector","numOperands","sum","s1","s2","v1","v2","random","n","c3x","c3y","c4x","c4y","c5x","c5y","c6x","c6y","pts","startx","starty","b1","SBIXImage","originX","originY","buflen","SBIXGlyph","getImageForSize","img","image","renderOutlines","COLRLayer","color","COLRGlyph","layers","layer","cpal","colr","rec","baseLayer","_getBaseGlyph","fillColor","TUPLES_SHARE_POINT_NUMBERS","TUPLE_COUNT_MASK","EMBEDDED_TUPLE_COORD","INTERMEDIATE_TUPLE","PRIVATE_POINT_NUMBERS","TUPLE_INDEX_MASK","POINTS_ARE_WORDS","POINT_RUN_COUNT_MASK","DELTAS_ARE_ZERO","DELTAS_ARE_WORDS","DELTA_RUN_COUNT_MASK","GlyphVariationProcessor","normalizeCoords","blendVectors","normalized","EPSILON","glyphPoints","tupleCount","here","sharedPoints","decodePoints","origPoints","tupleDataSize","tupleCoords","startCoords","endCoords","factor","tupleFactor","nPoints","xDeltas","decodeDeltas","yDeltas","outPoints","hasDelta","interpolateMissingDeltas","deltaX","deltaY","Uint16Array","run","runCount","readUInt16","Int16Array","inPoints","firstPoint","endPoint","firstDelta","curDelta","deltaInterpolate","deltaShift","ref1","ref2","iterable","in1","in2","out1","out2","out","ref","itemStore","varData","deltaSet","netAdjustment","master","scalar","regionIndex","axes","axisScalar","resolved","Promise","resolve","Subset","mapping","includeGlyph","encodeStream","EncodeStream","then","Glyf","xPoints","yPoints","TTFGlyphEncoder","encodeSimple","lastX","lastY","lastFlag","pointCount","_encodePoint","shortFlag","sameFlag","diff","TTFSubset","glyphEncoder","_addGlyph","curOffset","nextOffset","cloneDeep","CFFSubset","subsetCharstrings","charstrings","subsetSubrs","used","subsetFontdict","used_fds","used_subrs","fd_select","FontName","createCIDFontdict","addString","Encoding","CIDCount","TTFFont","toString","variationCoords","_directoryPos","_tables","_glyphs","_decodeDirectory","_getTable","_decodeTable","console","error","getName","subfamilyName","copyright","characterSet","nextState","availableFeatures","createSubset","variationAxes","trim","default","namedVariations","settings","getVariation","WOFFDirectoryEntry","compLength","origChecksum","WOFFDirectory","flavor","totalSfntSize","metaOffset","metaLength","metaOrigLength","privOffset","privLength","WOFFFont","outBuffer","alloc","inflate","WOFF2Glyph","_transformedGlyphs","Base128","knownTags","WOFF2DirectoryEntry","customTag","transformVersion","transformed","transformLength","WOFF2Directory","totalCompressedSize","WOFF2Font","_dataPos","_decompress","_decompressed","decompressedSize","decompressed","brotli","_transformGlyfTable","GlyfTable","nContours","totalPoints","read255UInt16","decodeTriplet","instructionSize","composites","Substream","_buf","indexFormat","nContourStreamSize","nPointsStreamSize","flagStreamSize","glyphStreamSize","compositeStreamSize","bboxStreamSize","instructionStreamSize","bboxes","WORD_CODE","ONE_MORE_BYTE_CODE2","ONE_MORE_BYTE_CODE1","LOWEST_U_CODE","withSign","baseval","b0","b2","TTCHeader","numFonts","dsigTag","dsigLength","dsigOffset","TrueTypeCollection","readString","fonts","DFontName","DFontData","Ref","nameOffset","attr","dataOffset","handle","Type","maxTypeIndex","refList","TypeList","DFontMap","typeList","nameListOffset","DFontHeader","dataLength","mapLength","DFont","sfnt"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}