-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Update font and icons to ionicons V6 * Add automatic ionicons v6 generation * Update to ionicons 7
- Loading branch information
1 parent
cbf9e24
commit ebc2f90
Showing
7 changed files
with
4,942 additions
and
6,079 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,3 +18,5 @@ bower_components | |
xcuserdata | ||
|
||
.DS_Store | ||
|
||
.yarn |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
// Source https://gist.github.com/romanlv/0b5b1d5d942b01da9e7bd46f07d42584 | ||
const fs = require('fs'); | ||
const { promisify } = require('util'); | ||
const glob = require('glob'); | ||
const xml2js = require('xml2js'); | ||
|
||
const SVGIcons2SVGFontStream = require('svgicons2svgfont'); | ||
const SVGIconsDirStream = require('svgicons2svgfont/src/iconsdir.js'); | ||
|
||
const svg2ttf = require('svg2ttf'); | ||
|
||
const readFileAsync = promisify(fs.readFile); | ||
const writeFileAsync = promisify(fs.writeFile); | ||
|
||
function makeSvgFont(fontName, svgs, svgFontPath) { | ||
const files = glob.sync(svgs); | ||
const options = { | ||
// see list of all the options | ||
// https://github.com/nfroidure/svgicons2svgfont#cli-interface | ||
// https://github.com/nfroidure/svgicons2svgfont/blob/master/bin/svgicons2svgfont.js#L76 | ||
fontHeight: 1000, | ||
normalize: true, | ||
}; | ||
|
||
return new Promise((resolve, reject) => { | ||
new SVGIconsDirStream(files, {}) | ||
.pipe( | ||
new SVGIcons2SVGFontStream({ | ||
...options, | ||
fontName, | ||
}) | ||
) | ||
.pipe(fs.createWriteStream(svgFontPath)) | ||
.on('finish', resolve) | ||
.on('error', reject); | ||
}); | ||
} | ||
|
||
async function convertSvg2Ttf(svgFontPath, output) { | ||
const ttf = svg2ttf(await readFileAsync(svgFontPath, 'utf8'), {}); | ||
await writeFileAsync(output, Buffer.from(ttf.buffer)); | ||
} | ||
|
||
async function generateGlyphMap(svgFontPath, output) { | ||
const parser = new xml2js.Parser(); | ||
const glyphMap = {}; | ||
const data = await readFileAsync(svgFontPath); | ||
|
||
return new Promise((resolve, reject) => { | ||
parser.parseString(data, function(err, result) { | ||
if (err !== null) { | ||
reject(err); | ||
} | ||
if (!result) { | ||
console.error(`cannot parse ${svgFontPath}`); | ||
} | ||
|
||
const icons = result.svg.defs[0].font[0].glyph; | ||
|
||
icons.forEach(({ $: icon }) => { | ||
const name = icon['glyph-name']; | ||
const code = icon.unicode.charCodeAt(0); | ||
glyphMap[name] = code; | ||
}); | ||
|
||
fs.writeFileSync(output, JSON.stringify(glyphMap, null, 2)); | ||
|
||
resolve(glyphMap); | ||
}); | ||
}); | ||
} | ||
|
||
async function main() { | ||
const fontName = 'Ionicons'; | ||
|
||
// this file is temporary | ||
const svgFontPath = `./${fontName}.svg`; | ||
const glyphMapPath = `./glyphmaps/${fontName}.json`; | ||
const tffPath = `./Fonts/${fontName}.ttf`; | ||
|
||
// create svg font from svg icons, it will use `svgicons2svgfont` to convert | ||
// `rect', 'circle` etc... to `path`s that can be used for font generation | ||
await makeSvgFont(fontName, './Ioniconstmp/*.svg', svgFontPath); | ||
|
||
await Promise.all([ | ||
// create json file with map of icon name and character code in font, needed for `react-native-vector-icons` integration | ||
generateGlyphMap(svgFontPath, glyphMapPath), | ||
// convert svg font to ttf font | ||
convertSvg2Ttf(svgFontPath, tffPath), | ||
]); | ||
console.log(`updated: ${tffPath} and ${glyphMapPath}`); | ||
} | ||
|
||
main(); |
Oops, something went wrong.