#!/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 ".git" --exclude "*.sqlite3" \ "$dataDir/" "$destination" rm "$tocFile" "$templateFile" }