0cf1e7e65f53738946fbbc49a53557a54cf45238
[project-aon.git] / common / scripts / gbtolatex.pl
1 #!/bin/perl -w
2 #
3 # gbtolatex.pl
4 # 19 september 2007
5 #
6 # Creates LaTeX gamebook from XML source. This should subsequently be
7 # used to create a PDF or PostScript version.
8 #####
9
10 use strict;
11
12 # Check AONPATH
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";
16         exit 1;
17 }
18 ##
19
20 my $PROGRAM_NAME      = "gbtolatex";
21 my $XML_PATH          = "xml";
22 my $XML_SOURCE        = "";
23 my $PWD               = `pwd`;
24 chomp($PWD);
25 my $BOOK_PATH         = $ENV{'AONPATH'}."/common/pdf/build";
26 my $TITLE_COLOR       = "";
27 my $USE_ILLUSTRATORS  = "";
28
29 # Programs
30 #
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"; 
36 my $EXTRAPARMS =""; 
37 $EXTRAPARMS=$ENV{'XMLPARMS'} if defined($ENV{'XMLPARMS'});
38
39
40 unless( $ARGV[ 0 ] ) { die "Usage:\n\t${PROGRAM_NAME} book-code [LANGUAGE] [OUTPUTFILE]\n"; }
41
42 # Check that all the binaries are were want them
43
44 my @BINARIES;
45 push @BINARIES, ($XMLPROC, $JAVA);
46
47 foreach (@BINARIES) {
48     if ( ! -e $_ ) {
49             die "$PROGRAM_NAME: Cannot find binary '".$_."'. Please install it.\n";
50     }
51 }
52
53
54 print "Reminder:\n\tDid you uncomment the LaTeX special character\n\tdeclarations in the book's XML file?\n";
55
56 my $bookCode = $ARGV[ 0 ];
57 my $language = $ARGV[ 1 ] || "en"; # Use a language or default to 'en'
58
59 my $DATADIR = "";
60 if ( defined ($ENV{'AONDATA'} ) ) {
61         $DATADIR=$ENV{'AONDATA'} ; 
62 } else { 
63         $DATADIR= $ENV{'AONPATH'}."/".$language."/xml";
64 }
65 if ( ! -d "$DATADIR" ) {
66         print STDERR "Cannot find data directory $DATADIR !\n";
67         exit 1;
68 }
69 # Data dir, where XSL files reside
70 # Note: This has to be set to the XML file location and not the XSL location
71 # because of the .inc and the .mod files
72 #my $XSLDIR = $ENV{'AONPATH'}."/common/xsl";
73 my $XSLDIR = $DATADIR;
74 if ( ! -d "$XSLDIR" ) {
75         print STDERR "Cannot find XSL directory: $XSLDIR !\n";
76         exit 1;
77 }
78
79 # TODO:
80 # - convert the bookcode's if then else to a hash array
81 # - allow usage of unknown book codes
82
83 if( $bookCode eq "01fftd" ) {
84     $XML_SOURCE        = "01fftd.xml";
85     $BOOK_PATH         .= "/lw/01fftd";
86     $TITLE_COLOR       = "0.0,0.4,0.2";
87     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
88 }
89 elsif( $bookCode eq "01hdlo" ) {
90     $XML_SOURCE        = "01hdlo.xml";
91     $BOOK_PATH         .= "/lw/01hdlo";
92     $TITLE_COLOR       = "0.0,0.4,0.2";
93     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
94 }
95 elsif( $bookCode eq "02fotw" ) {
96     $XML_SOURCE        = "02fotw.xml";
97     $BOOK_PATH         .= "/lw/02fotw";
98     $TITLE_COLOR       = "0.0,0.6,0.6";
99     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
100 }
101 elsif( $bookCode eq "02fsea" ) {
102     $XML_SOURCE        = "02fsea.xml";
103     $BOOK_PATH         .= "/lw/02fsea";
104     $TITLE_COLOR       = "0.0,0.6,0.6";
105     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
106 }
107 elsif( $bookCode eq "03tcok" ) {
108     $XML_SOURCE        = "03tcok.xml";
109     $BOOK_PATH         .= "/lw/03tcok";
110     $TITLE_COLOR       = "0.0,0.6,0.8";
111     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
112 }
113 elsif( $bookCode eq "03lcdk" ) {
114     $XML_SOURCE        = "03lcdk.xml";
115     $BOOK_PATH         .= "/lw/03lcdk";
116     $TITLE_COLOR       = "0.0,0.6,0.8";
117     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
118 }
119 elsif( $bookCode eq "04tcod" ) {
120     $XML_SOURCE        = "04tcod.xml";
121     $BOOK_PATH         .= "/lw/04tcod";
122     $TITLE_COLOR       = "0.0,0.0,0.6";
123     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
124 }
125 elsif( $bookCode eq "04eam" ) {
126     $XML_SOURCE        = "04eam.xml";
127     $BOOK_PATH         .= "/lw/04eam";
128     $TITLE_COLOR       = "0.0,0.0,0.6";
129     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
130 }
131 elsif( $bookCode eq "05sots" ) {
132     $XML_SOURCE        = "05sots.xml";
133     $BOOK_PATH         .= "/lw/05sots";
134     $TITLE_COLOR       = "0.8,0.6,0.0";
135     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
136 }
137 elsif( $bookCode eq "05eddls" ) {
138     $XML_SOURCE        = "05eddls.xml";
139     $BOOK_PATH         .= "/lw/05eddls";
140     $TITLE_COLOR       = "0.8,0.6,0.0";
141     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
142 }
143 elsif( $bookCode eq "06tkot" ) {
144     $XML_SOURCE        = "06tkot.xml";
145     $BOOK_PATH         .= "/lw/06tkot";
146     $TITLE_COLOR       = "0.6,0.6,0.0";
147     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
148 }
149 elsif( $bookCode eq "06lpdlc" ) {
150     $XML_SOURCE        = "06lpdlc.xml";
151     $BOOK_PATH         .= "/lw/06lpdlc";
152     $TITLE_COLOR       = "0.6,0.6,0.0";
153     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
154 }
155 elsif( $bookCode eq "07cd" ) {
156     $XML_SOURCE        = "07cd.xml";
157     $BOOK_PATH         .= "/lw/07cd";
158     $TITLE_COLOR       = "0.0,0.8,0.4";
159     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
160 }
161 elsif( $bookCode eq "07meec" ) {
162     $XML_SOURCE        = "07meec.xml";
163     $BOOK_PATH         .= "/lw/07meec";
164     $TITLE_COLOR       = "0.6,0.6,0.0";
165     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
166 }
167 elsif( $bookCode eq "08tjoh" ) {
168     $XML_SOURCE        = "08tjoh.xml";
169     $BOOK_PATH         .= "/lw/08tjoh";
170     $TITLE_COLOR       = "0.4,0.6,0.4";
171     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:";
172 }
173 elsif( $bookCode eq "08ljdlh" ) {
174     $XML_SOURCE        = "08ljdlh.xml";
175     $BOOK_PATH         .= "/lw/08ljdlh";
176     $TITLE_COLOR       = "0.4,0.6,0.4";
177     $USE_ILLUSTRATORS  = ":Gary Chalk:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
178 }
179 elsif( $bookCode eq "09tcof" ) {
180     $XML_SOURCE        = "09tcof.xml";
181     $BOOK_PATH         .= "/lw/09tcof";
182     $TITLE_COLOR       = "1.0,0.6,0.0";
183     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
184 }
185 elsif( $bookCode eq "09ecdm" ) {
186     $XML_SOURCE        = "09ecdm.xml";
187     $BOOK_PATH         .= "/lw/09ecdm";
188     $TITLE_COLOR       = "1.0,0.6,0.0";
189     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
190 }
191 elsif( $bookCode eq "10tdot" ) {
192     $XML_SOURCE        = "10tdot.xml";
193     $BOOK_PATH         .= "/lw/10tdot";
194     $TITLE_COLOR       = "1.0,0.0,0.0";
195     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
196 }
197 elsif( $bookCode eq "10lmdt" ) {
198     $XML_SOURCE        = "10lmdt.xml";
199     $BOOK_PATH         .= "/lw/10lmdt";
200     $TITLE_COLOR       = "1.0,0.0,0.0";
201     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
202 }
203 elsif( $bookCode eq "11tpot" ) {
204     $XML_SOURCE        = "11tpot.xml";
205     $BOOK_PATH         .= "/lw/11tpot";
206     $TITLE_COLOR       = "0.5,0.5,0.4";
207     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
208 }
209 elsif( $bookCode eq "11pdt" ) {
210     $XML_SOURCE        = "11pdt.xml";
211     $BOOK_PATH         .= "/lw/11pdt";
212     $TITLE_COLOR       = "0.5,0.5,0.4";
213     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
214 }
215 elsif( $bookCode eq "12tmod" ) {
216     $XML_SOURCE        = "12tmod.xml";
217     $BOOK_PATH         .= "/lw/12tmod";
218     $TITLE_COLOR       = "0.6,0.0,0.0";
219     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
220 }
221 elsif( $bookCode eq "12lsdlo" ) {
222     $XML_SOURCE        = "12lsdlo.xml";
223     $BOOK_PATH         .= "/lw/12lsdlo";
224     $TITLE_COLOR       = "0.6,0.0,0.0";
225     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:Daniel Strong:";
226 }
227 elsif( $bookCode eq "13tplor" ) {
228     $XML_SOURCE        = "13tplor.xml";
229     $BOOK_PATH         .= "/lw/13tplor";
230     # TODO - review
231     $TITLE_COLOR       = "0.6,0.0,0.0"; 
232     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
233 }
234 elsif( $bookCode eq "14tcok" ) {
235     $XML_SOURCE        = "14tcok.xml";
236     $BOOK_PATH         .= "/lw/14tcok";
237     # TODO - review
238     $TITLE_COLOR       = "0.6,0.0,0.0"; 
239     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
240 }
241 elsif( $bookCode eq "15tdc" ) {
242     $XML_SOURCE        = "15tdc.xml";
243     $BOOK_PATH         .= "/lw/15tdc";
244     # TODO - review
245     $TITLE_COLOR       = "0.6,0.0,0.0"; 
246     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
247 }
248 elsif( $bookCode eq "16tlov" ) {
249     $XML_SOURCE        = "16tlov.xml";
250     $BOOK_PATH         .= "/lw/16tlov";
251     # TODO - review
252     $TITLE_COLOR       = "0.6,0.0,0.0"; 
253     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
254 }
255 elsif( $bookCode eq "17tdoi" ) {
256     $XML_SOURCE        = "17tdoi.xml";
257     $BOOK_PATH         .= "/lw/17tdoi";
258     # TODO - review
259     $TITLE_COLOR       = "0.6,0.0,0.0"; 
260     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
261 }
262 elsif( $bookCode eq "18dotd" ) {
263     $XML_SOURCE        = "18dotd.xml";
264     $BOOK_PATH         .= "/lw/18dotd";
265     # TODO - review
266     $TITLE_COLOR       = "0.6,0.0,0.0"; 
267     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
268 }
269 elsif( $bookCode eq "19wb" ) {
270     $XML_SOURCE        = "19wb.xml";
271     $BOOK_PATH         .= "/lw/19wb";
272     # TODO - review
273     $TITLE_COLOR       = "0.6,0.0,0.0"; 
274     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
275 }
276 elsif( $bookCode eq "20tcon" ) {
277     $XML_SOURCE        = "20tcon.xml";
278     $BOOK_PATH         .= "/lw/20tcon";
279     # TODO - review
280     $TITLE_COLOR       = "0.6,0.0,0.0";
281     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
282 }
283 elsif( $bookCode eq "21votm" ) {
284     $XML_SOURCE        = "21votm.xml";
285     $BOOK_PATH         .= "/lw/21votm";
286     # TODO - review
287     $TITLE_COLOR       = "0.6,0.0,0.0";
288     $USE_ILLUSTRATORS  = ":Trevor Newton:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
289 }
290 elsif( $bookCode eq "22tbos" ) {
291     $XML_SOURCE        = "22tbos.xml";
292     $BOOK_PATH         .= "/lw/22tbos";
293     # TODO - review
294     $TITLE_COLOR       = "0.6,0.0,0.0";
295     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
296 }
297 elsif( $bookCode eq "23mh" ) {
298     $XML_SOURCE        = "23mh.xml";
299     $BOOK_PATH         .= "/lw/23mh";
300     # TODO - review
301     $TITLE_COLOR       = "0.6,0.0,0.0";
302     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
303 }
304 elsif( $bookCode eq "24rw" ) {
305     $XML_SOURCE        = "24rw.xml";
306     $BOOK_PATH         .= "/lw/24rw";
307     # TODO - review
308     $TITLE_COLOR       = "0.6,0.0,0.0";
309     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
310 }
311 elsif( $bookCode eq "25totw" ) {
312     $XML_SOURCE        = "25totw.xml";
313     $BOOK_PATH         .= "/lw/25totw";
314     # TODO - review
315     $TITLE_COLOR       = "0.6,0.0,0.0";
316     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
317 }
318 elsif( $bookCode eq "26tfobm" ) {
319     $XML_SOURCE        = "26tfobm.xml";
320     $BOOK_PATH         .= "/lw/26tfobm";
321     # TODO - review
322     $TITLE_COLOR       = "0.6,0.0,0.0";
323     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
324 }
325 elsif( $bookCode eq "27v" ) {
326     $XML_SOURCE        = "27v.xml";
327     $BOOK_PATH         .= "/lw/27v";
328     # TODO - review
329     $TITLE_COLOR       = "0.6,0.0,0.0";
330     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
331 }
332 elsif( $bookCode eq "28thos" ) {
333     $XML_SOURCE        = "28thos.xml";
334     $BOOK_PATH         .= "/lw/28thos";
335     # TODO - review
336     $TITLE_COLOR       = "0.6,0.0,0.0";
337     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
338 }
339 # TODO - fix title color for Grey Star books
340 elsif( $bookCode eq "01gstw" ) {
341     $XML_SOURCE        = "01gstw.xml";
342     $BOOK_PATH         .= "/gs/01gstw";
343     # TODO - review
344     $TITLE_COLOR       = "0.0,0.4,0.2";
345     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
346 }
347 elsif( $bookCode eq "02tfc" ) {
348     $XML_SOURCE        = "02tfc.xml";
349     $BOOK_PATH         .= "/gs/02tfc";
350     # TODO - review
351     $TITLE_COLOR       = "0.0,0.4,0.2";
352     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
353 }
354 elsif( $bookCode eq "03btng" ) {
355     $XML_SOURCE        = "03btng.xml";
356     $BOOK_PATH         .= "/gs/03btng";
357     # TODO - review
358     $TITLE_COLOR       = "0.0,0.4,0.2";
359     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
360 }
361 elsif( $bookCode eq "04wotw" ) {
362     $XML_SOURCE        = "04wotw.xml";
363     $BOOK_PATH         .= "/gs/04wotw";
364     # TODO - review
365     $TITLE_COLOR       = "0.0,0.4,0.2";
366     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
367 }
368 else{ die "Error:\n\tUknown book code.\n"; }
369
370
371 #chdir( "$DATADIR" ) or die( "Cannot open Project Aon data directory \"$DATADIR\": $!" );
372
373
374 # Check that the XML file is there
375 if ( ! -r $DATADIR."/".$XML_SOURCE ) {
376     die "Could not find source file $XML_SOURCE in $DATADIR!";
377 }
378 if ( ! -r $XSLDIR."/latex.xsl" ) {
379     die "Could not find LaTeX stylesheet (latex.xsl) in $DATADIR!";
380 }
381
382
383 # Create the output directory if it does not exist already
384 print "Checking directory $BOOK_PATH...";
385 if ( ! -d "$BOOK_PATH/" ) {
386     print "...directory does not exist.\n";
387     print "Creating $BOOK_PATH ...";
388     mkdir "$BOOK_PATH" || die "Could not create output directory $BOOK_PATH: $!";
389 }
390 print "..done.\n";
391
392 my $OUTPUTFILE = $ARGV[ 2 ] || "$BOOK_PATH/$bookCode.tex";
393
394 if ( -e $OUTPUTFILE ) {
395     print "WARN: Outputfile $OUTPUTFILE already exists, will overwrite\n";
396 }
397
398 # Run the XML preprocessor
399 # TODO: use system() properly here and check return value
400 print "Processing book $bookCode and storing result in $OUTPUTFILE...\n";
401
402 my $command="";
403 # For Xmlto, which uses xsltproc:
404 # (Does not work)
405 # `$XMLPROC -v -o $BOOK_PATH -x ${XSLDIR}/latex.xsl dvi ${DATADIR}/${XML_SOURCE}`;
406 if ( $XMLPROC eq "xalan" ) {
407     # Apache's Xalan:
408     $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";
409 }
410 elsif ( $XMLPROC eq "xsltproc" ) {
411     # xsltproc:
412     $command="$XMLPROC --output $OUTPUTFILE --param title-color \"\'$TITLE_COLOR\'\" --param use-illustrators \"\'$USE_ILLUSTRATORS\'\" --param language \"\'$language\'\" $EXTRAPARMS ${XSLDIR}/latex.xsl ${DATADIR}/${XML_SOURCE}";
413 }
414 else {
415     die "Error: Unsupported XSLT processor '$XMLPROC'.";
416 }
417 #print "Executing $command";
418 print qx{$command};
419 # Apache Xalan, Java version:
420 # 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\"};
421 #
422 print "...done\n";
423
424
425 # End of script
426 exit 0;