Added footnotes support!
[project-aon.git] / scripts / gbtoxhtml.pl
1 #!/usr/bin/perl -w
2 #
3 # gbtoxhtml.pl
4 #
5 # Creates XHTML gamebook from XML source.
6 #
7 # $Id$
8 #
9 # $Log$
10 # Revision 1.1  2005/04/26 04:47:33  jonathan.blake
11 # Initial revision
12 #
13 # Revision 1.8  2003/07/14 17:20:09  jblake
14 # Modified for Xalan 2.5.1, added support for AONPATH
15 # environment variable, commented out RXP validation.
16 #
17 # Revision 1.7  2002/11/10 07:52:15  jblake
18 # Added more books.
19 #
20 # Revision 1.6  2002/11/10 03:57:50  jblake
21 # Added some missing semicolons.
22 #
23 # Revision 1.5  2002/11/07 18:43:14  jblake
24 # Added books (02fotw, 13tplor, and 15tdc) and added an illustrator to the list.
25 #
26 # Revision 1.4  2002/10/23 18:58:34  jblake
27 # Added Flight from the Dark to the valid book list, and made
28 # a change to the working directory in order to work with
29 # Xalan-J 2.4.0.
30 #
31 # Revision 1.3  2002/10/20 05:47:50  jblake
32 # Added Highway Holocaust to the book list.
33 #
34 # Revision 1.2  2002/10/18 15:42:25  jblake
35 # Added Grey Star the Wizard to the book list.
36 #
37 # Revision 1.1  2002/10/18 15:38:41  jblake
38 # Initial revision
39 #
40 #####
41
42 use strict;
43
44 ##
45
46 my $PROGRAM_NAME    = "gbtoxhtml";
47 my $PATH_PREFIX     = "$ENV{'AONPATH'}/data";
48 my $XML_PATH        = "xml";
49 my $BOOK_PATH       = "xhtml";
50 my $WEBSITE_PATH    = "website";
51
52 ##
53
54 my $CREATE_CSS = "$ENV{'HOME'}/aon/bin/create-css.pl";
55 my $RXP        = "$ENV{'HOME'}/aon/bin/rxp";
56 my $CP         = "/bin/cp";
57 my $MV         = "/bin/mv";
58 my $TAR        = "/bin/tar";
59 my $ZIP        = "/usr/bin/zip";
60 my $BZIP2      = "/usr/bin/bzip2";
61 my $JAVA       = "/usr/lib/java/jre/bin/java";
62 my $RM         = "/bin/rm";
63 my $CHMOD      = "/bin/chmod";
64
65 ##
66
67 my $XML_SOURCE               = "";
68 my $TEXT_COLOR               = "";
69 my $LINK_COLOR               = "";
70 my $HLINK_BACK_COLOR         = "";
71 my $HLINK_LIGHT_BORDER_COLOR = "";
72 my $HLINK_DARK_BORDER_COLOR  = "";
73 my $USE_ILLUSTRATORS         = "";
74
75 ##
76
77 unless( $#ARGV == 0 ) { die "Usage:\n\t${PROGRAM_NAME} bookCode\n"; }
78 my( $bookCode ) = @ARGV;
79
80 if( $bookCode eq "01fftd" ) {
81     $XML_SOURCE        = "01fftd.xml";
82     $BOOK_PATH         .= "/lw/01fftd";
83     $TEXT_COLOR        = "#003300";
84     $LINK_COLOR        = "#006633";
85     $HLINK_BACK_COLOR  = "#cce0c1";
86     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
87 }
88 elsif( $bookCode eq "02fotw" ) {
89     $XML_SOURCE        = "02fotw.xml";
90     $BOOK_PATH         .= "/lw/02fotw";
91     $TEXT_COLOR        = "#003333";
92     $LINK_COLOR        = "#009999";
93     $HLINK_BACK_COLOR  = "#ccebd5";
94     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
95 }
96 elsif( $bookCode eq "03tcok" ) {
97     $XML_SOURCE        = "03tcok.xml";
98     $BOOK_PATH         .= "/lw/03tcok";
99     $TEXT_COLOR        = "#003366";
100     $LINK_COLOR        = "#0099cc";
101     $HLINK_BACK_COLOR  = "#ccebdf";
102     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
103 }
104 elsif( $bookCode eq "04tcod" ) {
105     $XML_SOURCE        = "04tcod.xml";
106     $BOOK_PATH         .= "/lw/04tcod";
107     $TEXT_COLOR        = "#000033";
108     $LINK_COLOR        = "#000099";
109     $HLINK_BACK_COLOR  = "#ccccd5";
110     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
111 }
112 elsif( $bookCode eq "05sots" ) {
113     $XML_SOURCE        = "05sots.xml";
114     $BOOK_PATH         .= "/lw/05sots";
115     $TEXT_COLOR        = "#330000";
116     $LINK_COLOR        = "#cc9900";
117     $HLINK_BACK_COLOR  = "#f5ebb6";
118     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
119 }
120 elsif( $bookCode eq "06tkot" ) {
121     $XML_SOURCE        = "06tkot.xml";
122     $BOOK_PATH         .= "/lw/06tkot";
123     $TEXT_COLOR        = "#404000";
124     $LINK_COLOR        = "#999900";
125     $HLINK_BACK_COLOR  = "#ebebb6";
126     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
127 }
128 elsif( $bookCode eq "07cd" ) {
129     $XML_SOURCE        = "07cd.xml";
130     $BOOK_PATH         .= "/lw/07cd";
131     $TEXT_COLOR        = "#003300";
132     $LINK_COLOR        = "#00cc66";
133     $HLINK_BACK_COLOR  = "#ccf5cb";
134     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
135 }
136 elsif( $bookCode eq "08tjoh" ) {
137     $XML_SOURCE        = "08tjoh.xml";
138     $BOOK_PATH         .= "/lw/08tjoh";
139     $TEXT_COLOR        = "#334033";
140     $LINK_COLOR        = "#669966";
141     $HLINK_BACK_COLOR  = "#e0ebcb";
142     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
143 }
144 elsif( $bookCode eq "09tcof" ) {
145     $XML_SOURCE        = "09tcof.xml";
146     $BOOK_PATH         .= "/lw/09tcof";
147     $TEXT_COLOR        = "#330000";
148     $LINK_COLOR        = "#ff9900";
149     $HLINK_BACK_COLOR  = "#ffebb6";
150     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
151 }
152 elsif( $bookCode eq "10tdot" ) {
153     $XML_SOURCE        = "10tdot.xml";
154     $BOOK_PATH         .= "/lw/10tdot";
155     $TEXT_COLOR        = "#330000";
156     $LINK_COLOR        = "#ff0000";
157     $HLINK_BACK_COLOR  = "#ffccb6";
158     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
159 }
160 elsif( $bookCode eq "11tpot" ) {
161     $XML_SOURCE        = "11tpot.xml";
162     $BOOK_PATH         .= "/lw/11tpot";
163     $TEXT_COLOR        = "#333300";
164     $LINK_COLOR        = "#808066";
165     $HLINK_BACK_COLOR  = "#e6e6cb";
166     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
167 }
168 elsif( $bookCode eq "12tmod" ) {
169     $XML_SOURCE        = "12tmod.xml";
170     $BOOK_PATH         .= "/lw/12tmod";
171     $TEXT_COLOR        = "#330000";
172     $LINK_COLOR        = "#990000";
173     $HLINK_BACK_COLOR  = "#ebccb6";
174     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
175 }
176 elsif( $bookCode eq "13tplor" ) {
177     $XML_SOURCE        = "13tplor.xml";
178     $BOOK_PATH         .= "/lw/13tplor";
179     $TEXT_COLOR        = "#333300";
180     $LINK_COLOR        = "#666633";
181     $HLINK_BACK_COLOR  = "#e0e0c1";
182     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
183 }
184 elsif( $bookCode eq "14tcok" ) {
185     $XML_SOURCE        = "14tcok.xml";
186     $BOOK_PATH         .= "/lw/14tcok";
187     $TEXT_COLOR        = "#000033";
188     $LINK_COLOR        = "#660099";
189     $HLINK_BACK_COLOR  = "#e0ccd5";
190     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
191 }
192 elsif( $bookCode eq "15tdc" ) {
193     $XML_SOURCE               = "15tdc.xml";
194     $BOOK_PATH                .= "/lw/15tdc";
195     $TEXT_COLOR               = "#000033";
196     $LINK_COLOR               = "#6699cc";
197     $HLINK_BACK_COLOR         = "#e0ebdf";
198     $USE_ILLUSTRATORS         = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
199 }
200 elsif( $bookCode eq "16tlov" ) {
201     $XML_SOURCE               = "16tlov.xml";
202     $BOOK_PATH                .= "/lw/16tlov";
203     $TEXT_COLOR               = "#000033";
204     $LINK_COLOR               = "#0033cc";
205     $HLINK_BACK_COLOR         = "#d9e1e0";
206     $USE_ILLUSTRATORS         = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
207 }
208 elsif( $bookCode eq "17tdoi" ) {
209     $XML_SOURCE               = "17tdoi.xml";
210     $BOOK_PATH                .= "/lw/17tdoi";
211     $TEXT_COLOR               = "#003366";
212     $LINK_COLOR               = "#6699ff";
213     $HLINK_BACK_COLOR         = "#e0eaea";
214     $USE_ILLUSTRATORS         = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
215 }
216 elsif( $bookCode eq "01gstw" ) {
217     $XML_SOURCE        = "01gstw.xml";
218     $BOOK_PATH         .= "/gs/01gstw";
219     $TEXT_COLOR        = "#330066";
220     $LINK_COLOR        = "#9900ff";
221     $HLINK_BACK_COLOR  = "#ebcce9";
222     $USE_ILLUSTRATORS  = ":Christopher Lundgren:JC Alvarez & Jonathan Blake:Jonathan Blake:";
223 }
224 elsif( $bookCode eq "02tfc" ) {
225     $XML_SOURCE               = "02tfc.xml";
226     $BOOK_PATH                .= "/gs/02tfc";
227     $TEXT_COLOR               = "#333300";
228     $LINK_COLOR               = "#999966";
229     $HLINK_BACK_COLOR         = "#ebebcb";
230     $USE_ILLUSTRATORS         = ":Christopher Lundgren:JC Alvarez & Jonathan Blake:Jonathan Blake:";
231 }
232 elsif( $bookCode eq "03btng" ) {
233     $XML_SOURCE        = "03btng.xml";
234     $BOOK_PATH         .= "/gs/03btng";
235     $TEXT_COLOR        = "#003333";
236     $LINK_COLOR        = "#669999";
237     $HLINK_BACK_COLOR  = "#e0ebd5";
238     $USE_ILLUSTRATORS  = ":Christopher Lundgren:JC Alvarez & Jonathan Blake:Jonathan Blake:";
239 }
240 elsif( $bookCode eq "04wotw" ) {
241     $XML_SOURCE        = "04wotw.xml";
242     $BOOK_PATH         .= "/gs/04wotw";
243     $TEXT_COLOR        = "#000033";
244     $LINK_COLOR        = "#9999cc";
245     $HLINK_BACK_COLOR  = "#ebebdf";
246     $USE_ILLUSTRATORS  = ":Christopher Lundgren:JC Alvarez & Jonathan Blake:Jonathan Blake:";
247 }
248 elsif( $bookCode eq "01hh" ) {
249     $XML_SOURCE        = "01hh.xml";
250     $BOOK_PATH         .= "/fw/01hh";
251     $TEXT_COLOR        = "#330066";
252     $LINK_COLOR        = "#9900ff";
253 #    $SCROLL_BASE_COLOR = "#330066";
254     $USE_ILLUSTRATORS  = ":Jonathan Blake:";
255 }
256 elsif( $bookCode eq "rh" ) {
257     $XML_SOURCE        = "rh.xml";
258     $BOOK_PATH         .= "/misc/rh";
259     $TEXT_COLOR        = "#400000";
260     $LINK_COLOR        = "#339933";
261     $HLINK_BACK_COLOR  = "#e1f0ca";
262     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
263 }
264 elsif( $bookCode eq "mhahn" ) {
265     $XML_SOURCE        = "mhahn.xml";
266     $BOOK_PATH         .= "/misc/mhahn";
267     $TEXT_COLOR        = "#400000";
268     $LINK_COLOR        = "#339933";
269     $HLINK_BACK_COLOR  = "#e1f0ca";
270     $USE_ILLUSTRATORS  = ":Michael Hahn:";
271 }
272 elsif( $bookCode eq "jcalvarez" ) {
273     $XML_SOURCE        = "jcalvarez.xml";
274     $BOOK_PATH         .= "/misc/jcalvarez";
275     $TEXT_COLOR        = "#400000";
276     $LINK_COLOR        = "#339933";
277     $HLINK_BACK_COLOR  = "#e1f0ca";
278     $USE_ILLUSTRATORS  = ":JC Alvarez:";
279 }
280 elsif( $bookCode eq "statskeeper" ) { }
281 elsif( $bookCode eq "base" ) { }
282 else{ die "Error:\n\tUnknown book code ($bookCode).\n"; }
283
284 if( $bookCode eq "statskeeper" ) {
285   chdir( "$PATH_PREFIX" ) or die( "Cannot open Project Aon data directory \"$PATH_PREFIX\": $!" );
286   chdir( "$WEBSITE_PATH/main" ) or die( "Error: unable to change to statskeeper directory ($!)\n" );
287   print qx{$RM statskeeper.zip statskeeper.tar.bz2 statskeeper.tar};
288   my $statskeeperFiles = "statskeeper/index.htm statskeeper/lw/*htm statskeeper/lw/*/* statskeeper/gs/*htm statskeeper/gs/*/*";
289   print qx{$ZIP -8 -q statskeeper.zip $statskeeperFiles};
290   print qx{$TAR cf statskeeper.tar $statskeeperFiles};
291   print qx{$BZIP2 -9 *tar};
292 }
293 elsif( $bookCode eq "base" ) {
294   chdir( "$PATH_PREFIX" ) or die( "Cannot open Project Aon data directory \"$PATH_PREFIX\": $!" );
295   chdir( "$WEBSITE_PATH/athome" ) or die( "Unable to change directory to \"$WEBSITE_PATH/athome\": $!\n" );
296   print qx{$RM base.zip base.tar.bz2 base.tar};
297   print qx{$ZIP -8 -q base.zip *ico *htm images/* style/*};
298   print qx{$TAR cf base.tar *ico *htm images/* style/*};
299   print qx{$BZIP2 -9 *tar};
300 }
301 else {
302   print "Reminder:\n\tDid you comment out the LaTeX special character\n\tdeclarations in the book's XML file?\n";
303
304   chdir( "$PATH_PREFIX" ) or die( "Cannot open Project Aon data directory \"$PATH_PREFIX\": $!" );
305   system( "$RXP", "-Vs", "$XML_PATH/$XML_SOURCE" ) == 0 or die( "XML validation failed\n" );
306   unless( -d "$BOOK_PATH" ) { mkdir $BOOK_PATH or die( "Unable to create directory \"$PATH_PREFIX/$BOOK_PATH\": $!\n" ); }
307   print qx{$RM $BOOK_PATH/*};
308   print qx{$JAVA org.apache.xalan.xslt.Process -IN $XML_PATH/$XML_SOURCE -XSL $XML_PATH/xhtml.xsl -OUT \"$BOOK_PATH/foo.xml\" -PARAM book-path \"$BOOK_PATH\" -PARAM text-color \"$TEXT_COLOR\" -PARAM link-color \"$LINK_COLOR\" -PARAM use-illustrators \"$USE_ILLUSTRATORS\"};
309   print qx{$RM $BOOK_PATH/foo.xml};
310   print qx{$CREATE_CSS $BOOK_PATH \"$TEXT_COLOR\" \"\#ffffe6\" \"$LINK_COLOR\" \"$LINK_COLOR\" \"$HLINK_BACK_COLOR\" \"$LINK_COLOR\"};
311
312   print qx{$CP images/$BOOK_PATH/*gif images/$BOOK_PATH/*jpg $BOOK_PATH};
313   print qx{$CHMOD 600 $BOOK_PATH/*};
314   print qx{$TAR cf $bookCode.tar $BOOK_PATH/*};
315   print qx{$ZIP -8 -q $bookCode.zip $BOOK_PATH/*};
316   print qx{$BZIP2 -9 $bookCode.tar};
317   print qx{$CHMOD 600 $bookCode.tar.bz2 $bookCode.zip};
318
319   print qx{$MV $bookCode* $PATH_PREFIX/$BOOK_PATH/};
320 }