#! /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