You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
64 lines
2.1 KiB
#!/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" |
|
|
|
}
|
|
|