2018-07-09 16:20:40 +02:00
#!/usr/bin/env bash
2023-11-26 19:49:56 +02:00
# Nerd Fonts Version: 3.1.1
2023-07-26 14:10:28 +02:00
# Script Version: 1.1.4
2016-10-29 22:45:55 +02:00
# Iterates over all patched fonts directories
# converts all non markdown readmes to markdown (e.g., txt, rst) using pandoc
# adds information on additional-variations and complete font variations
2023-04-25 17:56:56 +02:00
infofilename = "README.md"
2017-05-14 00:02:53 +02:00
LINE_PREFIX = "# [Nerd Fonts] "
2023-06-01 11:01:40 +02:00
sd = " $( cd -- " $( dirname " $0 " ) " >/dev/null 2>& 1 || exit ; pwd -P ) "
2023-04-30 13:36:19 +02:00
fonts_info = " ${ sd } /lib/fonts.json "
unpatched_parent_dir = " ${ sd } /../../src/unpatched-fonts "
patched_parent_dir = " ${ sd } /../../patched-fonts "
2016-10-29 22:45:55 +02:00
2023-04-30 13:36:19 +02:00
cd " $sd /../../src/unpatched-fonts/ " || {
2017-05-14 00:02:53 +02:00
echo >& 2 " $LINE_PREFIX Could not find source fonts directory "
2016-10-29 22:45:55 +02:00
exit 1
}
2017-07-29 19:43:23 +02:00
2023-07-26 14:10:28 +02:00
function appendGeneralInfo {
local dest = $1 ; shift
local fontname = $1 ; shift
local has_repo = $1 ; shift
if [ -n " ${ has_repo } " ]
then
downloadfrom = "Or download the development version from the folders here"
else
2023-07-26 15:55:15 +02:00
downloadfrom = " Direct links for [ ${ fontname } .zip](https://github.com/ryanoasis/nerd-fonts/releases/latest/download/ ${ fontname } .zip) or [ ${ fontname } .tar.xz](https://github.com/ryanoasis/nerd-fonts/releases/latest/download/ ${ fontname } .tar.xz) "
2023-07-26 14:10:28 +02:00
fi
sed -e " s|%DOWNLOADFROM%| ${ downloadfrom } | " " ${ sd } /../../src/readme-per-directory-addendum.md " >> " ${ dest } "
}
2017-07-29 19:43:23 +02:00
function appendRfnInfo {
local config_rfn = $1 ; shift
local config_rfn_substitue = $1 ; shift
local working_dir = $1 ; shift
local to = $1 ; shift
if [ " $config_rfn " ] && [ " $config_rfn_substitue " ]
then
# add to the file
{
2018-01-13 05:20:52 +02:00
printf "\\n## Why \`%s\` and not \`%s\`?\\n" " $config_rfn_substitue " " $config_rfn "
2017-07-29 19:43:23 +02:00
cat " $working_dir /../../src/readme-rfn-addendum.md "
} >> " $to "
fi
}
function clearDestination {
local to_dir = $1 ; shift
local to = $1 ; shift
[ [ -d " $to_dir " ] ] || mkdir -p " $to_dir "
# clear output file (needed for multiple runs or updates):
2018-01-13 05:20:52 +02:00
true > " $to " 2> /dev/null
2017-07-29 19:43:23 +02:00
}
2023-04-28 12:00:45 +02:00
if [ $# -ge 1 ] ; then
2019-08-17 21:21:36 +02:00
like_pattern = " ./ $1 "
# allows one to limit to specific font.
# e.g. with ProFont, DejaVuSansMon, Hasklig, Hack, Gohu, FiraCode, Hermit, etc.
echo " $LINE_PREFIX Parameter given, limiting find command of directories to pattern ' $like_pattern ' given "
else
like_pattern = "."
echo " $LINE_PREFIX No parameter pattern given, generating standardized readmes for all fonts in all font directories "
fi
2023-04-28 12:00:45 +02:00
if [ $# -ge 2 ] ; then
2023-04-30 13:36:19 +02:00
echo " $LINE_PREFIX Using destination ' $2 ' "
patched_parent_dir = " ${ sd } /../../ $2 "
2023-04-28 12:00:45 +02:00
fi
2019-08-17 21:21:36 +02:00
find " $like_pattern " -type d |
2016-10-29 22:45:55 +02:00
while read -r filename
do
2017-07-29 18:04:55 +02:00
if [ [ " $filename " = = "." ] ] ;
then
echo " $LINE_PREFIX Skipping directory '.' "
continue
fi
2017-07-23 17:28:10 +02:00
base_directory = $( echo " $filename " | cut -d "/" -f2)
2023-04-27 20:58:54 +02:00
searchdir = $base_directory
2016-10-29 22:45:55 +02:00
2023-04-27 08:04:24 +02:00
# limit looking for the readme files in the parent dir not the child dirs:
2023-06-01 11:01:40 +02:00
if [ " $dirname " != "." ] && [ -n " $dirname " ] ;
2023-04-27 08:04:24 +02:00
then
searchdir = $dirname
2017-07-23 17:28:10 +02:00
else
2023-04-25 10:31:43 +02:00
# reset the variables
unset config_rfn
unset config_rfn_substitue
2023-06-01 11:01:40 +02:00
fontdata = $( jq " .fonts[] | select(.folderName == \" ${ base_directory } \") " " ${ fonts_info } " )
if [ " $( echo " $fontdata " | jq .RFN) " = "true" ]
2017-07-23 17:28:10 +02:00
then
2023-06-01 11:01:40 +02:00
config_rfn = $( echo " $fontdata " | jq -r .unpatchedName)
config_rfn_substitue = $( echo " $fontdata " | jq -r .patchedName)
2023-07-15 15:47:20 +02:00
check_config_rfn = $( tr '[:upper:]' '[:lower:]' <<< " $config_rfn " | tr -d ' ' )
check_config_rfn_sub = $( tr '[:upper:]' '[:lower:]' <<< " $config_rfn_substitue " | tr -d ' ' )
if [ " ${ check_config_rfn } " = " ${ check_config_rfn_sub } " ]
2023-04-25 11:51:26 +02:00
then
2023-07-15 15:47:20 +02:00
# Only the case with Mononoki and Envy Code R which is RFN but we do not rename (we got the permission to keep the name)
2023-04-25 11:51:26 +02:00
unset config_rfn
unset config_rfn_substitue
fi
2017-07-23 17:28:10 +02:00
fi
2023-07-26 14:10:28 +02:00
unset release_to_repo
# This defaults to true if no info is given:
if [ " $( echo " $fontdata " | jq .repoRelease) " != "false" ]
then
release_to_repo = TRUE
fi
2023-04-27 08:04:24 +02:00
fi
2016-10-29 22:45:55 +02:00
2023-04-27 08:04:24 +02:00
mapfile -t RST < <( find " $searchdir " -type f -iname 'readme.rst' )
mapfile -t TXT < <( find " $searchdir " -type f -iname 'readme.txt' )
mapfile -t MD < <( find " $searchdir " -type f -iname 'readme.md' )
2023-04-30 13:36:19 +02:00
outputdir = $patched_parent_dir /$filename /
2016-10-29 22:45:55 +02:00
2023-04-27 08:04:24 +02:00
echo " $LINE_PREFIX Generating readme for: $filename "
2016-10-29 22:45:55 +02:00
2023-04-27 08:04:24 +02:00
[ [ -d " $outputdir " ] ] || mkdir -p " $outputdir "
2016-10-29 22:45:55 +02:00
2023-07-26 13:15:23 +02:00
to_dir = " ${ patched_parent_dir } / $filename "
to = " ${ to_dir } / $infofilename "
2016-10-29 22:45:55 +02:00
2023-04-27 08:04:24 +02:00
if [ " ${ RST [0] } " ] ;
then
for i in " ${ RST [@] } "
do
echo " $LINE_PREFIX Found RST "
2023-04-30 20:51:05 +02:00
from = " $unpatched_parent_dir / $i "
2017-07-29 19:43:23 +02:00
clearDestination " $to_dir " " $to "
2023-04-27 08:04:24 +02:00
pandoc " $from " --from= rst --to= markdown --output= " $to "
done
elif [ " ${ TXT [0] } " ] ;
then
for i in " ${ TXT [@] } "
do
echo " $LINE_PREFIX Found TXT "
2023-04-30 20:51:05 +02:00
from = " $unpatched_parent_dir / $i "
2017-07-29 19:43:23 +02:00
clearDestination " $to_dir " " $to "
2023-04-27 08:04:24 +02:00
cp " $from " " $to "
done
elif [ " ${ MD [0] } " ] ;
then
for i in " ${ MD [@] } "
do
echo " $LINE_PREFIX Found MD "
2023-04-30 20:51:05 +02:00
from = " $unpatched_parent_dir / $i "
2017-07-29 19:43:23 +02:00
clearDestination " $to_dir " " $to "
2023-04-27 08:04:24 +02:00
cp " $from " " $to "
done
else
2017-07-23 17:28:10 +02:00
echo " $LINE_PREFIX Did not find any readme files (RST,TXT,MD) generating just title of Font "
2017-07-29 19:43:23 +02:00
clearDestination " $to_dir " " $to "
2017-07-23 17:28:10 +02:00
{
2018-01-13 05:20:52 +02:00
printf "# %s\\n\\n" " $base_directory "
2017-07-23 17:28:10 +02:00
} >> " $to "
2023-04-27 08:04:24 +02:00
fi
2023-07-26 13:15:23 +02:00
appendRfnInfo " $config_rfn " " $config_rfn_substitue " " $sd " " $to "
2023-07-26 14:10:28 +02:00
appendGeneralInfo " $to " " $base_directory " " $release_to_repo "
2016-10-29 22:45:55 +02:00
done