#!/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 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//
/" "$html" && rm "$html.bak" echo "$html" fi } # 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/
/
/" "$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