@weasel-js/text-shaping 1.14.2 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vendor/harfbuzzjs/index.js"],"names":["exports","nameId","ptr","Font","utf8Encoder","Buffer","Feature","Variation","buffer","font"],"mappings":"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","file":"harfbuzzjs-GV2DMLBC.js","sourcesContent":["// harfbuzzjs 1.6.4 dist/index.mjs (MIT, see LICENSE). Changed: no top-level `init(await createHarfBuzz())`;\n// `init` is exported, and the caller passes it the module `createHarfBuzz` (./harfbuzz.js) resolves with.\n//#region src/helpers.ts\nlet Module;\nlet exports;\nlet freeFuncPtr;\nconst utf8Decoder = new TextDecoder(\"utf8\");\nconst utf8Encoder = new TextEncoder();\nconst registry = new FinalizationRegistry((cleanup) => {\n\tcleanup();\n});\nfunction track(obj, destroy) {\n\tconst ptr = obj.ptr;\n\tregistry.register(obj, () => destroy(ptr));\n}\n/**\n* Initialize the HarfBuzz module.\n* @param module The Emscripten module instance created with {@link\n* createHarfBuzz}.\n*/\nfunction init(module) {\n\tModule = module;\n\texports = Module.wasmExports;\n\tfreeFuncPtr = Module.addFunction((ptr) => {\n\t\texports.free(ptr);\n\t}, \"vi\");\n}\nfunction hb_tag(s) {\n\treturn (s.charCodeAt(0) & 255) << 24 | (s.charCodeAt(1) & 255) << 16 | (s.charCodeAt(2) & 255) << 8 | (s.charCodeAt(3) & 255) << 0;\n}\nfunction hb_untag(tag) {\n\treturn String.fromCharCode(tag >> 24 & 255, tag >> 16 & 255, tag >> 8 & 255, tag >> 0 & 255);\n}\nfunction utf8_ptr_to_string(ptr, length) {\n\tlet end;\n\tif (length == void 0) end = Module.HEAPU8.indexOf(0, ptr);\n\telse end = ptr + length;\n\treturn utf8Decoder.decode(Module.HEAPU8.subarray(ptr, end));\n}\nfunction utf16_ptr_to_string(ptr, length) {\n\tconst end = ptr / 2 + length;\n\treturn String.fromCharCode(...Module.HEAPU16.subarray(ptr / 2, end));\n}\n/**\n* Use when you know the input range should be ASCII.\n* Faster than encoding to UTF-8\n*/\nfunction string_to_ascii_ptr(text) {\n\tconst ptr = exports.malloc(text.length + 1);\n\tfor (let i = 0; i < text.length; ++i) {\n\t\tconst char = text.charCodeAt(i);\n\t\tif (char > 127) throw new Error(\"Expected ASCII text\");\n\t\tModule.HEAPU8[ptr + i] = char;\n\t}\n\tModule.HEAPU8[ptr + text.length] = 0;\n\treturn {\n\t\tptr,\n\t\tlength: text.length,\n\t\tfree: function() {\n\t\t\texports.free(ptr);\n\t\t}\n\t};\n}\nfunction string_to_utf8_ptr(text) {\n\tconst ptr = exports.malloc(text.length);\n\tutf8Encoder.encodeInto(text, Module.HEAPU8.subarray(ptr, ptr + text.length));\n\treturn {\n\t\tptr,\n\t\tlength: text.length,\n\t\tfree: function() {\n\t\t\texports.free(ptr);\n\t\t}\n\t};\n}\nfunction string_to_utf16_ptr(text) {\n\tconst ptr = exports.malloc(text.length * 2);\n\tconst words = Module.HEAPU16.subarray(ptr / 2, ptr / 2 + text.length);\n\tfor (let i = 0; i < words.length; ++i) words[i] = text.charCodeAt(i);\n\treturn {\n\t\tptr,\n\t\tlength: words.length,\n\t\tfree: function() {\n\t\t\texports.free(ptr);\n\t\t}\n\t};\n}\nfunction language_to_string(language) {\n\treturn utf8_ptr_to_string(exports.hb_language_to_string(language));\n}\nfunction language_from_string(str) {\n\tconst languageStr = string_to_ascii_ptr(str);\n\tconst languagePtr = exports.hb_language_from_string(languageStr.ptr, -1);\n\tlanguageStr.free();\n\treturn languagePtr;\n}\n/**\n* Return the typed array of HarfBuzz set contents.\n* @param setPtr Pointer of set\n* @returns Typed array instance\n*/\nfunction typed_array_from_set(setPtr) {\n\tconst setCount = exports.hb_set_get_population(setPtr);\n\tconst arrayPtr = exports.malloc(setCount << 2);\n\tconst arrayOffset = arrayPtr >> 2;\n\texports.hb_set_next_many(setPtr, -1, arrayPtr, setCount);\n\treturn Module.HEAPU32.subarray(arrayOffset, arrayOffset + setCount);\n}\nconst callbackData = [void 0];\nconst freeCallbackData = [];\nfunction register_callback_data_pointer(data) {\n\tif (data === void 0) return 0;\n\tconst dataPtr = freeCallbackData.pop() ?? callbackData.length;\n\tcallbackData[dataPtr] = data;\n\treturn dataPtr;\n}\nfunction get_callback_data(dataPtr) {\n\treturn callbackData[dataPtr];\n}\nfunction remove_callback_data_pointer(dataPtr) {\n\tif (dataPtr === 0) return;\n\tcallbackData[dataPtr] = void 0;\n\tfreeCallbackData.push(dataPtr);\n}\nfunction color_from_int(color) {\n\treturn {\n\t\tred: color >> 8 & 255,\n\t\tgreen: color >> 16 & 255,\n\t\tblue: color >> 24 & 255,\n\t\talpha: color & 255\n\t};\n}\nfunction color_to_int(color) {\n\treturn (color.red << 8 | color.green << 16 | color.blue << 24 | color.alpha) >>> 0;\n}\n//#endregion\n//#region src/types.ts\n/** Flags that describe the properties of a color palette. */\nconst ColorPaletteFlags = {\n\tDEFAULT: 0,\n\tUSABLE_WITH_LIGHT_BACKGROUND: 1,\n\tUSABLE_WITH_DARK_BACKGROUND: 2\n};\n/**\n* The values of this enumeration determine how color values outside the minimum\n* and maximum defined offset on a {@link ColorLine} are determined.\n*\n* See the OpenType spec\n* [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr) section\n* for details.\n*/\nconst PaintExtend = {\n\tPAD: 0,\n\tREPEAT: 1,\n\tREFLECT: 2\n};\n/**\n* The values of this enumeration describe the compositing modes that can be used\n* when combining temporary redirected drawing with the backdrop.\n*\n* See the OpenType spec\n* [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr) section\n* for details.\n*/\nconst PaintCompositeMode = {\n\tCLEAR: 0,\n\tSRC: 1,\n\tDEST: 2,\n\tSRC_OVER: 3,\n\tDEST_OVER: 4,\n\tSRC_IN: 5,\n\tDEST_IN: 6,\n\tSRC_OUT: 7,\n\tDEST_OUT: 8,\n\tSRC_ATOP: 9,\n\tDEST_ATOP: 10,\n\tXOR: 11,\n\tPLUS: 12,\n\tSCREEN: 13,\n\tOVERLAY: 14,\n\tDARKEN: 15,\n\tLIGHTEN: 16,\n\tCOLOR_DODGE: 17,\n\tCOLOR_BURN: 18,\n\tHARD_LIGHT: 19,\n\tSOFT_LIGHT: 20,\n\tDIFFERENCE: 21,\n\tEXCLUSION: 22,\n\tMULTIPLY: 23,\n\tHSL_HUE: 24,\n\tHSL_SATURATION: 25,\n\tHSL_COLOR: 26,\n\tHSL_LUMINOSITY: 27\n};\n/** Flags for {@link AxisInfo}. */\nconst AxisFlags = { HIDDEN: 1 };\nconst GlyphFlag = {\n\tUNSAFE_TO_BREAK: 1,\n\tUNSAFE_TO_CONCAT: 2,\n\tSAFE_TO_INSERT_TATWEEL: 4,\n\tDEFINED: 7\n};\n//#endregion\n//#region src/blob.ts\n/**\n* An object representing a {@link https://harfbuzz.github.io/harfbuzz-hb-blob.html | HarfBuzz blob}.\n* A blob wraps a chunk of binary data, typically the contents of a font file.\n*/\nvar Blob = class {\n\t/**\n\t* @param data Binary font data.\n\t*/\n\tconstructor(data) {\n\t\tconst array = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst blobPtr = exports.malloc(array.byteLength);\n\t\tModule.HEAPU8.set(array, blobPtr);\n\t\tthis.ptr = exports.hb_blob_create(blobPtr, array.byteLength, 2, blobPtr, freeFuncPtr);\n\t\ttrack(this, exports.hb_blob_destroy);\n\t}\n};\n//#endregion\n//#region src/face.ts\nconst HB_OT_NAME_ID_INVALID = 65535;\nconst GlyphClass = {\n\tUNCLASSIFIED: 0,\n\tBASE_GLYPH: 1,\n\tLIGATURE: 2,\n\tMARK: 3,\n\tCOMPONENT: 4\n};\n/**\n* An object representing a {@link https://harfbuzz.github.io/harfbuzz-hb-face.html | HarfBuzz face}.\n* A face represents a single face in a binary font file and is the\n* foundation for creating Font objects used in text shaping.\n*/\nvar Face = class {\n\tconstructor(arg, index = 0) {\n\t\tif (typeof arg === \"number\") this.ptr = exports.hb_face_reference(arg);\n\t\telse this.ptr = exports.hb_face_create(arg.ptr, index);\n\t\tthis.upem = exports.hb_face_get_upem(this.ptr);\n\t\ttrack(this, exports.hb_face_destroy);\n\t}\n\t/**\n\t* Return the binary contents of an OpenType table.\n\t* @param table Table name\n\t* @returns A Uint8Array of the table data, or undefined if the table is not found.\n\t*/\n\treferenceTable(table) {\n\t\tconst blob = exports.hb_face_reference_table(this.ptr, hb_tag(table));\n\t\tconst length = exports.hb_blob_get_length(blob);\n\t\tif (!length) return;\n\t\tconst blobptr = exports.hb_blob_get_data(blob, 0);\n\t\treturn Module.HEAPU8.subarray(blobptr, blobptr + length);\n\t}\n\t/**\n\t* Return variation axis infos.\n\t* @returns A dictionary mapping axis tags to {@link AxisInfo} values.\n\t*/\n\tgetAxisInfos() {\n\t\tconst sp = Module.stackSave();\n\t\tconst axis = Module.stackAlloc(2048);\n\t\tconst c = Module.stackAlloc(4);\n\t\tModule.HEAPU32[c / 4] = 64;\n\t\texports.hb_ot_var_get_axis_infos(this.ptr, 0, c, axis);\n\t\tconst result = {};\n\t\tArray.from({ length: Module.HEAPU32[c / 4] }).forEach((_, i) => {\n\t\t\tconst info = {\n\t\t\t\taxisIndex: Module.HEAPU32[axis / 4 + i * 8],\n\t\t\t\ttag: hb_untag(Module.HEAPU32[axis / 4 + i * 8 + 1]),\n\t\t\t\tnameId: Module.HEAPU32[axis / 4 + i * 8 + 2],\n\t\t\t\tflags: Module.HEAPU32[axis / 4 + i * 8 + 3],\n\t\t\t\tmin: Module.HEAPF32[axis / 4 + i * 8 + 4],\n\t\t\t\tdefault: Module.HEAPF32[axis / 4 + i * 8 + 5],\n\t\t\t\tmax: Module.HEAPF32[axis / 4 + i * 8 + 6]\n\t\t\t};\n\t\t\tresult[info.tag] = info;\n\t\t});\n\t\tModule.stackRestore(sp);\n\t\treturn result;\n\t}\n\t/**\n\t* Return unicodes the face supports.\n\t* @returns A Uint32Array of supported Unicode code points.\n\t*/\n\tcollectUnicodes() {\n\t\tconst unicodeSetPtr = exports.hb_set_create();\n\t\texports.hb_face_collect_unicodes(this.ptr, unicodeSetPtr);\n\t\tconst result = typed_array_from_set(unicodeSetPtr);\n\t\texports.hb_set_destroy(unicodeSetPtr);\n\t\treturn result;\n\t}\n\t/**\n\t* Return all scripts enumerated in the specified face's\n\t* GSUB table or GPOS table.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @returns An array of 4-character script tag strings.\n\t*/\n\tgetTableScriptTags(table) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tlet startOffset = 0;\n\t\tlet scriptCount = 128;\n\t\tconst scriptCountPtr = Module.stackAlloc(4);\n\t\tconst scriptTagsPtr = Module.stackAlloc(512);\n\t\tconst tags = [];\n\t\twhile (scriptCount == 128) {\n\t\t\tModule.HEAPU32[scriptCountPtr / 4] = scriptCount;\n\t\t\texports.hb_ot_layout_table_get_script_tags(this.ptr, tableTag, startOffset, scriptCountPtr, scriptTagsPtr);\n\t\t\tscriptCount = Module.HEAPU32[scriptCountPtr / 4];\n\t\t\tconst scriptTags = Module.HEAPU32.subarray(scriptTagsPtr / 4, scriptTagsPtr / 4 + scriptCount);\n\t\t\ttags.push(...Array.from(scriptTags).map(hb_untag));\n\t\t\tstartOffset += scriptCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn tags;\n\t}\n\t/**\n\t* Return all features enumerated in the specified face's\n\t* GSUB table or GPOS table.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @returns An array of 4-character feature tag strings.\n\t*/\n\tgetTableFeatureTags(table) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tlet startOffset = 0;\n\t\tlet featureCount = 128;\n\t\tconst featureCountPtr = Module.stackAlloc(4);\n\t\tconst featureTagsPtr = Module.stackAlloc(512);\n\t\tconst tags = [];\n\t\twhile (featureCount == 128) {\n\t\t\tModule.HEAPU32[featureCountPtr / 4] = featureCount;\n\t\t\texports.hb_ot_layout_table_get_feature_tags(this.ptr, tableTag, startOffset, featureCountPtr, featureTagsPtr);\n\t\t\tfeatureCount = Module.HEAPU32[featureCountPtr / 4];\n\t\t\tconst featureTags = Module.HEAPU32.subarray(featureTagsPtr / 4, featureTagsPtr / 4 + featureCount);\n\t\t\ttags.push(...Array.from(featureTags).map(hb_untag));\n\t\t\tstartOffset += featureCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn tags;\n\t}\n\t/**\n\t* Return language tags in the given face's GSUB or GPOS table, underneath\n\t* the specified script index.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @param scriptIndex The index of the script to query.\n\t* @returns An array of 4-character language tag strings.\n\t*/\n\tgetScriptLanguageTags(table, scriptIndex) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tlet startOffset = 0;\n\t\tlet languageCount = 128;\n\t\tconst languageCountPtr = Module.stackAlloc(4);\n\t\tconst languageTagsPtr = Module.stackAlloc(512);\n\t\tconst tags = [];\n\t\twhile (languageCount == 128) {\n\t\t\tModule.HEAPU32[languageCountPtr / 4] = languageCount;\n\t\t\texports.hb_ot_layout_script_get_language_tags(this.ptr, tableTag, scriptIndex, startOffset, languageCountPtr, languageTagsPtr);\n\t\t\tlanguageCount = Module.HEAPU32[languageCountPtr / 4];\n\t\t\tconst languageTags = Module.HEAPU32.subarray(languageTagsPtr / 4, languageTagsPtr / 4 + languageCount);\n\t\t\ttags.push(...Array.from(languageTags).map(hb_untag));\n\t\t\tstartOffset += languageCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn tags;\n\t}\n\t/**\n\t* Return all features in the specified face's GSUB table or GPOS table,\n\t* underneath the specified script and language.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @param scriptIndex The index of the script to query.\n\t* @param languageIndex The index of the language to query.\n\t* @returns An array of 4-character feature tag strings.\n\t*/\n\tgetLanguageFeatureTags(table, scriptIndex, languageIndex) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tlet startOffset = 0;\n\t\tlet featureCount = 128;\n\t\tconst featureCountPtr = Module.stackAlloc(4);\n\t\tconst featureTagsPtr = Module.stackAlloc(512);\n\t\tconst tags = [];\n\t\twhile (featureCount == 128) {\n\t\t\tModule.HEAPU32[featureCountPtr / 4] = featureCount;\n\t\t\texports.hb_ot_layout_language_get_feature_tags(this.ptr, tableTag, scriptIndex, languageIndex, startOffset, featureCountPtr, featureTagsPtr);\n\t\t\tfeatureCount = Module.HEAPU32[featureCountPtr / 4];\n\t\t\tconst featureTags = Module.HEAPU32.subarray(featureTagsPtr / 4, featureTagsPtr / 4 + featureCount);\n\t\t\ttags.push(...Array.from(featureTags).map(hb_untag));\n\t\t\tstartOffset += featureCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn tags;\n\t}\n\t/**\n\t* Fetches a list of all lookups enumerated for the specified feature, in\n\t* the specified face's GSUB table or GPOS table.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @param featureIndex The index of the requested feature.\n\t* @returns An array of lookup indexes.\n\t*/\n\tgetFeatureLookups(table, featureIndex) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tlet startOffset = 0;\n\t\tlet lookupCount = 128;\n\t\tconst lookupCountPtr = Module.stackAlloc(4);\n\t\tconst lookupIndexesPtr = Module.stackAlloc(512);\n\t\tconst lookups = [];\n\t\twhile (lookupCount == 128) {\n\t\t\tModule.HEAPU32[lookupCountPtr / 4] = lookupCount;\n\t\t\texports.hb_ot_layout_feature_get_lookups(this.ptr, tableTag, featureIndex, startOffset, lookupCountPtr, lookupIndexesPtr);\n\t\t\tlookupCount = Module.HEAPU32[lookupCountPtr / 4];\n\t\t\tconst lookupIndexes = Module.HEAPU32.subarray(lookupIndexesPtr / 4, lookupIndexesPtr / 4 + lookupCount);\n\t\t\tlookups.push(...Array.from(lookupIndexes));\n\t\t\tstartOffset += lookupCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn lookups;\n\t}\n\t/**\n\t* Get the GDEF class of the requested glyph.\n\t* @param glyph The glyph to get the class of.\n\t* @returns The {@link GlyphClass} of the glyph.\n\t*/\n\tgetGlyphClass(glyph) {\n\t\treturn exports.hb_ot_layout_get_glyph_class(this.ptr, glyph);\n\t}\n\t/**\n\t* Return all names in the specified face's name table.\n\t* @returns An array of {nameId, language} entries.\n\t*/\n\tlistNames() {\n\t\tconst sp = Module.stackSave();\n\t\tconst numEntriesPtr = Module.stackAlloc(4);\n\t\tconst entriesPtr = exports.hb_ot_name_list_names(this.ptr, numEntriesPtr);\n\t\tconst numEntries = Module.HEAPU32[numEntriesPtr / 4];\n\t\tconst entries = [];\n\t\tfor (let i = 0; i < numEntries; i++) entries.push({\n\t\t\tnameId: Module.HEAPU32[entriesPtr / 4 + i * 3],\n\t\t\tlanguage: language_to_string(Module.HEAPU32[entriesPtr / 4 + i * 3 + 2])\n\t\t});\n\t\tModule.stackRestore(sp);\n\t\treturn entries;\n\t}\n\t/**\n\t* Get the name of the specified face.\n\t* @param nameId The ID of the name to get.\n\t* @param language The language of the name to get.\n\t* @returns The name string.\n\t*/\n\tgetName(nameId, language) {\n\t\tconst sp = Module.stackSave();\n\t\tconst languagePtr = language_from_string(language);\n\t\tconst nameLen = exports.hb_ot_name_get_utf16(this.ptr, nameId, languagePtr, 0, 0) + 1;\n\t\tconst textSizePtr = Module.stackAlloc(4);\n\t\tconst textPtr = exports.malloc(nameLen * 2);\n\t\tModule.HEAPU32[textSizePtr / 4] = nameLen;\n\t\texports.hb_ot_name_get_utf16(this.ptr, nameId, languagePtr, textSizePtr, textPtr);\n\t\tconst name = utf16_ptr_to_string(textPtr, nameLen - 1);\n\t\texports.free(textPtr);\n\t\tModule.stackRestore(sp);\n\t\treturn name;\n\t}\n\t/**\n\t* Get the name IDs of the specified feature.\n\t* @param table The table to query, either \"GSUB\" or \"GPOS\".\n\t* @param featureIndex The index of the feature to query.\n\t* @returns An object with name IDs, or undefined if not found.\n\t*/\n\tgetFeatureNameIds(table, featureIndex) {\n\t\tconst sp = Module.stackSave();\n\t\tconst tableTag = hb_tag(table);\n\t\tconst labelIdPtr = Module.stackAlloc(4);\n\t\tconst tooltipIdPtr = Module.stackAlloc(4);\n\t\tconst sampleIdPtr = Module.stackAlloc(4);\n\t\tconst numNamedParametersPtr = Module.stackAlloc(4);\n\t\tconst firstParameterIdPtr = Module.stackAlloc(4);\n\t\tconst found = exports.hb_ot_layout_feature_get_name_ids(this.ptr, tableTag, featureIndex, labelIdPtr, tooltipIdPtr, sampleIdPtr, numNamedParametersPtr, firstParameterIdPtr);\n\t\tlet names;\n\t\tif (found) {\n\t\t\tconst uiLabelNameId = Module.HEAPU32[labelIdPtr / 4];\n\t\t\tconst uiTooltipTextNameId = Module.HEAPU32[tooltipIdPtr / 4];\n\t\t\tconst sampleTextNameId = Module.HEAPU32[sampleIdPtr / 4];\n\t\t\tconst numNamedParameters = Module.HEAPU32[numNamedParametersPtr / 4];\n\t\t\tconst firstParameterId = Module.HEAPU32[firstParameterIdPtr / 4];\n\t\t\tnames = { paramUiLabelNameIds: Array.from({ length: numNamedParameters }, (_, i) => firstParameterId + i) };\n\t\t\tif (uiLabelNameId != HB_OT_NAME_ID_INVALID) names.uiLabelNameId = uiLabelNameId;\n\t\t\tif (uiTooltipTextNameId != HB_OT_NAME_ID_INVALID) names.uiTooltipTextNameId = uiTooltipTextNameId;\n\t\t\tif (sampleTextNameId != HB_OT_NAME_ID_INVALID) names.sampleTextNameId = sampleTextNameId;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn names;\n\t}\n\t/**\n\t* Tests whether a face includes a `CPAL` color-palette table.\n\t* @returns `true` if data found, `false` otherwise.\n\t*/\n\thasColorPalettes() {\n\t\treturn !!exports.hb_ot_color_has_palettes(this.ptr);\n\t}\n\t/**\n\t* Fetches the color palettes in the face's `CPAL` table.\n\t* @returns An array of the face's {@link ColorPalette | color palettes}.\n\t*/\n\tgetColorPalettes() {\n\t\tconst count = exports.hb_ot_color_palette_get_count(this.ptr);\n\t\tconst palettes = [];\n\t\tconst sp = Module.stackSave();\n\t\tconst countPtr = Module.stackAlloc(4);\n\t\tconst colorsPtr = Module.stackAlloc(512);\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst colors = [];\n\t\t\tlet startOffset = 0;\n\t\t\tlet colorCount = 128;\n\t\t\twhile (colorCount === 128) {\n\t\t\t\tModule.HEAPU32[countPtr / 4] = colorCount;\n\t\t\t\texports.hb_ot_color_palette_get_colors(this.ptr, i, startOffset, countPtr, colorsPtr);\n\t\t\t\tcolorCount = Module.HEAPU32[countPtr / 4];\n\t\t\t\tfor (let j = 0; j < colorCount; j++) {\n\t\t\t\t\tconst color = color_from_int(Module.HEAPU32[colorsPtr / 4 + j]);\n\t\t\t\t\tconst nameId = exports.hb_ot_color_palette_color_get_name_id(this.ptr, startOffset + j);\n\t\t\t\t\tif (nameId != HB_OT_NAME_ID_INVALID) color.nameId = nameId;\n\t\t\t\t\tcolors.push(color);\n\t\t\t\t}\n\t\t\t\tstartOffset += colorCount;\n\t\t\t}\n\t\t\tconst palette = {\n\t\t\t\tcolors,\n\t\t\t\tflags: exports.hb_ot_color_palette_get_flags(this.ptr, i)\n\t\t\t};\n\t\t\tconst nameId = exports.hb_ot_color_palette_get_name_id(this.ptr, i);\n\t\t\tif (nameId != HB_OT_NAME_ID_INVALID) palette.nameId = nameId;\n\t\t\tpalettes.push(palette);\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn palettes;\n\t}\n\t/**\n\t* Tests whether a face includes a `COLR` table with data according to COLRv0.\n\t* @returns `true` if data found, `false` otherwise.\n\t*/\n\thasColorLayers() {\n\t\treturn !!exports.hb_ot_color_has_layers(this.ptr);\n\t}\n\t/**\n\t* Fetches a list of all color layers for the specified glyph index in the\n\t* specified face.\n\t* @param glyph The glyph index to query.\n\t* @returns An array of the glyph's {@link ColorLayer | color layers}.\n\t*/\n\tgetGlyphColorLayers(glyph) {\n\t\tconst layers = [];\n\t\tconst sp = Module.stackSave();\n\t\tconst countPtr = Module.stackAlloc(4);\n\t\tconst layersPtr = Module.stackAlloc(1024);\n\t\tlet startOffset = 0;\n\t\tlet layerCount = 128;\n\t\twhile (layerCount === 128) {\n\t\t\tModule.HEAPU32[countPtr / 4] = layerCount;\n\t\t\texports.hb_ot_color_glyph_get_layers(this.ptr, glyph, startOffset, countPtr, layersPtr);\n\t\t\tlayerCount = Module.HEAPU32[countPtr / 4];\n\t\t\tfor (let i = 0; i < layerCount; i++) {\n\t\t\t\tconst o = layersPtr / 4 + i * 2;\n\t\t\t\tconst layer = { glyph: Module.HEAPU32[o] };\n\t\t\t\tconst colorIndex = Module.HEAPU32[o + 1];\n\t\t\t\tif (colorIndex != 65535) layer.colorIndex = colorIndex;\n\t\t\t\tlayers.push(layer);\n\t\t\t}\n\t\t\tstartOffset += layerCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn layers;\n\t}\n\t/**\n\t* Tests whether a face includes a `COLR` table with data according to COLRv1.\n\t* @returns `true` if data found, `false` otherwise.\n\t*/\n\thasColorPaint() {\n\t\treturn !!exports.hb_ot_color_has_paint(this.ptr);\n\t}\n\t/**\n\t* Tests whether a face includes COLRv1 paint data for a glyph.\n\t* @param glyph The glyph index to query.\n\t* @returns `true` if data found, `false` otherwise.\n\t*/\n\tglyphHasColorPaint(glyph) {\n\t\treturn !!exports.hb_ot_color_glyph_has_paint(this.ptr, glyph);\n\t}\n\t/**\n\t* Tests whether a face has PNG glyph images (either in `CBDT` or `sbix`\n\t* tables).\n\t* @returns `true` if data found, `false` otherwise.\n\t*/\n\thasColorPng() {\n\t\treturn !!exports.hb_ot_color_has_png(this.ptr);\n\t}\n};\n//#endregion\n//#region src/draw-funcs.ts\n/**\n* An object representing\n* {@link https://harfbuzz.github.io/harfbuzz-hb-draw.html | HarfBuzz draw functions}.\n*\n* Glyph draw callbacks.\n*\n* The {@link DrawFuncs.setMoveToFunc | move-to},\n* {@link DrawFuncs.setLineToFunc | line-to} and\n* {@link DrawFuncs.setCubicToFunc | cubic-to} callbacks are necessary to be\n* defined, but we translate {@link DrawFuncs.setQuadraticToFunc | quadratic-to}\n* calls to cubic-to if the callback isn't defined.\n*/\nvar DrawFuncs = class {\n\tconstructor() {\n\t\tthis.funcPtrs = [];\n\t\tthis.userDataPtrs = [];\n\t\tthis.ptr = exports.hb_draw_funcs_create();\n\t\tconst ptr = this.ptr;\n\t\tconst funcPtrs = this.funcPtrs;\n\t\tconst userDataPtrs = this.userDataPtrs;\n\t\tregistry.register(this, () => {\n\t\t\texports.hb_draw_funcs_destroy(ptr);\n\t\t\tfor (const ptr of funcPtrs) Module.removeFunction(ptr);\n\t\t\tfor (const ptr of userDataPtrs) remove_callback_data_pointer(ptr);\n\t\t});\n\t}\n\t/**\n\t* Sets move-to callback to the draw functions object.\n\t* @param func The move-to callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetMoveToFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((dfuncs, draw_data, draw_state, toX, toY, user_data) => {\n\t\t\tfunc(toX, toY, get_callback_data(draw_data), get_callback_data(user_data));\n\t\t}, \"viiiffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_draw_funcs_set_move_to_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets line-to callback to the draw functions object.\n\t* @param func The line-to callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetLineToFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((dfuncs, draw_data, draw_state, toX, toY, user_data) => {\n\t\t\tfunc(toX, toY, get_callback_data(draw_data), get_callback_data(user_data));\n\t\t}, \"viiiffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_draw_funcs_set_line_to_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets quadratic-to callback to the draw functions object.\n\t* @param func The quadratic-to callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetQuadraticToFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((dfuncs, draw_data, draw_state, cX, cY, toX, toY, user_data) => {\n\t\t\tfunc(cX, cY, toX, toY, get_callback_data(draw_data), get_callback_data(user_data));\n\t\t}, \"viiiffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_draw_funcs_set_quadratic_to_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets cubic-to callback to the draw functions object.\n\t* @param func The cubic-to callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetCubicToFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((dfuncs, draw_data, draw_state, c1X, c1Y, c2X, c2Y, toX, toY, user_data) => {\n\t\t\tfunc(c1X, c1Y, c2X, c2Y, toX, toY, get_callback_data(draw_data), get_callback_data(user_data));\n\t\t}, \"viiiffffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_draw_funcs_set_cubic_to_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets close-path callback to the draw functions object.\n\t* @param func The close-path callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetClosePathFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((dfuncs, draw_data, draw_state, user_data) => {\n\t\t\tfunc(get_callback_data(draw_data), get_callback_data(user_data));\n\t\t}, \"viiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_draw_funcs_set_close_path_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n};\n//#endregion\n//#region src/font.ts\n/**\n* Metric tags corresponding to [MVAR Value\n* Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags).\n*/\nconst MetricsTag = {\n\tHORIZONTAL_ASCENDER: hb_tag(\"hasc\"),\n\tHORIZONTAL_DESCENDER: hb_tag(\"hdsc\"),\n\tHORIZONTAL_LINE_GAP: hb_tag(\"hlgp\"),\n\tHORIZONTAL_CLIPPING_ASCENT: hb_tag(\"hcla\"),\n\tHORIZONTAL_CLIPPING_DESCENT: hb_tag(\"hcld\"),\n\tVERTICAL_ASCENDER: hb_tag(\"vasc\"),\n\tVERTICAL_DESCENDER: hb_tag(\"vdsc\"),\n\tVERTICAL_LINE_GAP: hb_tag(\"vlgp\"),\n\tHORIZONTAL_CARET_RISE: hb_tag(\"hcrs\"),\n\tHORIZONTAL_CARET_RUN: hb_tag(\"hcrn\"),\n\tHORIZONTAL_CARET_OFFSET: hb_tag(\"hcof\"),\n\tVERTICAL_CARET_RISE: hb_tag(\"vcrs\"),\n\tVERTICAL_CARET_RUN: hb_tag(\"vcrn\"),\n\tVERTICAL_CARET_OFFSET: hb_tag(\"vcof\"),\n\tX_HEIGHT: hb_tag(\"xhgt\"),\n\tCAP_HEIGHT: hb_tag(\"cpht\"),\n\tSUBSCRIPT_EM_X_SIZE: hb_tag(\"sbxs\"),\n\tSUBSCRIPT_EM_Y_SIZE: hb_tag(\"sbys\"),\n\tSUBSCRIPT_EM_X_OFFSET: hb_tag(\"sbxo\"),\n\tSUBSCRIPT_EM_Y_OFFSET: hb_tag(\"sbyo\"),\n\tSUPERSCRIPT_EM_X_SIZE: hb_tag(\"spxs\"),\n\tSUPERSCRIPT_EM_Y_SIZE: hb_tag(\"spys\"),\n\tSUPERSCRIPT_EM_X_OFFSET: hb_tag(\"spxo\"),\n\tSUPERSCRIPT_EM_Y_OFFSET: hb_tag(\"spyo\"),\n\tSTRIKEOUT_SIZE: hb_tag(\"strs\"),\n\tSTRIKEOUT_OFFSET: hb_tag(\"stro\"),\n\tUNDERLINE_SIZE: hb_tag(\"unds\"),\n\tUNDERLINE_OFFSET: hb_tag(\"undo\")\n};\nlet pathDrawFuncs;\nfunction getPathDrawFuncs() {\n\tif (!pathDrawFuncs) {\n\t\tpathDrawFuncs = new DrawFuncs();\n\t\tpathDrawFuncs.setMoveToFunc((x, y, path) => {\n\t\t\tpath.push(`M${x},${y}`);\n\t\t});\n\t\tpathDrawFuncs.setLineToFunc((x, y, path) => {\n\t\t\tpath.push(`L${x},${y}`);\n\t\t});\n\t\tpathDrawFuncs.setCubicToFunc((c1x, c1y, c2x, c2y, x, y, path) => {\n\t\t\tpath.push(`C${c1x},${c1y} ${c2x},${c2y} ${x},${y}`);\n\t\t});\n\t\tpathDrawFuncs.setQuadraticToFunc((cx, cy, x, y, path) => {\n\t\t\tpath.push(`Q${cx},${cy} ${x},${y}`);\n\t\t});\n\t\tpathDrawFuncs.setClosePathFunc((path) => {\n\t\t\tpath.push(\"Z\");\n\t\t});\n\t}\n\treturn pathDrawFuncs;\n}\nlet jsonDrawFuncs;\nfunction getJsonDrawFuncs() {\n\tif (!jsonDrawFuncs) {\n\t\tjsonDrawFuncs = new DrawFuncs();\n\t\tjsonDrawFuncs.setMoveToFunc((x, y, commands) => {\n\t\t\tcommands.push({\n\t\t\t\ttype: \"M\",\n\t\t\t\tvalues: [x, y]\n\t\t\t});\n\t\t});\n\t\tjsonDrawFuncs.setLineToFunc((x, y, commands) => {\n\t\t\tcommands.push({\n\t\t\t\ttype: \"L\",\n\t\t\t\tvalues: [x, y]\n\t\t\t});\n\t\t});\n\t\tjsonDrawFuncs.setCubicToFunc((c1x, c1y, c2x, c2y, x, y, commands) => {\n\t\t\tcommands.push({\n\t\t\t\ttype: \"C\",\n\t\t\t\tvalues: [\n\t\t\t\t\tc1x,\n\t\t\t\t\tc1y,\n\t\t\t\t\tc2x,\n\t\t\t\t\tc2y,\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t]\n\t\t\t});\n\t\t});\n\t\tjsonDrawFuncs.setQuadraticToFunc((cx, cy, x, y, commands) => {\n\t\t\tcommands.push({\n\t\t\t\ttype: \"Q\",\n\t\t\t\tvalues: [\n\t\t\t\t\tcx,\n\t\t\t\t\tcy,\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t]\n\t\t\t});\n\t\t});\n\t\tjsonDrawFuncs.setClosePathFunc((commands) => {\n\t\t\tcommands.push({\n\t\t\t\ttype: \"Z\",\n\t\t\t\tvalues: []\n\t\t\t});\n\t\t});\n\t}\n\treturn jsonDrawFuncs;\n}\n/**\n* An object representing a {@link https://harfbuzz.github.io/harfbuzz-hb-font.html | HarfBuzz font}.\n* A font represents a face at a specific size and with certain other\n* parameters (pixels-per-em, variation settings) specified. Fonts are the\n* primary input to the shaping process.\n*/\nvar Font = class Font {\n\tconstructor(arg) {\n\t\tif (typeof arg === \"number\") this.ptr = exports.hb_font_reference(arg);\n\t\telse {\n\t\t\tthis.ptr = exports.hb_font_create(arg.ptr);\n\t\t\tthis._face = arg;\n\t\t}\n\t\ttrack(this, exports.hb_font_destroy);\n\t}\n\t/** The {@link Face} associated with this font. */\n\tget face() {\n\t\tif (!this._face) this._face = new Face(exports.hb_font_get_face(this.ptr));\n\t\treturn this._face;\n\t}\n\t/**\n\t* Create a sub font that inherits this font's properties.\n\t* @returns A new Font object representing the sub font.\n\t*/\n\tsubFont() {\n\t\treturn new Font(exports.hb_font_create_sub_font(this.ptr));\n\t}\n\t/**\n\t* Return font horizontal extents.\n\t* @returns Object with ascender, descender, and lineGap properties.\n\t*/\n\thExtents() {\n\t\tconst sp = Module.stackSave();\n\t\tconst extentsPtr = Module.stackAlloc(48);\n\t\texports.hb_font_get_h_extents(this.ptr, extentsPtr);\n\t\tconst extents = {\n\t\t\tascender: Module.HEAP32[extentsPtr / 4],\n\t\t\tdescender: Module.HEAP32[extentsPtr / 4 + 1],\n\t\t\tlineGap: Module.HEAP32[extentsPtr / 4 + 2]\n\t\t};\n\t\tModule.stackRestore(sp);\n\t\treturn extents;\n\t}\n\t/**\n\t* Return font vertical extents.\n\t* @returns Object with ascender, descender, and lineGap properties.\n\t*/\n\tvExtents() {\n\t\tconst sp = Module.stackSave();\n\t\tconst extentsPtr = Module.stackAlloc(48);\n\t\texports.hb_font_get_v_extents(this.ptr, extentsPtr);\n\t\tconst extents = {\n\t\t\tascender: Module.HEAP32[extentsPtr / 4],\n\t\t\tdescender: Module.HEAP32[extentsPtr / 4 + 1],\n\t\t\tlineGap: Module.HEAP32[extentsPtr / 4 + 2]\n\t\t};\n\t\tModule.stackRestore(sp);\n\t\treturn extents;\n\t}\n\t/**\n\t* Return glyph name.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns The glyph name string.\n\t*/\n\tglyphName(glyphId) {\n\t\tconst sp = Module.stackSave();\n\t\tconst strSize = 256;\n\t\tconst strPtr = Module.stackAlloc(strSize);\n\t\texports.hb_font_glyph_to_string(this.ptr, glyphId, strPtr, strSize);\n\t\tconst name = utf8_ptr_to_string(strPtr);\n\t\tModule.stackRestore(sp);\n\t\treturn name;\n\t}\n\t/**\n\t* Draws the outline that corresponds to a glyph in the specified font.\n\t*\n\t* The outline is returned by way of calls to the callbacks of the `drawFuncs`\n\t* object, with `drawData` passed to them.\n\t* @param glyphId The glyph ID.\n\t* @param drawFuncs The {@link DrawFuncs} to draw to.\n\t* @param drawData User data to pass to draw callbacks.\n\t*/\n\tdrawGlyph(glyphId, drawFuncs, drawData) {\n\t\tconst drawDataPtr = register_callback_data_pointer(drawData);\n\t\ttry {\n\t\t\texports.hb_font_draw_glyph(this.ptr, glyphId, drawFuncs.ptr, drawDataPtr);\n\t\t} finally {\n\t\t\tremove_callback_data_pointer(drawDataPtr);\n\t\t}\n\t}\n\t/**\n\t* Draws the outline that corresponds to a glyph in the specified font.\n\t*\n\t* This is a newer name for {@link Font.drawGlyph}, that returns `false` if the\n\t* font has no outlines for the glyph.\n\t*\n\t* The outline is returned by way of calls to the callbacks of the `drawFuncs`\n\t* object, with `drawData` passed to them.\n\t* @param glyphId The glyph ID.\n\t* @param drawFuncs The {@link DrawFuncs} to draw to.\n\t* @param drawData User data to pass to draw callbacks.\n\t* @returns `true` if the glyph was drawn, `false` otherwise.\n\t*/\n\tdrawGlyphOrFail(glyphId, drawFuncs, drawData) {\n\t\tconst drawDataPtr = register_callback_data_pointer(drawData);\n\t\ttry {\n\t\t\treturn !!exports.hb_font_draw_glyph_or_fail(this.ptr, glyphId, drawFuncs.ptr, drawDataPtr);\n\t\t} finally {\n\t\t\tremove_callback_data_pointer(drawDataPtr);\n\t\t}\n\t}\n\t/**\n\t* Paints the glyph. This function is similar to {@link Font.paintGlyphOrFail},\n\t* but if painting a color glyph failed, it will fall back to painting an\n\t* outline monochrome glyph.\n\t*\n\t* The painting instructions are returned by way of calls to the callbacks of\n\t* the `paintFuncs` object, with `paintData` passed to them.\n\t*\n\t* If the font has color palettes, then `paletteIndex` selects the palette to\n\t* use. If the font only has one palette, this will be 0.\n\t* @param glyphId The glyph ID.\n\t* @param paintFuncs The {@link PaintFuncs} to paint with.\n\t* @param paintData User data to pass to paint callbacks.\n\t* @param paletteIndex The index of the font's color palette to use.\n\t* @param foreground The foreground color, unpremultiplied.\n\t*/\n\tpaintGlyph(glyphId, paintFuncs, paintData, paletteIndex = 0, foreground = {\n\t\tred: 0,\n\t\tgreen: 0,\n\t\tblue: 0,\n\t\talpha: 255\n\t}) {\n\t\tconst paintDataPtr = register_callback_data_pointer(paintData);\n\t\ttry {\n\t\t\texports.hb_font_paint_glyph(this.ptr, glyphId, paintFuncs.ptr, paintDataPtr, paletteIndex, color_to_int(foreground));\n\t\t} finally {\n\t\t\tremove_callback_data_pointer(paintDataPtr);\n\t\t}\n\t}\n\t/**\n\t* Paints a color glyph.\n\t*\n\t* Succeeds if the glyph has color paint layers (COLRv0), a color paint graph\n\t* (COLRv1), or a bitmap image that the font's callbacks render successfully.\n\t* Returns `false` if the font has no color data for the glyph; the client can\n\t* then fall back to {@link Font.drawGlyphOrFail} for the monochrome outline.\n\t*\n\t* The painting instructions are returned by way of calls to the callbacks of\n\t* the `paintFuncs` object, with `paintData` passed to them.\n\t*\n\t* If the font has color palettes, then `paletteIndex` selects the palette to\n\t* use. If the font only has one palette, this will be 0.\n\t* @param glyphId The glyph ID.\n\t* @param paintFuncs The {@link PaintFuncs} to paint with.\n\t* @param paintData User data to pass to paint callbacks.\n\t* @param paletteIndex The index of the font's color palette to use.\n\t* @param foreground The foreground color, unpremultiplied.\n\t* @returns `true` if the glyph was painted, `false` otherwise.\n\t*/\n\tpaintGlyphOrFail(glyphId, paintFuncs, paintData, paletteIndex = 0, foreground = {\n\t\tred: 0,\n\t\tgreen: 0,\n\t\tblue: 0,\n\t\talpha: 255\n\t}) {\n\t\tconst paintDataPtr = register_callback_data_pointer(paintData);\n\t\ttry {\n\t\t\treturn !!exports.hb_font_paint_glyph_or_fail(this.ptr, glyphId, paintFuncs.ptr, paintDataPtr, paletteIndex, color_to_int(foreground));\n\t\t} finally {\n\t\t\tremove_callback_data_pointer(paintDataPtr);\n\t\t}\n\t}\n\t/**\n\t* Fetches the PNG image for a glyph.\n\t*\n\t* To get an optimally sized PNG blob, the PPEM values must be set on the font.\n\t* If PPEM is unset, the blob returned will be the largest PNG available.\n\t* @param glyphId A glyph index.\n\t* @returns The PNG image for the glyph, or `undefined` if the glyph has no PNG\n\t* image.\n\t*/\n\tgetGlyphColorPng(glyphId) {\n\t\tconst blob = exports.hb_ot_color_glyph_reference_png(this.ptr, glyphId);\n\t\tconst length = exports.hb_blob_get_length(blob);\n\t\tlet png;\n\t\tif (length) {\n\t\t\tconst dataPtr = exports.hb_blob_get_data(blob, 0);\n\t\t\tpng = Module.HEAPU8.slice(dataPtr, dataPtr + length);\n\t\t}\n\t\texports.hb_blob_destroy(blob);\n\t\treturn png;\n\t}\n\t/**\n\t* Return a glyph as an SVG path string.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns SVG path data string.\n\t*/\n\tglyphToPath(glyphId) {\n\t\tconst path = [];\n\t\tthis.drawGlyph(glyphId, getPathDrawFuncs(), path);\n\t\treturn path.join(\"\");\n\t}\n\t/**\n\t* Return glyph horizontal advance.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns The horizontal advance width.\n\t*/\n\tglyphHAdvance(glyphId) {\n\t\treturn exports.hb_font_get_glyph_h_advance(this.ptr, glyphId);\n\t}\n\t/**\n\t* Return glyph vertical advance.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns The vertical advance height.\n\t*/\n\tglyphVAdvance(glyphId) {\n\t\treturn exports.hb_font_get_glyph_v_advance(this.ptr, glyphId);\n\t}\n\t/**\n\t* Return glyph horizontal origin.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns [x, y] origin coordinates, or undefined if not available.\n\t*/\n\tglyphHOrigin(glyphId) {\n\t\tconst sp = Module.stackSave();\n\t\tconst xPtr = Module.stackAlloc(4);\n\t\tconst yPtr = Module.stackAlloc(4);\n\t\tlet origin;\n\t\tif (exports.hb_font_get_glyph_h_origin(this.ptr, glyphId, xPtr, yPtr)) origin = [Module.HEAP32[xPtr / 4], Module.HEAP32[yPtr / 4]];\n\t\tModule.stackRestore(sp);\n\t\treturn origin;\n\t}\n\t/**\n\t* Return glyph vertical origin.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns [x, y] origin coordinates, or undefined if not available.\n\t*/\n\tglyphVOrigin(glyphId) {\n\t\tconst sp = Module.stackSave();\n\t\tconst xPtr = Module.stackAlloc(4);\n\t\tconst yPtr = Module.stackAlloc(4);\n\t\tlet origin;\n\t\tif (exports.hb_font_get_glyph_v_origin(this.ptr, glyphId, xPtr, yPtr)) origin = [Module.HEAP32[xPtr / 4], Module.HEAP32[yPtr / 4]];\n\t\tModule.stackRestore(sp);\n\t\treturn origin;\n\t}\n\t/**\n\t* Return glyph extents.\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns An object with xBearing, yBearing, width, and height, or undefined.\n\t*/\n\tglyphExtents(glyphId) {\n\t\tconst sp = Module.stackSave();\n\t\tconst extentsPtr = Module.stackAlloc(16);\n\t\tlet extents;\n\t\tif (exports.hb_font_get_glyph_extents(this.ptr, glyphId, extentsPtr)) extents = {\n\t\t\txBearing: Module.HEAP32[extentsPtr / 4],\n\t\t\tyBearing: Module.HEAP32[extentsPtr / 4 + 1],\n\t\t\twidth: Module.HEAP32[extentsPtr / 4 + 2],\n\t\t\theight: Module.HEAP32[extentsPtr / 4 + 3]\n\t\t};\n\t\tModule.stackRestore(sp);\n\t\treturn extents;\n\t}\n\t/**\n\t* Fetches the glyph ID for a Unicode code point in the specified\n\t* font, with an optional variation selector.\n\t*\n\t* If `variationSelector` is 0, it is equivalent to\n\t* {@link Font.nominalGlyph}; otherwise it is equivalent to\n\t* {@link Font.variationGlyph}.\n\t*\n\t* @param unicode The Unicode code point to query.\n\t* @param variationSelector A variation-selector code point.\n\t* @returns The glyph ID, or undefined if not found.\n\t*/\n\tglyph(unicode, variationSelector = 0) {\n\t\tconst sp = Module.stackSave();\n\t\tconst glyphIdPtr = Module.stackAlloc(4);\n\t\tlet glyphId;\n\t\tif (exports.hb_font_get_glyph(this.ptr, unicode, variationSelector, glyphIdPtr)) glyphId = Module.HEAPU32[glyphIdPtr / 4];\n\t\tModule.stackRestore(sp);\n\t\treturn glyphId;\n\t}\n\t/**\n\t* Fetches the nominal glyph ID for a Unicode code point in the\n\t* specified font.\n\t*\n\t* This version of the function should not be used to fetch glyph IDs\n\t* for code points modified by variation selectors. For variation-selector\n\t* support, use {@link Font.variationGlyph} or {@link Font.glyph}.\n\t*\n\t* @param unicode The Unicode code point to query.\n\t* @returns The glyph ID, or undefined if not found.\n\t*/\n\tnominalGlyph(unicode) {\n\t\tconst sp = Module.stackSave();\n\t\tconst glyphIdPtr = Module.stackAlloc(4);\n\t\tlet glyphId;\n\t\tif (exports.hb_font_get_nominal_glyph(this.ptr, unicode, glyphIdPtr)) glyphId = Module.HEAPU32[glyphIdPtr / 4];\n\t\tModule.stackRestore(sp);\n\t\treturn glyphId;\n\t}\n\t/**\n\t* Fetches the glyph ID for a Unicode code point when followed by\n\t* by the specified variation-selector code point, in the specified\n\t* font.\n\t*\n\t* @param unicode The Unicode code point to query.\n\t* @param variationSelector The variation-selector code point to query.\n\t* @returns The glyph ID, or undefined if not found.\n\t*/\n\tvariationGlyph(unicode, variationSelector) {\n\t\tconst sp = Module.stackSave();\n\t\tconst glyphIdPtr = Module.stackAlloc(4);\n\t\tlet glyphId;\n\t\tif (exports.hb_font_get_variation_glyph(this.ptr, unicode, variationSelector, glyphIdPtr)) glyphId = Module.HEAPU32[glyphIdPtr / 4];\n\t\tModule.stackRestore(sp);\n\t\treturn glyphId;\n\t}\n\t/**\n\t* Return glyph ID from name.\n\t* @param name Name of the requested glyph in the font.\n\t* @returns The glyph ID, or undefined if not found.\n\t*/\n\tglyphFromName(name) {\n\t\tconst sp = Module.stackSave();\n\t\tconst glyphIdPtr = Module.stackAlloc(4);\n\t\tconst namePtr = string_to_utf8_ptr(name);\n\t\tlet glyphId;\n\t\tif (exports.hb_font_get_glyph_from_name(this.ptr, namePtr.ptr, namePtr.length, glyphIdPtr)) glyphId = Module.HEAPU32[glyphIdPtr / 4];\n\t\tnamePtr.free();\n\t\tModule.stackRestore(sp);\n\t\treturn glyphId;\n\t}\n\t/**\n\t* Return a glyph as a JSON path string\n\t* based on format described on https://svgwg.org/specs/paths/#InterfaceSVGPathSegment\n\t* @param glyphId ID of the requested glyph in the font.\n\t* @returns An array of path segment objects with type and values.\n\t*/\n\tglyphToJson(glyphId) {\n\t\tconst commands = [];\n\t\tthis.drawGlyph(glyphId, getJsonDrawFuncs(), commands);\n\t\treturn commands;\n\t}\n\t/**\n\t* Set the font's scale factor, affecting the position values returned from\n\t* shaping.\n\t* @param xScale Units to scale in the X dimension.\n\t* @param yScale Units to scale in the Y dimension.\n\t*/\n\tsetScale(xScale, yScale) {\n\t\texports.hb_font_set_scale(this.ptr, xScale, yScale);\n\t}\n\t/**\n\t* Applies a list of font-variation settings to a font.\n\t*\n\t* Note that this overrides all existing variations set on the font.\n\t* Axes not included in `variations` will be effectively set to their\n\t* default values.\n\t*\n\t* @param variations Array of variation settings to apply.\n\t*/\n\tsetVariations(variations) {\n\t\tconst sp = Module.stackSave();\n\t\tconst vars = Module.stackAlloc(8 * variations.length);\n\t\tvariations.forEach((variation, i) => {\n\t\t\tvariation.writeTo(vars + i * 8);\n\t\t});\n\t\texports.hb_font_set_variations(this.ptr, vars, variations.length);\n\t\tModule.stackRestore(sp);\n\t}\n\t/** Set the font's font functions. */\n\tsetFuncs(fontFuncs) {\n\t\texports.hb_font_set_funcs(this.ptr, fontFuncs.ptr);\n\t}\n\t/**\n\t* Fetches the optical bound of a glyph positioned at the margin of text.\n\t* The direction identifies which edge of the glyph to query.\n\t* @param lookupIndex Index of the feature lookup to query.\n\t* @param direction Edge of the glyph to query.\n\t* @param glyph A glyph id.\n\t* @returns Adjustment value. Negative values mean the glyph will stick out of the margin.\n\t*/\n\tgetLookupOpticalBound(lookupIndex, direction, glyph) {\n\t\treturn exports.hb_ot_layout_lookup_get_optical_bound(this.ptr, lookupIndex, direction, glyph);\n\t}\n\t/**\n\t* Fetches a list of the caret positions defined for a ligature glyph in the\n\t* GDEF table of the font.\n\t*\n\t* Note that a ligature that is formed from n characters will have n-1\n\t* caret positions. The first character is not represented in the array,\n\t* since its caret position is the glyph position.\n\t*\n\t* The positions returned by this function are 'unshaped', and will have to\n\t* be fixed up for kerning that may be applied to the ligature glyph.\n\t*\n\t* @param direction The text direction to use.\n\t* @param glyph The glyph to query.\n\t* @returns An array of caret positions.\n\t*/\n\tgetLigatureCarets(direction, glyph) {\n\t\tconst sp = Module.stackSave();\n\t\tlet startOffset = 0;\n\t\tlet caretCount = 128;\n\t\tconst caretCountPtr = Module.stackAlloc(4);\n\t\tconst caretArrayPtr = Module.stackAlloc(512);\n\t\tconst carets = [];\n\t\twhile (caretCount == 128) {\n\t\t\tModule.HEAPU32[caretCountPtr / 4] = caretCount;\n\t\t\texports.hb_ot_layout_get_ligature_carets(this.ptr, direction, glyph, startOffset, caretCountPtr, caretArrayPtr);\n\t\t\tcaretCount = Module.HEAPU32[caretCountPtr / 4];\n\t\t\tconst caretArray = Module.HEAP32.subarray(caretArrayPtr / 4, caretArrayPtr / 4 + caretCount);\n\t\t\tcarets.push(...Array.from(caretArray));\n\t\t\tstartOffset += caretCount;\n\t\t}\n\t\tModule.stackRestore(sp);\n\t\treturn carets;\n\t}\n\t/**\n\t* Fetches metrics value corresponding to `metricsTag` from the font.\n\t*\n\t* @param metricsTag {@link MetricsTag} of metrics value you like to fetch.\n\t* @returns The metrics value, or undefined if not found in the font.\n\t*/\n\tgetMetricPosition(metricsTag) {\n\t\tconst sp = Module.stackSave();\n\t\tconst positionPtr = Module.stackAlloc(4);\n\t\tlet position;\n\t\tif (exports.hb_ot_metrics_get_position(this.ptr, metricsTag, positionPtr)) position = Module.HEAP32[positionPtr / 4];\n\t\tModule.stackRestore(sp);\n\t\treturn position;\n\t}\n\t/**\n\t* Fetches metrics value corresponding to `metricsTag` from the font, and\n\t* synthesizes a value if the value is missing in the font.\n\t*\n\t* @param metricsTag {@link MetricsTag} of metrics value you like to fetch.\n\t* @returns The metrics value.\n\t*/\n\tgetMetricPositionWithFallback(metricsTag) {\n\t\tconst sp = Module.stackSave();\n\t\tconst positionPtr = Module.stackAlloc(4);\n\t\texports.hb_ot_metrics_get_position_with_fallback(this.ptr, metricsTag, positionPtr);\n\t\tconst position = Module.HEAP32[positionPtr / 4];\n\t\tModule.stackRestore(sp);\n\t\treturn position;\n\t}\n\t/**\n\t* Fetches metrics value corresponding to `metricsTag` from the font with the\n\t* current font variation settings applied.\n\t*\n\t* @param metricsTag {@link MetricsTag} of metrics value you like to fetch.\n\t* @returns The requested metric value.\n\t*/\n\tgetMetricVariation(metricsTag) {\n\t\treturn exports.hb_ot_metrics_get_variation(this.ptr, metricsTag);\n\t}\n\t/**\n\t* Fetches horizontal metrics value corresponding to `metricsTag` from the\n\t* font with the current font variation settings applied.\n\t*\n\t* @param metricsTag {@link MetricsTag} of metrics value you like to fetch.\n\t* @returns The requested metric value.\n\t*/\n\tgetMetricXVariation(metricsTag) {\n\t\treturn exports.hb_ot_metrics_get_x_variation(this.ptr, metricsTag);\n\t}\n\t/**\n\t* Fetches vertical metrics value corresponding to `metricsTag` from the font\n\t* with the current font variation settings applied.\n\t*\n\t* @param metricsTag {@link MetricsTag} of metrics value you like to fetch.\n\t* @returns The requested metric value.\n\t*/\n\tgetMetricYVariation(metricsTag) {\n\t\treturn exports.hb_ot_metrics_get_y_variation(this.ptr, metricsTag);\n\t}\n};\n//#endregion\n//#region src/font-funcs.ts\n/**\n* An object representing {@link https://harfbuzz.github.io/harfbuzz-hb-font.html | HarfBuzz font functions}.\n* Font functions define the methods used by a Font for lower-level queries\n* like glyph advances and extents. HarfBuzz provides built-in default\n* implementations which can be selectively overridden.\n*/\nvar FontFuncs = class {\n\tconstructor() {\n\t\tthis.ptr = exports.hb_font_funcs_create();\n\t\ttrack(this, exports.hb_font_funcs_destroy);\n\t}\n\t/**\n\t* Set the font's glyph extents function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* an object with xBearing, yBearing, width, and height, or undefined on failure.\n\t*/\n\tsetGlyphExtentsFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, extentsPtr, user_data) => {\n\t\t\tconst extents = func(new Font(fontPtr), glyph);\n\t\t\tif (extents) {\n\t\t\t\tModule.HEAP32[extentsPtr / 4] = extents.xBearing;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 1] = extents.yBearing;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 2] = extents.width;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 3] = extents.height;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippipp\");\n\t\texports.hb_font_funcs_set_glyph_extents_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph from name function.\n\t* @param func The callback receives a Font and glyph name. It should return\n\t* the glyph ID, or undefined on failure.\n\t*/\n\tsetGlyphFromNameFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, namePtr, len, glyphPtr, user_data) => {\n\t\t\tconst glyph = func(new Font(fontPtr), utf8_ptr_to_string(namePtr, len));\n\t\t\tif (glyph) {\n\t\t\t\tModule.HEAPU32[glyphPtr / 4] = glyph;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ipppipp\");\n\t\texports.hb_font_funcs_set_glyph_from_name_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph horizontal advance function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* the horizontal advance of the glyph.\n\t*/\n\tsetGlyphHAdvanceFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, user_data) => {\n\t\t\treturn func(new Font(fontPtr), glyph);\n\t\t}, \"ippip\");\n\t\texports.hb_font_funcs_set_glyph_h_advance_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph vertical advance function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* the vertical advance of the glyph.\n\t*/\n\tsetGlyphVAdvanceFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, user_data) => {\n\t\t\treturn func(new Font(fontPtr), glyph);\n\t\t}, \"ippip\");\n\t\texports.hb_font_funcs_set_glyph_v_advance_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph horizontal origin function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* the [x, y] horizontal origin of the glyph, or undefined on failure.\n\t*/\n\tsetGlyphHOriginFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, xPtr, yPtr, user_data) => {\n\t\t\tconst origin = func(new Font(fontPtr), glyph);\n\t\t\tif (origin) {\n\t\t\t\tModule.HEAP32[xPtr / 4] = origin[0];\n\t\t\t\tModule.HEAP32[yPtr / 4] = origin[1];\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippippp\");\n\t\texports.hb_font_funcs_set_glyph_h_origin_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph vertical origin function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* the [x, y] vertical origin of the glyph, or undefined on failure.\n\t*/\n\tsetGlyphVOriginFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, xPtr, yPtr, user_data) => {\n\t\t\tconst origin = func(new Font(fontPtr), glyph);\n\t\t\tif (origin) {\n\t\t\t\tModule.HEAP32[xPtr / 4] = origin[0];\n\t\t\t\tModule.HEAP32[yPtr / 4] = origin[1];\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippippp\");\n\t\texports.hb_font_funcs_set_glyph_v_origin_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph horizontal kerning function.\n\t* @param func The callback receives a Font, first glyph ID, and second glyph ID.\n\t* It should return the horizontal kerning of the glyphs.\n\t*/\n\tsetGlyphHKerningFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, firstGlyph, secondGlyph, user_data) => {\n\t\t\treturn func(new Font(fontPtr), firstGlyph, secondGlyph);\n\t\t}, \"ippiip\");\n\t\texports.hb_font_funcs_set_glyph_h_kerning_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's glyph name function.\n\t* @param func The callback receives a Font and glyph ID. It should return\n\t* the name of the glyph, or undefined on failure.\n\t*/\n\tsetGlyphNameFunc(func) {\n\t\tconst utf8Encoder = new TextEncoder();\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, glyph, namePtr, size, user_data) => {\n\t\t\tconst name = func(new Font(fontPtr), glyph);\n\t\t\tif (name) {\n\t\t\t\tutf8Encoder.encodeInto(name, Module.HEAPU8.subarray(namePtr, namePtr + size));\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippipip\");\n\t\texports.hb_font_funcs_set_glyph_name_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's nominal glyph function.\n\t* @param func The callback receives a Font and unicode code point. It should\n\t* return the nominal glyph of the unicode, or undefined on failure.\n\t*/\n\tsetNominalGlyphFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, unicode, glyphPtr, user_data) => {\n\t\t\tconst glyph = func(new Font(fontPtr), unicode);\n\t\t\tif (glyph) {\n\t\t\t\tModule.HEAPU32[glyphPtr / 4] = glyph;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippipp\");\n\t\texports.hb_font_funcs_set_nominal_glyph_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's variation glyph function.\n\t* @param func The callback receives a Font, unicode code point, and variation\n\t* selector. It should return the variation glyph, or undefined on failure.\n\t*/\n\tsetVariationGlyphFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, unicode, variationSelector, glyphPtr, user_data) => {\n\t\t\tconst glyph = func(new Font(fontPtr), unicode, variationSelector);\n\t\t\tif (glyph) {\n\t\t\t\tModule.HEAPU32[glyphPtr / 4] = glyph;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ippiipp\");\n\t\texports.hb_font_funcs_set_variation_glyph_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's horizontal extents function.\n\t* @param func The callback receives a Font. It should return an object with\n\t* ascender, descender, and lineGap, or undefined on failure.\n\t*/\n\tsetFontHExtentsFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, extentsPtr, user_data) => {\n\t\t\tconst extents = func(new Font(fontPtr));\n\t\t\tif (extents) {\n\t\t\t\tModule.HEAP32[extentsPtr / 4] = extents.ascender;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 1] = extents.descender;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 2] = extents.lineGap;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ipppp\");\n\t\texports.hb_font_funcs_set_font_h_extents_func(this.ptr, funcPtr, 0, 0);\n\t}\n\t/**\n\t* Set the font's vertical extents function.\n\t* @param func The callback receives a Font. It should return an object with\n\t* ascender, descender, and lineGap, or undefined on failure.\n\t*/\n\tsetFontVExtentsFunc(func) {\n\t\tconst funcPtr = Module.addFunction((fontPtr, font_data, extentsPtr, user_data) => {\n\t\t\tconst extents = func(new Font(fontPtr));\n\t\t\tif (extents) {\n\t\t\t\tModule.HEAP32[extentsPtr / 4] = extents.ascender;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 1] = extents.descender;\n\t\t\t\tModule.HEAP32[extentsPtr / 4 + 2] = extents.lineGap;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"ipppp\");\n\t\texports.hb_font_funcs_set_font_v_extents_func(this.ptr, funcPtr, 0, 0);\n\t}\n};\n//#endregion\n//#region src/paint-funcs.ts\nfunction decode_color_line(colorLinePtr) {\n\tconst extend = exports.hb_color_line_get_extend(colorLinePtr);\n\tconst colorStops = [];\n\tconst sp = Module.stackSave();\n\tconst countPtr = Module.stackAlloc(4);\n\tconst stopsPtr = Module.stackAlloc(1536);\n\tlet startOffset = 0;\n\tlet count = 128;\n\twhile (count === 128) {\n\t\tModule.HEAPU32[countPtr / 4] = count;\n\t\texports.hb_color_line_get_color_stops(colorLinePtr, startOffset, countPtr, stopsPtr);\n\t\tcount = Module.HEAPU32[countPtr / 4];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst o = (stopsPtr + i * 12) / 4;\n\t\t\tcolorStops.push({\n\t\t\t\toffset: Module.HEAPF32[o],\n\t\t\t\tisForeground: Module.HEAPU32[o + 1] !== 0,\n\t\t\t\tcolor: color_from_int(Module.HEAPU32[o + 2])\n\t\t\t});\n\t\t}\n\t\tstartOffset += count;\n\t}\n\tModule.stackRestore(sp);\n\treturn {\n\t\textend,\n\t\tcolorStops\n\t};\n}\n/**\n* An object representing\n* {@link https://harfbuzz.github.io/harfbuzz-hb-paint.html | HarfBuzz paint functions}.\n*\n* Glyph paint callbacks.\n*\n* The callbacks assume that the caller maintains a stack of current transforms,\n* clips and intermediate surfaces, as evidenced by the pairs of push/pop\n* callbacks. The push/pop calls will be properly nested, so it is fine to store\n* the different kinds of object on a single stack.\n*\n* Not all callbacks are required for all kinds of glyphs. For rendering COLRv0\n* or non-color outline glyphs, the gradient callbacks are not needed, and the\n* composite callback only needs to handle simple alpha compositing\n* ({@link PaintCompositeMode.SRC_OVER}).\n*\n* The paint-image callback is only needed for glyphs with image blobs in the\n* CBDT, sbix or SVG tables.\n*\n* The custom-palette-color callback is only necessary if you want to override\n* colors from the font palette with custom colors.\n*/\nvar PaintFuncs = class {\n\tconstructor() {\n\t\tthis.funcPtrs = [];\n\t\tthis.userDataPtrs = [];\n\t\tthis.ptr = exports.hb_paint_funcs_create();\n\t\tconst ptr = this.ptr;\n\t\tconst funcPtrs = this.funcPtrs;\n\t\tconst userDataPtrs = this.userDataPtrs;\n\t\tregistry.register(this, () => {\n\t\t\texports.hb_paint_funcs_destroy(ptr);\n\t\t\tfor (const ptr of funcPtrs) Module.removeFunction(ptr);\n\t\t\tfor (const ptr of userDataPtrs) remove_callback_data_pointer(ptr);\n\t\t});\n\t}\n\t/**\n\t* Sets the push-transform callback on the paint functions object.\n\t* @param func The push-transform callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPushTransformFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, xx, yx, xy, yy, dx, dy, user) => func(xx, yx, xy, yy, dx, dy, get_callback_data(paintData), get_callback_data(user)), \"viiffffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_push_transform_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the pop-transform callback on the paint functions object.\n\t* @param func The pop-transform callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPopTransformFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, user) => func(get_callback_data(paintData), get_callback_data(user)), \"viii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_pop_transform_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the color-glyph callback on the paint functions object.\n\t* @param func The color-glyph callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetColorGlyphFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, glyph, fontPtr, user) => func(glyph, new Font(fontPtr), get_callback_data(paintData), get_callback_data(user)) ? 1 : 0, \"iiiiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_color_glyph_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the push-clip-glyph callback on the paint functions object.\n\t* @param func The push-clip-glyph callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPushClipGlyphFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, glyph, fontPtr, user) => func(glyph, new Font(fontPtr), get_callback_data(paintData), get_callback_data(user)), \"viiiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_push_clip_glyph_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the push-clip-rectangle callback on the paint functions object.\n\t* @param func The push-clip-rectangle callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPushClipRectangleFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, xmin, ymin, xmax, ymax, user) => func(xmin, ymin, xmax, ymax, get_callback_data(paintData), get_callback_data(user)), \"viiffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_push_clip_rectangle_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the pop-clip callback on the paint functions object.\n\t* @param func The pop-clip callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPopClipFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, user) => func(get_callback_data(paintData), get_callback_data(user)), \"viii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_pop_clip_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the paint-color callback on the paint functions object.\n\t* @param func The paint-color callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetColorFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, isForeground, color, user) => func(isForeground !== 0, color_from_int(color), get_callback_data(paintData), get_callback_data(user)), \"viiiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_color_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the paint-image callback on the paint functions object.\n\t* @param func The paint-image callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetImageFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, blob, width, height, format, slant, extentsPtr, user) => {\n\t\t\tconst length = exports.hb_blob_get_length(blob);\n\t\t\tconst dataPtr = exports.hb_blob_get_data(blob, 0);\n\t\t\tconst image = Module.HEAPU8.subarray(dataPtr, dataPtr + length);\n\t\t\tlet extents;\n\t\t\tif (extentsPtr) extents = {\n\t\t\t\txBearing: Module.HEAP32[extentsPtr / 4],\n\t\t\t\tyBearing: Module.HEAP32[extentsPtr / 4 + 1],\n\t\t\t\twidth: Module.HEAP32[extentsPtr / 4 + 2],\n\t\t\t\theight: Module.HEAP32[extentsPtr / 4 + 3]\n\t\t\t};\n\t\t\treturn func(image, width, height, hb_untag(format), extents, get_callback_data(paintData), get_callback_data(user)) ? 1 : 0;\n\t\t}, \"iiiiiiifii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_image_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the linear-gradient callback on the paint functions object.\n\t* @param func The linear-gradient callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetLinearGradientFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, colorLine, x0, y0, x1, y1, x2, y2, user) => func(decode_color_line(colorLine), x0, y0, x1, y1, x2, y2, get_callback_data(paintData), get_callback_data(user)), \"viiiffffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_linear_gradient_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the radial-gradient callback on the paint functions object.\n\t* @param func The radial-gradient callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetRadialGradientFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, colorLine, x0, y0, r0, x1, y1, r1, user) => func(decode_color_line(colorLine), x0, y0, r0, x1, y1, r1, get_callback_data(paintData), get_callback_data(user)), \"viiiffffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_radial_gradient_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the sweep-gradient callback on the paint functions object.\n\t* @param func The sweep-gradient callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetSweepGradientFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, colorLine, x0, y0, startAngle, endAngle, user) => func(decode_color_line(colorLine), x0, y0, startAngle, endAngle, get_callback_data(paintData), get_callback_data(user)), \"viiiffffi\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_sweep_gradient_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the push-group callback on the paint functions object.\n\t* @param func The push-group callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPushGroupFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, user) => func(get_callback_data(paintData), get_callback_data(user)), \"viii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_push_group_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the pop-group callback on the paint functions object.\n\t* @param func The pop-group callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetPopGroupFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, mode, user) => func(mode, get_callback_data(paintData), get_callback_data(user)), \"viiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_pop_group_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n\t/**\n\t* Sets the custom-palette-color callback on the paint functions object.\n\t* @param func The custom-palette-color callback.\n\t* @param userData Data to pass to `func`.\n\t*/\n\tsetCustomPaletteColorFunc(func, userData) {\n\t\tconst userDataPtr = register_callback_data_pointer(userData);\n\t\tthis.userDataPtrs.push(userDataPtr);\n\t\tconst funcPtr = Module.addFunction((funcs, paintData, colorIndex, colorPtr, user) => {\n\t\t\tconst color = func(colorIndex, get_callback_data(paintData), get_callback_data(user));\n\t\t\tif (color !== void 0) {\n\t\t\t\tModule.HEAPU32[colorPtr / 4] = color_to_int(color);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}, \"iiiiii\");\n\t\tthis.funcPtrs.push(funcPtr);\n\t\texports.hb_paint_funcs_set_custom_palette_color_func(this.ptr, funcPtr, userDataPtr, 0);\n\t}\n};\n//#endregion\n//#region src/buffer.ts\nconst BufferContentType = {\n\tINVALID: 0,\n\tUNICODE: 1,\n\tGLYPHS: 2\n};\nconst BufferSerializeFlag = {\n\tDEFAULT: 0,\n\tNO_CLUSTERS: 1,\n\tNO_POSITIONS: 2,\n\tNO_GLYPH_NAMES: 4,\n\tGLYPH_EXTENTS: 8,\n\tGLYPH_FLAGS: 16,\n\tNO_ADVANCES: 32,\n\tDEFINED: 63\n};\nconst BufferFlag = {\n\tDEFAULT: 0,\n\tBOT: 1,\n\tEOT: 2,\n\tPRESERVE_DEFAULT_IGNORABLES: 4,\n\tREMOVE_DEFAULT_IGNORABLES: 8,\n\tDO_NOT_INSERT_DOTTED_CIRCLE: 16,\n\tVERIFY: 32,\n\tPRODUCE_UNSAFE_TO_CONCAT: 64,\n\tPRODUCE_SAFE_TO_INSERT_TATWEEL: 128,\n\tDEFINED: 255\n};\nconst Direction = {\n\tINVALID: 0,\n\tLTR: 4,\n\tRTL: 5,\n\tTTB: 6,\n\tBTT: 7\n};\nconst ClusterLevel = {\n\tMONOTONE_GRAPHEMES: 0,\n\tMONOTONE_CHARACTERS: 1,\n\tCHARACTERS: 2,\n\tGRAPHEMES: 3,\n\tDEFAULT: 0\n};\nconst BufferSerializeFormat = {\n\tINVALID: 0,\n\tTEXT: hb_tag(\"TEXT\"),\n\tJSON: hb_tag(\"JSON\")\n};\n/**\n* An object representing a {@link https://harfbuzz.github.io/harfbuzz-hb-buffer.html | HarfBuzz buffer}.\n* A buffer holds the input text and its properties before shaping, and the\n* output glyphs and their information after shaping.\n*/\nvar Buffer = class Buffer {\n\t/**\n\t* @param existingPtr @internal Wrap an existing buffer pointer.\n\t*/\n\tconstructor(existingPtr) {\n\t\tif (existingPtr != void 0) this.ptr = exports.hb_buffer_reference(existingPtr);\n\t\telse this.ptr = exports.hb_buffer_create();\n\t\ttrack(this, exports.hb_buffer_destroy);\n\t}\n\t/**\n\t* Appends a character with the Unicode value of `codePoint` to the buffer,\n\t* and gives it the initial cluster value of `cluster`. Clusters can be any\n\t* thing the client wants, they are usually used to refer to the index of the\n\t* character in the input text stream and are output in the `cluster` field\n\t* of {@link GlyphInfo}.\n\t*\n\t* This function does not check the validity of `codePoint`, it is up to the\n\t* caller to ensure it is a valid Unicode code point.\n\t* @param codePoint A Unicode code point.\n\t* @param cluster The cluster value of `codePoint`.\n\t*/\n\tadd(codePoint, cluster) {\n\t\texports.hb_buffer_add(this.ptr, codePoint, cluster);\n\t}\n\t/**\n\t* Add text to the buffer.\n\t* @param text Text to be added to the buffer.\n\t* @param itemOffset The offset of the first character to add to the buffer.\n\t* @param itemLength The number of characters to add to the buffer, or omit for the end of text.\n\t*/\n\taddText(text, itemOffset = 0, itemLength) {\n\t\tconst str = string_to_utf16_ptr(text);\n\t\texports.hb_buffer_add_utf16(this.ptr, str.ptr, str.length, itemOffset, itemLength ?? str.length);\n\t\tstr.free();\n\t}\n\t/**\n\t* Add code points to the buffer.\n\t* @param codePoints Array of code points to be added to the buffer.\n\t* @param itemOffset The offset of the first code point to add to the buffer.\n\t* @param itemLength The number of code points to add to the buffer, or omit for the end of the array.\n\t*/\n\taddCodePoints(codePoints, itemOffset = 0, itemLength) {\n\t\tconst codePointsPtr = exports.malloc(codePoints.length * 4);\n\t\tModule.HEAPU32.subarray(codePointsPtr / 4, codePointsPtr / 4 + codePoints.length).set(codePoints);\n\t\texports.hb_buffer_add_codepoints(this.ptr, codePointsPtr, codePoints.length, itemOffset, itemLength ?? codePoints.length);\n\t\texports.free(codePointsPtr);\n\t}\n\t/**\n\t* Set buffer script, language and direction.\n\t*\n\t* This needs to be done before shaping.\n\t*/\n\tguessSegmentProperties() {\n\t\texports.hb_buffer_guess_segment_properties(this.ptr);\n\t}\n\t/**\n\t* Set buffer direction explicitly.\n\t* @param dir A {@link Direction} value.\n\t*/\n\tsetDirection(dir) {\n\t\texports.hb_buffer_set_direction(this.ptr, dir);\n\t}\n\t/**\n\t* Set buffer flags explicitly.\n\t* @param flags A combination of {@link BufferFlag} values (OR them together).\n\t*/\n\tsetFlags(flags) {\n\t\texports.hb_buffer_set_flags(this.ptr, flags);\n\t}\n\t/**\n\t* Set buffer language explicitly.\n\t* @param language The buffer language\n\t*/\n\tsetLanguage(language) {\n\t\tconst str = string_to_ascii_ptr(language);\n\t\texports.hb_buffer_set_language(this.ptr, exports.hb_language_from_string(str.ptr, -1));\n\t\tstr.free();\n\t}\n\t/**\n\t* Set buffer script explicitly.\n\t* @param script The buffer script\n\t*/\n\tsetScript(script) {\n\t\tconst str = string_to_ascii_ptr(script);\n\t\texports.hb_buffer_set_script(this.ptr, exports.hb_script_from_string(str.ptr, -1));\n\t\tstr.free();\n\t}\n\t/**\n\t* Set the HarfBuzz clustering level.\n\t*\n\t* Affects the cluster values returned from shaping.\n\t* @param level A {@link ClusterLevel} value. See the HarfBuzz manual chapter on Clusters.\n\t*/\n\tsetClusterLevel(level) {\n\t\texports.hb_buffer_set_cluster_level(this.ptr, level);\n\t}\n\t/** Reset the buffer to its initial status. */\n\treset() {\n\t\texports.hb_buffer_reset(this.ptr);\n\t}\n\t/**\n\t* Similar to reset(), but does not clear the Unicode functions and the\n\t* replacement code point.\n\t*/\n\tclearContents() {\n\t\texports.hb_buffer_clear_contents(this.ptr);\n\t}\n\t/**\n\t* Set message func.\n\t* @param func The function to set. It receives the buffer, font, and message\n\t* string as arguments. Returning false will skip this shaping step and move\n\t* to the next one.\n\t*/\n\tsetMessageFunc(func) {\n\t\tconst traceFunc = (bufferPtr, fontPtr, messagePtr, user_data) => {\n\t\t\tconst message = utf8_ptr_to_string(messagePtr);\n\t\t\treturn func(new Buffer(bufferPtr), new Font(fontPtr), message) ? 1 : 0;\n\t\t};\n\t\tconst traceFuncPtr = Module.addFunction(traceFunc, \"iiiii\");\n\t\texports.hb_buffer_set_message_func(this.ptr, traceFuncPtr, 0, 0);\n\t}\n\t/**\n\t* Get the the number of items in the buffer.\n\t* @returns The buffer length.\n\t*/\n\tgetLength() {\n\t\treturn exports.hb_buffer_get_length(this.ptr);\n\t}\n\t/**\n\t* Get the glyph information from the buffer.\n\t* @returns An array of {@link GlyphInfo} objects.\n\t*/\n\tgetGlyphInfos() {\n\t\tconst infosPtr = exports.hb_buffer_get_glyph_infos(this.ptr, 0);\n\t\tconst infosArray = Module.HEAPU32.subarray(infosPtr / 4, infosPtr / 4 + this.getLength() * 5);\n\t\tconst infos = [];\n\t\tfor (let i = 0; i < infosArray.length; i += 5) infos.push({\n\t\t\tcodepoint: infosArray[i],\n\t\t\tcluster: infosArray[i + 2],\n\t\t\tflags: exports.hb_glyph_info_get_glyph_flags(infosPtr + i * 4)\n\t\t});\n\t\treturn infos;\n\t}\n\t/**\n\t* Get the glyph positions from the buffer.\n\t* @returns An array of {@link GlyphPosition} objects.\n\t*/\n\tgetGlyphPositions() {\n\t\tconst positionsPtr32 = exports.hb_buffer_get_glyph_positions(this.ptr, 0) / 4;\n\t\tif (positionsPtr32 == 0) return [];\n\t\tconst positionsArray = Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + this.getLength() * 5);\n\t\tconst positions = [];\n\t\tfor (let i = 0; i < positionsArray.length; i += 5) positions.push({\n\t\t\txAdvance: positionsArray[i],\n\t\t\tyAdvance: positionsArray[i + 1],\n\t\t\txOffset: positionsArray[i + 2],\n\t\t\tyOffset: positionsArray[i + 3]\n\t\t});\n\t\treturn positions;\n\t}\n\t/**\n\t* Get the glyph information and positions from the buffer.\n\t* @returns The glyph information and positions.\n\t*\n\t* The glyph information is returned as an array of objects with the\n\t* properties from getGlyphInfos and getGlyphPositions combined.\n\t*/\n\tgetGlyphInfosAndPositions() {\n\t\tconst infosPtr = exports.hb_buffer_get_glyph_infos(this.ptr, 0);\n\t\tconst infosArray = Module.HEAPU32.subarray(infosPtr / 4, infosPtr / 4 + this.getLength() * 5);\n\t\tconst positionsPtr32 = exports.hb_buffer_get_glyph_positions(this.ptr, 0) / 4;\n\t\tconst positionsArray = positionsPtr32 ? Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + this.getLength() * 5) : void 0;\n\t\tconst out = [];\n\t\tfor (let i = 0; i < infosArray.length; i += 5) {\n\t\t\tconst info = {\n\t\t\t\tcodepoint: infosArray[i],\n\t\t\t\tcluster: infosArray[i + 2],\n\t\t\t\tflags: exports.hb_glyph_info_get_glyph_flags(infosPtr + i * 4)\n\t\t\t};\n\t\t\tfor (const [name, idx] of [\n\t\t\t\t[\"mask\", 1],\n\t\t\t\t[\"var1\", 3],\n\t\t\t\t[\"var2\", 4]\n\t\t\t]) Object.defineProperty(info, name, {\n\t\t\t\tvalue: infosArray[i + idx],\n\t\t\t\tenumerable: false\n\t\t\t});\n\t\t\tif (positionsArray) {\n\t\t\t\tinfo.xAdvance = positionsArray[i];\n\t\t\t\tinfo.yAdvance = positionsArray[i + 1];\n\t\t\t\tinfo.xOffset = positionsArray[i + 2];\n\t\t\t\tinfo.yOffset = positionsArray[i + 3];\n\t\t\t\tObject.defineProperty(info, \"var\", {\n\t\t\t\t\tvalue: positionsArray[i + 4],\n\t\t\t\t\tenumerable: false\n\t\t\t\t});\n\t\t\t}\n\t\t\tout.push(info);\n\t\t}\n\t\treturn out;\n\t}\n\t/**\n\t* Update the glyph positions in the buffer.\n\t* WARNING: Do not use unless you know what you are doing.\n\t*/\n\tupdateGlyphPositions(positions) {\n\t\tconst positionsPtr32 = exports.hb_buffer_get_glyph_positions(this.ptr, 0) / 4;\n\t\tif (positionsPtr32 == 0) return;\n\t\tconst len = Math.min(positions.length, this.getLength());\n\t\tconst positionsArray = Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + len * 5);\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tpositionsArray[i * 5] = positions[i].xAdvance;\n\t\t\tpositionsArray[i * 5 + 1] = positions[i].yAdvance;\n\t\t\tpositionsArray[i * 5 + 2] = positions[i].xOffset;\n\t\t\tpositionsArray[i * 5 + 3] = positions[i].yOffset;\n\t\t}\n\t}\n\t/**\n\t* Serialize the buffer contents to a string.\n\t* @param options Serialization options:\n\t* - `font`: the font to use for serialization;\n\t* - `start`: the starting index of the glyphs (default `0`);\n\t* - `end`: the ending index of the glyphs (default end of buffer);\n\t* - `format`: a {@link BufferSerializeFormat} value (default `TEXT`);\n\t* - `flags`: a combination of {@link BufferSerializeFlag} values (default `0`).\n\t* @returns The serialized buffer contents.\n\t*/\n\tserialize(options = {}) {\n\t\tlet { font, start = 0, end, format = BufferSerializeFormat.TEXT, flags = 0 } = options;\n\t\tconst sp = Module.stackSave();\n\t\tconst endPos = end ?? this.getLength();\n\t\tconst bufLen = 32 * 1024;\n\t\tconst bufPtr = exports.malloc(bufLen);\n\t\tconst bufConsumedPtr = Module.stackAlloc(4);\n\t\tlet result = \"\";\n\t\twhile (start < endPos) {\n\t\t\tstart += exports.hb_buffer_serialize(this.ptr, start, endPos, bufPtr, bufLen, bufConsumedPtr, font ? font.ptr : 0, format, flags);\n\t\t\tconst bufConsumed = Module.HEAPU32[bufConsumedPtr / 4];\n\t\t\tif (bufConsumed == 0) break;\n\t\t\tresult += utf8_ptr_to_string(bufPtr, bufConsumed);\n\t\t}\n\t\texports.free(bufPtr);\n\t\tModule.stackRestore(sp);\n\t\treturn result;\n\t}\n\t/**\n\t* Return the buffer content type.\n\t*\n\t* @returns The buffer content type as a {@link BufferContentType} value.\n\t*/\n\tgetContentType() {\n\t\treturn exports.hb_buffer_get_content_type(this.ptr);\n\t}\n};\n//#endregion\n//#region src/feature.ts\n/**\n* A {@link https://harfbuzz.github.io/harfbuzz-hb-common.html#hb-feature-t | HarfBuzz feature}.\n*\n* The structure that holds information about requested feature application.\n* The feature will be applied with the given value to all glyphs which are in\n* clusters between {@link Feature.start} (inclusive) and {@link Feature.end}\n* (exclusive). Setting `start` to `0` and `end` to `0xffffffff` specifies that\n* the feature always applies to the entire buffer.\n*/\nvar Feature = class Feature {\n\tstatic {\n\t\tthis.GLOBAL_START = 0;\n\t}\n\tstatic {\n\t\tthis.GLOBAL_END = 4294967295;\n\t}\n\tconstructor(tag, value = 1, start = Feature.GLOBAL_START, end = Feature.GLOBAL_END) {\n\t\tthis.tag = tag;\n\t\tthis.value = value;\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t}\n\t/**\n\t* Parses a string into a Feature.\n\t*\n\t* The format for specifying feature strings follows. All valid CSS\n\t* font-feature-settings values other than `normal` and the global values are\n\t* also accepted, though not documented below. CSS string escapes are not\n\t* supported.\n\t*\n\t* The range indices refer to the positions between Unicode characters. The\n\t* position before the first character is always 0.\n\t*\n\t* The format is Python-esque. Here is how it all works:\n\t*\n\t* | Syntax | Value | Start | End | Meaning |\n\t* | ------------- | ----- | ----- | --- | -------------------------------- |\n\t* | `kern` | 1 | 0 | ∞ | Turn feature on |\n\t* | `+kern` | 1 | 0 | ∞ | Turn feature on |\n\t* | `-kern` | 0 | 0 | ∞ | Turn feature off |\n\t* | `kern=0` | 0 | 0 | ∞ | Turn feature off |\n\t* | `kern=1` | 1 | 0 | ∞ | Turn feature on |\n\t* | `aalt=2` | 2 | 0 | ∞ | Choose 2nd alternate |\n\t* | `kern[]` | 1 | 0 | ∞ | Turn feature on |\n\t* | `kern[:]` | 1 | 0 | ∞ | Turn feature on |\n\t* | `kern[5:]` | 1 | 5 | ∞ | Turn feature on, partial |\n\t* | `kern[:5]` | 1 | 0 | 5 | Turn feature on, partial |\n\t* | `kern[3:5]` | 1 | 3 | 5 | Turn feature on, range |\n\t* | `kern[3]` | 1 | 3 | 3+1 | Turn feature on, single char |\n\t* | `aalt[3:5]=2` | 2 | 3 | 5 | Turn 2nd alternate on for range |\n\t*\n\t* @param str The string to parse.\n\t* @returns A Feature, or undefined if the string is not a valid feature.\n\t*/\n\tstatic fromString(str) {\n\t\tconst sp = Module.stackSave();\n\t\tconst featurePtr = Module.stackAlloc(16);\n\t\tconst strPtr = string_to_ascii_ptr(str);\n\t\tlet feature;\n\t\tif (exports.hb_feature_from_string(strPtr.ptr, -1, featurePtr)) feature = new Feature(hb_untag(Module.HEAPU32[featurePtr / 4]), Module.HEAPU32[featurePtr / 4 + 1], Module.HEAPU32[featurePtr / 4 + 2], Module.HEAPU32[featurePtr / 4 + 3]);\n\t\tstrPtr.free();\n\t\tModule.stackRestore(sp);\n\t\treturn feature;\n\t}\n\t/**\n\t* Converts the feature to a string in the format understood by\n\t* {@link Feature.fromString}.\n\t*\n\t* Note that the feature value will be omitted if it is `1`, but the string\n\t* won't include any whitespace.\n\t*\n\t* @returns The feature string.\n\t*/\n\ttoString() {\n\t\tconst sp = Module.stackSave();\n\t\tconst featurePtr = Module.stackAlloc(16);\n\t\tthis.writeTo(featurePtr);\n\t\tconst bufLen = 128;\n\t\tconst bufPtr = Module.stackAlloc(bufLen);\n\t\texports.hb_feature_to_string(featurePtr, bufPtr, bufLen);\n\t\tconst result = utf8_ptr_to_string(bufPtr);\n\t\tModule.stackRestore(sp);\n\t\treturn result;\n\t}\n\t/** @internal Write this feature into the given hb_feature_t pointer. */\n\twriteTo(ptr) {\n\t\tModule.HEAPU32[ptr / 4] = hb_tag(this.tag);\n\t\tModule.HEAPU32[ptr / 4 + 1] = this.value;\n\t\tModule.HEAPU32[ptr / 4 + 2] = this.start;\n\t\tModule.HEAPU32[ptr / 4 + 3] = this.end;\n\t}\n};\n//#endregion\n//#region src/variation.ts\n/**\n* A {@link https://harfbuzz.github.io/harfbuzz-hb-common.html#hb-variation-t | HarfBuzz variation}.\n*\n* Data type for holding variation data. Registered OpenType variation-axis\n* tags are listed in\n* {@link https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg | OpenType Axis Tag Registry}.\n*/\nvar Variation = class Variation {\n\tconstructor(tag, value = 0) {\n\t\tthis.tag = tag;\n\t\tthis.value = value;\n\t}\n\t/**\n\t* Parses a string into a Variation.\n\t*\n\t* The format for specifying variation settings follows. All valid CSS\n\t* font-variation-settings values other than `normal` and `inherited` are\n\t* also accepted, though, not documented below.\n\t*\n\t* The format is a tag, optionally followed by an equals sign, followed by a\n\t* number. For example `wght=500`, or `slnt=-7.5`.\n\t*\n\t* @param str The string to parse.\n\t* @returns A Variation, or undefined if the string is not a valid variation.\n\t*/\n\tstatic fromString(str) {\n\t\tconst sp = Module.stackSave();\n\t\tconst variationPtr = Module.stackAlloc(8);\n\t\tconst strPtr = string_to_ascii_ptr(str);\n\t\tlet variation;\n\t\tif (exports.hb_variation_from_string(strPtr.ptr, -1, variationPtr)) variation = new Variation(hb_untag(Module.HEAPU32[variationPtr / 4]), Module.HEAPF32[variationPtr / 4 + 1]);\n\t\tstrPtr.free();\n\t\tModule.stackRestore(sp);\n\t\treturn variation;\n\t}\n\t/**\n\t* Converts the variation to a string in the format understood by\n\t* {@link Variation.fromString}.\n\t*\n\t* Note that the string won't include any whitespace.\n\t*\n\t* @returns The variation string.\n\t*/\n\ttoString() {\n\t\tconst sp = Module.stackSave();\n\t\tconst variationPtr = Module.stackAlloc(8);\n\t\tthis.writeTo(variationPtr);\n\t\tconst bufLen = 128;\n\t\tconst bufPtr = Module.stackAlloc(bufLen);\n\t\texports.hb_variation_to_string(variationPtr, bufPtr, bufLen);\n\t\tconst result = utf8_ptr_to_string(bufPtr);\n\t\tModule.stackRestore(sp);\n\t\treturn result;\n\t}\n\t/** @internal Write this variation into the given hb_variation_t pointer. */\n\twriteTo(ptr) {\n\t\tModule.HEAPU32[ptr / 4] = hb_tag(this.tag);\n\t\tModule.HEAPF32[ptr / 4 + 1] = this.value;\n\t}\n};\n//#endregion\n//#region src/shape.ts\nconst TracePhase = {\n\tDONT_STOP: 0,\n\tGSUB: 1,\n\tGPOS: 2\n};\n/**\n* Shape a buffer with a given font.\n*\n* Converts the Unicode text in the buffer into positioned glyphs.\n* The buffer is modified in place.\n*\n* @param font The Font to shape with.\n* @param buffer The Buffer containing text to shape, suitably prepared\n* (text added, segment properties set).\n* @param features An array of {@link Feature} values to apply.\n*/\nfunction shape(font, buffer, features) {\n\tconst featuresLen = features?.length ?? 0;\n\tconst sp = Module.stackSave();\n\tlet featuresPtr = 0;\n\tif (featuresLen) {\n\t\tfeaturesPtr = Module.stackAlloc(16 * featuresLen);\n\t\tfeatures.forEach((feature, i) => {\n\t\t\tfeature.writeTo(featuresPtr + i * 16);\n\t\t});\n\t}\n\texports.hb_shape(font.ptr, buffer.ptr, featuresPtr, featuresLen);\n\tModule.stackRestore(sp);\n}\n/**\n* Shape a buffer with a given font, returning a JSON trace of the shaping process.\n*\n* This function supports \"partial shaping\", where the shaping process is\n* terminated after a given lookup ID is reached.\n*\n* @param font The Font to shape with.\n* @param buffer The Buffer containing text to shape, suitably prepared.\n* @param features An array of {@link Feature} values to apply.\n* @param stop_at A lookup ID at which to terminate shaping.\n* @param stop_phase The {@link TracePhase} at which to stop shaping.\n* @returns An array of trace entries, each with a message, serialized glyphs, and phase info.\n*/\nfunction shapeWithTrace(font, buffer, features, stop_at, stop_phase) {\n\tconst trace = [];\n\tlet currentPhase = TracePhase.DONT_STOP;\n\tlet stopping = false;\n\tbuffer.setMessageFunc((buffer, font, message) => {\n\t\tif (message.startsWith(\"start table GSUB\")) currentPhase = TracePhase.GSUB;\n\t\telse if (message.startsWith(\"start table GPOS\")) currentPhase = TracePhase.GPOS;\n\t\tif (currentPhase != stop_phase) stopping = false;\n\t\tif (stop_phase != TracePhase.DONT_STOP && currentPhase == stop_phase && message.startsWith(\"end lookup \" + stop_at)) stopping = true;\n\t\tif (stopping) return false;\n\t\tconst traceBuf = buffer.serialize({\n\t\t\tfont,\n\t\t\tformat: BufferSerializeFormat.JSON,\n\t\t\tflags: BufferSerializeFlag.NO_GLYPH_NAMES\n\t\t});\n\t\ttrace.push({\n\t\t\tm: message,\n\t\t\tt: JSON.parse(traceBuf),\n\t\t\tglyphs: buffer.getContentType() == BufferContentType.GLYPHS\n\t\t});\n\t\treturn true;\n\t});\n\tshape(font, buffer, features);\n\treturn trace;\n}\n/**\n* Return the HarfBuzz version.\n* @returns An object with major, minor, and micro version numbers.\n*/\nfunction version() {\n\tconst sp = Module.stackSave();\n\tconst versionPtr = Module.stackAlloc(12);\n\texports.hb_version(versionPtr, versionPtr + 4, versionPtr + 8);\n\tconst ver = {\n\t\tmajor: Module.HEAPU32[versionPtr / 4],\n\t\tminor: Module.HEAPU32[(versionPtr + 4) / 4],\n\t\tmicro: Module.HEAPU32[(versionPtr + 8) / 4]\n\t};\n\tModule.stackRestore(sp);\n\treturn ver;\n}\n/**\n* Return the HarfBuzz version as a string.\n* @returns A version string in the form \"major.minor.micro\".\n*/\nfunction versionString() {\n\treturn utf8_ptr_to_string(exports.hb_version_string());\n}\n/**\n* Convert an OpenType script tag to HarfBuzz script (ISO 15924).\n* @param tag The tag to convert.\n* @returns The script.\n*/\nfunction otTagToScript(tag) {\n\tconst hbTag = hb_tag(tag);\n\treturn hb_untag(exports.hb_ot_tag_to_script(hbTag));\n}\n/**\n* Convert an OpenType language tag to HarfBuzz language (BCP 47).\n* @param tag The tag to convert.\n* @returns The language.\n*/\nfunction otTagToLanguage(tag) {\n\tconst hbTag = hb_tag(tag);\n\treturn language_to_string(exports.hb_ot_tag_to_language(hbTag));\n}\n/** https://harfbuzz.github.io/harfbuzz-hb-ot-layout.html#HB-OT-MAX-TAGS-PER-LANGUAGE:CAPS */\nconst HB_OT_MAX_TAGS_PER_LANGUAGE = 3;\n/** https://harfbuzz.github.io/harfbuzz-hb-ot-layout.html#HB-OT-MAX-TAGS-PER-SCRIPT:CAPS */\nconst HB_OT_MAX_TAGS_PER_SCRIPT = 3;\n/**\n* Convert a HarfBuzz script (ISO 15924) and a HarfBuzz language (BCP 47) to OpenType script tags and OpenType language tags.\n* @param script A HarfBuzz script to convert.\n* @param language A HarfBuzz language to convert.\n* @returns An object with the OpenType script tags and the OpenType language tags.\n*/\nfunction otTagsFromScriptAndLanguage(script, language) {\n\tconst sp = Module.stackSave();\n\tconst scriptStr = string_to_ascii_ptr(script);\n\tconst languageStr = string_to_ascii_ptr(language);\n\tconst scriptCountPtr = Module.stackAlloc(4);\n\tModule.HEAPU32[scriptCountPtr / 4] = HB_OT_MAX_TAGS_PER_SCRIPT;\n\tconst scriptTagsPtr = Module.stackAlloc(HB_OT_MAX_TAGS_PER_SCRIPT * 4);\n\tconst languageCountPtr = Module.stackAlloc(4);\n\tModule.HEAPU32[languageCountPtr / 4] = HB_OT_MAX_TAGS_PER_LANGUAGE;\n\tconst languageTagsPtr = Module.stackAlloc(HB_OT_MAX_TAGS_PER_LANGUAGE * 4);\n\texports.hb_ot_tags_from_script_and_language(exports.hb_script_from_string(scriptStr.ptr, -1), exports.hb_language_from_string(languageStr.ptr, -1), scriptCountPtr, scriptTagsPtr, languageCountPtr, languageTagsPtr);\n\tscriptStr.free();\n\tlanguageStr.free();\n\tconst scriptTags = Module.HEAPU32.subarray(scriptTagsPtr / 4, scriptTagsPtr / 4 + Module.HEAPU32[scriptCountPtr / 4]);\n\tconst languageTags = Module.HEAPU32.subarray(languageTagsPtr / 4, languageTagsPtr / 4 + Module.HEAPU32[languageCountPtr / 4]);\n\tModule.stackRestore(sp);\n\treturn {\n\t\tscriptTags: [...scriptTags].map(hb_untag),\n\t\tlanguageTags: [...languageTags].map(hb_untag)\n\t};\n}\n/**\n* Convert an OpenType script tag and an OpenType language tag to a HarfBuzz script (ISO 15924) and a HarfBuzz language (BCP 47).\n* @param scriptTag An OpenType script tag.\n* @param languageTag An OpenType language tag.\n* @returns An object with the HarfBuzz script and the HarfBuzz language.\n*/\nfunction otTagsToScriptAndLanguage(scriptTag, languageTag) {\n\tconst sp = Module.stackSave();\n\tconst scriptPtr = Module.stackAlloc(4);\n\tconst languagePtr = Module.stackAlloc(4);\n\texports.hb_ot_tags_to_script_and_language(hb_tag(scriptTag), hb_tag(languageTag), scriptPtr, languagePtr);\n\tconst script = Module.HEAPU32[scriptPtr / 4];\n\tconst language = Module.HEAPU32[languagePtr / 4];\n\tModule.stackRestore(sp);\n\treturn {\n\t\tscript: hb_untag(script),\n\t\tlanguage: language_to_string(language)\n\t};\n}\n//#endregion\nexport { init, AxisFlags, Blob, Buffer, BufferContentType, BufferFlag, BufferSerializeFlag, BufferSerializeFormat, ClusterLevel, ColorPaletteFlags, Direction, DrawFuncs, Face, Feature, Font, FontFuncs, GlyphClass, GlyphFlag, MetricsTag, PaintCompositeMode, PaintExtend, PaintFuncs, TracePhase, Variation, otTagToLanguage, otTagToScript, otTagsFromScriptAndLanguage, otTagsToScriptAndLanguage, shape, shapeWithTrace, version, versionString };\n"]}
package/dist/index.js CHANGED
@@ -193,9 +193,16 @@ var HarfBuzzShaper = class {
193
193
  };
194
194
  var loading = null;
195
195
  function loadShaper() {
196
- loading ??= import('harfbuzzjs').then((hb) => new HarfBuzzShaper(hb));
196
+ loading ??= Promise.all([import('./harfbuzzjs-GV2DMLBC.js'), import('./harfbuzz-WAS5ONVP.js')]).then(async ([hb, { default: createHarfBuzz }]) => {
197
+ hb.init(await createHarfBuzz(wasmLocation()));
198
+ return new HarfBuzzShaper(hb);
199
+ });
197
200
  return loading;
198
201
  }
202
+ function wasmLocation() {
203
+ const isNode = typeof process === "object" && !!process.versions?.node;
204
+ return isNode ? { locateFile: () => import.meta.resolve("harfbuzzjs/dist/harfbuzz.wasm") } : {};
205
+ }
199
206
 
200
207
  export { loadShaper };
201
208
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scripts.ts","../src/shaper.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Cutting text where its script changes. HarfBuzz shapes a buffer as one\n * script in one direction, so a run mixing Latin and Arabic is shaped a piece\n * at a time.\n */\nimport { bidiClassOf, pairedBracket } from '@weasel-js/bidi';\n\n/**\n * Every value of the Unicode Script property through Unicode 17, but the three\n * that join their neighbors (Common, Inherited, Unknown). The runtime's\n * `\\p{Script=…}` answers which one a character is in; a name it does not know\n * yet is skipped, and its characters join their neighbors too.\n */\nexport const SCRIPT_NAMES = `Latin Arabic Cyrillic Han Hiragana Katakana Hangul Devanagari Greek Hebrew Thai Bengali\nTamil Telugu Gujarati Kannada Malayalam Gurmukhi Oriya Sinhala Myanmar Khmer Lao Georgian Armenian\nEthiopic Tibetan Syriac Thaana Nko Mongolian Bopomofo Javanese Balinese Adlam Samaritan Mandaic\nCherokee Canadian_Aboriginal Ogham Runic Yi Old_Italic Gothic Deseret Tagalog Hanunoo Buhid Tagbanwa\nLimbu Tai_Le Linear_B Ugaritic Shavian Osmanya Cypriot Braille Buginese Coptic New_Tai_Lue Glagolitic\nTifinagh Syloti_Nagri Old_Persian Kharoshthi Cuneiform Phoenician Phags_Pa Sundanese Lepcha Ol_Chiki\nVai Saurashtra Kayah_Li Rejang Lycian Carian Lydian Cham Tai_Tham Tai_Viet Avestan Egyptian_Hieroglyphs\nBamum Lisu Meetei_Mayek Imperial_Aramaic Old_South_Arabian Inscriptional_Parthian Inscriptional_Pahlavi\nOld_Turkic Kaithi Batak Brahmi Chakma Meroitic_Cursive Meroitic_Hieroglyphs Miao Sharada Sora_Sompeng\nTakri Caucasian_Albanian Bassa_Vah Duployan Elbasan Grantha Pahawh_Hmong Khojki Linear_A Mahajani\nManichaean Mende_Kikakui Modi Mro Old_North_Arabian Nabataean Palmyrene Pau_Cin_Hau Old_Permic\nPsalter_Pahlavi Siddham Khudawadi Tirhuta Warang_Citi Ahom Anatolian_Hieroglyphs Hatran Multani\nOld_Hungarian SignWriting Bhaiksuki Marchen Newa Osage Tangut Masaram_Gondi Nushu Soyombo\nZanabazar_Square Dogra Gunjala_Gondi Makasar Medefaidrin Hanifi_Rohingya Sogdian Old_Sogdian Elymaic\nNandinagari Nyiakeng_Puachue_Hmong Wancho Chorasmian Dives_Akuru Khitan_Small_Script Yezidi\nCypro_Minoan Old_Uyghur Tangsa Toto Vithkuqi Kawi Nag_Mundari Garay Gurung_Khema Kirat_Rai Ol_Onal\nSunuwar Todhri Tulu_Tigalari Sidetic Tai_Yo Beria_Erfe Tolong_Siki`.split(/\\s+/);\n\n/** Characters that take the script of the text around them. */\nconst SHARED = /^[\\p{Script=Common}\\p{Script=Inherited}\\p{Script=Unknown}]$/u;\n\nlet tests: Map<string, RegExp> | null = null;\n\n/** The script names this runtime knows, each with its test, in `SCRIPT_NAMES`' order. */\nfunction scriptTests(): Map<string, RegExp> {\n if (tests) return tests;\n tests = new Map();\n for (const name of SCRIPT_NAMES) {\n try {\n tests.set(name, new RegExp(`^\\\\p{Script=${name}}$`, 'u'));\n } catch {\n // A script newer than this runtime's Unicode.\n }\n }\n return tests;\n}\n\n/** The script `ch` is written in, or null when it takes its neighbors'.\n * `current` is tried first, since most characters continue the piece. */\nfunction scriptOf(ch: string, current: string | null): string | null {\n if (SHARED.test(ch)) return null;\n // Most text is Latin, and the letters below U+0250 that are not shared are all Latin.\n if (ch.codePointAt(0)! < 0x250) return 'Latin';\n const all = scriptTests();\n if (current !== null && all.get(current)?.test(ch)) return current;\n for (const [name, test] of all) if (test.test(ch)) return name;\n return null;\n}\n\n/** One stretch of text in a single script. */\nexport interface ScriptPiece {\n start: number;\n end: number;\n /** Whether the script reads right to left, which HarfBuzz shapes it in. */\n rtl: boolean;\n}\n\n/** An open bracket still waiting for its close, and the script it opened in. */\ninterface Open { close: number; script: string | null }\n\n/** Open brackets remembered at once; deeper nesting forgets the outermost. */\nconst MAX_OPEN = 64;\n\n/**\n * `text` cut where its script changes, as UTF-16 spans covering all of it.\n *\n * Following UAX #24, a character every script shares (space, digits,\n * punctuation, a combining mark) stays in the piece before it, or the one after\n * it when it opens the text; a closing bracket takes the script its opening\n * bracket was in, so the `)` of `abc (שלום) def` goes with the Latin. A\n * piece reads right to left when the first of its own letters with a strong\n * `Bidi_Class` is R or AL. Empty text has no pieces.\n */\nexport function scriptPieces(text: string): ScriptPiece[] {\n const pieces: ScriptPiece[] = [];\n const open: Open[] = [];\n let current: string | null = null;\n let rtl: boolean | null = null;\n let start = 0;\n let at = 0;\n for (const ch of text) {\n const cp = ch.codePointAt(0)!;\n let script = scriptOf(ch, current);\n if (script === null) {\n const bracket = pairedBracket(cp);\n if (bracket?.kind === 'open') {\n if (open.length === MAX_OPEN) open.shift();\n open.push({ close: bracket.pair, script: current });\n } else if (bracket?.kind === 'close') {\n let k = open.length - 1;\n while (k >= 0 && open[k].close !== cp) k--;\n if (k >= 0) {\n script = open[k].script;\n open.length = k;\n }\n }\n }\n if (script !== null) {\n if (current === null) {\n for (const o of open) o.script ??= script;\n } else if (script !== current) {\n pieces.push({ start, end: at, rtl: rtl ?? false });\n start = at;\n rtl = null;\n }\n current = script;\n if (rtl === null) {\n const cls = bidiClassOf(cp);\n if (cls === 'L') rtl = false;\n else if (cls === 'R' || cls === 'AL') rtl = true;\n }\n }\n at += ch.length;\n }\n if (at > start) pieces.push({ start, end: at, rtl: rtl ?? false });\n return pieces;\n}\n","/**\n * HarfBuzz, behind the shaping contract `@weasel-js/text` declares: font\n * bytes and text in, glyph indices with em-space advances and offsets out,\n * and the outline of any glyph a shaping produced.\n *\n * harfbuzzjs instantiates its WebAssembly when its module is evaluated, so it\n * is imported only by {@link loadShaper}: importing this package costs nothing\n * until a consumer asks for shaping.\n */\nimport { scriptPieces, type ScriptPiece } from './scripts';\n\ntype HarfBuzz = typeof import('harfbuzzjs');\ntype HbFont = InstanceType<HarfBuzz['Font']>;\ntype HbFeature = InstanceType<HarfBuzz['Feature']>;\n\n/** One glyph a shaping produced. Every length is in ems of the face, and y\n * grows downward. */\nexport interface ShapedGlyph {\n /** The glyph's index in the face. 0 is `.notdef`: the face has no glyph\n * for its cluster. */\n gid: number;\n /** UTF-16 offset in the shaped text where its cluster starts. A cluster is\n * the smallest stretch of text and glyphs that map onto each other: a\n * ligature's cluster holds every character it joined. */\n cluster: number;\n /** How far the pen moves past it. */\n advance: number;\n /** Where it is drawn, from the pen. */\n dx: number;\n dy: number;\n /** Whether its piece of the text was shaped right to left, which also\n * means HarfBuzz drew any mirrored character (a bracket) as its mirror. */\n rtl: boolean;\n}\n\n/** A shaping engine for weasel's text layout: what `registerShaper` takes. */\nexport interface Shaper {\n /**\n * Shape `text` set in the face whose font file is `face` (an sfnt: TrueType\n * or OpenType, not WOFF), with the OpenType `features` turned on.\n *\n * `language` is a BCP 47 tag (`'sr'`, `'ur'`) and selects the face's forms\n * for that language: Serbian Cyrillic italics, Urdu digits. Absent, the\n * face's default forms are drawn.\n *\n * Glyphs come in logical order: clusters by ascending `cluster`, and a\n * cluster's own glyphs in the order they are drawn, left to right. The array\n * is shared with later calls asking the same; never mutate it.\n */\n shape(face: ArrayBuffer, text: string, features?: readonly string[], language?: string): readonly ShapedGlyph[];\n /** Em-space SVG path data for glyph `gid` of `face`, moved by `(dx, dy)`\n * ems; y grows downward and the origin is the pen on the baseline. Null for\n * a glyph with no contours. */\n glyphD(face: ArrayBuffer, gid: number, dx?: number, dy?: number): string | null;\n /** Whether `face` has the OpenType feature `tag` (`'smcp'`, `'liga'`) in its\n * substitutions or positioning. */\n hasFeature(face: ArrayBuffer, tag: string): boolean;\n}\n\n/** Path commands in font units, y up, as HarfBuzz draws them. */\ninterface Command { type: string; values: number[] }\n\ninterface FaceRecord {\n font: HbFont;\n upem: number;\n features: ReadonlySet<string>;\n paths: Map<number, readonly Command[]>;\n shapes: Map<string, readonly ShapedGlyph[]>;\n}\n\n/** Shapings held per face before they are dropped together. */\nconst SHAPE_CACHE_LIMIT = 512;\n\n/** Decimal places kept in path data: 1e-5 em, and never exponent notation,\n * which an SVG path tokenizer would read as a command. */\nconst PRECISION = 1e5;\n\nconst fmt = (v: number): string => String(Math.round(v * PRECISION) / PRECISION);\n\nclass HarfBuzzShaper implements Shaper {\n readonly #hb: HarfBuzz;\n readonly #faces = new WeakMap<ArrayBuffer, FaceRecord>();\n readonly #features = new Map<string, HbFeature>();\n\n constructor(hb: HarfBuzz) {\n this.#hb = hb;\n }\n\n #face(bytes: ArrayBuffer): FaceRecord {\n let rec = this.#faces.get(bytes);\n if (rec) return rec;\n const hb = this.#hb;\n const face = new hb.Face(new hb.Blob(bytes));\n rec = {\n font: new hb.Font(face),\n upem: face.upem,\n features: new Set([...face.getTableFeatureTags('GSUB'), ...face.getTableFeatureTags('GPOS')]),\n paths: new Map(),\n shapes: new Map(),\n };\n this.#faces.set(bytes, rec);\n return rec;\n }\n\n #feature(tag: string): HbFeature {\n let f = this.#features.get(tag);\n if (!f) {\n const parsed = this.#hb.Feature.fromString(tag);\n if (!parsed) throw new Error(`weasel shape: \"${tag}\" is not an OpenType feature setting`);\n f = parsed;\n this.#features.set(tag, f);\n }\n return f;\n }\n\n shape(\n bytes: ArrayBuffer, text: string, features: readonly string[] = [], language?: string,\n ): readonly ShapedGlyph[] {\n const rec = this.#face(bytes);\n const lang = language || undefined;\n const key = `${features.join(',')}\\u0000${lang ?? ''}\\u0000${text}`;\n const held = rec.shapes.get(key);\n if (held) return held;\n const hbFeatures = features.map((tag) => this.#feature(tag));\n const out: ShapedGlyph[] = [];\n for (const piece of scriptPieces(text)) this.#piece(rec, text, piece, hbFeatures, lang, out);\n if (rec.shapes.size >= SHAPE_CACHE_LIMIT) rec.shapes.clear();\n rec.shapes.set(key, out);\n return out;\n }\n\n /** Shape `piece` of `text`, the rest of `text` around it as context, and\n * append its glyphs to `out` in logical order. */\n #piece(\n rec: FaceRecord, text: string, piece: ScriptPiece, features: HbFeature[], lang: string | undefined,\n out: ShapedGlyph[],\n ): void {\n const hb = this.#hb;\n const { start, end, rtl } = piece;\n const buffer = new hb.Buffer();\n buffer.addText(text, start, end - start);\n buffer.setDirection(rtl ? hb.Direction.RTL : hb.Direction.LTR);\n if (lang !== undefined) buffer.setLanguage(lang);\n // Fills in the script, and the language when none was set; what was set stands.\n buffer.guessSegmentProperties();\n // Marks keep clusters of their own, so each lands in the slot of the\n // character it was written as rather than merging into its base's.\n buffer.setClusterLevel(hb.ClusterLevel.MONOTONE_CHARACTERS);\n hb.shape(rec.font, buffer, features);\n const infos = buffer.getGlyphInfos();\n const positions = buffer.getGlyphPositions();\n const em = rec.upem;\n const glyphs: ShapedGlyph[] = infos.map((info, i) => ({\n gid: info.codepoint,\n cluster: info.cluster,\n advance: positions[i].xAdvance / em,\n dx: positions[i].xOffset / em,\n dy: -positions[i].yOffset / em,\n rtl,\n }));\n if (!rtl) {\n for (const g of glyphs) out.push(g);\n return;\n }\n // Right to left, HarfBuzz hands the glyphs over in visual order. Reverse\n // the clusters into logical order and keep each one's own glyphs as drawn.\n let hi = glyphs.length;\n while (hi > 0) {\n let lo = hi - 1;\n while (lo > 0 && glyphs[lo - 1].cluster === glyphs[hi - 1].cluster) lo--;\n for (let k = lo; k < hi; k++) out.push(glyphs[k]);\n hi = lo;\n }\n }\n\n glyphD(bytes: ArrayBuffer, gid: number, dx = 0, dy = 0): string | null {\n const rec = this.#face(bytes);\n let cmds = rec.paths.get(gid);\n if (cmds === undefined) {\n cmds = rec.font.glyphToJson(gid) as readonly Command[];\n rec.paths.set(gid, cmds);\n }\n if (cmds.length === 0) return null;\n const em = rec.upem;\n let d = '';\n for (const { type, values } of cmds) {\n d += type;\n for (let k = 0; k < values.length; k += 2) {\n d += `${k === 0 ? '' : ' '}${fmt(values[k] / em + dx)} ${fmt(-values[k + 1] / em + dy)}`;\n }\n }\n return d;\n }\n\n hasFeature(bytes: ArrayBuffer, tag: string): boolean {\n return this.#face(bytes).features.has(tag);\n }\n}\n\nlet loading: Promise<Shaper> | null = null;\n\n/**\n * Load HarfBuzz (about 450 kB of WebAssembly) and resolve with a shaper over\n * it. Once per process: every call answers the same shaper.\n *\n * ```ts\n * import { loadShaper } from '@weasel-js/text-shaping';\n * import { registerShaper } from '@weasel-js/core';\n *\n * registerShaper(await loadShaper());\n * ```\n */\nexport function loadShaper(): Promise<Shaper> {\n loading ??= import('harfbuzzjs').then((hb) => new HarfBuzzShaper(hb));\n return loading;\n}\n"]}
1
+ {"version":3,"sources":["../src/scripts.ts","../src/shaper.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Cutting text where its script changes. HarfBuzz shapes a buffer as one\n * script in one direction, so a run mixing Latin and Arabic is shaped a piece\n * at a time.\n */\nimport { bidiClassOf, pairedBracket } from '@weasel-js/bidi';\n\n/**\n * Every value of the Unicode Script property through Unicode 17, but the three\n * that join their neighbors (Common, Inherited, Unknown). The runtime's\n * `\\p{Script=…}` answers which one a character is in; a name it does not know\n * yet is skipped, and its characters join their neighbors too.\n */\nexport const SCRIPT_NAMES = `Latin Arabic Cyrillic Han Hiragana Katakana Hangul Devanagari Greek Hebrew Thai Bengali\nTamil Telugu Gujarati Kannada Malayalam Gurmukhi Oriya Sinhala Myanmar Khmer Lao Georgian Armenian\nEthiopic Tibetan Syriac Thaana Nko Mongolian Bopomofo Javanese Balinese Adlam Samaritan Mandaic\nCherokee Canadian_Aboriginal Ogham Runic Yi Old_Italic Gothic Deseret Tagalog Hanunoo Buhid Tagbanwa\nLimbu Tai_Le Linear_B Ugaritic Shavian Osmanya Cypriot Braille Buginese Coptic New_Tai_Lue Glagolitic\nTifinagh Syloti_Nagri Old_Persian Kharoshthi Cuneiform Phoenician Phags_Pa Sundanese Lepcha Ol_Chiki\nVai Saurashtra Kayah_Li Rejang Lycian Carian Lydian Cham Tai_Tham Tai_Viet Avestan Egyptian_Hieroglyphs\nBamum Lisu Meetei_Mayek Imperial_Aramaic Old_South_Arabian Inscriptional_Parthian Inscriptional_Pahlavi\nOld_Turkic Kaithi Batak Brahmi Chakma Meroitic_Cursive Meroitic_Hieroglyphs Miao Sharada Sora_Sompeng\nTakri Caucasian_Albanian Bassa_Vah Duployan Elbasan Grantha Pahawh_Hmong Khojki Linear_A Mahajani\nManichaean Mende_Kikakui Modi Mro Old_North_Arabian Nabataean Palmyrene Pau_Cin_Hau Old_Permic\nPsalter_Pahlavi Siddham Khudawadi Tirhuta Warang_Citi Ahom Anatolian_Hieroglyphs Hatran Multani\nOld_Hungarian SignWriting Bhaiksuki Marchen Newa Osage Tangut Masaram_Gondi Nushu Soyombo\nZanabazar_Square Dogra Gunjala_Gondi Makasar Medefaidrin Hanifi_Rohingya Sogdian Old_Sogdian Elymaic\nNandinagari Nyiakeng_Puachue_Hmong Wancho Chorasmian Dives_Akuru Khitan_Small_Script Yezidi\nCypro_Minoan Old_Uyghur Tangsa Toto Vithkuqi Kawi Nag_Mundari Garay Gurung_Khema Kirat_Rai Ol_Onal\nSunuwar Todhri Tulu_Tigalari Sidetic Tai_Yo Beria_Erfe Tolong_Siki`.split(/\\s+/);\n\n/** Characters that take the script of the text around them. */\nconst SHARED = /^[\\p{Script=Common}\\p{Script=Inherited}\\p{Script=Unknown}]$/u;\n\nlet tests: Map<string, RegExp> | null = null;\n\n/** The script names this runtime knows, each with its test, in `SCRIPT_NAMES`' order. */\nfunction scriptTests(): Map<string, RegExp> {\n if (tests) return tests;\n tests = new Map();\n for (const name of SCRIPT_NAMES) {\n try {\n tests.set(name, new RegExp(`^\\\\p{Script=${name}}$`, 'u'));\n } catch {\n // A script newer than this runtime's Unicode.\n }\n }\n return tests;\n}\n\n/** The script `ch` is written in, or null when it takes its neighbors'.\n * `current` is tried first, since most characters continue the piece. */\nfunction scriptOf(ch: string, current: string | null): string | null {\n if (SHARED.test(ch)) return null;\n // Most text is Latin, and the letters below U+0250 that are not shared are all Latin.\n if (ch.codePointAt(0)! < 0x250) return 'Latin';\n const all = scriptTests();\n if (current !== null && all.get(current)?.test(ch)) return current;\n for (const [name, test] of all) if (test.test(ch)) return name;\n return null;\n}\n\n/** One stretch of text in a single script. */\nexport interface ScriptPiece {\n start: number;\n end: number;\n /** Whether the script reads right to left, which HarfBuzz shapes it in. */\n rtl: boolean;\n}\n\n/** An open bracket still waiting for its close, and the script it opened in. */\ninterface Open { close: number; script: string | null }\n\n/** Open brackets remembered at once; deeper nesting forgets the outermost. */\nconst MAX_OPEN = 64;\n\n/**\n * `text` cut where its script changes, as UTF-16 spans covering all of it.\n *\n * Following UAX #24, a character every script shares (space, digits,\n * punctuation, a combining mark) stays in the piece before it, or the one after\n * it when it opens the text; a closing bracket takes the script its opening\n * bracket was in, so the `)` of `abc (שלום) def` goes with the Latin. A\n * piece reads right to left when the first of its own letters with a strong\n * `Bidi_Class` is R or AL. Empty text has no pieces.\n */\nexport function scriptPieces(text: string): ScriptPiece[] {\n const pieces: ScriptPiece[] = [];\n const open: Open[] = [];\n let current: string | null = null;\n let rtl: boolean | null = null;\n let start = 0;\n let at = 0;\n for (const ch of text) {\n const cp = ch.codePointAt(0)!;\n let script = scriptOf(ch, current);\n if (script === null) {\n const bracket = pairedBracket(cp);\n if (bracket?.kind === 'open') {\n if (open.length === MAX_OPEN) open.shift();\n open.push({ close: bracket.pair, script: current });\n } else if (bracket?.kind === 'close') {\n let k = open.length - 1;\n while (k >= 0 && open[k].close !== cp) k--;\n if (k >= 0) {\n script = open[k].script;\n open.length = k;\n }\n }\n }\n if (script !== null) {\n if (current === null) {\n for (const o of open) o.script ??= script;\n } else if (script !== current) {\n pieces.push({ start, end: at, rtl: rtl ?? false });\n start = at;\n rtl = null;\n }\n current = script;\n if (rtl === null) {\n const cls = bidiClassOf(cp);\n if (cls === 'L') rtl = false;\n else if (cls === 'R' || cls === 'AL') rtl = true;\n }\n }\n at += ch.length;\n }\n if (at > start) pieces.push({ start, end: at, rtl: rtl ?? false });\n return pieces;\n}\n","/**\n * HarfBuzz, behind the shaping contract `@weasel-js/text` declares: font\n * bytes and text in, glyph indices with em-space advances and offsets out,\n * and the outline of any glyph a shaping produced.\n *\n * HarfBuzz's JavaScript is imported only by {@link loadShaper}, which then\n * instantiates its WebAssembly: importing this package costs nothing until a\n * consumer asks for shaping. The JavaScript is harfbuzzjs's, vendored in\n * `./vendor/harfbuzzjs` because its published module instantiates with a\n * top-level `await`, which a bundle targeting below ES2022 cannot hold.\n */\nimport { scriptPieces, type ScriptPiece } from './scripts';\n\ntype HarfBuzz = typeof import('./vendor/harfbuzzjs/index');\ntype HbFont = InstanceType<HarfBuzz['Font']>;\ntype HbFeature = InstanceType<HarfBuzz['Feature']>;\n\n/** One glyph a shaping produced. Every length is in ems of the face, and y\n * grows downward. */\nexport interface ShapedGlyph {\n /** The glyph's index in the face. 0 is `.notdef`: the face has no glyph\n * for its cluster. */\n gid: number;\n /** UTF-16 offset in the shaped text where its cluster starts. A cluster is\n * the smallest stretch of text and glyphs that map onto each other: a\n * ligature's cluster holds every character it joined. */\n cluster: number;\n /** How far the pen moves past it. */\n advance: number;\n /** Where it is drawn, from the pen. */\n dx: number;\n dy: number;\n /** Whether its piece of the text was shaped right to left, which also\n * means HarfBuzz drew any mirrored character (a bracket) as its mirror. */\n rtl: boolean;\n}\n\n/** A shaping engine for weasel's text layout: what `registerShaper` takes. */\nexport interface Shaper {\n /**\n * Shape `text` set in the face whose font file is `face` (an sfnt: TrueType\n * or OpenType, not WOFF), with the OpenType `features` turned on.\n *\n * `language` is a BCP 47 tag (`'sr'`, `'ur'`) and selects the face's forms\n * for that language: Serbian Cyrillic italics, Urdu digits. Absent, the\n * face's default forms are drawn.\n *\n * Glyphs come in logical order: clusters by ascending `cluster`, and a\n * cluster's own glyphs in the order they are drawn, left to right. The array\n * is shared with later calls asking the same; never mutate it.\n */\n shape(face: ArrayBuffer, text: string, features?: readonly string[], language?: string): readonly ShapedGlyph[];\n /** Em-space SVG path data for glyph `gid` of `face`, moved by `(dx, dy)`\n * ems; y grows downward and the origin is the pen on the baseline. Null for\n * a glyph with no contours. */\n glyphD(face: ArrayBuffer, gid: number, dx?: number, dy?: number): string | null;\n /** Whether `face` has the OpenType feature `tag` (`'smcp'`, `'liga'`) in its\n * substitutions or positioning. */\n hasFeature(face: ArrayBuffer, tag: string): boolean;\n}\n\n/** Path commands in font units, y up, as HarfBuzz draws them. */\ninterface Command { type: string; values: number[] }\n\ninterface FaceRecord {\n font: HbFont;\n upem: number;\n features: ReadonlySet<string>;\n paths: Map<number, readonly Command[]>;\n shapes: Map<string, readonly ShapedGlyph[]>;\n}\n\n/** Shapings held per face before they are dropped together. */\nconst SHAPE_CACHE_LIMIT = 512;\n\n/** Decimal places kept in path data: 1e-5 em, and never exponent notation,\n * which an SVG path tokenizer would read as a command. */\nconst PRECISION = 1e5;\n\nconst fmt = (v: number): string => String(Math.round(v * PRECISION) / PRECISION);\n\nclass HarfBuzzShaper implements Shaper {\n readonly #hb: HarfBuzz;\n readonly #faces = new WeakMap<ArrayBuffer, FaceRecord>();\n readonly #features = new Map<string, HbFeature>();\n\n constructor(hb: HarfBuzz) {\n this.#hb = hb;\n }\n\n #face(bytes: ArrayBuffer): FaceRecord {\n let rec = this.#faces.get(bytes);\n if (rec) return rec;\n const hb = this.#hb;\n const face = new hb.Face(new hb.Blob(bytes));\n rec = {\n font: new hb.Font(face),\n upem: face.upem,\n features: new Set([...face.getTableFeatureTags('GSUB'), ...face.getTableFeatureTags('GPOS')]),\n paths: new Map(),\n shapes: new Map(),\n };\n this.#faces.set(bytes, rec);\n return rec;\n }\n\n #feature(tag: string): HbFeature {\n let f = this.#features.get(tag);\n if (!f) {\n const parsed = this.#hb.Feature.fromString(tag);\n if (!parsed) throw new Error(`weasel shape: \"${tag}\" is not an OpenType feature setting`);\n f = parsed;\n this.#features.set(tag, f);\n }\n return f;\n }\n\n shape(\n bytes: ArrayBuffer, text: string, features: readonly string[] = [], language?: string,\n ): readonly ShapedGlyph[] {\n const rec = this.#face(bytes);\n const lang = language || undefined;\n const key = `${features.join(',')}\\u0000${lang ?? ''}\\u0000${text}`;\n const held = rec.shapes.get(key);\n if (held) return held;\n const hbFeatures = features.map((tag) => this.#feature(tag));\n const out: ShapedGlyph[] = [];\n for (const piece of scriptPieces(text)) this.#piece(rec, text, piece, hbFeatures, lang, out);\n if (rec.shapes.size >= SHAPE_CACHE_LIMIT) rec.shapes.clear();\n rec.shapes.set(key, out);\n return out;\n }\n\n /** Shape `piece` of `text`, the rest of `text` around it as context, and\n * append its glyphs to `out` in logical order. */\n #piece(\n rec: FaceRecord, text: string, piece: ScriptPiece, features: HbFeature[], lang: string | undefined,\n out: ShapedGlyph[],\n ): void {\n const hb = this.#hb;\n const { start, end, rtl } = piece;\n const buffer = new hb.Buffer();\n buffer.addText(text, start, end - start);\n buffer.setDirection(rtl ? hb.Direction.RTL : hb.Direction.LTR);\n if (lang !== undefined) buffer.setLanguage(lang);\n // Fills in the script, and the language when none was set; what was set stands.\n buffer.guessSegmentProperties();\n // Marks keep clusters of their own, so each lands in the slot of the\n // character it was written as rather than merging into its base's.\n buffer.setClusterLevel(hb.ClusterLevel.MONOTONE_CHARACTERS);\n hb.shape(rec.font, buffer, features);\n const infos = buffer.getGlyphInfos();\n const positions = buffer.getGlyphPositions();\n const em = rec.upem;\n const glyphs: ShapedGlyph[] = infos.map((info, i) => ({\n gid: info.codepoint,\n cluster: info.cluster,\n advance: positions[i].xAdvance / em,\n dx: positions[i].xOffset / em,\n dy: -positions[i].yOffset / em,\n rtl,\n }));\n if (!rtl) {\n for (const g of glyphs) out.push(g);\n return;\n }\n // Right to left, HarfBuzz hands the glyphs over in visual order. Reverse\n // the clusters into logical order and keep each one's own glyphs as drawn.\n let hi = glyphs.length;\n while (hi > 0) {\n let lo = hi - 1;\n while (lo > 0 && glyphs[lo - 1].cluster === glyphs[hi - 1].cluster) lo--;\n for (let k = lo; k < hi; k++) out.push(glyphs[k]);\n hi = lo;\n }\n }\n\n glyphD(bytes: ArrayBuffer, gid: number, dx = 0, dy = 0): string | null {\n const rec = this.#face(bytes);\n let cmds = rec.paths.get(gid);\n if (cmds === undefined) {\n cmds = rec.font.glyphToJson(gid) as readonly Command[];\n rec.paths.set(gid, cmds);\n }\n if (cmds.length === 0) return null;\n const em = rec.upem;\n let d = '';\n for (const { type, values } of cmds) {\n d += type;\n for (let k = 0; k < values.length; k += 2) {\n d += `${k === 0 ? '' : ' '}${fmt(values[k] / em + dx)} ${fmt(-values[k + 1] / em + dy)}`;\n }\n }\n return d;\n }\n\n hasFeature(bytes: ArrayBuffer, tag: string): boolean {\n return this.#face(bytes).features.has(tag);\n }\n}\n\nlet loading: Promise<Shaper> | null = null;\n\n/**\n * Load HarfBuzz (about 450 kB of WebAssembly) and resolve with a shaper over\n * it. Once per process: every call answers the same shaper.\n *\n * ```ts\n * import { loadShaper } from '@weasel-js/text-shaping';\n * import { registerShaper } from '@weasel-js/core';\n *\n * registerShaper(await loadShaper());\n * ```\n */\nexport function loadShaper(): Promise<Shaper> {\n loading ??= Promise.all([import('./vendor/harfbuzzjs/index'), import('./vendor/harfbuzzjs/harfbuzz')])\n .then(async ([hb, { default: createHarfBuzz }]) => {\n hb.init(await createHarfBuzz(wasmLocation()));\n return new HarfBuzzShaper(hb);\n });\n return loading;\n}\n\n/**\n * Where the WebAssembly is read from. Node reads harfbuzzjs's own copy; anywhere\n * else it is fetched from beside this package's built JavaScript, where the\n * build copies it, so a bundler finds it from the `new URL(…, import.meta.url)`\n * the glue writes.\n */\nfunction wasmLocation(): { locateFile?: () => string } {\n const isNode = typeof process === 'object' && !!process.versions?.node;\n return isNode ? { locateFile: () => import.meta.resolve('harfbuzzjs/dist/harfbuzz.wasm') } : {};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/text-shaping",
3
- "version": "1.14.2",
3
+ "version": "1.15.0",
4
4
  "description": "OpenType text shaping for weasel through HarfBuzz: contextual forms, ligatures, reordering and mark placement for Arabic, the Indic scripts, Thai and the rest. Font bytes and text in, positioned glyphs out; no renderer and no scene graph.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,12 +16,12 @@
16
16
  "./package.json": "./package.json"
17
17
  },
18
18
  "dependencies": {
19
- "@weasel-js/bidi": "1.14.2",
19
+ "@weasel-js/bidi": "1.15.0",
20
20
  "harfbuzzjs": "1.6.4"
21
21
  },
22
22
  "devDependencies": {
23
- "@weasel-js/font": "1.14.2",
24
- "@weasel-js/text": "1.14.2"
23
+ "@weasel-js/font": "1.15.0",
24
+ "@weasel-js/text": "1.15.0"
25
25
  },
26
26
  "scripts": {
27
27
  "test": "vitest run",