reorganizing the repository
[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 print "Reminder:\n\tDid you uncomment the LaTeX special character\n\tdeclarations in the book's XML file?\n";
43
44 my $bookCode = $ARGV[ 0 ];
45 my $language = $ARGV[ 1 ] || "en"; # Use a language or default to 'en'
46
47 my $DATADIR = "";
48 if ( defined ($ENV{'AONDATA'} ) ) {
49         $DATADIR=$ENV{'AONDATA'} ; 
50 } else { 
51         $DATADIR= $ENV{'AONPATH'}."/".$language."/xml";
52 }
53 if ( ! -d "$DATADIR" ) {
54         print STDERR "Cannot find data directory $DATADIR !\n";
55         exit 1;
56 }
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";
64         exit 1;
65 }
66
67 # TODO:
68 # - convert the bookcode's if then else to a hash array
69 # - allow usage of unknown book codes
70
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:";
76 }
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:";
82 }
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:";
88 }
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:";
94 }
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:";
100 }
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:";
106 }
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:";
112 }
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:";
118 }
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:";
124 }
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:";
130 }
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:";
136 }
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:";
142 }
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:";
148 }
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:";
154 }
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:";
160 }
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:";
166 }
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:";
172 }
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:";
178 }
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:";
184 }
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:";
190 }
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:";
196 }
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:";
202 }
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:";
208 }
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:";
214 }
215 elsif( $bookCode eq "13tplor" ) {
216     $XML_SOURCE        = "13tplor.xml";
217     $BOOK_PATH         .= "/lw/13tplor";
218     # TODO - review
219     $TITLE_COLOR       = "0.6,0.0,0.0"; 
220     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
221 }
222 elsif( $bookCode eq "14tcok" ) {
223     $XML_SOURCE        = "14tcok.xml";
224     $BOOK_PATH         .= "/lw/14tcok";
225     # TODO - review
226     $TITLE_COLOR       = "0.6,0.0,0.0"; 
227     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
228 }
229 elsif( $bookCode eq "15tdc" ) {
230     $XML_SOURCE        = "15tdc.xml";
231     $BOOK_PATH         .= "/lw/15tdc";
232     # TODO - review
233     $TITLE_COLOR       = "0.6,0.0,0.0"; 
234     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
235 }
236 elsif( $bookCode eq "16tlov" ) {
237     $XML_SOURCE        = "16tlov.xml";
238     $BOOK_PATH         .= "/lw/16tlov";
239     # TODO - review
240     $TITLE_COLOR       = "0.6,0.0,0.0"; 
241     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
242 }
243 elsif( $bookCode eq "17tdoi" ) {
244     $XML_SOURCE        = "17tdoi.xml";
245     $BOOK_PATH         .= "/lw/17tdoi";
246     # TODO - review
247     $TITLE_COLOR       = "0.6,0.0,0.0"; 
248     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
249 }
250 elsif( $bookCode eq "18dotd" ) {
251     $XML_SOURCE        = "18dotd.xml";
252     $BOOK_PATH         .= "/lw/18dotd";
253     # TODO - review
254     $TITLE_COLOR       = "0.6,0.0,0.0"; 
255     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
256 }
257 elsif( $bookCode eq "19wb" ) {
258     $XML_SOURCE        = "19wb.xml";
259     $BOOK_PATH         .= "/lw/19wb";
260     # TODO - review
261     $TITLE_COLOR       = "0.6,0.0,0.0"; 
262     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
263 }
264 elsif( $bookCode eq "20tcon" ) {
265     $XML_SOURCE        = "20tcon.xml";
266     $BOOK_PATH         .= "/lw/20tcon";
267     # TODO - review
268     $TITLE_COLOR       = "0.6,0.0,0.0";
269     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
270 }
271 elsif( $bookCode eq "21votm" ) {
272     $XML_SOURCE        = "21votm.xml";
273     $BOOK_PATH         .= "/lw/21votm";
274     # TODO - review
275     $TITLE_COLOR       = "0.6,0.0,0.0";
276     $USE_ILLUSTRATORS  = ":Trevor Newton:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
277 }
278 elsif( $bookCode eq "22tbos" ) {
279     $XML_SOURCE        = "22tbos.xml";
280     $BOOK_PATH         .= "/lw/22tbos";
281     # TODO - review
282     $TITLE_COLOR       = "0.6,0.0,0.0";
283     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
284 }
285 elsif( $bookCode eq "23mh" ) {
286     $XML_SOURCE        = "23mh.xml";
287     $BOOK_PATH         .= "/lw/23mh";
288     # TODO - review
289     $TITLE_COLOR       = "0.6,0.0,0.0";
290     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
291 }
292 elsif( $bookCode eq "24rw" ) {
293     $XML_SOURCE        = "24rw.xml";
294     $BOOK_PATH         .= "/lw/24rw";
295     # TODO - review
296     $TITLE_COLOR       = "0.6,0.0,0.0";
297     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
298 }
299 elsif( $bookCode eq "25totw" ) {
300     $XML_SOURCE        = "25totw.xml";
301     $BOOK_PATH         .= "/lw/25totw";
302     # TODO - review
303     $TITLE_COLOR       = "0.6,0.0,0.0";
304     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
305 }
306 elsif( $bookCode eq "26tfobm" ) {
307     $XML_SOURCE        = "26tfobm.xml";
308     $BOOK_PATH         .= "/lw/26tfobm";
309     # TODO - review
310     $TITLE_COLOR       = "0.6,0.0,0.0";
311     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
312 }
313 elsif( $bookCode eq "27v" ) {
314     $XML_SOURCE        = "27v.xml";
315     $BOOK_PATH         .= "/lw/27v";
316     # TODO - review
317     $TITLE_COLOR       = "0.6,0.0,0.0";
318     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
319 }
320 elsif( $bookCode eq "28thos" ) {
321     $XML_SOURCE        = "28thos.xml";
322     $BOOK_PATH         .= "/lw/28thos";
323     # TODO - review
324     $TITLE_COLOR       = "0.6,0.0,0.0";
325     $USE_ILLUSTRATORS  = ":Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
326 }
327 # TODO - fix title color for Grey Star books
328 elsif( $bookCode eq "01gstw" ) {
329     $XML_SOURCE        = "01gstw.xml";
330     $BOOK_PATH         .= "/gs/01gstw";
331     # TODO - review
332     $TITLE_COLOR       = "0.0,0.4,0.2";
333     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
334 }
335 elsif( $bookCode eq "02tfc" ) {
336     $XML_SOURCE        = "02tfc.xml";
337     $BOOK_PATH         .= "/gs/02tfc";
338     # TODO - review
339     $TITLE_COLOR       = "0.0,0.4,0.2";
340     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
341 }
342 elsif( $bookCode eq "03btng" ) {
343     $XML_SOURCE        = "03btng.xml";
344     $BOOK_PATH         .= "/gs/03btng";
345     # TODO - review
346     $TITLE_COLOR       = "0.0,0.4,0.2";
347     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
348 }
349 elsif( $bookCode eq "04wotw" ) {
350     $XML_SOURCE        = "04wotw.xml";
351     $BOOK_PATH         .= "/gs/04wotw";
352     # TODO - review
353     $TITLE_COLOR       = "0.0,0.4,0.2";
354     $USE_ILLUSTRATORS  = ":Paul Bonner:Brian Williams:JC Alvarez & Jonathan Blake:Jonathan Blake:";
355 }
356 else{ die "Error:\n\tUknown book code.\n"; }
357
358
359 #chdir( "$DATADIR" ) or die( "Cannot open Project Aon data directory \"$DATADIR\": $!" );
360
361
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!";
365 }
366 if ( ! -r $XSLDIR."/latex.xsl" ) {
367     die "Could not find LaTeX stylesheet (latex.xsl) in $DATADIR!";
368 }
369
370
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: $!";
377 }
378 print "..done.\n";
379
380 my $OUTPUTFILE = $ARGV[ 2 ] || "$BOOK_PATH/$bookCode.tex";
381
382 if ( -e $OUTPUTFILE ) {
383     print "WARN: Outputfile $OUTPUTFILE already exists, will overwrite\n";
384 }
385
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";
389
390 my $command="";
391 # For Xmlto, which uses xsltproc:
392 # (Does not work)
393 # `$XMLPROC -v -o $BOOK_PATH -x ${XSLDIR}/latex.xsl dvi ${DATADIR}/${XML_SOURCE}`;
394 if ( $XMLPROC eq "xalan" ) {
395     # Apache's 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";
397 }
398 elsif ( $XMLPROC eq "xsltproc" ) {
399     # 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}";
401 }
402 else {
403     die "Error: Unsupported XSLT processor '$XMLPROC'.";
404 }
405 #print "Executing $command";
406 print qx{$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\"};
409 #
410 print "...done\n";
411
412
413 # End of script
414 exit 0;