UNPKG

fonticon

Version:

create font icon from svg

115 lines (93 loc) 3.33 kB
var fs = require('fs'); var path = require('path'); var _ = require('lodash'); var rootPathFont = 'icon-config'; var classPrefix = process.env.classPrefix || 'fnt-icon-'; var font = process.env.font; if (!font) { throw new Error('require font'); } var iconConfig = require(path.join('../icon-config', font, 'index.json')); var fontName = process.env.fontName || iconConfig['font-name'] || 'IconFont'; module.exports = function(grunt) { grunt.initConfig({ copy: { main: { cwd: 'scss/', src: ['main.scss'], dest: path.join(rootPathFont, font, 'scss/'), expand: true, filter: 'isFile' } }, sass: { dist: { src: path.join(rootPathFont, font, 'scss/main.scss'), dest: path.join(rootPathFont, font, 'css/icons.css'), } }, watch: { all: { files: ['**/*.hbs', '**/*.js', path.join(rootPathFont, font, 'index.json')], tasks: ['default'] } } }); grunt.registerTask('generate-font', function() { var done = this.async(); let webfontsGenerator = require('webfonts-generator'); let svgRootDir = iconConfig['root-dir']; let icons = iconConfig.icons; let iconFiles = icons.map(function(icon) { // If root-dir is specified for a specific icon, use that. if (icon['root-dir']) { return icon['root-dir'] + icon.svg; } // Otherwise, use the default root-dir. return svgRootDir + icon.svg; }); webfontsGenerator({ files: iconFiles, dest: path.join(rootPathFont, font, 'fonts/'), fontName: fontName, templateOptions: { prefix: classPrefix }, cssDest: path.join(rootPathFont, font,'scss/_icons.scss'), cssTemplate: './templates/scss.hbs', htmlDest: path.join(rootPathFont, font,'index.html'), htmlTemplate: './templates/html.hbs', html: true, rename: function(iconPath) { let fileName = path.basename(iconPath); let iconName = _.result(_.find(icons, function(icon) { let svgName = path.basename(icon.svg); return svgName === fileName; }), 'name'); return `${classPrefix}${iconName}`; }, types: ['svg', 'ttf', 'woff', 'eot'] }, function(error) { if (error) { console.error(error); done(false); } done(); }); }); grunt.registerTask('update-base64', function() { let iconScssFile = path.join(rootPathFont, font, 'scss/_icons.scss'); let fontFiles = { ttf: path.join(rootPathFont, font, `./fonts/${fontName}.ttf`), woff: path.join(rootPathFont, font, `./fonts/${fontName}.woff`) }; let scssContents = fs.readFileSync(iconScssFile).toString(); Object.keys(fontFiles).forEach(function(font) { let fontFile = fontFiles[font]; let fontContent = fs.readFileSync(fontFile); let regex = new RegExp(`(url.*font-${font}.*base64,)([^\\s]+)(\\).*)`); scssContents = scssContents.replace(regex, `$1${fontContent.toString('base64')}$3`); }); fs.writeFileSync(iconScssFile, scssContents); }); grunt.registerTask('default', ['generate-font', 'update-base64', 'copy', 'sass']); };