Commit | Line | Data |
---|---|---|
3a0ce704 TG |
1 | #!/bin/bash |
2 | ||
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 | ||
8 | ## Description | |
9 | ||
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. | |
14 | ||
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 | ||
20 | # The script processes all the templates in the working directory and the | |
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 | ||
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 | |
30 | ||
31 | # Includes: footer.html | |
32 | # head.html (contains 2 alternate sets of keywords) | |
33 | # javascript.html | |
34 | # translist.html | |
35 | ||
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. | |
41 | ||
42 | # And if anything goes wrong, you can do a git reset, right? ;-) | |
43 | ||
44 | # =========================================================================== | |
45 | ||
46 | set -e | |
47 | set -o pipefail | |
48 | ||
49 | function close_term () { | |
50 | printf '\n%s' '*** Close the terminal window or press Return.'; read OK | |
51 | test -z "$OK" && exit $1 | |
52 | } | |
53 | ||
54 | # Create temporary files. | |
55 | names=$(mktemp -t aap.XXXXXX) || close_or_exit 1 | |
56 | list=$(mktemp -t aap.XXXXXX) || close_or_exit 1 | |
57 | before=$(mktemp -t aap.XXXXXX) || close_or_exit 1 | |
58 | after=$(mktemp -t aap.XXXXXX) || close_or_exit 1 | |
59 | trap 'rm -f "$names" "$list" "$before" "$after"' EXIT | |
60 | ||
61 | # List all the templates in the working directory. | |
62 | if ls *.t.html > $names 2>/dev/null; then | |
63 | sed -i 's,\.t\.html$,,' $names | |
64 | else | |
65 | echo "*** There is no template in this directory." && close_term 1 | |
66 | fi | |
67 | ||
68 | ## Add the includes to the templates. | |
69 | ||
70 | while read name; do | |
71 | # Make sure there is a blank line before the first include, otherwise | |
72 | # it will not be added properly. | |
73 | sed '1i\\n' $name.t.html > ../$name.html | |
74 | # List the includes. | |
75 | grep '^<!-- include virtual="' ../$name.html | | |
76 | sed 's%^.*include virtual="\([^"]\+\).*$%\1%' > $list | |
77 | # Add the includes. | |
78 | while read include; do | |
79 | sed "1,/^<!-- include virtual=\"$include\"/!d" ../$name.html > $before | |
80 | sed "1,/^<!-- include virtual=\"$include\"/d" ../$name.html > $after | |
81 | if [ -f "$include" ]; then | |
82 | cat $before $include $after > ../$name.html | |
83 | else | |
84 | echo "$include is missing." && exit 1 | |
85 | fi | |
86 | sed -i "/^<!-- include virtual=\"$include\"/d" ../$name.html | |
87 | done < $list | |
88 | done < $names | |
89 | ||
90 | ## Create mac.html and windows.html from index.html. | |
91 | ||
92 | cp ../index.html ../mac.html | |
93 | cp ../index.html ../windows.html | |
94 | # add them to the list of page names. | |
95 | echo 'mac' >> $names | |
96 | echo 'windows' >> $names | |
97 | ||
98 | ## Remove the irrelevant parts. | |
99 | ||
100 | while 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 | |
106 | # Delete. | |
107 | while read deletion; do | |
108 | sed -i "/^<!-- START DELETION $deletion/, \ | |
109 | /^<!-- END DELETION $deletion/d" ../$name.html | |
110 | done < $list | |
111 | # Remove the markers and any extra blank lines at the end of the page. | |
112 | sed -i '/^<!-- [A-Z]* DELETION/d' ../$name.html | |
113 | sed -i ':a /^\n*$/ {$d; N; ba}' ../$name.html | |
114 | done < $names | |
115 | ||
116 | close_term 0 |