@deepkit/desktop-ui
Version:
Library for desktop UI widgets in Angular 10+
96 lines (78 loc) • 3.07 kB
text/typescript
import {createReadStream, createWriteStream, lstatSync, readdirSync, readFileSync, writeFileSync} from 'fs';
import {join} from 'path';
import {ensureDirSync} from 'fs-extra';
const svg2ttf = require('svg2ttf');
const ttf2woff = require('ttf2woff');
const SVGIcons2SVGFontStream = require('svgicons2svgfont');
function readFolder(dir: string, files: { [path: string]: string }) {
const read = readdirSync(dir);
for (const file of read) {
const stat = lstatSync(join(dir, file));
if (stat.isDirectory()) {
readFolder(join(dir, file), files);
} else {
if (file.endsWith('.svg')) {
files[join(dir, file)] = file.replace('.svg', '');
}
}
}
}
const projectOutput = process.argv[2] ? process.argv[2] : undefined;
const out = './src/assets/fonts';
const fontFileName = 'ui-icons';
ensureDirSync(out);
(async () => {
const files: { [path: string]: string } = {};
readFolder(__dirname + '/../src/assets/icons', files);
if (projectOutput) {
readFolder(projectOutput, files);
}
const fontStream = new SVGIcons2SVGFontStream({
fontName: 'Desktop UI icon Mono',
fontHeight: 1700,
normalize: true,
fixedWidth: true,
});
fontStream.pipe(createWriteStream(`${out}/${fontFileName}.svg`))
.on('finish', function () {
console.log('SVG successfully created!');
const ttfConverted = svg2ttf(readFileSync(`${out}/${fontFileName}.svg`, 'utf8'), {
description: 'Desktop UI Icons'
});
writeFileSync(`${out}/${fontFileName}.ttf`, new Buffer(ttfConverted.buffer));
console.log('TTF successfully created!');
{
const ttfInput = readFileSync(`${out}/${fontFileName}.ttf`);
const ttf = new Uint8Array(ttfInput);
const woff = new Buffer(ttf2woff(ttf, {}).buffer);
writeFileSync(`${out}/${fontFileName}.woff`, woff);
console.log('WOFF successfully created!')
}
if (projectOutput) {
console.log(`Done. Dont forget to add following code in your styles.scss.`);
console.log(
readFileSync(__dirname + '/../src/scss/icon.scss', 'utf8').replace(/\.\.\/assets\/fonts/, out)
)
}
})
.on('error', function (err: any) {
console.log(err);
process.exit(1);
});
let unicode = 57345; //\uE001
const icons: string[] = [];
for (const file in files) {
const glyph = createReadStream(file);
const name = files[file];
icons.push(name);
(glyph as any)['metadata'] = {
unicode: [String.fromCharCode(unicode++), name],
name: name
};
console.log('Glyph', name);
fontStream.write(glyph);
}
// Do not forget to end the stream
fontStream.end();
writeFileSync(`${out}/icon-names.json`, JSON.stringify(icons));
})();