![](/assets/images/project_default_logo.png)
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.es5.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","hdrSize","getCFFVersion","readUInt32BE","readUInt16BE","offSize","readUInt8","offsetType","pos","ret","startPos","start","decode","end","offset","arr","item","writeUInt16BE","sizes","s","writeUInt8","encode","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","operands","op","decodeOperands","encodeOperands","defineProperties","_startOffset","PropertyDescriptor","dict","includePointers","pointerSize","startOffset","len","k","isEqual","pointers","pointerOffset","ptr","CFFPointer","options","Ptr","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","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","FamilyName","glyph","readBuffer","gid","charset","low","high","mid","fdForGlyph","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","struct","buildStruct","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","constructor","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","codepoint","variationSelector","buf","fromCodePoint","getVariationSelector","rangeOffset","group","selectors","toArray","x","sel","endCodes","tail","delta","c","g","KernProcessor","positions","id","getKerning","crossStream","variation","pairIdx","pair","leftOffset","rightOffset","override","UnicodeLayoutEngine","clusterStart","clusterEnd","isMark","positionCluster","baseBox","cbox","copy","codePoints","minX","yGap","mark","markBox","position","combiningClass","getCombiningClass","maxX","minY","maxY","codePoint","unicode","BBox","Infinity","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","bbox","p","addPoint","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","getItem","seg","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","lookup","row","entryIndex","opts","state","visited","Set","add","glyphsForValue","enter","traverse","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","insertionActionIndex","isBefore","insertions","_insertGlyphs","generateInputCache","generateInputsForSubtable","stack","found","swap","rangeA","rangeB","reverseA","reverseB","verb","AATLayoutEngine","morxProcessor","fallbackPosition","glyphRun","AATFeatureMap","getSupportedFeatures","glyphStrings","generateInputs","_addStrings","strings","_cmapProcessor","codePointsForGlyph","ShapingPlan","stages","globalFeatures","allFeatures","global","stageIndex","stage","arg","_addFeatures","local","processor","applyFeatures","VARIATION_FEATURES","COMMON_FEATURES","FRACTIONAL_FEATURES","HORIZONTAL_FEATURES","DIRECTIONAL_FEATURES","ltr","rtl","DefaultShaper","plan","planPreprocessing","planFeatures","planPostprocessing","assignGlobalFeatures","assignFeatures","userFeatures","setFeatureOverrides","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","addStage","prev","curAction","prevAction","getShapingClass","category","getCategory","GlyphIterator","reset","ignoreMarks","ignoreBaseGlyphs","isBase","ignoreLigatures","isLigature","shouldIgnore","move","increment","DEFAULT_SCRIPTS","OTProcessor","scriptTag","lookups","variationsIndex","_variationProcessor","findVariationsIndex","normalizedCoords","selectScript","ligatureID","currentFeature","changed","findScript","repeat","substituteFeature","substituteFeatureForVariations","exclude","lookupIndex","sort","substitution","coords","variations","conditions","variationConditionsMatch","every","condition","filterRangeMinValue","filterRangeMaxValue","advances","lookupsForFeatures","applyLookups","glyphIterator","cur","applyLookup","lookupRecord","sequence","matched","match","coverageIndex","classID","getClassID","rule","sequenceMatches","applyLookupList","classSequenceMatches","coverageSequenceMatches","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","advanceWidth","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","sequenceMatchIndices","characters","ligatureGlyph","isMarkLigature","lastLigID","lastNumComps","curComps","matchIndex","applyContext","applyChainingContext","GPOSProcessor","peekIndex","variationProcessor","variationStore","getDelta","applyPositionValue","nextGlyph","peek","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","Shapers","glyphInfo","zeroMarkWidths","zeroMarkAdvances","LayoutEngine","unicodeLayoutEngine","kernProcessor","glyphsForString","setup","hideDefaultIgnorables","cleanup","positioned","positionGlyphs","space","isDefaultIgnorable","ch","plane","getAvailableFeatures","stringsForGlyph","from","SVG_COMMANDS","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","closePath","Path","commands","_bbox","_cbox","forEach","command","cmds","round","join","freeze","cx","cy","p0","p1","p2","p3","qp1x","qp1y","p3x","p3y","cp1x","cp1y","cp2x","cp2y","b2ac","t1","sqrt","t2","path","m0","m1","m2","m3","m4","m5","mapPoints","transform","angle","cos","sin","scaleX","scaleY","Glyph","metric","_metrics","_getTableMetrics","leftBearing","advanceHeight","topBearing","os2","getAdvanceAdjustment","_getCBox","_getBBox","_getPath","scale","_getMetrics","StandardNames","fromCharCode","_getName","save","toFunction","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","short","same","glyfPos","nextPos","_decodeSimple","_decodeComposite","points","endPtsOfContours","numCoords","flag","point","px","_parseGlyphCoord","py","_getPhantomPoints","transformPoints","phantomPoints","haveInstructions","gPos","readInt8","_decode","contours","_getContours","contour","directory","firstPt","lastPt","curvePt","pt","prevPt","midX","midY","CFFGlyph","CFF2","getGlyphName","cff","trans","nStems","usedGsubrs","usedSubrs","_usedGsubrs","_usedSubrs","gsubrs","gsubrsBias","bias","privateDict","privateDictForGlyph","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","img","getImageForSize","image","renderOutlines","COLRLayer","color","COLRGlyph","layers","layer","cpal","colr","rec","baseLayer","_getBaseGlyph","fillColor","render","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","then","Glyf","xPoints","yPoints","TTFGlyphEncoder","lastX","lastY","lastFlag","pointCount","_encodePoint","shortFlag","sameFlag","diff","TTFSubset","glyphEncoder","curOffset","nextOffset","encodeSimple","_addGlyph","cloneDeep","CFFSubset","charstrings","getCharString","subsetSubrs","used","used_fds","used_subrs","fd_select","FontName","subsetCharstrings","Encoding","addString","CIDCount","subsetFontdict","createCIDFontdict","TTFFont","variationCoords","_directoryPos","_tables","_glyphs","_decodeDirectory","_getTable","_decodeTable","console","error","getName","getCharacterSet","nextState","layout","trim","default","settings","namedVariations","getVariation","toString","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","_decompressed","decompressedSize","decompressed","brotli","_decompress","_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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lxD,IAAAA,CAAC;AACF;;AAED,SAAOA,CAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5RD;AACA;AACA,AAAO,IAAMmxD,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"}