6 # Creates LaTeX gamebook from XML source. This should subsequently be
7 # used to create a PDF or PostScript version.
13 if ( ! defined($ENV{'AONPATH'}) && ! defined ($ENV{'AONDATA'}) ) {
14 print STDERR "AONPATH environment variable not set, it should be defined to\n";
15 print STDERR "the root directory of the repository of the AON files are.\n";
20 my $PROGRAM_NAME = "gbtolatex";
25 my $BOOK_PATH = $ENV{'AONPATH'}."/common/pdf/build";
27 my $USE_ILLUSTRATORS = "";
31 # my $XMLPROC = "xalan";
32 # my $XMLPROC = "/usr/local/bin/xmlto";
33 my $XMLPROC = "xsltproc";
34 # my $JAVA = "/cygdrive/c/WINDOWS/java.exe";
35 my $JAVA = "/usr/bin/java";
37 $EXTRAPARMS=$ENV{'XMLPARMS'} if defined($ENV{'XMLPARMS'});
40 unless( $ARGV[ 0 ] ) { die "Usage:\n\t${PROGRAM_NAME} book-code [LANGUAGE] [OUTPUTFILE]\n"; }
42 print "Reminder:\n\tDid you uncomment the LaTeX special character\n\tdeclarations in the book's XML file?\n";
44 my $bookCode = $ARGV[ 0 ];
45 my $language = $ARGV[ 1 ] || "en"; # Use a language or default to 'en'
48 if ( defined ($ENV{'AONDATA'} ) ) {
49 $DATADIR=$ENV{'AONDATA'} ;
51 $DATADIR= $ENV{'AONPATH'}."/".$language."/xml";
53 if ( ! -d "$DATADIR" ) {
54 print STDERR "Cannot find data directory $DATADIR !\n";
57 # Data dir, where XSL files reside
58 # Note: This has to be set to the XML file location and not the XSL location
59 # because of the .inc and the .mod files
60 #my $XSLDIR = $ENV{'AONPATH'}."/common/xsl";
61 my $XSLDIR = $DATADIR;
62 if ( ! -d "$XSLDIR" ) {
63 print STDERR "Cannot find XSL directory: $XSLDIR !\n";
68 # - convert the bookcode's if then else to a hash array
69 # - allow usage of unknown book codes
71 if( $bookCode eq "01fftd" ) {
72 $XML_SOURCE = "01fftd.xml";
73 $BOOK_PATH .= "/lw/01fftd";
74 $TITLE_COLOR = "0.0,0.4,0.2";
75 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
77 elsif( $bookCode eq "01hdlo" ) {
78 $XML_SOURCE = "01hdlo.xml";
79 $BOOK_PATH .= "/lw/01hdlo";
80 $TITLE_COLOR = "0.0,0.4,0.2";
81 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
83 elsif( $bookCode eq "02fotw" ) {
84 $XML_SOURCE = "02fotw.xml";
85 $BOOK_PATH .= "/lw/02fotw";
86 $TITLE_COLOR = "0.0,0.6,0.6";
87 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
89 elsif( $bookCode eq "02fsea" ) {
90 $XML_SOURCE = "02fsea.xml";
91 $BOOK_PATH .= "/lw/02fsea";
92 $TITLE_COLOR = "0.0,0.6,0.6";
93 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
95 elsif( $bookCode eq "03tcok" ) {
96 $XML_SOURCE = "03tcok.xml";
97 $BOOK_PATH .= "/lw/03tcok";
98 $TITLE_COLOR = "0.0,0.6,0.8";
99 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
101 elsif( $bookCode eq "03lcdk" ) {
102 $XML_SOURCE = "03lcdk.xml";
103 $BOOK_PATH .= "/lw/03lcdk";
104 $TITLE_COLOR = "0.0,0.6,0.8";
105 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
107 elsif( $bookCode eq "04tcod" ) {
108 $XML_SOURCE = "04tcod.xml";
109 $BOOK_PATH .= "/lw/04tcod";
110 $TITLE_COLOR = "0.0,0.0,0.6";
111 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
113 elsif( $bookCode eq "04eam" ) {
114 $XML_SOURCE = "04eam.xml";
115 $BOOK_PATH .= "/lw/04eam";
116 $TITLE_COLOR = "0.0,0.0,0.6";
117 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
119 elsif( $bookCode eq "05sots" ) {
120 $XML_SOURCE = "05sots.xml";
121 $BOOK_PATH .= "/lw/05sots";
122 $TITLE_COLOR = "0.8,0.6,0.0";
123 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
125 elsif( $bookCode eq "05eddls" ) {
126 $XML_SOURCE = "05eddls.xml";
127 $BOOK_PATH .= "/lw/05eddls";
128 $TITLE_COLOR = "0.8,0.6,0.0";
129 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
131 elsif( $bookCode eq "06tkot" ) {
132 $XML_SOURCE = "06tkot.xml";
133 $BOOK_PATH .= "/lw/06tkot";
134 $TITLE_COLOR = "0.6,0.6,0.0";
135 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
137 elsif( $bookCode eq "06lpdlc" ) {
138 $XML_SOURCE = "06lpdlc.xml";
139 $BOOK_PATH .= "/lw/06lpdlc";
140 $TITLE_COLOR = "0.6,0.6,0.0";
141 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
143 elsif( $bookCode eq "07cd" ) {
144 $XML_SOURCE = "07cd.xml";
145 $BOOK_PATH .= "/lw/07cd";
146 $TITLE_COLOR = "0.0,0.8,0.4";
147 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
149 elsif( $bookCode eq "07meec" ) {
150 $XML_SOURCE = "07meec.xml";
151 $BOOK_PATH .= "/lw/07meec";
152 $TITLE_COLOR = "0.6,0.6,0.0";
153 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
155 elsif( $bookCode eq "08tjoh" ) {
156 $XML_SOURCE = "08tjoh.xml";
157 $BOOK_PATH .= "/lw/08tjoh";
158 $TITLE_COLOR = "0.4,0.6,0.4";
159 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
161 elsif( $bookCode eq "08ljdlh" ) {
162 $XML_SOURCE = "08ljdlh.xml";
163 $BOOK_PATH .= "/lw/08ljdlh";
164 $TITLE_COLOR = "0.4,0.6,0.4";
165 $USE_ILLUSTRATORS = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
167 elsif( $bookCode eq "09tcof" ) {
168 $XML_SOURCE = "09tcof.xml";
169 $BOOK_PATH .= "/lw/09tcof";
170 $TITLE_COLOR = "1.0,0.6,0.0";
171 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
173 elsif( $bookCode eq "09ecdm" ) {
174 $XML_SOURCE = "09ecdm.xml";
175 $BOOK_PATH .= "/lw/09ecdm";
176 $TITLE_COLOR = "1.0,0.6,0.0";
177 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
179 elsif( $bookCode eq "10tdot" ) {
180 $XML_SOURCE = "10tdot.xml";
181 $BOOK_PATH .= "/lw/10tdot";
182 $TITLE_COLOR = "1.0,0.0,0.0";
183 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
185 elsif( $bookCode eq "10lmdt" ) {
186 $XML_SOURCE = "10lmdt.xml";
187 $BOOK_PATH .= "/lw/10lmdt";
188 $TITLE_COLOR = "1.0,0.0,0.0";
189 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
191 elsif( $bookCode eq "11tpot" ) {
192 $XML_SOURCE = "11tpot.xml";
193 $BOOK_PATH .= "/lw/11tpot";
194 $TITLE_COLOR = "0.5,0.5,0.4";
195 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
197 elsif( $bookCode eq "11pdt" ) {
198 $XML_SOURCE = "11pdt.xml";
199 $BOOK_PATH .= "/lw/11pdt";
200 $TITLE_COLOR = "0.5,0.5,0.4";
201 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
203 elsif( $bookCode eq "12tmod" ) {
204 $XML_SOURCE = "12tmod.xml";
205 $BOOK_PATH .= "/lw/12tmod";
206 $TITLE_COLOR = "0.6,0.0,0.0";
207 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
209 elsif( $bookCode eq "12lsdlo" ) {
210 $XML_SOURCE = "12lsdlo.xml";
211 $BOOK_PATH .= "/lw/12lsdlo";
212 $TITLE_COLOR = "0.6,0.0,0.0";
213 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
215 elsif( $bookCode eq "13tplor" ) {
216 $XML_SOURCE = "13tplor.xml";
217 $BOOK_PATH .= "/lw/13tplor";
219 $TITLE_COLOR = "0.6,0.0,0.0";
220 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
222 elsif( $bookCode eq "14tcok" ) {
223 $XML_SOURCE = "14tcok.xml";
224 $BOOK_PATH .= "/lw/14tcok";
226 $TITLE_COLOR = "0.6,0.0,0.0";
227 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
229 elsif( $bookCode eq "15tdc" ) {
230 $XML_SOURCE = "15tdc.xml";
231 $BOOK_PATH .= "/lw/15tdc";
233 $TITLE_COLOR = "0.6,0.0,0.0";
234 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
236 elsif( $bookCode eq "16tlov" ) {
237 $XML_SOURCE = "16tlov.xml";
238 $BOOK_PATH .= "/lw/16tlov";
240 $TITLE_COLOR = "0.6,0.0,0.0";
241 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
243 elsif( $bookCode eq "17tdoi" ) {
244 $XML_SOURCE = "17tdoi.xml";
245 $BOOK_PATH .= "/lw/17tdoi";
247 $TITLE_COLOR = "0.6,0.0,0.0";
248 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
250 elsif( $bookCode eq "18dotd" ) {
251 $XML_SOURCE = "18dotd.xml";
252 $BOOK_PATH .= "/lw/18dotd";
254 $TITLE_COLOR = "0.6,0.0,0.0";
255 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
257 elsif( $bookCode eq "19wb" ) {
258 $XML_SOURCE = "19wb.xml";
259 $BOOK_PATH .= "/lw/19wb";
261 $TITLE_COLOR = "0.6,0.0,0.0";
262 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
264 elsif( $bookCode eq "20tcon" ) {
265 $XML_SOURCE = "20tcon.xml";
266 $BOOK_PATH .= "/lw/20tcon";
268 $TITLE_COLOR = "0.6,0.0,0.0";
269 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
271 elsif( $bookCode eq "21votm" ) {
272 $XML_SOURCE = "21votm.xml";
273 $BOOK_PATH .= "/lw/21votm";
275 $TITLE_COLOR = "0.6,0.0,0.0";
276 $USE_ILLUSTRATORS = ":Trevor Newton:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
278 elsif( $bookCode eq "22tbos" ) {
279 $XML_SOURCE = "22tbos.xml";
280 $BOOK_PATH .= "/lw/22tbos";
282 $TITLE_COLOR = "0.6,0.0,0.0";
283 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
285 elsif( $bookCode eq "23mh" ) {
286 $XML_SOURCE = "23mh.xml";
287 $BOOK_PATH .= "/lw/23mh";
289 $TITLE_COLOR = "0.6,0.0,0.0";
290 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
292 elsif( $bookCode eq "24rw" ) {
293 $XML_SOURCE = "24rw.xml";
294 $BOOK_PATH .= "/lw/24rw";
296 $TITLE_COLOR = "0.6,0.0,0.0";
297 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
299 elsif( $bookCode eq "25totw" ) {
300 $XML_SOURCE = "25totw.xml";
301 $BOOK_PATH .= "/lw/25totw";
303 $TITLE_COLOR = "0.6,0.0,0.0";
304 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
306 elsif( $bookCode eq "26tfobm" ) {
307 $XML_SOURCE = "26tfobm.xml";
308 $BOOK_PATH .= "/lw/26tfobm";
310 $TITLE_COLOR = "0.6,0.0,0.0";
311 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
313 elsif( $bookCode eq "27v" ) {
314 $XML_SOURCE = "27v.xml";
315 $BOOK_PATH .= "/lw/27v";
317 $TITLE_COLOR = "0.6,0.0,0.0";
318 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
320 elsif( $bookCode eq "28thos" ) {
321 $XML_SOURCE = "28thos.xml";
322 $BOOK_PATH .= "/lw/28thos";
324 $TITLE_COLOR = "0.6,0.0,0.0";
325 $USE_ILLUSTRATORS = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
327 # TODO - fix title color for Grey Star books
328 elsif( $bookCode eq "01gstw" ) {
329 $XML_SOURCE = "01gstw.xml";
330 $BOOK_PATH .= "/gs/01gstw";
332 $TITLE_COLOR = "0.0,0.4,0.2";
333 $USE_ILLUSTRATORS = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
335 elsif( $bookCode eq "02tfc" ) {
336 $XML_SOURCE = "02tfc.xml";
337 $BOOK_PATH .= "/gs/02tfc";
339 $TITLE_COLOR = "0.0,0.4,0.2";
340 $USE_ILLUSTRATORS = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
342 elsif( $bookCode eq "03btng" ) {
343 $XML_SOURCE = "03btng.xml";
344 $BOOK_PATH .= "/gs/03btng";
346 $TITLE_COLOR = "0.0,0.4,0.2";
347 $USE_ILLUSTRATORS = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
349 elsif( $bookCode eq "04wotw" ) {
350 $XML_SOURCE = "04wotw.xml";
351 $BOOK_PATH .= "/gs/04wotw";
353 $TITLE_COLOR = "0.0,0.4,0.2";
354 $USE_ILLUSTRATORS = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
356 else{ die "Error:\n\tUknown book code.\n"; }
359 #chdir( "$DATADIR" ) or die( "Cannot open Project Aon data directory \"$DATADIR\": $!" );
362 # Check that the XML file is there
363 if ( ! -r $DATADIR."/".$XML_SOURCE ) {
364 die "Could not find source file $XML_SOURCE in $DATADIR!";
366 if ( ! -r $XSLDIR."/latex.xsl" ) {
367 die "Could not find LaTeX stylesheet (latex.xsl) in $DATADIR!";
371 # Create the output directory if it does not exist already
372 print "Checking directory $BOOK_PATH...";
373 if ( ! -d "$BOOK_PATH/" ) {
374 print "...directory does not exist.\n";
375 print "Creating $BOOK_PATH ...";
376 mkdir "$BOOK_PATH" || die "Could not create output directory $BOOK_PATH: $!";
380 my $OUTPUTFILE = $ARGV[ 2 ] || "$BOOK_PATH/$bookCode.tex";
382 if ( -e $OUTPUTFILE ) {
383 print "WARN: Outputfile $OUTPUTFILE already exists, will overwrite\n";
386 # Run the XML preprocessor
387 # TODO: use system() properly here and check return value
388 print "Processing book $bookCode and storing result in $OUTPUTFILE...\n";
391 # For Xmlto, which uses xsltproc:
393 # `$XMLPROC -v -o $BOOK_PATH -x ${XSLDIR}/latex.xsl dvi ${DATADIR}/${XML_SOURCE}`;
394 if ( $XMLPROC eq "xalan" ) {
396 $command="$XMLPROC -in ${DATADIR}/${XML_SOURCE} -xsl ${XSLDIR}/latex.xsl -out $OUTPUTFILE -param title-color \"\'$TITLE_COLOR\'\" -param use-illustrators \"\'$USE_ILLUSTRATORS\'\" -param language \"\'$language\'\" $EXTRAPARMS";
398 elsif ( $XMLPROC eq "xsltproc" ) {
400 $command="$XMLPROC --output $OUTPUTFILE --param title-color \"\'$TITLE_COLOR\'\" --param use-illustrators \"\'$USE_ILLUSTRATORS\'\" --param language \"\'$language\'\" $EXTRAPARMS ${XSLDIR}/latex.xsl ${DATADIR}/${XML_SOURCE}";
403 die "Error: Unsupported XSLT processor '$XMLPROC'.";
405 #print "Executing $command";
407 # Apache Xalan, Java version:
408 # print qx{$JAVA org.apache.xalan.xslt.Process -IN $XML_PATH/$XML_SOURCE -XSL $XML_PATH/latex.xsl -OUT $OUTPUTFILE -PARAM title-color \"$TITLE_COLOR\" -PARAM use-illustrators \"$USE_ILLUSTRATORS\"};