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