#! /bin/sh

# Page.sh
#
# Quick and dirty website generator.
#
# Reads a text file from standard input,
# converts it to multi-page web site,
# and writes one page of it, with links to the other pages,
# to standard output.
#
# Each group of consecutive non-blank lines in the input is
# considered a page.  The first line in each page should contain
# the URL (which should not contain spaces) followed by a space,
# followed by the page title (which may contain spaces).
#
# The remaining lines are the contents of that page.
#
# The contents of the selected page are written to standard
# output, with each input line appearing between <P> and </P>
# tags in the output.  The output will also contain a HEAD
# and at the bottom, a UL element with links to the other pages.
#
# Input processing stops at the first 2 consecutive blank lines, or
# end-of-input, whichever comes first.
#
# To update the whole site, use something like:
# for i in *.html; do cat MySite.txt | Page.sh $i > $i; done
# (from within the html/ directory)
# (any new URLs would have to be 'touch'ed first).
#
# For example of a site generated by this script, see
#    http://julianbr.sdf.org
#
# SDF version
# September 15, 2012
# For latest version, see gopher://sdf.org/1/users/julianbr
# or
# http://gopher.floodgap.com/gopher/gw.lite?gopher://sdf.org/1/users/julianbr
#

if [ -z "$1" ] || [ -n "$2" ]; then
	echo >&2 Usage: ${0##*/} \(page Url\)
	echo -e >&2 \\tReads document from standard input
	echo -e >&2 \\tWrite specified page with links to the others
	exit 0
	fi

UrlTitle=
FoundUrl=no
EndOfInput=no
if ! read Line; then
	EndOfInput=
	fi
while [ -n "$EndOfInput" ] && [ -n "$Line" ]; do
	# A new page
	# First line in page is Url Title
	Url=${Line%% *}
	if [ "$1" = "$Url" ]; then
		FoundUrl=
		echo -e \<HTML\>
		echo -e \\t\<HEAD\>
		echo -e \\t\\t\<STYLE\>\<\!\-\-
		echo -e \\t\\t\\tBODY \{
		echo -e \\t\\t\\t\\tbackground-color: rgb\(90%,90%,95%\)\;
		echo -e \\t\\t\\t\\tborder: lightblue solid 15px\;
		echo -e \\t\\t\\t\\tmargin: 0\;
		echo -e \\t\\t\\t\\tpadding-top: 1%\;
		echo -e \\t\\t\\t\\tpadding-left: 1%\;
		echo -e \\t\\t\\t\\tpadding-right: 5%\;
		echo -e \\t\\t\\t\\tpadding-bottom: 10%\;
		echo -e \\t\\t\\t\\t\}
		echo -e \\t\\t\\tIMG \{
		echo -e \\t\\t\\t\\tmargin: 1px\;
		echo -e \\t\\t\\t\\t\}
		echo -e \\t\\t\\t\-\-\>\</STYLE\>
		echo -e \\t\\t\<TITLE\>${Line#* }\</TITLE\>
		echo -e \\t\\t\</HEAD\>
		echo -e \\t\<BODY\>
	else
		if [ -z "$UrlTitle" ]; then
			UrlTitle=$Line
		else
			UrlTitle=$UrlTitle\|$Line
			fi
		fi
	if ! read Line; then
		EndOfInput=
		fi
	while [ -n "$EndOfInput" ] && [ -n "$Line" ]; do
		if [ "$1" = "$Url" ]; then
			echo -e \\t\\t\<P\>$Line\</P\>
			fi
		if ! read Line; then
			EndOfInput=
			fi
		done
	if [ -n "$EndOfInput" ] && ! read Line; then
		EndOfInput=
		fi
	done
if [ -z "$FoundUrl" ]; then
	echo -e \\t\\t\<UL\>
	echo $UrlTitle | tr \| \\n | while read Line; do
		echo -e \\t\\t\\t\<LI\>\<A HREF=\"${Line%% *}\"\>${Line#* }\</A\>\</LI\>
		done
	echo -e \\t\\t\\t\</UL\>
	echo -e \\t\\t\</BODY\>
	echo -e \\t\</HTML\>
else
	echo >&2 \*\*\*${0##*/}: Url \"$1\" not found.
	fi