1
0
forked from GitHub/gf-core
Files
gf-core/bin/update_html
John J. Camilleri 390a6a04a1 New update_html runx txt2tags followed by pandoc
TODO: handle txt2tags macros in date, e.g.
`%%mtime(%F)` in download/encoding-change.t2t
2018-11-04 21:17:20 +01:00

75 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Path to directory where this script is
# https://stackoverflow.com/a/246128/98600
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
# Render txt2tags into html file
# Arguments:
# 1. txt2tags source file, e.g. download/index.t2t
# 2. html target filen, e.g. download/index.html
function render_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
}
if [ $# -gt 0 ] ; then
# Render specific file(s) from args, ignoring dates
for t2t in "$@" ; do
html="${t2t%.t2t}.html"
render_html "$t2t" "$html"
done
else
# Render all files found in cwd, and below, if source is newer
find . -name '*.t2t' | while read t2t ; do
html="${t2t%.t2t}.html"
if [ "$t2t" -nt "$html" ] ; then
render_html "$t2t" "$html"
fi
done
fi