1#!/usr/bin/env bash 2# Nerd Fonts Version: 2.1.0 3# Script Version: 1.1.0 4# Iterates over all patched fonts directories 5# converts all non markdown readmes to markdown (e.g., txt, rst) using pandoc 6# adds information on additional-variations and complete font variations 7 8infofilename="font-info.md" 9unpatched_parent_dir="src/unpatched-fonts" 10patched_parent_dir="patched-fonts" 11LINE_PREFIX="# [Nerd Fonts] " 12 13cd ../../src/unpatched-fonts/ || { 14 echo >&2 "$LINE_PREFIX Could not find source fonts directory" 15 exit 1 16} 17 18 19function appendRfnInfo { 20 local config_rfn=$1; shift 21 local config_rfn_substitue=$1; shift 22 local working_dir=$1; shift 23 local to=$1; shift 24 if [ "$config_rfn" ] && [ "$config_rfn_substitue" ] 25 then 26 # add to the file 27 { 28 printf "\\n## Why \`%s\` and not \`%s\`?\\n" "$config_rfn_substitue" "$config_rfn" 29 cat "$working_dir/../../src/readme-rfn-addendum.md" 30 } >> "$to" 31 fi 32} 33 34function clearDestination { 35 local to_dir=$1; shift 36 local to=$1; shift 37 [[ -d "$to_dir" ]] || mkdir -p "$to_dir" 38 # clear output file (needed for multiple runs or updates): 39 true > "$to" 2> /dev/null 40} 41 42if [ $# -eq 1 ]; then 43 like_pattern="./$1" 44 # allows one to limit to specific font. 45 # e.g. with ProFont, DejaVuSansMon, Hasklig, Hack, Gohu, FiraCode, Hermit, etc. 46 echo "$LINE_PREFIX Parameter given, limiting find command of directories to pattern '$like_pattern' given" 47else 48 like_pattern="." 49 echo "$LINE_PREFIX No parameter pattern given, generating standardized readmes for all fonts in all font directories" 50fi 51 52find "$like_pattern" -type d | 53while read -r filename 54do 55 56 if [[ "$filename" == "." ]]; 57 then 58 echo "$LINE_PREFIX Skipping directory '.'" 59 continue 60 fi 61 62 dirname=$(dirname "$filename") 63 searchdir=$filename 64 base_directory=$(echo "$filename" | cut -d "/" -f2) 65 66 # limit looking for the readme files in the parent dir not the child dirs: 67 if [[ $dirname != "." ]]; 68 then 69 searchdir=$dirname 70 else 71 # source the font config file if exists: 72 if [ -f "$searchdir/config.cfg" ] 73 then 74 # shellcheck source=/dev/null 75 source "$searchdir/config.cfg" 76 else 77 # reset the variables 78 unset config_rfn 79 unset config_rfn_substitue 80 fi 81 fi 82 83 mapfile -t RST < <(find "$searchdir" -type f -iname 'readme.rst') 84 mapfile -t TXT < <(find "$searchdir" -type f -iname 'readme.txt') 85 mapfile -t MD < <(find "$searchdir" -type f -iname 'readme.md') 86 outputdir=$PWD/../../patched-fonts/$filename/ 87 88 echo "$LINE_PREFIX Generating readme for: $filename" 89 90 [[ -d "$outputdir" ]] || mkdir -p "$outputdir" 91 92 93 if [ "${RST[0]}" ]; 94 then 95 for i in "${RST[@]}" 96 do 97 echo "$LINE_PREFIX Found RST" 98 99 from="$PWD/$i" 100 to_dir="${PWD/$unpatched_parent_dir/$patched_parent_dir}/$filename" 101 to="${to_dir}/$infofilename" 102 103 clearDestination "$to_dir" "$to" 104 105 pandoc "$from" --from=rst --to=markdown --output="$to" 106 107 appendRfnInfo "$config_rfn" "$config_rfn_substitue" "$PWD" "$to" 108 cat "$PWD/../../src/readme-per-directory-addendum.md" >> "$to" 109 done 110 elif [ "${TXT[0]}" ]; 111 then 112 for i in "${TXT[@]}" 113 do 114 echo "$LINE_PREFIX Found TXT" 115 116 from="$PWD/$i" 117 to_dir="${PWD/$unpatched_parent_dir/$patched_parent_dir}/$filename" 118 to="${to_dir}/$infofilename" 119 120 clearDestination "$to_dir" "$to" 121 122 cp "$from" "$to" 123 124 appendRfnInfo "$config_rfn" "$config_rfn_substitue" "$PWD" "$to" 125 cat "$PWD/../../src/readme-per-directory-addendum.md" >> "$to" 126 done 127 elif [ "${MD[0]}" ]; 128 then 129 for i in "${MD[@]}" 130 do 131 echo "$LINE_PREFIX Found MD" 132 133 from="$PWD/$i" 134 to_dir="${PWD/$unpatched_parent_dir/$patched_parent_dir}/$filename" 135 to="${to_dir}/$infofilename" 136 137 clearDestination "$to_dir" "$to" 138 139 cp "$from" "$to" 140 141 appendRfnInfo "$config_rfn" "$config_rfn_substitue" "$PWD" "$to" 142 cat "$PWD/../../src/readme-per-directory-addendum.md" >> "$to" 143 done 144 else 145 echo "$LINE_PREFIX Did not find any readme files (RST,TXT,MD) generating just title of Font" 146 147 to_dir="${PWD/$unpatched_parent_dir/$patched_parent_dir}/$filename" 148 to="${to_dir}/$infofilename" 149 150 clearDestination "$to_dir" "$to" 151 152 { 153 printf "# %s\\n\\n" "$base_directory" 154 } >> "$to" 155 156 appendRfnInfo "$config_rfn" "$config_rfn_substitue" "$PWD" "$to" 157 cat "$PWD/../../src/readme-per-directory-addendum.md" >> "$to" 158 fi 159 160done 161