{"version":3,"file":"bitmapFontXMLParser.mjs","sources":["../../../../src/scene/text-bitmap/asset/bitmapFontXMLParser.ts"],"sourcesContent":["import type { BitmapFontData, RawCharData } from '../AbstractBitmapFont';\n\nexport const bitmapFontXMLParser = {\n    test(data: string | XMLDocument | BitmapFontData): boolean\n    {\n        const xml = data as Document;\n\n        return typeof xml !== 'string'\n            && 'getElementsByTagName' in xml\n            && xml.getElementsByTagName('page').length\n            && xml.getElementsByTagName('info')[0].getAttribute('face') !== null;\n    },\n\n    parse(xml: Document): BitmapFontData\n    {\n        const data: BitmapFontData = {\n            chars: {},\n            pages: [],\n            lineHeight: 0,\n            fontSize: 0,\n            fontFamily: '',\n            distanceField: null,\n            baseLineOffset: 0,\n        };\n\n        const info = xml.getElementsByTagName('info')[0];\n        const common = xml.getElementsByTagName('common')[0];\n        const distanceField = xml.getElementsByTagName('distanceField')[0];\n\n        if (distanceField)\n        {\n            data.distanceField = {\n                type: distanceField.getAttribute('fieldType') as 'sdf' | 'msdf' | 'none',\n                range: parseInt(distanceField.getAttribute('distanceRange'), 10),\n            };\n        }\n\n        // pages and chars:\n        const page = xml.getElementsByTagName('page');\n        const char = xml.getElementsByTagName('char');\n        const kerning = xml.getElementsByTagName('kerning');\n\n        data.fontSize = parseInt(info.getAttribute('size'), 10);\n        data.fontFamily = info.getAttribute('face');\n        data.lineHeight = parseInt(common.getAttribute('lineHeight'), 10);\n\n        for (let i = 0; i < page.length; i++)\n        {\n            data.pages.push({\n                id: parseInt(page[i].getAttribute('id'), 10) || 0,\n                file: page[i].getAttribute('file'),\n            });\n        }\n\n        const map: Record<string, string> = {};\n\n        data.baseLineOffset = data.lineHeight - parseInt(common.getAttribute('base'), 10);\n\n        for (let i = 0; i < char.length; i++)\n        {\n            const charNode = char[i];\n            const id = parseInt(charNode.getAttribute('id'), 10);\n\n            let letter = charNode.getAttribute('letter') ?? charNode.getAttribute('char') ?? String.fromCharCode(id);\n\n            if (letter === 'space')letter = ' ';\n\n            map[id] = letter;\n\n            data.chars[letter] = {\n                id,\n                // texture deets..\n                page: parseInt(charNode.getAttribute('page'), 10) || 0,\n                x: parseInt(charNode.getAttribute('x'), 10),\n                y: parseInt(charNode.getAttribute('y'), 10),\n                width: parseInt(charNode.getAttribute('width'), 10),\n                height: parseInt(charNode.getAttribute('height'), 10),\n\n                // render deets..\n                xOffset: parseInt(charNode.getAttribute('xoffset'), 10),\n                yOffset: parseInt(charNode.getAttribute('yoffset'), 10), // + baseLineOffset,\n                xAdvance: parseInt(charNode.getAttribute('xadvance'), 10),\n                kerning: {},\n            } as RawCharData;\n        }\n\n        for (let i = 0; i < kerning.length; i++)\n        {\n            const first = parseInt(kerning[i].getAttribute('first'), 10);\n            const second = parseInt(kerning[i].getAttribute('second'), 10);\n            const amount = parseInt(kerning[i].getAttribute('amount'), 10);\n\n            data.chars[map[second]].kerning[map[first]] = amount;// * 10000;\n        }\n\n        return data;\n    }\n};\n"],"names":[],"mappings":"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"}