From 0a0c1915233bed01bbc657d516fe8816dc8b04e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sat, 14 Jul 2018 21:53:42 +0200 Subject: [PATCH] customizer initial --- .gitignore | 3 + .gitmodules | 3 + Fork-Awesome | 1 + README.txt | 30 ++++++++++ build.sh | 31 +++++++++++ install.sh | 21 +++++++ output/.gitignore | 2 + patcher/apply-filter.js | 83 ++++++++++++++++++++++++++++ patcher/refresh-wanted-templates.js | 23 ++++++++ patcher/templates/.gitignore | 2 + refresh-templates.sh | 15 +++++ screenshot.png | Bin 0 -> 35651 bytes update-fa.sh | 12 ++++ wanted.full.ini | 2 + 14 files changed, 228 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 160000 Fork-Awesome create mode 100644 README.txt create mode 100755 build.sh create mode 100755 install.sh create mode 100644 output/.gitignore create mode 100755 patcher/apply-filter.js create mode 100755 patcher/refresh-wanted-templates.js create mode 100644 patcher/templates/.gitignore create mode 100755 refresh-templates.sh create mode 100644 screenshot.png create mode 100755 update-fa.sh create mode 100644 wanted.full.ini diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19f93ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +wanted.all.ini +wanted.none.ini +wanted.ini diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9392795 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Fork-Awesome"] + path = Fork-Awesome + url = https://github.com/ForkAwesome/Fork-Awesome.git diff --git a/Fork-Awesome b/Fork-Awesome new file mode 160000 index 0000000..2850081 --- /dev/null +++ b/Fork-Awesome @@ -0,0 +1 @@ +Subproject commit 285008117b87520930524b332dbbfad1cc26cc2c diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..cda5128 --- /dev/null +++ b/README.txt @@ -0,0 +1,30 @@ +# Fork-Awesome customizer + +This is a little hack to let you generate custom Fork-Awesome builds with only a subset of icons. + +![screenshot](screenshot.png) + +## How to use + +1. Make sure you cloned this repository recursively, i.e. the `Fork-Awesome/` folder is not empty. + - You can fix that by running `git submodule init` and `git submodule update` +2. Run `./install.sh`. This should prepare the FA submodule for building the font. +3. Verify that files `wanted.all.ini` and `wanted.none.ini` have been created. +4. Copy either of the "wanted" template files to `wanted.ini`, and customize it as needed. + Lines starting with `#` will be excluded. Use the [FA icons page](https://forkawesome.github.io/Fork-Awesome/icons/) for reference. +5. Run `./build.sh` to build your customized font. +6. Retrieve your output files from the `output/` directory. + +Note: The "woff" file may fail to build, resulting in the make target in `Fork-Awesome/src/icons` failing, in which case you get no files. +A workaround is to comment out that line by prepending it with `#`, and trying to build again. + +```patch + cp ${FA_FONTCUSTOM_OUTPUT_DIR}/forkawesome.svg ${FA_ROOT_FONTS_DIR}/forkawesome-webfont.svg + cp ${FA_FONTCUSTOM_OUTPUT_DIR}/forkawesome.ttf ${FA_ROOT_FONTS_DIR}/forkawesome-webfont.ttf +- cp ${FA_FONTCUSTOM_OUTPUT_DIR}/forkawesome.woff ${FA_ROOT_FONTS_DIR}/forkawesome-webfont.woff ++ #cp ${FA_FONTCUSTOM_OUTPUT_DIR}/forkawesome.woff ${FA_ROOT_FONTS_DIR}/forkawesome-webfont.woff + cp ${FA_FONTCUSTOM_OUTPUT_DIR}/forkawesome.woff2 ${FA_ROOT_FONTS_DIR}/forkawesome-webfont.woff2 +``` + + + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..93f88ab --- /dev/null +++ b/build.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +if [ ! -f "./Fork-Awesome/.git" ]; then + echo -e "\x1b[31;1mFA submodule is not initialized, exit...\x1b[m" + exit +fi + +if [ ! -f "./wanted.ini" ]; then + echo -e "\x1b[31;1mMissing customization file './wanted.ini'!\x1b[m" + exit +fi + +if [ ! -d "./Fork-Awesome/.bundle" ]; then + echo -e "\x1b[31;1mGems not installed in the FA submodule, cannot build. Did you run install.sh?\x1b[m" + exit +fi + +if [ ! -d "./Fork-Awesome/node_modules" ]; then + echo -e "\x1b[31;1mNode modules not installed in the FA submodule, cannot build. Did you run install.sh?\x1b[m" + exit +fi + +bash ./refresh-templates.sh + +echo "=== Starting a build... ===" +(cd patcher && node ./apply-filter.js) +(cd "./Fork-Awesome/src/icons/" && make) + +cp ./Fork-Awesome/src/icons/forkawesome/* ./output + +echo "=== Your font is ready in the output/ directory ===" diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..76f72f3 --- /dev/null +++ b/install.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ ! -f "./Fork-Awesome/.git" ]; then + echo -e "\x1b[31;1mFA submodule is not initialized, exit...\x1b[m" + exit +fi + +cd Fork-Awesome + +echo "=== Installing ruby dependencies ===" +bundle install --path vendor/bundle + +echo +echo "=== Installing NODE dependencies ===" +npm install + +echo +echo ">>> If no errors occured, FA should be ready to build." +echo -e "\x1b[90m(npm complaining about vulnerabilities is probably okay)\x1b[m" + +bash ./refresh-templates.sh diff --git a/output/.gitignore b/output/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/patcher/apply-filter.js b/patcher/apply-filter.js new file mode 100755 index 0000000..88a3b99 --- /dev/null +++ b/patcher/apply-filter.js @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +const fs = require('fs') + + +function rmInDir(dirPath) { + try { var files = fs.readdirSync(dirPath) } + catch(e) { return } + if (files.length > 0) { + for (var i = 0; i < files.length; i++) { + var filePath = dirPath + '/' + files[i] + if (fs.statSync(filePath).isFile()) + fs.unlinkSync(filePath) + else + rmDir(filePath) + } + } +} + +function cp(src, dest) { + if (!fs.existsSync(src)) { + return false; + } + + var data = fs.readFileSync(src, 'utf-8'); + fs.writeFileSync(dest, data); +} + + +let manifest = JSON.parse(fs.readFileSync('templates/.fontcustom-manifest.json', 'utf-8')) +let desired = fs.readFileSync('../wanted.ini', 'utf-8').split('\n').filter((x) => x.length && x[0] !== '#') + +// This forces a rebuild +manifest.checksum.previous = 'asdf' + +console.log('Preparing fontcustom manifest...') +console.log(`Including ${desired.length} icons`) + +const orig_glyphs = manifest.glyphs + +manifest.glyphs = Object.keys(orig_glyphs) + .filter(key => desired.includes(key)) + .reduce((obj, key) => { + obj[key] = orig_glyphs[key] + return obj + }, {}) + + +console.log('\x1b[32m[Writing]\x1b[m .fontcustom-manifest.json') +fs.writeFileSync('../Fork-Awesome/src/icons/.fontcustom-manifest.json', JSON.stringify(manifest, null, 2)) + +console.log('Preparing icons.yml...') + + +// this would be prettier with some yaml module, but to avoid installing anything... + +let iconsy = fs.readFileSync('templates/icons.yml', 'utf-8') + +let pieces = iconsy.substring(iconsy.indexOf('\n')+1).split(' - name:') +pieces.shift() // remove first +// now we have the entries, without leading ' - name' + +let pattern = /id:\s+(\w+)\n/ + +pieces = pieces.filter((x) => { + let ar = pattern.exec(x) + return ar !== null && desired.indexOf(ar[1]) !== -1 +}) + +let combined = 'icons:\n - name:' + pieces.join(' - name:') + +console.log('\x1b[32m[Writing]\x1b[m icons.yml') +fs.writeFileSync('../Fork-Awesome/src/icons/icons.yml', combined) + + +console.log('Deleting files in svg/ ...') + +rmInDir('../Fork-Awesome/src/icons/svg') + +console.log('Copying desired files from svg-all/ to svg/ ...') +for (let a of desired) { + cp(`./templates/svg/${a}.svg`, `../Fork-Awesome/src/icons/svg/${a}.svg`) +} diff --git a/patcher/refresh-wanted-templates.js b/patcher/refresh-wanted-templates.js new file mode 100755 index 0000000..5155341 --- /dev/null +++ b/patcher/refresh-wanted-templates.js @@ -0,0 +1,23 @@ +#!/usr/bin/env node + +const fs = require('fs') + +let manifest = JSON.parse(fs.readFileSync('./templates/.fontcustom-manifest.json', 'utf-8')) + +let all_enabled = [] +let all_disabled = [] + +for (var key in manifest.glyphs){ + if (manifest.glyphs.hasOwnProperty(key)) { + all_enabled.push(key) + all_disabled.push(`#${key}`) + } +} + +console.log(`Found ${all_enabled.length} icons in manifest, writing template files`) + +console.log(`\x1b[32m[Writing]\x1b[m wanted.all.ini`) +fs.writeFileSync('../wanted.all.ini', all_enabled.join('\n') + '\n') + +console.log(`\x1b[32m[Writing]\x1b[m wanted.none.ini`) +fs.writeFileSync('../wanted.none.ini', all_disabled.join('\n') + '\n') diff --git a/patcher/templates/.gitignore b/patcher/templates/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/patcher/templates/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/refresh-templates.sh b/refresh-templates.sh new file mode 100755 index 0000000..fcccda7 --- /dev/null +++ b/refresh-templates.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ ! -f "./Fork-Awesome/.git" ]; then + echo -e "\x1b[31;1mFA submodule is not initialized, exit...\x1b[m" + exit +fi + +echo "=== Refreshing templates for building a customized font ===" +rm -rf "./patcher/templates/*" + +cp "./Fork-Awesome/src/icons/.fontcustom-manifest.json" "./patcher/templates" +cp "./Fork-Awesome/src/icons/icons.yml" "./patcher/templates" +cp -R "./Fork-Awesome/src/icons/svg" "./patcher/templates" + +(cd ./patcher && node ./refresh-wanted-templates.js) diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..743f245bc892eb1d31d07cd6425a8f55376e43a2 GIT binary patch literal 35651 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 literal 0 HcmV?d00001 diff --git a/update-fa.sh b/update-fa.sh new file mode 100755 index 0000000..8ad3bec --- /dev/null +++ b/update-fa.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +if [ ! -f "./Fork-Awesome/.git" ]; then + echo -e "\x1b[31;1mFA submodule is not initialized, exit...\x1b[m" + exit +fi + +echo "=== Updating the Fork-Awesome submodule... ===" +(cd Fork-Awesome && git fetch && git reset --hard origin/master) +echo "=== Fork-Awesome updated ===" + +bash ./refresh-templates.sh diff --git a/wanted.full.ini b/wanted.full.ini new file mode 100644 index 0000000..1181382 --- /dev/null +++ b/wanted.full.ini @@ -0,0 +1,2 @@ +star +table