Avery's BlogHome Posts Projects Sitemap License
#vim: set colorcolumn=81 ft=sh:hi ColorColumn ctermbg=224
txt2html() {
	# cut off the modeline and title
	tail -n +3 |

	# convert lines starting with `##` to comments
	sed 's|^\(##.*\)$|<span id=d>\1</span>|' |
	# convert <,> to HTML-compatible format
	sed 's|<|\<|g' |
	sed 's|>|\>|g' |
	# convert italics to html
	sed 's|\|<em>|g' |
	sed 's|}\*|</em>|g' |
	# convert codeblocks into css-ified codeblocks
	sed 's|``[`]{|<pre id=c>|' |
	sed 's|}[`]``|</pre>|' |
	# convert inline codeblocks into css-ified codeblocks
	sed 's|`[{]|<span id=c>|g' |
	sed 's|[}]`|</span>|g' |
	# See next comment. $/url -> /url.html
	sed 's|\([$]/\)\([^ \)]*\)[.]txt\([,.]\)|<a href=/\2.html>\1\2</a>\3|g' |
	sed 's|\([$]/\)\([^ \)<>]*\)[.]txt|<a href=/\2.html>\1\2</a>|g' |
	# convert `$/url` to html links relative to root domain
	#sed 's|\([$]/\)\([^ \)]*\)\([,.]\)|<a href=/\2>\1\2</a>\3|g' |
	sed 's!^\([$]/\)\([^ \)<>]*\)!<a href=/\2>\1\2</a>!g;s!\([^>]\)\([$]/\)\([^ \)<>]*\)!\1<a href=/\3>\2\3</a>!g' |
	# See next comment. %/url -> url.html
	sed 's|\(%/\)\([^ \)]*\)[.]txt\([,.]\)|<a href=\2.html>\1\2</a>\3|g' |
	sed 's|\(%/\)\([^ \)<>]*\)[.]txt|<a href=\2.html>\1\2</a>|g' |
	# convert `%/url` to html links relative to current directory
	sed 's!^\(%/\)\([^ \)<>]*\)!<a href=\2>\1\2</a>!g;s!\([^>]\)\(%/\)\([^ \)<>]*\)!\1<a href=\3>\2\3</a>!g' |
	# convert `#/url` to html links
	sed 's|\([#]/\)\([^ )]*\)\([,.)]\)|<a href=//\2>\1\2</a>\3|g' |
	sed 's|\([#]/\)\([^ )<>]*\)|<a href=//\2>\1\2</a>|g' |

	# convert `-[0-9]` into IDs
	sed 's|^\([ -]*\)\[\([0-9.][0-9.]*\)\]|\1<span id=\2>[\2]</span>|g' |
	# convert `[0-9]` into references to IDs
	sed 's|\([^\"#]\)\[\([0-9.][0-9.]*\)\]|\1[<a href=#\2>\2</a>]|g' |

	# set content
	sed '/%%CONTENT%%/r /dev/stdin' html_template |
	sed '/%%CONTENT%%/d' |
	# set title
	sed "s|#Site build script|${1:-Index}|"
}
{
	# process arguments if available, else all *.txt
	[ $# -eq 0 ] && find . -name '*.txt' | grep -ve 'robots.txt$' | tee /dev/stderr
	while [ ! $# -eq 0 ]; do
		case "$1" in
			sitemap*)
				shift
				break
				;;
		esac
		printf '%s\n' "$1"
		shift
	done
} | while read -r PAGE; do
	title=$(sed '2p;d' "$PAGE")
	printf 'txt2html %s\n' "$title"
	txt2html "$title" < "$PAGE" > "${PAGE%%.txt}.html"
	gzip -9kf "${PAGE%%.txt}.html"
done
printf 'txt2html Sitemap\n'
find . -name '*.html' | cut -d/ -f2- | grep -v ^sitemap.html\$ | while read -r PAGE; do
	printf '<a href=/%s>$/%s</a>\n' "$PAGE" "$(sed '2p;d' "${PAGE%%.html}.txt")"
done |
	sed '/%%CONTENT%%/r /dev/stdin' html_template |
	sed '/%%CONTENT%%/d' |
	sed 's|#Site build script|Sitemap|' > sitemap.html
		
Anything But Chrome 88x31<HTML> Learn it today!Piracy Now! 88x31powered by estrogen 88x31 spinning estrogen pillvi/vim 88x31made with MY OWN TWO PAWS 88x31uBlock Origin Now! 88x31Privacy Now! PGP 88x31TRANS RIGHTS NOW! 88x31Xenia Linux NOW! 88x31I need a nap Now! 88x31highly compressed bad apple 88x31Discord Messenger 88x31Choose Mozilla 88x31Monero Now! 88x31