diff --git a/.gitignore b/.gitignore
index 22548fc..ba78569 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,18 +1,15 @@
*.zip
-FiraCode_liga.glyphs
-FiraCode_mess.glyphs
target
clojure/*.edn
-FiraCode\ (Autosaved).glyphs
-FiraCode_VF.glyphs
.cpcache
master_ufo
instance_ufo
venv
.DS_Store
*.numbers
-distr/ttf
-distr/otf
-distr/woff
-distr/woff2
-distr/variable_ttf
\ No newline at end of file
+
+distr/*/
+
+*.glyphs
+!FiraCode.glyphs
+
diff --git a/README.md b/README.md
index 2548cdc..d0ff2e3 100644
--- a/README.md
+++ b/README.md
@@ -247,6 +247,20 @@ make
make package
```
+If you want to *permanently enable* certain style sets or character variations, maybe because your editor of choice does not allow you to toggle these individually, you can provide the desired features as a comma separated list to the build script via the `-f / --features` flag.
Default: none.
+
+To separate different versions of your font you can specify the desired font family name with the `-n / --family-name` flag. The special value 'features' will append a sorted, space separated list of enabled features to the default family name.
Default: "Fira Code"
+
+You can also limit the font weights that will be created with the `-w / --weights` option.
Default: "Light,Regular,Retina,Medium,SemiBold,Bold"
+
+```bash
+# locally in your shell
+./script/build.sh --features "ss02,ss08,ss10,cv03,cv07,cv14" --family-name "Fira Code straight" --weights "Regular,Bold"
+
+# or via a docker container (creates the family name 'Fira Code cv01 cv02 cv06 cv31 onum ss01 ss03 ss04 zero')
+docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "cv01,cv02,cv06,ss01,zero,onum,ss03,ss04,cv31" -n "features"
+```
+
### Credits
- Author: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky)
diff --git a/features/cv01.fea b/features/cv01.fea
new file mode 100644
index 0000000..e6e6bd8
--- /dev/null
+++ b/features/cv01.fea
@@ -0,0 +1,12 @@
+# Name: alternate lowercase a
+
+sub a by a.cv01;
+sub aacute by aacute.cv01;
+sub abreve by abreve.cv01;
+sub acircumflex by acircumflex.cv01;
+sub adieresis by adieresis.cv01;
+sub agrave by agrave.cv01;
+sub amacron by amacron.cv01;
+sub aogonek by aogonek.cv01;
+sub aring by aring.cv01;
+sub atilde by atilde.cv01;
diff --git a/features/cv02.fea b/features/cv02.fea
new file mode 100644
index 0000000..f9dac8c
--- /dev/null
+++ b/features/cv02.fea
@@ -0,0 +1,7 @@
+# Name: single story lowercase g
+
+sub g by g.cv02;
+sub gbreve by gbreve.cv02;
+sub gcircumflex by gcircumflex.cv02;
+sub gcommaaccent by gcommaaccent.cv02;
+sub gdotaccent by gdotaccent.cv02;
diff --git a/features/cv03.fea b/features/cv03.fea
new file mode 100644
index 0000000..3d07411
--- /dev/null
+++ b/features/cv03.fea
@@ -0,0 +1,13 @@
+# Name: lowercase I without any horizontal decorations
+
+sub i by i.cv03;
+sub idotless by idotless.cv03;
+sub iacute by iacute.cv03;
+sub ibreve by ibreve.cv03;
+sub icircumflex by icircumflex.cv03;
+sub idieresis by idieresis.cv03;
+sub idotaccent by idotaccent.cv03;
+sub igrave by igrave.cv03;
+sub imacron by imacron.cv03;
+sub iogonek by iogonek.cv03;
+sub itilde by itilde.cv03;
diff --git a/features/cv04.fea b/features/cv04.fea
new file mode 100644
index 0000000..3fa3250
--- /dev/null
+++ b/features/cv04.fea
@@ -0,0 +1,13 @@
+# Name: lowercase I with horizontal left line at the top
+
+sub i by i.cv04;
+sub idotless by idotless.cv04;
+sub iacute by iacute.cv04;
+sub ibreve by ibreve.cv04;
+sub icircumflex by icircumflex.cv04;
+sub idieresis by idieresis.cv04;
+sub idotaccent by idotaccent.cv04;
+sub igrave by igrave.cv04;
+sub imacron by imacron.cv04;
+sub iogonek by iogonek.cv04;
+sub itilde by itilde.cv04;
diff --git a/features/cv05.fea b/features/cv05.fea
new file mode 100644
index 0000000..5a606a7
--- /dev/null
+++ b/features/cv05.fea
@@ -0,0 +1,13 @@
+# Name: lowercase I with horizontal left line at the top and right line at the bottom
+
+sub i by i.cv05;
+sub idotless by idotless.cv05;
+sub iacute by iacute.cv05;
+sub ibreve by ibreve.cv05;
+sub icircumflex by icircumflex.cv05;
+sub idieresis by idieresis.cv05;
+sub idotaccent by idotaccent.cv05;
+sub igrave by igrave.cv05;
+sub imacron by imacron.cv05;
+sub iogonek by iogonek.cv05;
+sub itilde by itilde.cv05;
diff --git a/features/cv06.fea b/features/cv06.fea
new file mode 100644
index 0000000..ccfea4a
--- /dev/null
+++ b/features/cv06.fea
@@ -0,0 +1,13 @@
+# Name: lowercase I with horizontal left line at the top and curved right hook at the bottom
+
+sub i by i.cv06;
+sub idotless by idotless.cv06;
+sub iacute by iacute.cv06;
+sub ibreve by ibreve.cv06;
+sub icircumflex by icircumflex.cv06;
+sub idieresis by idieresis.cv06;
+sub idotaccent by idotaccent.cv06;
+sub igrave by igrave.cv06;
+sub imacron by imacron.cv06;
+sub iogonek by iogonek.cv06;
+sub itilde by itilde.cv06;
diff --git a/features/cv07.fea b/features/cv07.fea
new file mode 100644
index 0000000..a0b5cd0
--- /dev/null
+++ b/features/cv07.fea
@@ -0,0 +1,8 @@
+# Name: lowercase L without any horizontal decorations
+
+sub l by l.cv07;
+sub lacute by lacute.cv07;
+sub lcaron by lcaron.cv07;
+sub lcommaaccent by lcommaaccent.cv07;
+sub ldot by ldot.cv07;
+sub lslash by lslash.cv07;
diff --git a/features/cv08.fea b/features/cv08.fea
new file mode 100644
index 0000000..590aaac
--- /dev/null
+++ b/features/cv08.fea
@@ -0,0 +1,8 @@
+# Name: lowercase L with horizontal left line at the top
+
+sub l by l.cv08;
+sub lacute by lacute.cv08;
+sub lcaron by lcaron.cv08;
+sub lcommaaccent by lcommaaccent.cv08;
+sub ldot by ldot.cv08;
+sub lslash by lslash.cv08;
diff --git a/features/cv09.fea b/features/cv09.fea
new file mode 100644
index 0000000..c22f514
--- /dev/null
+++ b/features/cv09.fea
@@ -0,0 +1,8 @@
+# Name: lowercase L with horizontal left line at the top and right line at the bottom
+
+sub l by l.cv09;
+sub lacute by lacute.cv09;
+sub lcaron by lcaron.cv09;
+sub lcommaaccent by lcommaaccent.cv09;
+sub ldot by ldot.cv09;
+sub lslash by lslash.cv09;
diff --git a/features/cv10.fea b/features/cv10.fea
new file mode 100644
index 0000000..6ad26cb
--- /dev/null
+++ b/features/cv10.fea
@@ -0,0 +1,8 @@
+# Name: lowercase L with horizontal left line at the top and horizontal base
+
+sub l by l.cv10;
+sub lacute by lacute.cv10;
+sub lcaron by lcaron.cv10;
+sub lcommaaccent by lcommaaccent.cv10;
+sub ldot by ldot.cv10;
+sub lslash by lslash.cv10;
diff --git a/features/cv11.fea b/features/cv11.fea
new file mode 100644
index 0000000..0bff833
--- /dev/null
+++ b/features/cv11.fea
@@ -0,0 +1,4 @@
+# Name: zero without anything inside
+
+sub zero by zero.cv11;
+sub zero.tosf by zero.tosf.cv11;
diff --git a/features/cv12.fea b/features/cv12.fea
new file mode 100644
index 0000000..18021bd
--- /dev/null
+++ b/features/cv12.fea
@@ -0,0 +1,4 @@
+# Name: zero with a backslash inside
+
+sub zero by zero.cv12;
+sub zero.tosf by zero.tosf.cv12;
diff --git a/features/cv13.fea b/features/cv13.fea
new file mode 100644
index 0000000..f3be7cd
--- /dev/null
+++ b/features/cv13.fea
@@ -0,0 +1,4 @@
+# Name: zero with a vertical line inside
+
+sub zero by zero.cv13;
+sub zero.tosf by zero.tosf.cv13;
diff --git a/features/cv14.fea b/features/cv14.fea
new file mode 100644
index 0000000..35466d9
--- /dev/null
+++ b/features/cv14.fea
@@ -0,0 +1,8 @@
+# Name: 3 with straight lines for the top half
+
+sub three by three.cv14;
+sub three.tosf by three.tosf.cv14;
+sub threeinferior by threeinferior.cv14;
+sub three.dnom by three.dnom.cv14;
+sub three.numr by three.numr.cv14;
+sub threesuperior by threesuperior.cv14;
diff --git a/features/cv17.fea b/features/cv17.fea
new file mode 100644
index 0000000..81ce39c
--- /dev/null
+++ b/features/cv17.fea
@@ -0,0 +1,3 @@
+# Name: Top-aligned tilde
+
+sub asciitilde by asciitilde.cv17;
diff --git a/features/cv18.fea b/features/cv18.fea
new file mode 100644
index 0000000..d34f100
--- /dev/null
+++ b/features/cv18.fea
@@ -0,0 +1,5 @@
+# Name: percent sign with dots instead of hollow circles
+
+sub percent by percent.cv18;
+sub perthousand by perthousand.cv18;
+sub percent_percent.liga by percent_percent.liga.cv18;
diff --git a/features/cv25.fea b/features/cv25.fea
index 928a2e3..019aff7 100644
--- a/features/cv25.fea
+++ b/features/cv25.fea
@@ -3,6 +3,6 @@
lookup period_hyphen {
ignore sub period period' hyphen;
ignore sub period' hyphen hyphen;
- sub period.spacer hyphen' by period_hyphen.cv32;
+ sub period.spacer hyphen' by period_hyphen.cv25;
sub period' hyphen by period.spacer;
-} period_hyphen;
\ No newline at end of file
+} period_hyphen;
diff --git a/features/cv29.fea b/features/cv29.fea
new file mode 100644
index 0000000..65a92ff
--- /dev/null
+++ b/features/cv29.fea
@@ -0,0 +1,5 @@
+# Name: Rounded curly braces {}
+
+sub braceleft by braceleft.cv29;
+sub braceright by braceright.cv29;
+sub numbersign_braceleft.liga by numbersign_braceleft.liga.cv29;
diff --git a/features/cv30.fea b/features/cv30.fea
new file mode 100644
index 0000000..1e4cc7e
--- /dev/null
+++ b/features/cv30.fea
@@ -0,0 +1,18 @@
+# Name: longer pipe symbol
+
+sub bar by bar.cv30;
+sub bar_bar.liga by bar_bar.liga.cv30;
+sub bar_bar_bar.liga by bar_bar_bar.liga.cv30;
+sub bar_bar_equal_middle.seq by bar_bar_equal_middle.seq.cv30;
+sub bar_equal_middle.seq by bar_equal_middle.seq.cv30;
+sub bar_bar_equal_end.seq by bar_bar_equal_end.seq.cv30;
+sub bar_bar_equal_start.seq by bar_bar_equal_start.seq.cv30;
+sub bar_bar_hyphen_middle.seq by bar_bar_hyphen_middle.seq.cv30;
+sub bar_hyphen_middle.seq by bar_hyphen_middle.seq.cv30;
+sub bar_bar_hyphen_end.seq by bar_bar_hyphen_end.seq.cv30;
+sub bar_bar_hyphen_start.seq by bar_bar_hyphen_start.seq.cv30;
+sub bar_equal_end.seq by bar_equal_end.seq.cv30;
+sub bar_equal_start.seq by bar_equal_start.seq.cv30;
+sub bar_hyphen_end.seq by bar_hyphen_end.seq.cv30;
+sub bar_hyphen_start.seq by bar_hyphen_start.seq.cv30;
+sub bar_underscore_middle.seq by bar_underscore_middle.seq.cv30;
diff --git a/features/cv31.fea b/features/cv31.fea
new file mode 100644
index 0000000..29f935b
--- /dev/null
+++ b/features/cv31.fea
@@ -0,0 +1,4 @@
+# Name: Circular parentheses
+
+sub parenleft by parenleft.cv31;
+sub parenright by parenright.cv31;
diff --git a/features/cv32.fea b/features/cv32.fea
index d836480..0eeae43 100644
--- a/features/cv32.fea
+++ b/features/cv32.fea
@@ -3,6 +3,6 @@
lookup period_equal {
ignore sub period period' equal;
ignore sub period' equal equal;
- sub period.spacer equal' by period_equal.cv25;
+ sub period.spacer equal' by period_equal.cv32;
sub period' equal by period.spacer;
-} period_equal;
\ No newline at end of file
+} period_equal;
diff --git a/features/zero.fea b/features/zero.fea
new file mode 100644
index 0000000..f4dc336
--- /dev/null
+++ b/features/zero.fea
@@ -0,0 +1,4 @@
+# Name: Zero with a dot inside
+
+sub zero by zero.zero;
+sub zero.tosf by zero.tosf.zero;
diff --git a/script/bake_in_features.sh b/script/bake_in_features.sh
new file mode 100755
index 0000000..8e76ac8
--- /dev/null
+++ b/script/bake_in_features.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+set -o errexit -o nounset -o pipefail
+cd "$(dirname "$0")/.."
+
+glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
+
+code_blocks=()
+
+for feat in "$@"; do
+
+ file="features/${feat}.fea"
+ if [ ! -f "${file}" ]; then
+ echo "Error: No file for feature ${feat} found!" >&2
+ exit 1
+ fi
+
+ # don't grab the "lookup" surroundings or comments or whitespace lines
+ code="$(grep -v '^[[:space:]]*lookup\|^[[:space:]]*}\|^[[:space:]]*#\|^[[:space:]]*$' "${file}")" \
+ || { echo "Error: No code for feature ${feat} found!" >&2; exit 1; }
+
+ code_blocks+=("$(tr '\n' ' ' <<< "${code}")")
+done
+
+# code block is one line above name declaration
+linenum=$(sed -n "/name = calt;/=" "${glyphs_file}")
+linenum=$((linenum - 1))
+# replace end of line (";) with code on specified line number
+sed -i -e "${linenum}s@\";\$@\n${code_blocks[*]}\";@" "${glyphs_file}"
diff --git a/script/build.sh b/script/build.sh
index 8116b7d..61904be 100755
--- a/script/build.sh
+++ b/script/build.sh
@@ -1,8 +1,100 @@
#!/bin/bash
-set -o errexit -o nounset -o pipefail
-cd "`dirname $0`"
+set -o errexit -o pipefail
+cd "$(dirname "$0")"
-./build_ttf.sh
+features=()
+weights=()
+gen_glyphs_file_only=0
+use_features_for_family_name=0
+export FIRACODE_FAMILY_NAME="Fira Code"
+
+########### Parsing inputs ########### {{{
+check_required_args()
+{
+ if [ -z "$2" ] || [ "${2:0:1}" = "-" ]; then
+ echo "Error: Missing argument for '$1'" >&2
+ return 1
+ fi
+ return 0
+}
+while [ $# -gt 0 ]; do
+ # split parameters like '-f="1,2,3"' into '-f "1,2,3"'
+ [[ "$1" == -*=* ]] && set -- "${1%%=*}" "${1#*=}" "${@:2}"
+ case "$1" in
+ -f | --features)
+ check_required_args "$1" "$2" || exit 1
+ # turn comma separated list into sorted array
+ IFS=',' read -r -a features <<< "$(echo "$2" | tr ',' '\n' | sort -u | tr '\n' ',')"
+ shift 2 # remove two params (flag + arg)
+ ;;
+ -w | --weights)
+ check_required_args "$1" "$2" || exit 1
+ IFS=',' read -r -a weights <<< "$2"
+ shift 2 # remove two params (flag + arg)
+ ;;
+ -n | --family-name)
+ check_required_args "$1" "$2" || exit 1
+ if [ "$2" = "features" ]; then
+ use_features_for_family_name=1
+ else
+ FIRACODE_FAMILY_NAME=$2
+ fi
+ shift 2 # remove two params (flag + arg)
+ ;;
+ -g | --generate-glyphs-only)
+ gen_glyphs_file_only=1
+ shift 1
+ ;;
+ -*) # unsupported flags
+ echo "Error: Unsupported flag '$1'" >&2
+ exit 1
+ ;;
+ *) # positional parameters
+ echo "Error: No use case for positional paramter '$1'" >&2
+ exit 1
+ ;;
+ esac
+done
+########### ############## ########### }}}
+
+# Create a temporary file that can be manipulated without messing with the original
+FIRACODE_GLYPHS_FILE=$(mktemp --suffix=".glyphs")
+export FIRACODE_GLYPHS_FILE
+cp ../FiraCode.glyphs "${FIRACODE_GLYPHS_FILE}"
+
+feat_string=""
+if [ -n "${features[*]}" ]; then
+ echo "Creating font with these features: ${features[*]}"
+ ./bake_in_features.sh "${features[@]}"
+
+ feat_string=" ${features[*]}"
+fi
+
+if [ "${use_features_for_family_name}" -ne 0 ]; then
+ FIRACODE_FAMILY_NAME=${FIRACODE_FAMILY_NAME}${feat_string}
+fi
+
+if [ "${FIRACODE_FAMILY_NAME}" != "Fira Code" ]; then
+ tmp_glyphs=$(mktemp --suffix=".glyphs")
+ echo "Creating font with family name: ${FIRACODE_FAMILY_NAME}"
+
+ awk '/familyName = "Fira Code";/ {$0=nc}1' nc="familyName = \"${FIRACODE_FAMILY_NAME}\";" \
+ "${FIRACODE_GLYPHS_FILE}" > "${tmp_glyphs}"
+
+ mv "${tmp_glyphs}" "${FIRACODE_GLYPHS_FILE}"
+fi
+
+cp "${FIRACODE_GLYPHS_FILE}" "../${FIRACODE_FAMILY_NAME}.glyphs"
+echo "Generated glyphs file: ${FIRACODE_FAMILY_NAME}.glyphs"
+
+if [ "${gen_glyphs_file_only}" -ne 0 ]; then
+ echo "Custom .glyphs file created. Exiting here!"
+ exit 0
+fi
+
+./build_ttf.sh "${weights[@]}"
./build_variable.sh
./build_woff2.sh
-./build_woff.sh
\ No newline at end of file
+./build_woff.sh
+
+rm -f "${FIRACODE_GLYPHS_FILE}"
diff --git a/script/build_ttf.sh b/script/build_ttf.sh
index 022a233..e9af987 100755
--- a/script/build_ttf.sh
+++ b/script/build_ttf.sh
@@ -1,25 +1,34 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
-cd "`dirname $0`/.."
+cd "$(dirname "$0")/.."
[ -d venv ] && source venv/bin/activate
-mkdir -p distr/ttf
-rm -rf distr/ttf/*
+
+family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
+glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
+
+dir="distr/ttf/${family_name}"
+
+mkdir -p "${dir}"
+rm -rf "${dir:?}/"*
args=( "$@" )
default_weights=( "Light" "Regular" "Retina" "Medium" "SemiBold" "Bold" )
weights=( "${args[@]:-"${default_weights[@]}"}" )
for weight in "${weights[@]}"; do
- file=distr/ttf/FiraCode-${weight}.ttf
-
- echo "Making " ${file}
- rm -rf ${file}
- fontmake -g FiraCode.glyphs -o ttf --output-dir distr/ttf -i "Fira Code ${weight}"
+ file="${dir}/FiraCode-${weight}.ttf"
- echo "Fixing DSIG in " ${file}
- gftools fix-dsig --autofix ${file}
+ echo "=============="
+ echo
+ echo " [i] Creating ${file}"
+ echo
- echo "TTFautohint " ${file}
- ttfautohint --no-info --ignore-restrictions ${file} ${file}.hinted
- mv ${file}.hinted ${file}
+ fontmake -g "${glyphs_file}" -o ttf --output-path "${file}" -i ".* ${weight}"
+
+ echo " [i] Fixing DSIG in ${file}"
+ gftools fix-dsig --autofix "${file}"
+
+ echo " [i] TTFautohint ${file}"
+ ttfautohint --no-info --ignore-restrictions "${file}" "${file}.hinted"
+ mv "${file}.hinted" "${file}"
done
diff --git a/script/build_variable.sh b/script/build_variable.sh
index 0915b76..a2389ad 100755
--- a/script/build_variable.sh
+++ b/script/build_variable.sh
@@ -1,34 +1,45 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
-cd "`dirname $0`/.."
+cd "$(dirname "$0")/.."
[ -d venv ] && source venv/bin/activate
-mkdir -p distr/variable_ttf
-rm -rf distr/variable_ttf/*
-FILE=FiraCode-VF.ttf
+family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
+glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
-awk '/name = Retina;/ { print; print "exports = 0;"; next }1' FiraCode.glyphs > FiraCode_VF.glyphs
-fontmake -g FiraCode_VF.glyphs -o variable --output-dir distr/variable_ttf
-rm FiraCode_VF.glyphs
+dir="distr/variable_ttf/${family_name}"
+file="${dir}/FiraCode-VF.ttf"
-pushd distr/variable_ttf
+echo "=============="
+echo
+echo " [i] Creating variable font file!"
+echo
+
+mkdir -p "${dir}"
+rm -rf "${dir:?}/"*
+
+# make a temporary file here to avoid parallel runs from stepping on each other's toes
+vf_glyphs=$(mktemp --suffix=".glyphs")
+
+awk '/name = Retina;/ { print; print "exports = 0;"; next }1' \
+ "${glyphs_file}" > "${vf_glyphs}"
+
+fontmake -g "${vf_glyphs}" -o variable --output-path "${file}"
+rm -f "${vf_glyphs}"
# fix variable font metadata – very important
-gftools fix-vf-meta $FILE
-mv $FILE.fix $FILE
+gftools fix-vf-meta "${file}"
+mv "${file}.fix" "${file}"
# other fixes for metadata and hinting
-gftools fix-nonhinting $FILE $FILE.fix
-mv $FILE.fix $FILE
+gftools fix-nonhinting "${file}" "${file}.fix"
+mv "${file}.fix" "${file}"
-gftools fix-gasp --autofix $FILE
-mv $FILE.fix $FILE
+gftools fix-gasp --autofix "${file}"
+mv "${file}.fix" "${file}"
-gftools fix-dsig --autofix $FILE
+gftools fix-dsig --autofix "${file}"
# cleanup of temp files
-rm -rf *-gasp.ttf
+rm -rf "${dir}/"*-gasp.ttf
# TODO (late 2019?): use TTFautohint-VF for variable font (current support is minimal)
-
-popd
\ No newline at end of file
diff --git a/script/build_woff.sh b/script/build_woff.sh
index 3ec4b09..7537efa 100755
--- a/script/build_woff.sh
+++ b/script/build_woff.sh
@@ -1,18 +1,27 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
-cd "`dirname $0`/.."
+cd "$(dirname "$0")/.."
[ -d venv ] && source venv/bin/activate
-mkdir -p distr/woff
-rm -rf distr/woff/*
+
+family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
+
+ttf_dir="distr/ttf/${family_name}"
+woff_dir="distr/woff/${family_name}"
+
+echo "=============="
+echo
+echo " [i] Creating .woff files!"
+echo
+
+mkdir -p "${woff_dir}"
+rm -rf "${woff_dir:?}/"*
# requires sfnt2woff-zopfli (get from https://github.com/bramstein/homebrew-webfonttools)
-ttfs=$(ls distr/*/*.ttf)
-for ttf in $ttfs; do
- echo "sfnt2woff-zopfli $ttf"
- sfnt2woff-zopfli $ttf
+for ttf in "${ttf_dir}/"*.ttf; do
+ echo "sfnt2woff-zopfli ${ttf}"
+ sfnt2woff-zopfli "${ttf}"
done
-mkdir -p distr/woff
-mv distr/*/*.woff distr/woff
-rm distr/woff/FiraCode-Retina.woff
+mv "${ttf_dir}/"*.woff "${woff_dir}"
+rm -f "${woff_dir}/FiraCode-Retina.woff"
diff --git a/script/build_woff2.sh b/script/build_woff2.sh
index 1625503..de259fc 100755
--- a/script/build_woff2.sh
+++ b/script/build_woff2.sh
@@ -1,17 +1,27 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
-cd "`dirname $0`/.."
+cd "$(dirname "$0")/.."
[ -d venv ] && source venv/bin/activate
-mkdir -p distr/woff2
-rm -rf distr/woff2/*
+
+family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
+
+ttf_dir="distr/ttf/${family_name}"
+woff_dir="distr/woff2/${family_name}"
+
+echo "=============="
+echo
+echo " [i] Creating .woff2 files!"
+echo
+
+mkdir -p "${woff_dir}"
+rm -rf "${woff_dir:?}/"*
# requires woff2_compress (get from https://github.com/bramstein/homebrew-webfonttools)
-ttfs=$(ls distr/*/*.ttf)
-for ttf in $ttfs; do
- woff2_compress $ttf
+for ttf in "${ttf_dir}/"*.ttf; do
+ echo "woff2_compress ${ttf}"
+ woff2_compress "${ttf}"
done
-mkdir -p distr/woff2
-mv distr/*/*.woff2 distr/woff2
-rm -f distr/woff2/FiraCode-Retina.woff2
+mv "${ttf_dir}/"*.woff2 "${woff_dir}"
+rm -f "${woff_dir}/FiraCode-Retina.woff2"