fr: fix a few bugs.
[enc.git] / fr / kitchen / assemble-all-pages
CommitLineData
d2a7098b
TG
1#!/bin/bash
2
4f8bf1ae
TG
3## assemble-all-pages -- generate a set of HTML pages with variable parts
4# for emailselfdefense.fsf.org
5
6## Synopsis: assemble-all-pages
7
a3e0c947 8## Description
d2a7098b 9
d39837fa
TG
10# Each page is built from a template and one or several includes, as usual;
11# in addition, several versions of a page can be built from a single
12# template which contains all the variable parts, by deleting irrelevant
13# text.
d2a7098b 14
d39837fa
TG
15# The templates have inclusion markers (similar to SSI directives, except
16# for the lack of "#") to indicate where the constant parts are to be
17# inserted, and deletion markers to identify the borders of each deletion
18# and indicate which page(s) the text between those borders belongs to.
19
4f8bf1ae 20# The script processes all the templates in the working directory and the
d39837fa
TG
21# pages are created in the parent directory.
22
23# Ideally, any modifications should be done to the templates or includes,
24# not to the final pages.
25
435d2dec
TG
26# Templates: confirmation.t.html
27# index.t.html (contains variable parts for mac and windows)
28# infographic.t.html
29# next_steps.t.html
48c3acb0 30
435d2dec 31# Includes: footer.html
d9a721e6 32# head.html (contains 2 alternate sets of keywords)
435d2dec
TG
33# javascript.html
34# translist.html
48c3acb0 35
4f8bf1ae
TG
36## Graphic-user-interface howto
37
38# - Place the script in the same directory as the templates.
39# - Display this directory in the file browser (do not just unfold the parent
40# directory) and double-click on the script.
48c3acb0
TG
41
42# And if anything goes wrong, you can do a git reset, right? ;-)
43
4f8bf1ae 44# ===========================================================================
d2a7098b
TG
45
46set -e
a3e0c947 47set -o pipefail
d2a7098b 48
a3e0c947 49function close_term () {
4f8bf1ae
TG
50 printf '\n%s' '*** Close the terminal window or press Return.'; read OK
51 test -z "$OK" && exit $1
52}
53
d2a7098b 54# Create temporary files.
a3e0c947
TG
55names=$(mktemp -t aap.XXXXXX) || close_term 1
56list=$(mktemp -t aap.XXXXXX) || close_term 1
57before=$(mktemp -t aap.XXXXXX) || close_term 1
58after=$(mktemp -t aap.XXXXXX) || close_term 1
f965450c 59trap 'rm -f "$names" "$list" "$before" "$after"' EXIT
d2a7098b
TG
60
61# List all the templates in the working directory.
f965450c
TG
62if ls *.t.html > $names 2>/dev/null; then
63 sed -i 's,\.t\.html$,,' $names
64else
4f8bf1ae 65 echo "*** There is no template in this directory." && close_term 1
d2a7098b
TG
66fi
67
d9a721e6
TG
68## Add the includes to the templates.
69
f965450c 70while read name; do
d2a7098b
TG
71 # Make sure there is a blank line before the first include, otherwise
72 # it will not be added properly.
d9a721e6 73 sed '1i\\n' $name.t.html > ../$name.html
d2a7098b 74 # List the includes.
f965450c 75 grep '^<!-- include virtual="' ../$name.html |
48c3acb0 76 sed 's%^.*include virtual="\([^"]\+\).*$%\1%' > $list
48c3acb0 77 # Add the includes.
d2a7098b 78 while read include; do
f965450c
TG
79 sed "1,/^<!-- include virtual=\"$include\"/!d" ../$name.html > $before
80 sed "1,/^<!-- include virtual=\"$include\"/d" ../$name.html > $after
d2a7098b 81 if [ -f "$include" ]; then
f965450c 82 cat $before $include $after > ../$name.html
d2a7098b 83 else
a3e0c947 84 echo "$include is missing." && close_term 1
d2a7098b 85 fi
f965450c 86 sed -i "/^<!-- include virtual=\"$include\"/d" ../$name.html
48c3acb0 87 done < $list
f965450c
TG
88done < $names
89
d9a721e6
TG
90## Create mac.html and windows.html from index.html.
91
f965450c
TG
92cp ../index.html ../mac.html
93cp ../index.html ../windows.html
94# add them to the list of page names.
95echo 'mac' >> $names
96echo 'windows' >> $names
97
d9a721e6
TG
98## Remove the irrelevant parts.
99
f965450c
TG
100while read name ; do
101 # Find out which deletions apply.
102 grep '^<!-- START DELETION' ../$name.html \
103 | grep -v "$name" \
104 | sed 's%^<!-- START DELETION \([0-9][0-9]\),.*$%\1%' > $list
105 echo $name
a3e0c947 106 # Delete.
f965450c
TG
107 while read deletion; do
108 sed -i "/^<!-- START DELETION $deletion/, \
109 /^<!-- END DELETION $deletion/d" ../$name.html
110 done < $list
a3e0c947 111 # Remove the markers and any extra blank lines at the end of the page.
f965450c 112 sed -i '/^<!-- [A-Z]* DELETION/d' ../$name.html
f965450c
TG
113 sed -i ':a /^\n*$/ {$d; N; ba}' ../$name.html
114done < $names
d2a7098b 115
4f8bf1ae 116close_term 0