1 line
9.1 KiB
Plaintext
1 line
9.1 KiB
Plaintext
{"version":3,"file":"bitmapFontTextParser.mjs","sources":["../../../../src/scene/text-bitmap/asset/bitmapFontTextParser.ts"],"sourcesContent":["import type { BitmapFontData, RawCharData } from '../AbstractBitmapFont';\n\n/**\n * Internal data format used to convert to BitmapFontData.\n * @private\n */\nexport interface BitmapFontRawData\n{\n info: {\n face: string;\n size: string;\n }[];\n common: { lineHeight: string, base: string }[];\n page: {\n id: string;\n file: string;\n }[];\n chars: {\n count: number;\n }[];\n char: {\n id: string\n page: string\n xoffset: string\n yoffset: string\n xadvance: string,\n x: string\n y: string\n width: string\n height: string\n letter?: string\n char?: string\n }[];\n kernings?: {\n count: number;\n }[];\n kerning?: {\n first: string;\n second: string;\n amount: string;\n }[];\n distanceField?: {\n fieldType: 'sdf' | 'msdf' | 'none';\n distanceRange: string;\n }[]\n}\n\nexport const bitmapFontTextParser = {\n test(data: string | XMLDocument | BitmapFontData): boolean\n {\n return typeof data === 'string' && data.startsWith('info face=');\n },\n\n parse(txt: string): BitmapFontData\n {\n // Retrieve data item\n const items = txt.match(/^[a-z]+\\s+.+$/gm);\n const rawData: BitmapFontRawData = {\n info: [],\n common: [],\n page: [],\n char: [],\n chars: [],\n kerning: [],\n kernings: [],\n distanceField: [],\n };\n\n for (const i in items)\n {\n // Extract item name\n const name = items[i].match(/^[a-z]+/gm)[0] as keyof BitmapFontRawData;\n\n // Extract item attribute list as string ex.: \"width=10\"\n const attributeList = items[i].match(/[a-zA-Z]+=([^\\s\"']+|\"([^\"]*)\")/gm);\n\n // Convert attribute list into an object\n const itemData: any = {};\n\n for (const i in attributeList)\n {\n // Split key-value pairs\n const split = attributeList[i].split('=');\n const key = split[0];\n\n // Remove eventual quotes from value\n const strValue = split[1].replace(/\"/gm, '');\n\n // Try to convert value into float\n const floatValue = parseFloat(strValue);\n\n // Use string value case float value is NaN\n const value = isNaN(floatValue) ? strValue : floatValue;\n\n itemData[key] = value;\n }\n\n // Push current item to the resulting data\n rawData[name].push(itemData);\n }\n\n const font: BitmapFontData = {\n chars: {},\n pages: [],\n lineHeight: 0,\n fontSize: 0,\n fontFamily: '',\n distanceField: null,\n baseLineOffset: 0,\n };\n\n const [info] = rawData.info;\n const [common] = rawData.common;\n const [distanceField] = rawData.distanceField ?? [];\n\n if (distanceField)\n {\n font.distanceField = {\n range: parseInt(distanceField.distanceRange, 10),\n type: distanceField.fieldType\n };\n }\n\n font.fontSize = parseInt(info.size, 10);\n font.fontFamily = info.face;\n font.lineHeight = parseInt(common.lineHeight, 10);\n\n const page = rawData.page;\n\n for (let i = 0; i < page.length; i++)\n {\n font.pages.push({\n id: parseInt(page[i].id, 10) || 0,\n file: page[i].file,\n });\n }\n\n const map: Record<string, string> = {};\n\n font.baseLineOffset = font.lineHeight - parseInt(common.base, 10);\n\n const char = rawData.char;\n\n for (let i = 0; i < char.length; i++)\n {\n const charNode = char[i];\n const id = parseInt(charNode.id, 10);\n\n let letter = charNode.letter ?? charNode.char ?? String.fromCharCode(id);\n\n if (letter === 'space')letter = ' ';\n\n map[id] = letter;\n\n font.chars[letter] = {\n id,\n // texture deets..\n page: parseInt(charNode.page, 10) || 0,\n x: parseInt(charNode.x, 10),\n y: parseInt(charNode.y, 10),\n width: parseInt(charNode.width, 10),\n height: parseInt(charNode.height, 10),\n xOffset: parseInt(charNode.xoffset, 10),\n yOffset: parseInt(charNode.yoffset, 10),\n xAdvance: parseInt(charNode.xadvance, 10),\n kerning: {},\n } as RawCharData;\n }\n\n const kerning = rawData.kerning || [];\n\n for (let i = 0; i < kerning.length; i++)\n {\n const first = parseInt(kerning[i].first, 10);\n const second = parseInt(kerning[i].second, 10);\n const amount = parseInt(kerning[i].amount, 10);\n\n font.chars[map[second]].kerning[map[first]] = amount;\n }\n\n return font;\n }\n};\n"],"names":["i"],"mappings":"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"} |