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