nerd-fonts/bin/scripts/generate-font-image-previews.sh
Fini Jastrow 148c288d30 fonts.json: Add pathname of reference font file for each font
[why]
For testing we might want to execute one command (e.g. font-patcher run)
once for each source font. We need to decide which of the font files is
a good choice.

[how]
Best would maybe to use the font that is used for the image previews.

We add that information for each font into the 'database'. Then we can
for example do stuff like:

while IFS= read -d $'\n' -r f; do
  ls -l ../../src/unpatched-fonts/"${f}"
done < <(jq -r '.fonts | .[] | ."imagePreviewFontSource"' lib/fonts.json)

This is already utilized for the helper tools that are hid in the
generate-font-image-previews.sh script.

Note that DaddyTimeMono and NerdFontSymbolsOnly has "--ext ttf" set in the
config, so the information provided for that fonts is wrong.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2024-01-15 18:31:06 +01:00

90 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Nerd Fonts Version: 3.1.1
# Script Version: 1.2.3
# Create font previews.
# All fonts need to be installed (or no preview is generated)
# Files should end up in the gh-pages branch
set -e
ver=$(inkscape --version)
echo "Check generator version: $ver"
output_dir="../../assets/img/previews/"
template_svg="lib/template-font-preview.svg"
template2_svg="lib/template-font-preview2.svg"
main() {
mkdir -p "$output_dir"
for i in $(jq '.fonts | keys | .[]' lib/fonts.json); do
patchedName=$(jq -r ".fonts[$i].patchedName" lib/fonts.json);
imagePreviewFont=$(jq -r ".fonts[$i].imagePreviewFont" lib/fonts.json);
if [ "$imagePreviewFont" != "$patchedName Nerd Font" ] && [ "$imagePreviewFont" != "$patchedName NF" ]; then
echo "[mismatch] (Fam vs name) $imagePreviewFont <=> $patchedName"
fi
if [ -z "$imagePreviewFont" ]; then
echo "[Skipping] $patchedName"
continue
fi
if fc-list -q "${imagePreviewFont}:charset=41" ; then
generate_preview "$imagePreviewFont" "$patchedName Nerd Font"
elif fc-list -q "${imagePreviewFont}" ; then
generate_preview_symbols "$imagePreviewFont" "$patchedName Nerd Font"
else
echo "[Missing] $imagePreviewFont"
fi
done
}
generate_preview() {
font=$1
fontText=$2
echo "[Generating] $font"
sed -e "s/000000/ffffff/" -e "s/sans-serif/${font}/" -e "s/Font Name/${fontText}/" <"$template_svg" >"${output_dir}${font}.svg"
inkscape "${output_dir}${font}.svg" --actions="select-all; object-to-path; vacuum-defs; fit-canvas-to-selection; export-filename:${output_dir}${font}.svg; export-do"
# svgo "${output_dir}${font}.svg"
}
generate_preview_symbols() {
font=$1
fontText=$2
echo "[Gen. Symb.] $font"
sed -e "s/000000/ffffff/" -e "40,80s/sans-serif/${font}/" -e "s/Font Name/${fontText}/" <"$template2_svg" >"${output_dir}${font}.svg"
inkscape "${output_dir}${font}.svg" --actions="select-all; object-to-path; vacuum-defs; fit-canvas-to-selection; export-filename:${output_dir}${font}.svg; export-do"
# svgo "${output_dir}${font}.svg"
}
######
# For the two following helpers you need to enable THIS first:
#
# This is not 100% correct because the config.cfg is not evaluated
if false; then
cd ../../src/unpatched-fonts
image_font_files=( )
while IFS= read -d $'\n' -r f; do
dir=$(dirname "${f}")
# fontforge ~/git/nerd-fonts/font-patcher ~/git/nerd-fonts/src/unpatched-fonts/"${f}" -c --debug 3
dest=${dir}/$(fontforge ../../font-patcher --dry "${f}" --debug 2 2>/dev/null | grep 'DEBUG: =====> Filename' | sed "s/[^']*'//;s/'.*//")
echo "Found font filename: $dest"
image_font_files+=( "${dest}" )
done < <(jq -r '.fonts | .[] | ."imagePreviewFontSource"' ../../bin/scripts/lib/fonts.json)
cd -
fi
# Enable this to get a list of instruction to install all the needed fonts
#
# for f in "${image_font_files[@]}"; do
# echo "cp '../../patched-fonts/$f' ~/.local/share/fonts"
# done
# exit
# Enable this to get a list of Family names
#
# for f in "${image_font_files[@]}"; do
# fc-query "../../patched-fonts/$f" '-f %{family}\n' || true
# done
# exit
main "$@"; exit