1
0
mirror of https://github.com/tabler/tabler-icons.git synced 2025-08-29 08:40:52 +02:00

Moved compileFonts properties from package to separate file

This commit is contained in:
tijmenvangulik
2021-04-10 10:34:00 +02:00
parent 6d046c56ef
commit c0f30068c2
4 changed files with 79 additions and 41 deletions

1
.gitignore vendored
View File

@@ -14,3 +14,4 @@ src/test*.svg
.jekyll-metadata
icons-react/dist/
/_import.csv
compile-options.json

View File

@@ -131,28 +131,38 @@ Compiling fonts:
To compile fonts first install [fontforge](https://fontforge.org/en-US/)
the fontforge executable needs to be in the path or you can set set the path to the downloaded fontforge executable in the package.json. If you installed in on a mac in your application directory it will be:
When compiling the font it will look for a json file compile-options.json in root folder (same folder as the package.json) In this file you can define extra options:
The default settings if you have not defined the file will be:
{
"includeIcons": [],
"fontForge": "fontforge",
"strokeWidth": 2
}
The fontforge executable needs to be in the path or you can set set the path to the downloaded fontforge executable in the. If you installed in on a mac in your application directory it will be "/Applications/FontForge.app/Contents/MacOS/FontForge". You can set this value in the compile-options.json file.
```JSON
"compileFonts": {
{
"fontForge":"/Applications/FontForge.app/Contents/MacOS/FontForge"
}
```
To compile the fonts run:
npm run build-iconfont
By default the stroke width is 2. You can change the stroke width by setting the package property:
By default the stroke width is 2. You can change the stroke width in the compile-options.json
```JSON
"compileFonts": {
"strokeWidth":"1.5",
{
"strokeWidth": 1.5,
}
```
To reduce the font file size you can choose to compile a sub set of icons. When you leave the array empty it will compile all the fonts. For example:
To reduce the font file size you can choose to compile a sub set of icons. When you leave the array empty it will compile all the fonts. To compile only two icons you can set for example the folowing option in the compile-options.json:
```JSON
"includeIcons": {
"include":["alert-octagon","alert-triangle"]
{
"includeIcons":["alert-octagon","alert-triangle"]
}
```

View File

@@ -18,6 +18,40 @@ const gulp = require('gulp'),
svgpath = require('svgpath'),
svgr = require('@svgr/core').default;
let compileOptions = {
includeIcons: [],
strokeWidth: null,
fontForge: "fontforge"
};
if (fs.existsSync('./compile-options.json')) {
try {
let tempOptions = require('./compile-options');
if (typeof tempOptions!="object")
throw "Compile options file does not contain an json object";
if (typeof tempOptions.includeIcons!="undefined") {
if (!Array.isArray(tempOptions.includeIcons))
throw "property inludeIcons is not an array";
compileOptions.includeIcons= tempOptions.includeIcons;
}
if (typeof tempOptions.strokeWidth!="undefined") {
if (typeof tempOptions.strokeWidth!="string" && typeof tempOptions.strokeWidth!="number")
throw "property strokeWidth is not a string or number";
compileOptions.strokeWidth=tempOptions.strokeWidth.toString();
}
if (typeof tempOptions.fontForge!="undefined") {
if (typeof tempOptions.fontForge!="string")
throw "property fontForge is not a string";
compileOptions.fontForge=tempOptions.fontForge;
}
} catch (error) {
throw `Error reading compile-options.json: ${error}`
}
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
@@ -191,7 +225,6 @@ gulp.task('iconfont-clean', function (cb) {
cb();
});
});
const includeIcons=typeof p.compileFonts=='object'? p.compileFonts.include:[];
gulp.task('iconfont-svg-outline', function (cb) {
@@ -203,39 +236,39 @@ gulp.task('iconfont-svg-outline', function (cb) {
if (fs.existsSync('./.build/iconfont-unicode.json')) {
iconfontUnicode = require('./.build/iconfont-unicode');
}
await asyncForEach(files, async function (file) {
const name = path.basename(file, '.svg');
if (!Array.isArray( includeIcons) || includeIcons.length==0 || includeIcons.indexOf(name)>=0) {
if (compileOptions.includeIcons.length==0 || compileOptions.includeIcons.indexOf(name)>=0) {
unicode = iconfontUnicode[name];
await console.log('Stroke for:', file, unicode);
await console.log('Stroke for:', file, unicode);
let strokedSVG = fs.readFileSync(file).toString();
let strokedSVG = fs.readFileSync(file).toString();
strokedSVG = strokedSVG
.replace('width="24"', 'width="1000"')
.replace('height="24"', 'height="1000"');
if (typeof p.compileFonts=='object' && typeof p.compileFonts.strokeWidth=="string")
strokedSVG = strokedSVG.replace('stroke-width="2"', `stroke-width="${p.compileFonts.strokeWidth}"`);
strokedSVG = strokedSVG
.replace('width="24"', 'width="1000"')
.replace('height="24"', 'height="1000"');
if (compileOptions.strokeWidth)
strokedSVG = strokedSVG.replace('stroke-width="2"', `stroke-width="${compileOptions.strokeWidth}"`);
await outlineStroke(strokedSVG, {
optCurve: false,
steps: 4,
round: 0,
centerHorizontally: true,
fixedWidth: true,
color: 'black'
}).then(outlined => {
if (unicode) {
fs.writeFileSync(`icons-outlined/u${unicode.toUpperCase()}-${name}.svg`, outlined);
} else {
fs.writeFileSync(`icons-outlined/${name}.svg`, outlined);
}
}).catch(error => console.log(error));
await outlineStroke(strokedSVG, {
optCurve: false,
steps: 4,
round: 0,
centerHorizontally: true,
fixedWidth: true,
color: 'black'
}).then(outlined => {
if (unicode) {
fs.writeFileSync(`icons-outlined/u${unicode.toUpperCase()}-${name}.svg`, outlined);
} else {
fs.writeFileSync(`icons-outlined/${name}.svg`, outlined);
}
}).catch(error => console.log(error));
}
});
@@ -251,9 +284,7 @@ gulp.task('iconfont-optimize', function() {
});
gulp.task('iconfont-fix-outline', function(cb) {
var fontForge= 'fontforge';
if (typeof p.compileFonts=='object' && typeof p.compileFonts.fontForge=='string')
fontForge=p.compileFonts.fontForge;
var fontForge= compileOptions.fontForge;
// correct svg outline directions in a child process using fontforge
const generate = cp.spawn(fontForge, ["-lang=py", "-script", "./fix-outline.py"], { stdio: 'inherit' });

View File

@@ -40,7 +40,8 @@
"optimize": "gulp optimize",
"release": "release-it",
"build": "gulp build",
"build-iconfont": "gulp build-iconfont"
"build-iconfont": "gulp build-iconfont",
"copy":"cp -r -n -v -f ./iconfont/fonts/* ../WebErgometer/WebApp/html/font"
},
"description": "A set of free MIT-licensed high-quality SVG icons for you to use in your web projects.",
"keywords": [
@@ -101,10 +102,5 @@
"peerDependencies": {
"react": "^16.13.1",
"react-dom": "^16.13.1"
},
"compileFonts": {
"include":[],
"strokeWidth":"2",
"fontForge":"fontforge"
}
}