const opentype = require('opentype.js'); const args = process.argv.slice(2); const font = opentype.loadSync(args[0]); function formatUnicode(unicode) { unicode = unicode.toString(16); if (unicode.length > 4) { return ("000000" + unicode.toUpperCase()).substr(-6) } else { return ("0000" + unicode.toUpperCase()).substr(-4) } } console.log(""); console.log(""); let num = font.numGlyphs; for(let glyphIndex = 0; glyphIndex < num; glyphIndex++) { let glyph = font.glyphs.get(glyphIndex); let path = glyph.getPath(0, 0, 72); if (path.commands.length === 0) { continue; } let uni = glyph.unicodes.map(formatUnicode).join(', '); console.log("\t"); /*"advanceWidth=\""+glyph.advanceWidth+"\" "+ "xMin=\""+glyph.xMin+"\" xMax=\""+glyph.xMax+"\" yMin=\""+glyph.yMin+"\" yMax=\""+glyph.yMax+"\" "+ "leftSideBearing=\""+glyph.leftSideBearing+"\" pathFill=\""+path.fill+"\" "+ "strokeStyle=\""+path.stroke+"\" lineWidth=\""+path.strokeWidth+"\">"); */ for (i = 0; i < path.commands.length; i += 1) { cmd = path.commands[i]; if (cmd.type === 'M') { console.log("\t\t"); } else if (cmd.type === 'L') { console.log("\t\t"); } else if (cmd.type === 'C') { console.log("\t\t"); } else if (cmd.type === 'Q') { console.log("\t\t"); } else if (cmd.type === 'Z') { console.log("\t\t"); } } console.log("\t"); } console.log("");