#!/bin/bash
-# "assemble-all-pages" inserts the constant parts into all HTML templates
-# in the working directory and creates the OS-specific pages by removing
-# the irrelevant text from a common file which contains the OS-variable
-# parts.
+## assemble-all-pages -- generate a set of HTML pages with variable parts
+# for emailselfdefense.fsf.org
-# The page is NAME.html and the template is NAME.t.html. The template has
-# inclusion markers (similar to SSI directives, except for the lack of "#")
-# to indicate where the constant parts are to be inserted, and deletion
-# markers to identify the borders of each deletion and indicate which
-# page(s) the text between them belongs to.
+## Synopsis: assemble-all-pages
-# All the ingredients are is in [...]/enc/[lang]/kitchen/:
+## Description
-# Script: assemble-all-pages
+# Each page is built from a template and one or several includes, as usual;
+# in addition, several versions of a page can be built from a single
+# template which contains all the variable parts, by deleting irrelevant
+# text.
+
+# The templates have inclusion markers (similar to SSI directives, except
+# for the lack of "#") to indicate where the constant parts are to be
+# inserted, and deletion markers to identify the borders of each deletion
+# and indicate which page(s) the text between those borders belongs to.
+
+# The script processes all the templates in the working directory and the
+# pages are created in the parent directory.
+
+# Ideally, any modifications should be done to the templates or includes,
+# not to the final pages.
# Templates: confirmation.t.html
# index.t.html (contains variable parts for mac and windows)
# next_steps.t.html
# Includes: footer.html
-# head.html
+# head.html (contains 2 alternate sets of keywords)
# javascript.html
# translist.html
-# To regenerate the pages in [...]/enc/[lang]/:
-# - in the terminal, cd to [...]/enc/[lang]/kitchen/ and enter:
-# $ ./assemble-all-pages
-# - alternatively, display the directory [...]/kitchen/ in the file browser
-# (not the parent directory) and double-click on the script.
+## Graphic-user-interface howto
+
+# - Place the script in the same directory as the templates.
+# - Display this directory in the file browser (do not just unfold the parent
+# directory) and double-click on the script.
# And if anything goes wrong, you can do a git reset, right? ;-)
-# ==========================================================================
+# ===========================================================================
set -e
+set -o pipefail
+
+function close_term () {
+ printf '\n%s' '*** Close the terminal window or press Return.'; read OK
+ test -z "$OK" && exit $1
+}
# Create temporary files.
-names=$(mktemp -t aap.XXXXXX) || exit 1
-list=$(mktemp -t aap.XXXXXX) || exit 1
-before=$(mktemp -t aap.XXXXXX) || exit 1
-after=$(mktemp -t aap.XXXXXX) || exit 1
+names=$(mktemp -t aap.XXXXXX) || close_term 1
+list=$(mktemp -t aap.XXXXXX) || close_term 1
+before=$(mktemp -t aap.XXXXXX) || close_term 1
+after=$(mktemp -t aap.XXXXXX) || close_term 1
trap 'rm -f "$names" "$list" "$before" "$after"' EXIT
# List all the templates in the working directory.
if ls *.t.html > $names 2>/dev/null; then
sed -i 's,\.t\.html$,,' $names
else
- echo "There is no template in this directory." && exit 1
+ echo "*** There is no template in this directory." && close_term 1
fi
-# Add the includes to the templates.
+## Add the includes to the templates.
+
while read name; do
-# echo $name
# Make sure there is a blank line before the first include, otherwise
# it will not be added properly.
- cp $name.t.html ../$name.html && sed -i '1i\\n' ../$name.html
-
+ sed '1i\\n' $name.t.html > ../$name.html
# List the includes.
grep '^<!-- include virtual="' ../$name.html |
sed 's%^.*include virtual="\([^"]\+\).*$%\1%' > $list
-
# Add the includes.
while read include; do
sed "1,/^<!-- include virtual=\"$include\"/!d" ../$name.html > $before
if [ -f "$include" ]; then
cat $before $include $after > ../$name.html
else
- echo "$include is missing." && exit 1
+ echo "$include is missing." && close_term 1
fi
sed -i "/^<!-- include virtual=\"$include\"/d" ../$name.html
done < $list
done < $names
-# Create mac.html and windows.html from index.html.
+## Create mac.html and windows.html from index.html.
+
cp ../index.html ../mac.html
cp ../index.html ../windows.html
# add them to the list of page names.
echo 'mac' >> $names
echo 'windows' >> $names
-# Remove the irrelevant parts.
+## Remove the irrelevant parts.
+
while read name ; do
# Find out which deletions apply.
grep '^<!-- START DELETION' ../$name.html \
sed -i "/^<!-- START DELETION $deletion/, \
/^<!-- END DELETION $deletion/d" ../$name.html
done < $list
+ # Remove the markers and any extra blank lines at the end of the page.
sed -i '/^<!-- [A-Z]* DELETION/d' ../$name.html
- # Delete any extra blank lines at the end of the page.
sed -i ':a /^\n*$/ {$d; N; ba}' ../$name.html
done < $names
-exit 0
+close_term 0