/** Convert the shipped .font files into a JS module the app can embed. */ import { readFileSync, writeFileSync, readdirSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { dirname, join } from 'node:path'; import { parseFont, fontToJSON } from '../src/codec/bitfont.mjs'; const here = dirname(fileURLToPath(import.meta.url)); const srcDir = join(here, '../../yutongapp'); const outFile = join(here, '../src/fonts.js'); const fonts = {}; for (const f of readdirSync(srcDir).filter((f) => f.endsWith('.font')).sort()) { const parsed = parseFont(readFileSync(join(srcDir, f), 'latin1')); fonts[parsed.name] = fontToJSON(parsed); const codes = [...parsed.glyphs.keys()]; console.log( `${parsed.name.padEnd(9)} cell ${String(parsed.cellWidth).padStart(2)}x${parsed.height}` + ` ${String(parsed.glyphs.size).padStart(3)} glyphs codes ${Math.min(...codes)}..${Math.max(...codes)}` ); } writeFileSync(outFile, '// Generated by tools/build-fonts.mjs from the .font files shipped with TP5.\n' + '// Each glyph is [advance, ...rows]; rows are MSB-first, cellWidth bits wide.\n' + 'export const FONTS = ' + JSON.stringify(fonts) + ';\n'); const kb = (readFileSync(outFile).length / 1024).toFixed(0); console.log(`\nwrote ${outFile} (${kb} KB, ${Object.keys(fonts).length} fonts)`);