gulp-fonter
Version:
Font subsetting and converting plugin for gulp
57 lines (50 loc) • 1.95 kB
text/typescript
import { FinalConfiguration, InputConfiguration, FontType } from './types';
module.exports = {
acceptableTypes: ['ttf', 'woff', 'eot', 'otf', 'svg'],
isAcceptableType(type: string): Boolean {
return this.acceptableTypes.includes(type);
},
defaults: {
compound2simple: false, // transform ttf compound glyph to simple
combinePath: false, // for svg path
deflate: null, // deflate function
inflate: false, // inflate function for woff
hinting: false, // save font hinting
subset: null // array of ascii values
},
filterFormats({ formats, type }: FinalConfiguration): FontType[] {
let fontFormats: FontType[] = [];
if (formats && formats.length && Array.isArray(formats)) {
fontFormats = formats.filter((type: FontType) =>
this.isAcceptableType(type)
);
}
if (!fontFormats.length) {
fontFormats.push(type);
}
return fontFormats;
},
normalizeConf(
options: InputConfiguration,
sourceFormat: FontType
): FinalConfiguration {
const conf = Object.assign(this.defaults, options, {
type: sourceFormat
});
// Filter formats from input
conf.formats = this.filterFormats(conf);
// Convert string with letters to ascii codes array
if (typeof conf.subset === 'string') {
conf.subset = this.stringToAscii(conf.subset);
}
return conf;
},
stringToAscii(letters: String): Number[] {
return letters
.split('') // make array
.map((letter: String) => letter.charCodeAt(0)) //convert to ascii codes
.filter((code: Number, index: Number, self: Number[]) => {
return self.indexOf(code) === index; // remove duplicates
});
}
};