Pandoc would output warnings about a lack of title, although we are not using it in the template. Also, the tool would fail to do some git commands because it was checking the wrong folder
64 lines
2 KiB
Bash
64 lines
2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# This file is responsible for generating an html structure of documents
|
|
# All md files will be converted to html
|
|
# Everything else will be copied exactly
|
|
|
|
# The table of contents will be a nested ul structure
|
|
# The top level will be the tags, under each tag there will be a list of documents that are tagged with that tag
|
|
# This will result in doucuments being listed multiple times, once for each tag they are in
|
|
generate-html-toc(){
|
|
echo "<nav><ul>"
|
|
# Loop through each tag
|
|
listTags --noheader | while read item; do
|
|
local tag="$(echo "$item" | awk -F ' +' '{print $1}')"
|
|
local count="$(echo "$item" | awk -F ' +' '{print $2}')"
|
|
echo "<li>"
|
|
echo "$tag ($count)"
|
|
echo "<ul>"
|
|
echo "SELECT items.filename,items.title
|
|
FROM items LEFT JOIN links ON items.id = links.itemID
|
|
LEFT JOIN tags ON links.tagID = tags.id
|
|
WHERE tags.name = '$(safeSQL "$tag")'
|
|
GROUP BY items.id;" |
|
|
sqlite3 "${sqliteFile}" |
|
|
awk -F '|' '{sub(/\.md/,".html",$1);print "<li><a href=\"" $1 "\">" $2 "</a></li>"}'
|
|
echo "</ul>"
|
|
echo "</li>"
|
|
done
|
|
echo "</ul></nav>"
|
|
}
|
|
|
|
to-html(){
|
|
local destination="$1"
|
|
local preTemplate="/usr/local/share/kb/templates/main.html"
|
|
local tocFile="$(mktemp)"
|
|
local templateFile="$(mktemp)"
|
|
generate-html-toc > "$tocFile"
|
|
|
|
# If there is a template in the users .local/share directory, use that
|
|
[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html" ] &&
|
|
preTemplate="${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html"
|
|
|
|
# If there is a template in the data directory, use that
|
|
[ -e "${dataDir}templates/main.html" ] &&
|
|
preTemplate="${dataDir}templates/main.html"
|
|
|
|
|
|
sed "s#\#TOC\##\${ $tocFile() }#" "$preTemplate" > "$templateFile"
|
|
|
|
|
|
find "$dataDir" -name "*.md" | while read file; do
|
|
local newFile="${file##*/}"
|
|
newFile="${newFile/.md/.html}"
|
|
sed -E 's/\.md( *)\)/.html\1\)/' "$file" |
|
|
pandoc --quiet -f markdown -t html --template "$templateFile" > "$destination/$newFile"
|
|
done
|
|
|
|
rsync -a \
|
|
--exclude "*.md" --exclude "*.sqlite3" \
|
|
"$dataDir/" "$destination"
|
|
|
|
rm "$tocFile" "$templateFile"
|
|
|
|
}
|