summaryrefslogtreecommitdiff
path: root/bin/update_html
diff options
context:
space:
mode:
Diffstat (limited to 'bin/update_html')
-rwxr-xr-xbin/update_html117
1 files changed, 110 insertions, 7 deletions
diff --git a/bin/update_html b/bin/update_html
index 75f54b13e..ec82ec491 100755
--- a/bin/update_html
+++ b/bin/update_html
@@ -1,11 +1,114 @@
#!/bin/bash
-### This script finds all .t2t (txt2tags) files and updates the corresponding
-### .html file, if it is out-of-date.
+# Path to directory where this script is
+# https://stackoverflow.com/a/246128/98600
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
-find . -name '*.t2t' | while read t2t ; do
- html="${t2t%.t2t}.html"
- if [ "$t2t" -nt "$html" ] ; then
- txt2tags -thtml "$t2t"
+# Render txt2tags into html file
+# Arguments:
+# 1. txt2tags source file, e.g. download/index.t2t
+# 2. html target file, e.g. download/index.html
+function render_t2t_html {
+ t2t="$1"
+ html="$2"
+ tmp="$2.tmp"
+ relroot="$( dirname $t2t | sed -E 's/^.\///' | sed -E 's/[^/]+/../g' )"
+
+ # First render with txt2tags to handle pre/post processing
+ txt2tags \
+ --target=html \
+ --no-headers \
+ --quiet \
+ --outfile="$tmp" \
+ --infile="$t2t"
+
+ # Capture first 3 lines of t2t file: title, author, date
+ # Documentation here: https://txt2tags.org/userguide/headerarea
+ l1=$(head -n 1 "$t2t")
+ l2=$(tail -n+2 "$t2t" | head -n 1)
+ l3=$(tail -n+3 "$t2t" | head -n 1)
+ title=
+ author=
+ date=
+ if [ -n "$l1" ] ; then
+ title="$l1"
+ if [ -n "$l2" ] ; then author="$l2" ; fi
+ if [ -n "$l3" ] ; then date="$l3" ; fi
+ fi
+
+ # Run txt2tag's HTML through Pandoc for cleanup
+ pandoc \
+ --from=html \
+ --to=html5 \
+ --standalone \
+ --template="$DIR/_template.html" \
+ --variable="rel-root:$relroot" \
+ --metadata="title:$title" \
+ --metadata="author:$author" \
+ --metadata="date:$date" \
+ "$tmp" \
+ --output="$html"
+ rm -f "$tmp"
+
+ # Final post-processing
+ if [ -f "$html" ] ; then
+ sed -i.bak "s/<table/<table class=\"table\"/" "$html" && rm "$html.bak"
+ echo "$html"
fi
-done \ No newline at end of file
+}
+
+# Render markdown into html file
+# Arguments:
+# 1. markdown source file, e.g. download/index.md
+# 2. html target filen, e.g. download/index.html
+function render_md_html {
+ md="$1"
+ html="$2"
+ relroot="$( dirname $md | sed -E 's/^.\///' | sed -E 's/[^/]+/../g' )"
+
+ pandoc \
+ --from=markdown \
+ --to=html5 \
+ --standalone \
+ --template="$DIR/_template.html" \
+ --variable="rel-root:$relroot" \
+ "$md" \
+ --output="$html"
+
+ # Final post-processing
+ if [ -f "$html" ] ; then
+ sed -i.bak "s/<table/<table class=\"table\"/" "$html" && rm "$html.bak"
+ echo "$html"
+ fi
+}
+
+if [ $# -gt 0 ] ; then
+ # Render specific file(s) from args, ignoring dates
+ for file in "$@" ; do
+ ext="${file##*.}"
+ html="${file%.$ext}.html"
+ case $ext in
+ "md")
+ render_md_html "$file" "$html"
+ ;;
+ "t2t")
+ render_t2t_html "$file" "$html"
+ ;;
+ esac
+ done
+else
+ # Render all files found in cwd and deeper if source is newer
+ find . -name '*.t2t' | while read file ; do
+ html="${file%.t2t}.html"
+ if [ "$file" -nt "$html" ] ; then
+ render_t2t_html "$file" "$html"
+ fi
+ done
+ find . -name '*.md' | while read file ; do
+ if [[ "$file" == *"README.md" ]] ; then continue ; fi
+ html="${file%.md}.html"
+ if [ "$file" -nt "$html" ] ; then
+ render_md_html "$file" "$html"
+ fi
+ done
+fi