Freeway Warrior 1-4:
[project-aon.git] / latex.xsl
1 <?xml version="1.0"?>
2 <!DOCTYPE xsl:transform [
3  <!ENTITY % latex.characters SYSTEM "ltexchar.mod">
4  %latex.characters;
5 ]>
6
7 <xsl:transform version="1.0"
8   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
9
10 <xsl:output method="text" encoding="ISO-8859-1" />
11
12 <xsl:strip-space elements="gamebook meta section data ol ul dl li dd footnotes footnote illustration instance" />
13 <xsl:preserve-space elements="p choice" />
14
15 <!--
16
17 $Id$
18
19 $Log$
20 Revision 1.3  2006/04/04 22:02:14  cvsuser
21 Fix two bugs (one } too much and a missing line break)
22
23 Revision 1.2  2005/04/09 19:51:50  angantyr
24 Added handling of open-ended quotes.
25
26 Revision 1.1  2005/01/30 01:32:52  jonathan.blake
27 Initial freepository revision of XML support documents.
28
29 Revision 1.3  2002/10/30 06:33:22  jblake
30 Added capability to filter which illustrators' work is included in the output.
31
32 Revision 1.2  2002/10/20 06:29:58  jblake
33 Added support for CLOSE COMBAT SKILL from the Freeway Warrior books.
34
35 Revision 1.1  2002/10/15 23:30:23  jblake
36 Initial revision
37
38 -->
39
40 <!--
41
42 To Implement:
43
44 The implementation of tables is incomplete and kludgy.
45
46 -->
47
48 <!-- ====================== parameters ========================== -->
49
50 <xsl:param name="title-color"><xsl:text>0.0,0.0,0.0</xsl:text></xsl:param>
51 <xsl:param name="use-illustrators" />
52
53 <!-- ======================= variables ========================== -->
54
55 <xsl:variable name="newline">
56 <xsl:text>
57 </xsl:text>
58 </xsl:variable>
59
60 <xsl:variable name="newparagraph">
61  <xsl:value-of select="$newline" />
62  <xsl:value-of select="$newline" />
63 </xsl:variable>
64
65 <!-- ======================== Templates ========================= -->
66
67 <!-- ================= hierarchical sections ==================== -->
68
69 <xsl:template match="meta" />
70
71 <!-- ::::::::::::::::::: top-level section :::::::::::::::::::::: -->
72
73 <xsl:template match="/gamebook/section[@id='title']">
74
75 <xsl:text>
76 %% Two-sided %%
77 \documentclass[letterpaper,12pt,twoside]{book}
78 %\documentclass[a4paper,12pt,twoside]{book}
79
80 %% One-sided %%
81 %\documentclass[letterpaper,12pt,oneside]{book}
82 %\documentclass[a4paper,12pt,oneside]{book}
83
84  \usepackage[pdftex]{graphicx}
85  \usepackage{ifthen}
86
87  %% color info %%
88  \usepackage{color}
89  \definecolor{titlecolor}{rgb}{</xsl:text><xsl:value-of select="$title-color" /><xsl:text>}
90  \definecolor{lightgray}{gray}{0.75}
91
92  %% headers and footers %%
93  \usepackage{fancyhdr}
94
95  \renewcommand{\chaptermark}[1]{}
96  \renewcommand{\sectionmark}[1]{}
97  \fancyhf{}
98
99  \ifthenelse{\boolean{@twoside}}%
100  {%% Two-sided %%
101   \fancyhead[CO]{\iffloatpage{}{</xsl:text><xsl:value-of select="/gamebook/meta/creator[@class='short']" /><xsl:text>}}
102   \fancyhead[CE]{\iffloatpage{}{\bfseries </xsl:text><xsl:value-of select="/gamebook/meta/title[1]" /><xsl:text>}}
103   \fancyhead[LO,RE]{\iffloatpage{}{\thepage}}}%
104  {%% One-sided %%
105   %\fancyhead[C]{\iffloatpage{}{\bfseries{</xsl:text><xsl:value-of select="/gamebook/meta/title[1]" /><xsl:text>:} \normalfont{</xsl:text><xsl:value-of select="/gamebook/meta/creator[@class='short']" /><xsl:text>}}}
106   %\fancyhead[R]{\iffloatpage{}{\thepage}}}
107  \renewcommand{\headrulewidth}{\iffloatpage{0pt}{0.4pt}}}
108
109  \fancypagestyle{plain}{
110   \fancyhf{}
111   \renewcommand{\headrulewidth}{0pt}
112  }
113
114  \fancypagestyle{empty}{
115   \fancyhf{}
116   \renewcommand{\headrulewidth}{0pt}
117  }
118
119  %% hyper-references %%
120  \usepackage[pdftex,colorlinks=true,linkcolor=black,bookmarks=false]{hyperref}
121
122  %% custom style info %%
123  \setlength{\parindent}{0pt}
124  \setlength{\parskip}{1em}
125  \setlength{\headheight}{18pt}
126  \addtolength{\headwidth}{\marginparwidth}
127  \addtolength{\headwidth}{\marginparsep}
128  \setlength{\textheight}{44\baselineskip}
129  \ifthenelse{\lengthtest{\paperwidth = 210mm}}%
130    {%% if A4 (210.0 mm x 297.0 mm)
131    \addtolength{\topmargin}{-1\baselineskip}}%
132    {%% else if letter (8.5" x 11" == 215.9 mm x 279.4 mm)
133    \addtolength{\topmargin}{-2.5\baselineskip}}
134
135  %% TrueType font %%
136  \usepackage[T1]{fontenc}
137  \usepackage{souvenir}
138  %\renewcommand{\rmdefault}{souvnrttf}
139
140  \raggedbottom
141
142  %% new environments %%
143  \newenvironment{aonchoice}{\begin{list}{}{\setlength{\topsep}{0pt}} \item}{\end{list}}
144  \newenvironment{aoncombat}{\begin{list}{}{\setlength{\topsep}{0pt}} \item}{\end{list}}
145  \newenvironment{aonitemize}{\begin{list}{}{\setlength{\topsep}{0pt} \setlength{\parsep}{0pt} \setlength{\itemsep}{0pt}}}{\end{list}}
146  \newenvironment{aonordereditemize}{\begin{list}{\arabic{aoncounter}.}{\usecounter{aoncounter} \setlength{\topsep}{0pt} \setlength{\parsep}{0pt} \setlength{\itemsep}{0pt}}}{\end{list}}
147  \newcounter{aoncounter}
148
149 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
150 \begin{document}
151
152 \begin{titlepage}
153
154  \vspace*{\stretch{0.7}}
155  \begin{center}
156   \Huge{\textcolor{titlecolor}{\textbf{</xsl:text><xsl:value-of select="/gamebook/meta/title[1]" /><xsl:text>}}} \vspace{-0.8em}\\
157
158   \vspace*{\stretch{1}}
159   \normalsize{</xsl:text><xsl:apply-templates select="/gamebook/meta/creator[@class='medium']" /><xsl:text>}
160  \end{center}
161  \vspace*{\stretch{1.3}}
162
163  \pagestyle{empty}
164
165  \newpage
166
167  \vspace*{\stretch{1}}
168
169  </xsl:text>
170  <xsl:apply-templates select="/gamebook/meta/rights[@class='license-notification']" />
171  <xsl:text>
172
173  Publication Date: </xsl:text>
174  <xsl:value-of select="/gamebook/meta/date[@class='publication']/day" />
175  <xsl:text> </xsl:text>
176  <xsl:choose>
177   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 1">
178    <xsl:text>January</xsl:text>
179   </xsl:when>
180   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 2">
181    <xsl:text>February</xsl:text>
182   </xsl:when>
183   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 3">
184    <xsl:text>March</xsl:text>
185   </xsl:when>
186   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 4">
187    <xsl:text>April</xsl:text>
188   </xsl:when>
189   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 5">
190    <xsl:text>May</xsl:text>
191   </xsl:when>
192   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 6">
193    <xsl:text>June</xsl:text>
194   </xsl:when>
195   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 7">
196    <xsl:text>July</xsl:text>
197   </xsl:when>
198   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 8">
199    <xsl:text>August</xsl:text>
200   </xsl:when>
201   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 9">
202    <xsl:text>September</xsl:text>
203   </xsl:when>
204   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 10">
205    <xsl:text>October</xsl:text>
206   </xsl:when>
207   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 11">
208    <xsl:text>November</xsl:text>
209   </xsl:when>
210   <xsl:when test="/gamebook/meta/date[@class='publication']/month = 12">
211    <xsl:text>December</xsl:text>
212   </xsl:when>
213   <xsl:otherwise>
214    <xsl:text>Invalid Month</xsl:text>
215   </xsl:otherwise>
216  </xsl:choose>
217  <xsl:text> </xsl:text>
218  <xsl:value-of select="/gamebook/meta/date[@class='publication']/year" />
219  <xsl:text>
220
221  </xsl:text>
222  <xsl:apply-templates select="/gamebook/meta/description[@class='publication']" />
223  <xsl:text>
224
225  \vspace*{\stretch{3}}
226
227  \pagestyle{empty}
228
229 \end{titlepage}
230
231 \clearpage{\pagestyle{empty}\cleardoublepage}
232
233  \vspace*{\stretch{1}}
234
235  \thispagestyle{empty}
236  </xsl:text>
237  <xsl:apply-templates select="/gamebook/meta/description[@class='blurb']" />
238  <xsl:apply-templates select="/gamebook/meta/creator[@class='long']" />
239  <xsl:text>
240
241  \vspace*{\stretch{3}}
242
243 \clearpage{\pagestyle{empty}\cleardoublepage}
244
245  \pagestyle{fancy}
246
247 \begin{frontmatter}
248 </xsl:text>
249
250  <xsl:apply-templates select="data/section[@class='frontmatter']" />
251
252 <xsl:text>
253 \end{frontmatter}
254
255 </xsl:text>
256 <xsl:if test="data/section[@class='mainmatter']">
257  <xsl:text>\begin{mainmatter}
258
259  </xsl:text>
260
261  <xsl:apply-templates select="data/section[@class='mainmatter']" />
262
263  <xsl:text>
264  \end{mainmatter}
265  </xsl:text>
266 </xsl:if>
267
268 <xsl:if test="data/section[@class='numbered']">
269  <xsl:apply-templates select="data/section[@class='numbered']" />
270 </xsl:if>
271
272  <xsl:text>
273 \begin{backmatter}
274 \ifthenelse{\boolean{@twoside}}%
275  {%% Two-sided %%
276   \fancyhead[RO,LE]{}}
277  {%% One-sided %%
278   \fancyhead[R]{}}
279
280  \setcounter{topnumber}{6}
281  \renewcommand{\topfraction}{1}
282  \renewcommand{\textfraction}{0}
283  \setlength{\floatsep}{10pt}
284
285  </xsl:text>
286  <xsl:apply-templates select="data/section[@class='backmatter']" />
287  <xsl:text>
288
289 \end{backmatter}
290
291 \end{document}
292 </xsl:text>
293
294 </xsl:template>
295
296 <xsl:template match="/gamebook/section[@id='toc']" />
297
298 <xsl:template match="section" />
299
300 <!-- ::::::::::: second-level frontmatter sections :::::::::::::: -->
301
302 <xsl:template match="/gamebook/section/data/section[@class='frontmatter']">
303
304  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
305  <xsl:value-of select="$newparagraph" />
306
307  <xsl:text>{\huge \hypertarget{</xsl:text>
308   <xsl:value-of select="@id" />
309  <xsl:text>}{</xsl:text>
310  <xsl:value-of select="meta/title" />
311  <xsl:text>}}</xsl:text>
312  <xsl:value-of select="$newline" />
313  <xsl:text>\addcontentsline{toc}{section}{\protect\numberline{}{</xsl:text>
314   <xsl:value-of select="meta/title" />
315  <xsl:text>}}</xsl:text>
316  <xsl:value-of select="$newparagraph" />
317
318  <xsl:apply-templates />
319
320 </xsl:template>
321
322 <!-- :::::::::::: third-level front matter sections ::::::::::::: -->
323
324 <xsl:template match="/gamebook/section/data/section/data/section[@class='frontmatter']">
325
326  <xsl:text>{\LARGE \hypertarget{</xsl:text>
327   <xsl:value-of select="@id" />
328  <xsl:text>}{</xsl:text>
329  <xsl:value-of select="meta/title" />
330  <xsl:text>}}</xsl:text>
331  <xsl:value-of select="$newparagraph" />
332
333  <xsl:apply-templates />
334 </xsl:template>
335
336 <xsl:template match="/gamebook/section/data/section/data/section[@class='frontmatter-separate']">
337
338  <xsl:text>\newpage</xsl:text><xsl:value-of select="$newline" />
339  <xsl:text>{\LARGE \hypertarget{</xsl:text>
340   <xsl:value-of select="@id" />
341  <xsl:text>}{</xsl:text>
342  <xsl:value-of select="meta/title" />
343  <xsl:text>}}</xsl:text>
344  <xsl:value-of select="$newline" />
345  <xsl:text>\addcontentsline{toc}{subsection}{\protect\numberline{}{</xsl:text>
346   <xsl:value-of select="meta/title" />
347  <xsl:text>}}</xsl:text>
348  <xsl:value-of select="$newparagraph" />
349
350  <xsl:apply-templates />
351 </xsl:template>
352
353 <!-- :::::::::::: fourth-level front matter sections :::::::::::: -->
354
355 <xsl:template match="/gamebook/section/data/section/data/section/data/section[@class='frontmatter']">
356  <xsl:text>{\Large \hypertarget{</xsl:text>
357   <xsl:value-of select="@id" />
358  <xsl:text>}{</xsl:text>
359  <xsl:value-of select="meta/title" />
360  <xsl:text>}}</xsl:text>
361  <xsl:value-of select="$newparagraph" />
362
363  <xsl:apply-templates />
364 </xsl:template>
365
366 <!-- ::::::::::::: fifth-level front matter sections :::::::::::: -->
367
368 <xsl:template match="/gamebook/section/data/section/data/section/data/section/data/section[@class='frontmatter']">
369  <xsl:text>{\large \hypertarget{</xsl:text>
370   <xsl:value-of select="@id" />
371  <xsl:text>}{</xsl:text>
372  <xsl:value-of select="meta/title" />
373  <xsl:text>}}</xsl:text>
374  <xsl:value-of select="$newparagraph" />
375
376  <xsl:apply-templates />
377 </xsl:template>
378
379 <!-- ::::::::::: second-level main matter sections :::::::::::::: -->
380
381 <xsl:template match="/gamebook/section/data/section[@class='mainmatter']">
382  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
383  <xsl:value-of select="$newparagraph" />
384
385  <xsl:text>{\huge \hypertarget{</xsl:text>
386   <xsl:value-of select="@id" />
387  <xsl:text>}{</xsl:text>
388  <xsl:value-of select="meta/title" />
389  <xsl:text>}}</xsl:text>
390  <xsl:value-of select="$newline" />
391  <xsl:text>\addcontentsline{toc}{section}{\protect\numberline{}{</xsl:text>
392   <xsl:value-of select="meta/title" />
393  <xsl:text>}}</xsl:text>
394  <xsl:value-of select="$newparagraph" />
395
396  <xsl:apply-templates />
397
398 </xsl:template>
399
400 <!-- :::::::::::: third-level main matter sections ::::::::::::: -->
401
402 <xsl:template match="/gamebook/section/data/section/data/section[@class='mainmatter'] | /gamebook/section/data/section/data/section[@class='mainmatter-separate']">
403
404  <xsl:text>\newpage</xsl:text><xsl:value-of select="$newline" />
405  <xsl:text>{\LARGE \hypertarget{</xsl:text>
406   <xsl:value-of select="@id" />
407  <xsl:text>}{</xsl:text>
408  <xsl:value-of select="meta/title" />
409  <xsl:text>}}</xsl:text>
410  <xsl:value-of select="$newline" />
411  <xsl:text>\addcontentsline{toc}{subsection}{\protect\numberline{}{</xsl:text>
412   <xsl:value-of select="meta/title" />
413  <xsl:text>}}</xsl:text>
414  <xsl:value-of select="$newparagraph" />
415
416  <xsl:apply-templates />
417 </xsl:template>
418
419 <!-- :::::::::::: fourth-level main matter sections :::::::::::: -->
420
421 <xsl:template match="/gamebook/section/data/section/data/section/data/section[@class='mainmatter'] | /gamebook/section/data/section/data/section/data/section[@class='mainmatter-separate']">
422  <xsl:text>{\Large \hypertarget{</xsl:text>
423   <xsl:value-of select="@id" />
424  <xsl:text>}{</xsl:text>
425  <xsl:value-of select="meta/title" />
426  <xsl:text>}}</xsl:text>
427  <xsl:value-of select="$newparagraph" />
428
429  <xsl:apply-templates />
430 </xsl:template>
431
432 <!-- ::::::::::::: fifth-level main matter sections :::::::::::: -->
433
434 <xsl:template match="/gamebook/section/data/section/data/section/data/section/data/section[@class='mainmatter']">
435  <xsl:text>{\large \hypertarget{</xsl:text>
436   <xsl:value-of select="@id" />
437  <xsl:text>}{</xsl:text>
438  <xsl:value-of select="meta/title" />
439  <xsl:text>}}</xsl:text>
440  <xsl:value-of select="$newparagraph" />
441
442  <xsl:apply-templates />
443 </xsl:template>
444
445 <!-- :::::::::::: third-level glossary sections ::::::::::::: -->
446 <!-- Glossary sections should be contained in a second level section. -->
447
448 <xsl:template match="/gamebook/section/data/section/data/section[@class='glossary'] | /gamebook/section/data/section/data/section[@class='glossary-separate']">
449
450  <xsl:text>\newpage</xsl:text><xsl:value-of select="$newline" />
451  <xsl:text>{\LARGE \hypertarget{</xsl:text>
452   <xsl:value-of select="@id" />
453  <xsl:text>}{</xsl:text>
454  <xsl:value-of select="meta/title" />
455  <xsl:text>}}</xsl:text>
456  <xsl:value-of select="$newparagraph" />
457
458  <xsl:apply-templates />
459 </xsl:template>
460
461 <!-- :::::::::::::::::: numbered sections ::::::::::::::::::::::: -->
462
463 <xsl:template match="/gamebook/section/data/section[@class='numbered']">
464  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text> <xsl:value-of select="$newparagraph" />
465
466  <xsl:if test="position() = 1">
467   <xsl:text>\newcommand{\aonmarks}{
468     \ifthenelse{\equal{\leftmark}{\rightmark}}
469       {\rightmark}
470       {\rightmark{} - \leftmark}}
471   \ifthenelse{\boolean{@twoside}}%
472    {%% Two-sided %%
473     \fancyhead[RO,LE]{\iffloatpage{}{\large{\bfseries \aonmarks}}}
474     \fancyhead[LO,RE]{\iffloatpage{}{\thepage}}}
475    {%% One-sided %%
476     %\fancyhead[R]{\iffloatpage{}{\large{\bfseries \aonmarks}}}
477     %\fancyhead[L]{\iffloatpage{}{\thepage}}%
478    }</xsl:text> <xsl:value-of select="$newparagraph" />
479  </xsl:if>
480
481  <xsl:if test="not( self::node()[@id='numbered'] )">
482   <xsl:text>{\huge \hypertarget{</xsl:text>
483    <xsl:value-of select="@id" />
484   <xsl:text>}{</xsl:text>
485   <xsl:value-of select="meta/title" />
486   <xsl:text>}}</xsl:text>
487   <xsl:value-of select="$newline" />
488  </xsl:if>
489  <xsl:text>\addcontentsline{toc}{section}{\protect\numberline{}{</xsl:text>
490   <xsl:value-of select="meta/title" />
491  <xsl:text>}}</xsl:text>
492  <xsl:value-of select="$newparagraph" />
493
494  <xsl:apply-templates />
495
496  <xsl:value-of select="$newparagraph" />
497  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
498 </xsl:template>
499
500 <xsl:template match="/gamebook/section/data/section[@class='numbered']/data/section[@class='numbered']">
501  <xsl:variable name="section-title" select="meta/title[1]" />
502
503 <xsl:value-of select="$newline" />
504 <xsl:text>\vspace{\parskip} \hypertarget{</xsl:text>
505 <xsl:value-of select="@id" />
506 <xsl:text>}{} \hspace*{\fill} \markboth{</xsl:text>
507 <xsl:value-of select="$section-title" />
508 <xsl:text>}{</xsl:text>
509 <xsl:value-of select="$section-title" />
510 <xsl:text>} {\Large \bfseries </xsl:text>
511 <xsl:value-of select="$section-title" />
512 <xsl:text>} \hspace*{\fill}\\*[\parskip]</xsl:text>
513 <xsl:value-of select="$newline" />
514
515 <xsl:for-each select="data/illustration[@class='float' and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )]">
516  <xsl:text>\hspace*{\fill} \mbox{\itshape \hyperlink{ill</xsl:text>
517  <xsl:number count="illustration[@class='float' and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )]" from="/" level="any" format="1" />
518  <xsl:text>}{Illustration </xsl:text>
519  <xsl:number count="illustration[@class='float' and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )]" from="/" level="any" format="I" />
520  <xsl:text>}}\hspace*{\fill}\\*[\parskip]</xsl:text>
521 </xsl:for-each>
522
523  <xsl:apply-templates />
524
525 </xsl:template>
526
527 <!-- :::::::::::: second-level backmatter sections :::::::::::::: -->
528
529 <xsl:template match="/gamebook/section/data/section[@class='backmatter']">
530
531  <xsl:text>\clearpage{}</xsl:text>
532  <xsl:value-of select="$newparagraph" />
533
534  <xsl:text>{\huge \hypertarget{</xsl:text>
535   <xsl:value-of select="@id" />
536  <xsl:text>}{</xsl:text>
537  <xsl:value-of select="meta/title" />
538  <xsl:text>}}</xsl:text>
539  <xsl:value-of select="$newline" />
540  <xsl:text>\addcontentsline{toc}{section}{\protect\numberline{}{</xsl:text>
541   <xsl:value-of select="meta/title" />
542  <xsl:text>}}</xsl:text>
543  <xsl:value-of select="$newparagraph" />
544
545  <xsl:apply-templates />
546 </xsl:template>
547
548 <!-- ::::::::::::: third-level back matter sections ::::::::::::: -->
549
550 <xsl:template match="/gamebook/section/data/section/data/section[@class='backmatter']">
551  <xsl:text>{\LARGE \hypertarget{</xsl:text>
552   <xsl:value-of select="@id" />
553  <xsl:text>}{</xsl:text>
554  <xsl:value-of select="meta/title" />
555  <xsl:text>}}</xsl:text>
556  <xsl:value-of select="$newparagraph" />
557
558  <xsl:apply-templates />
559 </xsl:template>
560
561 <!-- ::::::::::::: fourth-level back matter sections ::::::::::::: -->
562
563 <xsl:template match="/gamebook/section/data/section/data/section/data/section[@class='backmatter']">
564  <xsl:text>{\Large \hypertarget{</xsl:text>
565   <xsl:value-of select="@id" />
566  <xsl:text>}{</xsl:text>
567  <xsl:value-of select="meta/title" />
568  <xsl:text>}}</xsl:text>
569  <xsl:value-of select="$newparagraph" />
570
571  <xsl:apply-templates />
572 </xsl:template>
573
574 <!-- :::::::::::::::::: dedication template ::::::::::::::::::::: -->
575
576 <xsl:template match="id( 'dedicate' )">
577  
578  <xsl:text>\vspace*{\stretch{1}}</xsl:text>
579  <xsl:value-of select="$newparagraph" />
580  <xsl:text>\begin{center}</xsl:text>
581  <xsl:value-of select="$newline" />
582  <xsl:text>\thispagestyle{empty}</xsl:text>
583  <xsl:value-of select="$newline" />
584  <xsl:text>\itshape </xsl:text>
585  <xsl:apply-templates select="data/p" />
586  <xsl:value-of select="$newline" />
587  <xsl:text>\end{center}</xsl:text>
588  <xsl:value-of select="$newparagraph" />
589  <xsl:text>\vspace*{\stretch{3}}</xsl:text>
590  <xsl:value-of select="$newline" />
591
592  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
593  <xsl:value-of select="$newline" />
594  <xsl:text>\tableofcontents</xsl:text>
595  <xsl:value-of select="$newline" />
596  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
597  <xsl:value-of select="$newline" />
598
599  <xsl:text>\setcounter{page}{1}</xsl:text><xsl:value-of select="$newline" />
600  <xsl:text>\pagenumbering{arabic}</xsl:text><xsl:value-of select="$newline" />
601
602 </xsl:template>
603
604 <!-- ::::::::::::::::::::: map template ::::::::::::::::::::::::: -->
605
606 <xsl:template match="id( 'map' )">
607  <xsl:variable name="map-title" select="meta/title" />
608
609  <xsl:text>\clearpage{\pagestyle{empty}\cleardoublepage}</xsl:text>
610  <xsl:value-of select="$newparagraph" />
611
612   <xsl:for-each select="data/illustration[contains( $use-illustrators, concat( ':', meta/creator, ':' ) ) ]">
613    <xsl:variable name="illustration-src" select="instance[@class='pdf']/@src" />
614
615    <xsl:text>\hypertarget{map}{~}</xsl:text>
616    <xsl:value-of select="$newline" />
617    <xsl:text>\addcontentsline{toc}{section}{\protect\numberline{}{</xsl:text>
618     <xsl:value-of select="$map-title" />
619    <xsl:text>}}</xsl:text>
620    <xsl:value-of select="$newparagraph" />
621
622 <!--   <xsl:value-of select="$newline" />
623    <xsl:text>\begin{figure}[!h]</xsl:text>
624    <xsl:value-of select="$newline" />
625     <xsl:text>\centering</xsl:text>
626     <xsl:value-of select="$newline" />
627     <xsl:text>\thispagestyle{empty}</xsl:text>
628     <xsl:value-of select="$newline" />
629     <xsl:text>\rotatebox{90}{\includegraphics[width=550pt,keepaspectratio]{</xsl:text><xsl:value-of select="$illustration-src" /><xsl:text>}}%</xsl:text>
630     <xsl:value-of select="$newline" />
631    <xsl:text>\end{figure}</xsl:text> -->
632
633    <xsl:text>\thispagestyle{empty}</xsl:text><xsl:value-of select="$newline" />
634    <xsl:text>\newlength{\saveunitlength}</xsl:text><xsl:value-of select="$newline" />
635    <xsl:text>\setlength{\saveunitlength}{\unitlength}</xsl:text><xsl:value-of select="$newline" />
636    <xsl:text>\setlength{\unitlength}{1mm}</xsl:text><xsl:value-of select="$newline" />
637    <xsl:text>\ifthenelse{\boolean{@twoside}}%</xsl:text><xsl:value-of select="$newline" />
638    <xsl:text> {%% Two-sided %%</xsl:text><xsl:value-of select="$newline" />
639    <xsl:text>  \begin{picture}(10,10)</xsl:text><xsl:value-of select="$newline" />
640    <xsl:text>  \put(-23,-188){\includegraphics[angle=90,origin=c,width=20cm,height=28cm,keepaspectratio]{map.pdf}}</xsl:text><xsl:value-of select="$newline" />
641    <xsl:text>  \end{picture}}%</xsl:text><xsl:value-of select="$newline" />
642    <xsl:text> {%% One-sided %%</xsl:text><xsl:value-of select="$newline" />
643    <xsl:text>  \begin{picture}(10,10)</xsl:text><xsl:value-of select="$newline" />
644    <xsl:text>  \put(-29,-188){\includegraphics[angle=90,origin=c,width=20cm,height=28cm,keepaspectratio]{map.pdf}}</xsl:text><xsl:value-of select="$newline" />
645    <xsl:text>  \end{picture}}</xsl:text><xsl:value-of select="$newline" />
646    <xsl:text>\setlength{\unitlength}{\saveunitlength}</xsl:text><xsl:value-of select="$newline" />
647
648   </xsl:for-each>
649 </xsl:template>
650
651 <!-- ==================== block elements ======================== -->
652
653 <xsl:template match="p">
654  <xsl:apply-templates />
655  <xsl:value-of select="$newparagraph" />
656 </xsl:template>
657
658 <xsl:template match="ul">
659  <xsl:text>\begin{aonitemize}</xsl:text><xsl:value-of select="$newline" />
660  <xsl:apply-templates />
661  <xsl:text>\end{aonitemize}</xsl:text>
662  <xsl:value-of select="$newparagraph" />
663 </xsl:template>
664
665 <xsl:template match="ul[@class='unbulleted']">
666  <xsl:text>\begin{aonitemize}</xsl:text><xsl:value-of select="$newline" />
667  <xsl:apply-templates />
668  <xsl:text>\end{aonitemize}</xsl:text>
669  <xsl:value-of select="$newparagraph" />
670 </xsl:template>
671
672 <xsl:template match="ol">
673  <xsl:text>\begin{enumerate}</xsl:text><xsl:value-of select="$newline" />
674  <xsl:apply-templates />
675  <xsl:text>\end{enumerate}</xsl:text>
676  <xsl:value-of select="$newparagraph" />
677 </xsl:template>
678
679 <xsl:template match="dl">
680  <xsl:apply-templates />
681 </xsl:template>
682
683 <xsl:template match="table">
684  <xsl:text>\begin{tabular}{*{</xsl:text>
685  <xsl:for-each select="tr[1]">
686   <xsl:for-each select="th[1]">
687    <xsl:number count="th" />
688   </xsl:for-each>
689  </xsl:for-each>
690  <xsl:text>}{l}}</xsl:text>
691  <xsl:value-of select="$newline" />
692   <xsl:apply-templates />
693  <xsl:text>\end{tabular}</xsl:text>
694  <xsl:value-of select="$newparagraph" />
695 </xsl:template>
696
697 <xsl:template match="tr">
698  <xsl:apply-templates />
699  <xsl:text> \\</xsl:text>
700 </xsl:template>
701
702 <xsl:template match="th">
703  <xsl:text>\multicolumn{1}{</xsl:text>
704  <xsl:choose>
705   <xsl:when test="@align='left'"><xsl:text>l}{\bfseries </xsl:text></xsl:when>
706   <xsl:when test="@align='right'"><xsl:text>r}{\bfseries </xsl:text></xsl:when>
707   <xsl:when test="@align='center'"><xsl:text>c}{\bfseries </xsl:text></xsl:when>
708   <xsl:otherwise><xsl:text>l}{\bfseries </xsl:text></xsl:otherwise>
709  </xsl:choose>
710   <xsl:apply-templates />
711  <xsl:text>} </xsl:text>
712  <xsl:if test="position != last()"><xsl:text>&amp;</xsl:text></xsl:if>
713 </xsl:template>
714
715 <xsl:template match="td">
716  <xsl:text>\multicolumn{1}{</xsl:text>
717  <xsl:choose>
718   <xsl:when test="@align='left'"><xsl:text>l}{</xsl:text></xsl:when>
719   <xsl:when test="@align='right'"><xsl:text>r}{</xsl:text></xsl:when>
720   <xsl:when test="@align='center'"><xsl:text>c}{</xsl:text></xsl:when>
721   <xsl:otherwise><xsl:text>l}{</xsl:text></xsl:otherwise>
722  </xsl:choose>
723   <xsl:apply-templates />
724  <xsl:text>} </xsl:text>
725  <xsl:if test="position != last()"><xsl:text>&amp;</xsl:text></xsl:if>
726 </xsl:template>
727
728 <xsl:template match="combat">
729  <xsl:text>\begin{aoncombat}</xsl:text>
730   <xsl:apply-templates select="enemy" />
731   <xsl:choose>
732    <xsl:when test="enemy-attribute[@class='combatskill']">
733     <xsl:text>: {\small COMBAT~SKILL}~</xsl:text>
734     <xsl:value-of select="enemy-attribute[@class='combatskill']" />
735    </xsl:when>
736    <xsl:when test="enemy-attribute[@class='closecombatskill']">
737     <xsl:text>: {\small CLOSE~COMBAT~SKILL}~</xsl:text>
738     <xsl:value-of select="enemy-attribute[@class='closecombatskill']" />
739    </xsl:when>
740   </xsl:choose>
741   <xsl:text> ~~{\small ENDURANCE}~</xsl:text>
742   <xsl:choose>
743    <xsl:when test="enemy-attribute[@class='target']">
744     <xsl:text>~({\small TARGET}~points)~</xsl:text>
745     <xsl:value-of select="enemy-attribute[@class='target']" />
746    </xsl:when>
747    <xsl:when test="enemy-attribute[@class='resistance']">
748     <xsl:text>~({\small RESISTANCE}~points)~</xsl:text>
749     <xsl:value-of select="enemy-attribute[@class='resistance']" />
750    </xsl:when>
751    <xsl:otherwise>
752     <xsl:value-of select="enemy-attribute[@class='endurance']" />
753    </xsl:otherwise>
754   </xsl:choose>
755  <xsl:text>\end{aoncombat}</xsl:text>
756  <xsl:value-of select="$newparagraph" />
757 </xsl:template>
758
759 <xsl:template match="choice">
760  <xsl:variable name="link">
761   <xsl:value-of select="@idref" />
762  </xsl:variable>
763
764  <xsl:text>\begin{aonchoice}</xsl:text>
765   <xsl:for-each select="* | text()">
766    <xsl:choose>
767     <xsl:when test="self::link-text">
768      <xsl:text>\hyperlink{</xsl:text>
769      <xsl:value-of select="$link" />
770      <xsl:text>}{\bfseries </xsl:text>
771       <xsl:apply-templates />
772      <xsl:text>}</xsl:text>
773     </xsl:when>
774     <xsl:otherwise>
775      <xsl:apply-templates select="." />
776     </xsl:otherwise>
777    </xsl:choose>
778   </xsl:for-each>
779  <xsl:text>\end{aonchoice}</xsl:text>
780  <xsl:value-of select="$newparagraph" />
781 </xsl:template>
782
783 <xsl:template match="signpost">
784  <xsl:text>\begin{center}</xsl:text><xsl:apply-templates /><xsl:text>\end{center}</xsl:text>
785  <xsl:value-of select="$newparagraph" />
786 </xsl:template>
787
788 <xsl:template match="blockquote">
789  <xsl:text>\begin{quote}</xsl:text><xsl:apply-templates /><xsl:text>\end{quote}</xsl:text>
790  <xsl:value-of select="$newparagraph" />
791 </xsl:template>
792
793 <xsl:template match="illustration">
794  <xsl:choose>
795   <xsl:when test="instance[@class='pdf'] and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )">
796    <xsl:text>\begin{figure}[</xsl:text>
797    <xsl:choose>
798     <xsl:when test="@class='inline'">!ht</xsl:when>
799     <xsl:when test="@class='float'">p</xsl:when>
800     <xsl:when test="@class='accent'">bt</xsl:when>
801     <xsl:otherwise><xsl:text>invalid class</xsl:text></xsl:otherwise>
802    </xsl:choose>
803    <xsl:text>]</xsl:text>
804    <xsl:value-of select="$newline" />
805    <xsl:text>\centering</xsl:text>
806    <xsl:value-of select="$newline" />
807    <xsl:text>\includegraphics</xsl:text>
808    <xsl:if test="@class='float'">
809     <!--<xsl:text>[width=\textwidth,keepaspectratio]</xsl:text>-->
810     <xsl:text>[width=\textwidth,height=570pt,keepaspectratio]</xsl:text>
811    </xsl:if>
812    <xsl:text>{</xsl:text>
813     <xsl:value-of select="instance[@class='pdf']/@src" />
814    <xsl:text>} %</xsl:text>
815    <xsl:if test="@class='float'">
816     <xsl:value-of select="$newline" />
817     <xsl:text>\vspace*{\fill}</xsl:text>
818     <xsl:value-of select="$newline" />
819     <xsl:text>\\ \mbox{ \hypertarget{ill</xsl:text>
820      <xsl:number count="illustration[@class='float' and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )]" from="/" level="any" format="1" />
821     <xsl:text>}{Illustration </xsl:text>
822      <xsl:number count="illustration[@class='float' and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )]" from="/" level="any" format="I" />
823     <xsl:text>}}\\[1em]{\itshape </xsl:text>
824     <xsl:apply-templates select="meta/description" />
825     <xsl:text>}</xsl:text>
826    </xsl:if>
827    <xsl:value-of select="$newline" />
828    <xsl:text>\end{figure}</xsl:text>
829    <xsl:value-of select="$newline" />
830   </xsl:when>
831
832   <xsl:when test="instance[@class='tex'] and contains( $use-illustrators, concat( ':', meta/creator, ':' ) )">
833    <xsl:value-of select="$newline" />
834    <xsl:text>\begin{figure}[!h]</xsl:text>
835    <xsl:value-of select="$newline" />
836     <xsl:text>\centering</xsl:text>
837     <xsl:value-of select="$newline" />
838     <xsl:text>\input{</xsl:text><xsl:value-of select="instance[@class='tex']/@src" /><xsl:text>}</xsl:text>
839     <xsl:value-of select="$newline" />
840    <xsl:text>\end{figure}</xsl:text>
841    <xsl:value-of select="$newline" />
842
843    <xsl:text>\clearpage{}</xsl:text>   
844    <xsl:value-of select="$newparagraph" />
845   </xsl:when>
846
847   <xsl:otherwise />
848
849  </xsl:choose>
850 </xsl:template>
851
852 <xsl:template match="instance" />
853
854 <xsl:template match="footnotes" />
855
856 <xsl:template match="footnote">
857  <xsl:apply-templates />
858 </xsl:template>
859
860 <xsl:template match="hr">
861  <xsl:text>\rule{\textwidth}{0.4pt}</xsl:text>
862  <xsl:value-of select="$newline" />
863 </xsl:template>
864
865 <xsl:template match="dt">
866  <xsl:text>{\bfseries </xsl:text><xsl:apply-templates /><xsl:text>}\\*\\*</xsl:text>
867  <xsl:value-of select="$newline" />
868 </xsl:template>
869
870 <xsl:template match="dd">
871  <xsl:apply-templates />
872  <xsl:value-of select="$newparagraph" />
873 </xsl:template>
874
875 <xsl:template match="li">
876  <xsl:text>\item </xsl:text><xsl:apply-templates />
877  <xsl:value-of select="$newline" />
878 </xsl:template>
879
880 <!-- ==================== inline elements ======================= -->
881
882 <xsl:template match="a">
883  <xsl:if test="@idref">
884   <xsl:text>\hyperlink{</xsl:text>
885   <xsl:value-of select="@idref" />
886   <xsl:text>}{</xsl:text>
887  </xsl:if>
888  <xsl:if test="@id">
889   <xsl:text>\hypertarget{</xsl:text>
890   <xsl:value-of select="@id" />
891   <xsl:text>}{</xsl:text>
892  </xsl:if>
893
894  <xsl:apply-templates />
895
896  <xsl:if test="@idref">
897   <xsl:text>}</xsl:text>
898  </xsl:if>
899  <xsl:if test="@id">
900   <xsl:text>}</xsl:text>
901  </xsl:if>
902 </xsl:template>
903
904 <xsl:template match="a[@class='footnote']">
905  <xsl:apply-templates />
906  <xsl:text>\footnote{</xsl:text>
907  <xsl:for-each select="id( @idref )">
908   <xsl:apply-templates />
909  </xsl:for-each>
910  <xsl:text>}</xsl:text>
911 </xsl:template>
912
913 <xsl:template match="em">
914  <xsl:text>\emph{</xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
915 </xsl:template>
916
917 <xsl:template match="strong">
918  <xsl:text>{\bfseries </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
919 </xsl:template>
920
921 <xsl:template match="cite">
922  <xsl:text>{\itshape </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
923 </xsl:template>
924
925 <xsl:template match="thought">
926  <xsl:text>{\itshape </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
927 </xsl:template>
928
929 <xsl:template match="onomatopoeia">
930  <xsl:text>{\itshape </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
931 </xsl:template>
932
933 <xsl:template match="spell">
934  <xsl:text>{\itshape </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
935 </xsl:template>
936
937 <xsl:template match="item">
938  <xsl:apply-templates />
939 </xsl:template>
940
941 <xsl:template match="foreign">
942  <xsl:text>{\itshape </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
943 </xsl:template>
944
945 <xsl:template match="quote">
946  <xsl:text>&lsquot;</xsl:text>
947   <xsl:apply-templates />
948  <xsl:if test="not(self::*[@class='open-ended'])"><xsl:text>&rsquot;</xsl:text></xsl:if>
949 </xsl:template>
950
951 <xsl:template match="quote//quote">
952  <xsl:text>&ldquot;</xsl:text>
953   <xsl:apply-templates />
954  <xsl:if test="not(self::*[@class='open-ended'])"><xsl:text>&rdquot;</xsl:text></xsl:if>
955 </xsl:template>
956
957 <xsl:template match="code">
958  <xsl:text>{\ttfamily </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
959 </xsl:template>
960
961 <xsl:template match="br">
962  <xsl:text>\\</xsl:text>
963 </xsl:template>
964
965 <xsl:template match="typ[@class='attribute']">
966  <xsl:text>{\small </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
967 </xsl:template>
968
969 <xsl:template match="footnote//typ[@class='attribute']">
970  <xsl:text>{\scriptsize </xsl:text><xsl:apply-templates /><xsl:text>}</xsl:text>
971 </xsl:template>
972
973 </xsl:transform>