securityos/node_modules/.bin/ot

85 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
/* eslint no-console: off */
import fs from 'fs';
import path from 'path';
import { load } from '../src/opentype';
// Print out information about the font on the console.
function printFontInfo(font) {
console.log(' glyphs:', font.glyphs.length);
console.log(' kerning pairs (kern table):', Object.keys(font.kerningPairs).length);
console.log(' kerning pairs (GPOS table):', (font.getGposKerningValue) ? 'yes' : 'no');
}
// Recursively walk a directory and execute the function for every file.
function walk(dir, fn) {
var files, i, file;
files = fs.readdirSync(dir);
for (i = 0; i < files.length; i += 1) {
file = files[i];
var fullName = path.join(dir, file);
var stat = fs.statSync(fullName);
if (stat.isFile()) {
fn(fullName);
} else if (stat.isDirectory()) {
walk(fullName, fn);
}
}
}
// Print out usage information.
function printUsage() {
console.log('Usage: ot command [dir|file]');
console.log();
console.log('Commands:');
console.log();
console.log(' info Get information of specified font or fonts in the specified directory.');
console.log();
}
function fileInfo(file) {
load(file, function(err, font) {
console.log(path.basename(file));
if (err) {
console.log(' (Error: ' + err + ')');
} else if (!font.supported) {
console.log(' (Unsupported)');
} else {
printFontInfo(font);
}
});
}
function recursiveInfo(fontDirectory) {
walk(fontDirectory, function(file) {
var ext = path.extname(file).toLowerCase();
if (ext === '.ttf' || ext === '.otf') {
fileInfo(file);
}
});
}
if (process.argv.length < 3) {
printUsage();
} else {
var command = process.argv[2];
if (command === 'info') {
var fontpath = process.argv.length === 3 ? '.' : process.argv[3];
if (fs.existsSync(fontpath)) {
var ext = path.extname(fontpath).toLowerCase();
if (fs.statSync(fontpath).isDirectory()) {
recursiveInfo(fontpath);
} else if (ext === '.ttf' || ext === '.otf') {
fileInfo(fontpath);
} else {
printUsage();
}
} else {
console.log('Path not found');
}
} else {
printUsage();
}
}