node-fontnik/bin/font-inspect
2022-10-03 13:12:03 +03:00

63 lines
1.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var { queue } = require('d3-queue');
var glob = require('glob');
var argv = require('minimist')(process.argv.slice(2), {
boolean: ['verbose', 'help']
});
if (argv.help) {
console.log('usage: font-inspect --register=FONTDIRECTORY');
console.log('option: --verbose');
console.log('option: --register=FONTDIRECTORY');
console.log('option: --face=SPECIFICFONTFACE');
return;
}
if (argv.register && !process.env.FONTNIK_FONTS) {
process.env.FONTNIK_FONTS = path.resolve(argv.register);
}
var fontnik = require('../index.js');
var faces = [];
if (argv.face) {
faces = [argv.face];
} else {
var register = path.resolve(argv.register);
var pattern = '+(*ttf|*otf)';
faces = glob.sync(pattern, { nodir: true, cwd: register, matchBase: true });
faces = faces.map(function (f) {
return path.join(register, f);
})
}
if (argv.verbose) {
console.error('resolved', faces);
}
var q = queue();
function getCoverage(face, cb) {
fs.readFile(face, function (err, res) {
if (err) return cb(err);
fontnik.load(res, function (err, faces) {
if (err) return cb(err);
return cb(null, {
face: [faces[0].family_name, faces[0].style_name].join(' '),
coverage: faces[0].points
});
});
});
}
faces.forEach(function (f) { q.defer(getCoverage, f) });
q.awaitAll(function (err, res) {
if (err) throw err;
process.stdout.write(JSON.stringify(res, null, 2));
});