BangleApps/bin/language_render.js

65 lines
2.2 KiB
JavaScript
Raw Normal View History

#!/bin/node
/*
Takes language files that have been written with unicode chars that Bangle.js cannot render
with its built-in fonts, and pre-render them.
*/
//const FONT_SIZE = 18;
//const FONT_NAME = 'Sans';
const FONT_SIZE = 16; // 12pt
const FONT_NAME = '"Unifont Regular"'; // or just 'Sans'
var createCanvas, registerFont;
try {
createCanvas = require("canvas").createCanvas;
registerFont = require("canvas").registerFont;
} catch(e) {
console.log("ERROR: needc canvas library");
console.log("Try: npm install canvas");
process.exit(1);
}
// Use font from https://unifoundry.com/unifont/ as it scales well at 16px high
registerFont(__dirname+'/unifont-15.0.01.ttf', { family: 'Unifont Regular' })
var imageconverter = require(__dirname+"/../webtools/imageconverter.js");
const canvas = createCanvas(200, 20)
const ctx = canvas.getContext('2d')
function renderText(txt) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.font = FONT_SIZE+'px '+FONT_NAME;
ctx.fillStyle = "white";
ctx.fillText(txt, 0, FONT_SIZE);
var str = imageconverter.canvastoString(canvas, { autoCrop:true, output:"raw", mode:"1bit", transparent:true } );
// for testing:
// console.log(txt);
// console.log("g.drawImage(",imageconverter.canvastoString(canvas, { autoCrop:true, output:"string", mode:"1bit" } ),");");
// process.exit(1);
return "\0"+str;
}
function renderLangFile(file) {
var fileIn = __dirname + "/../lang/unicode-based/"+file;
var fileOut = __dirname + "/../lang/"+file;
console.log("Reading",fileIn);
var inJSON = JSON.parse(require("fs").readFileSync(fileIn));
var outJSON = { "// created with bin/language_render.js" : ""};
for (var categoryName in inJSON) {
if (categoryName.includes("//")) continue;
var category = inJSON[categoryName];
outJSON[categoryName] = {};
for (var english in category) {
if (english.includes("//")) continue;
var translated = category[english];
//console.log(english,"=>",translated);
outJSON[categoryName][english] = renderText(translated);
}
}
require("fs").writeFileSync(fileOut, JSON.stringify(outJSON,null,2));
console.log("Written",fileOut);
}
renderLangFile("ja_JA.json");