reorganizing the repository
[project-aon.git] / common / xsl / epub-opf-metadata.xsl
1 <?xml version="1.0"?>
2 <!DOCTYPE xsl:transform [
3  <!ENTITY % xhtml.characters SYSTEM "../../en/xml/htmlchar.mod">
4  %xhtml.characters;
5 ]>
6
7 <xsl:transform version="1.0"
8   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
9
10 <xsl:output method="xml"
11             indent="yes"
12             encoding="UTF-8"
13             omit-xml-declaration="yes"/>
14
15 <xsl:strip-space elements="section data ol ul dl li dd footnotes footnote" />
16 <xsl:preserve-space elements="p choice" />
17
18 <!-- ====================== parameters ========================== -->
19
20 <xsl:param name="use-illustrators" />
21 <xsl:param name="language"><xsl:text>en</xsl:text></xsl:param>
22 <xsl:param name="opf-id">
23  <xsl:text>error: ID value for unique ID not provided to XSL</xsl:text>
24 </xsl:param>
25 <xsl:param name="unique-identifier">
26  <xsl:text>error: unique ID not provided to XSL</xsl:text>
27 </xsl:param>
28 <xsl:param name="opf-scheme"><xsl:text>URI</xsl:text></xsl:param>
29
30 <!-- Additional metada that is included through parameters as it is
31      not available (yet) in the XML files:
32      * series (defaults to 'Lone Wolf')
33      * position of this book in the series (undefined if not specific)
34 -->
35 <xsl:param name="book_series"><xsl:text>Lone Wolf</xsl:text></xsl:param>
36 <xsl:param name="book_series_index" />
37 <xsl:param name="addcover" />
38
39  
40 <!-- ======================= variables ========================== -->
41
42 <xsl:variable name="newline">
43 <xsl:text>
44 </xsl:text>
45 </xsl:variable>
46
47 <!-- ======================== Templates ========================= -->
48
49 <!-- ================= hierarchical sections ==================== -->
50
51
52 <xsl:template match="/">
53  <xsl:apply-templates select="gamebook/meta"/>
54 </xsl:template>
55
56 <xsl:template match="gamebook/meta">
57  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" 
58            xmlns:opf="http://www.idpf.org/2007/opf">
59   <dc:title>
60    <xsl:apply-templates select="title[1]" />
61   </dc:title>
62   <meta name="cover" content="cover"/>
63   <dc:language>
64    <xsl:value-of select="$language" />
65   </dc:language>
66   <dc:identifier>
67    <xsl:attribute name="id">
68     <xsl:value-of select="$opf-id"/>
69    </xsl:attribute>
70    <xsl:attribute name="opf:scheme">
71     <xsl:value-of select="$opf-scheme"/>
72    </xsl:attribute>
73    <xsl:value-of select="$unique-identifier"/>
74   </dc:identifier>
75   <xsl:apply-templates select="creator[@class='author']"/>
76   <xsl:apply-templates select="creator[@class='illustrator']"/>
77   <dc:date><xsl:apply-templates select="date[@class='publication']"/></dc:date>
78   <dc:abstract><xsl:apply-templates select="description[@class='blurb']"/></dc:abstract>
79   <dc:publisher><xsl:apply-templates select="publisher"/></dc:publisher>
80   <dc:rights>Distribution of this Edition is restricted under the terms of the Project Aon License.</dc:rights>
81   <dc:rightsholder><xsl:apply-templates select="rights[@class='copyrights']"/></dc:rightsholder>
82   <dc:subject>Fiction</dc:subject>
83   <dc:subject>Fantasy</dc:subject>
84   <dc:subject><xsl:value-of select="$book_series"/></dc:subject>
85   <dc:subject>Magnamund</dc:subject>
86   <dc:type>Text</dc:type>
87
88   <!-- Meta data specific for Calibre -->
89   <meta name="calibre:series">
90    <xsl:attribute name="content">
91     <xsl:value-of select="$book_series"/>
92    </xsl:attribute>
93   </meta>
94   <xsl:choose>
95   <xsl:when test="$book_series_index">
96     <meta name="calibre:series_index">
97         <xsl:attribute name="content">
98             <xsl:value-of select="$book_series_index"/>
99         </xsl:attribute>
100     </meta>
101   </xsl:when>
102   </xsl:choose>
103  </metadata>
104
105   <guide>
106   <xsl:choose>
107     <xsl:when test="$addcover='yes'">
108      <reference href="cover.jpg" type="cover" title="Cover"/>
109     </xsl:when>
110     <xsl:otherwise>
111      <reference href="coverpage.html" type="cover" title="Cover"/>
112     </xsl:otherwise>
113   </xsl:choose>
114   </guide>
115
116
117 </xsl:template>
118 <!--
119 <xsl:template match="title">
120  <xsl:value-of select="."/>
121 </xsl:template>
122 -->
123
124 <xsl:template match="creator[@class='author']">
125   <dc:creator opf:role="aut" xmlns:dc="http://purl.org/dc/elements/1.1/" 
126                              xmlns:opf="http://www.idpf.org/2007/opf">
127    <xsl:attribute name="opf:file-as"><xsl:value-of select="@sort-name" /></xsl:attribute> 
128    <xsl:apply-templates />
129   </dc:creator>
130    <xsl:value-of select="$newline" />
131 </xsl:template>
132
133 <xsl:template match="creator[@class='illustrator']">
134   <dc:creator opf:role="ill" xmlns:dc="http://purl.org/dc/elements/1.1/" 
135                              xmlns:opf="http://www.idpf.org/2007/opf">
136    <xsl:attribute name="opf:file-as"><xsl:value-of select="@sort-name" /></xsl:attribute> 
137    <xsl:apply-templates />
138   </dc:creator>
139    <xsl:value-of select="$newline" />
140 </xsl:template>
141
142 <xsl:template match="section" />
143
144 <!-- ==================== block elements ======================== -->
145
146 <xsl:template match="p">
147  <p><xsl:apply-templates /></p>
148  <xsl:value-of select="$newline" />
149 </xsl:template>
150
151 <xsl:template match="ol">
152  <ol>
153   <xsl:if test="@start"><xsl:attribute name="start"><xsl:value-of select="@start" /></xsl:attribute></xsl:if>
154   <xsl:value-of select="$newline" />
155   <xsl:apply-templates />
156  </ol><xsl:value-of select="$newline" />
157 </xsl:template>
158
159 <xsl:template match="ul">
160  <ul>
161   <xsl:if test="self::*[@class='unbulleted']"><xsl:attribute name="class"><xsl:text>unbulleted</xsl:text></xsl:attribute></xsl:if>
162   <xsl:value-of select="$newline" />
163   <xsl:apply-templates />
164  </ul><xsl:value-of select="$newline" />
165 </xsl:template>
166
167 <xsl:template match="dl">
168  <dl><xsl:value-of select="$newline" />
169   <xsl:apply-templates />
170  </dl><xsl:value-of select="$newline" />
171 </xsl:template>
172
173 <xsl:template match="dt">
174  <dt><xsl:apply-templates /></dt>
175  <xsl:value-of select="$newline" />
176 </xsl:template>
177
178 <xsl:template match="dd">
179  <dd><xsl:apply-templates /></dd>
180  <xsl:value-of select="$newline" />
181 </xsl:template>
182
183 <xsl:template match="li">
184  <li>
185   <xsl:if test="@value"><xsl:attribute name="value"><xsl:value-of select="@value" /></xsl:attribute></xsl:if>
186   <xsl:apply-templates />
187  </li>
188  <xsl:value-of select="$newline" />
189 </xsl:template>
190
191 <xsl:template match="table">
192  <table align="center" border="1" cellspacing="0" cellpadding="2">
193   <xsl:if test="@summary"><xsl:attribute name="summary"><xsl:value-of select="@summary" /></xsl:attribute></xsl:if>
194   <xsl:apply-templates />
195  </table>
196  <xsl:value-of select="$newline" />
197 </xsl:template>
198
199 <xsl:template match="caption">
200  <caption>
201   <xsl:apply-templates />
202  </caption>
203 </xsl:template>
204
205 <xsl:template match="colgroup[@scope]">
206  <colgroup>
207   <xsl:attribute name="scope"><xsl:value-of select="@scope" /></xsl:attribute>
208  </colgroup>
209 </xsl:template>
210
211 <xsl:template match="thead">
212  <thead>
213   <xsl:apply-templates />
214  </thead>
215 </xsl:template>
216
217 <xsl:template match="tfoot">
218  <tfoot>
219   <xsl:apply-templates />
220  </tfoot>
221 </xsl:template>
222
223 <xsl:template match="tbody">
224  <tbody>
225   <xsl:apply-templates />
226  </tbody>
227 </xsl:template>
228
229 <xsl:template match="tr">
230  <tr>
231   <xsl:apply-templates />
232  </tr>
233 </xsl:template>
234
235 <xsl:template match="th">
236  <th>
237   <xsl:if test="@align"><xsl:attribute name="align"><xsl:value-of select="@align" /></xsl:attribute></xsl:if>
238   <xsl:if test="@valign"><xsl:attribute name="valign"><xsl:value-of select="@valign" /></xsl:attribute></xsl:if>
239   <xsl:if test="@char"><xsl:attribute name="char"><xsl:value-of select="@char" /></xsl:attribute></xsl:if>
240   <xsl:if test="@rowspan"><xsl:attribute name="rowspan"><xsl:value-of select="@rowspan" /></xsl:attribute></xsl:if>
241   <xsl:if test="@colspan"><xsl:attribute name="colspan"><xsl:value-of select="@colspan" /></xsl:attribute></xsl:if>
242   <xsl:if test="@axis"><xsl:attribute name="axis"><xsl:value-of select="@axis" /></xsl:attribute></xsl:if>
243   <xsl:if test="@scope"><xsl:attribute name="scope"><xsl:value-of select="@scope" /></xsl:attribute></xsl:if>
244   <xsl:apply-templates />
245  </th>
246 </xsl:template>
247
248 <xsl:template match="td">
249  <td>
250   <xsl:if test="@align"><xsl:attribute name="align"><xsl:value-of select="@align" /></xsl:attribute></xsl:if>
251   <xsl:if test="@valign"><xsl:attribute name="valign"><xsl:value-of select="@valign" /></xsl:attribute></xsl:if>
252   <xsl:if test="@char"><xsl:attribute name="char"><xsl:value-of select="@char" /></xsl:attribute></xsl:if>
253   <xsl:if test="@rowspan"><xsl:attribute name="rowspan"><xsl:value-of select="@rowspan" /></xsl:attribute></xsl:if>
254   <xsl:if test="@colspan"><xsl:attribute name="colspan"><xsl:value-of select="@colspan" /></xsl:attribute></xsl:if>
255   <xsl:if test="@axis"><xsl:attribute name="axis"><xsl:value-of select="@axis" /></xsl:attribute></xsl:if>
256   <xsl:if test="@scope"><xsl:attribute name="scope"><xsl:value-of select="@scope" /></xsl:attribute></xsl:if>
257   <xsl:apply-templates />
258  </td>
259 </xsl:template>
260
261 <xsl:template match="blockquote">
262  <blockquote><xsl:value-of select="$newline" />
263   <xsl:apply-templates /><xsl:value-of select="$newline" />
264  </blockquote><xsl:value-of select="$newline" />
265 </xsl:template>
266
267 <xsl:template match="poetry">
268  <blockquote class="poetry"><xsl:value-of select="$newline" />
269   <xsl:apply-templates /><xsl:value-of select="$newline" />
270  </blockquote><xsl:value-of select="$newline" />
271 </xsl:template>
272
273 <xsl:template match="hr">
274  <hr />
275  <xsl:value-of select="$newline" />
276 </xsl:template>
277
278 <!-- ==================== inline elements ======================= -->
279
280 <xsl:template match="bookref">
281  <a>
282   <xsl:attribute name="href">
283    <xsl:variable name="my-section">
284     <xsl:choose>
285      <xsl:when test="@section">
286       <xsl:value-of select="@section" />
287      </xsl:when>
288      <xsl:otherwise>
289       <xsl:text>title</xsl:text>
290      </xsl:otherwise>
291     </xsl:choose>
292    </xsl:variable>
293    <xsl:variable name="my-series">
294     <!-- If series is specified, go one directory back and then to series. Otherwise, add nothing. -->
295     <xsl:choose>
296      <xsl:when test="@series">
297       <xsl:text>/../</xsl:text><xsl:value-of select="@series" />
298      </xsl:when>
299      <xsl:otherwise>
300       <xsl:text></xsl:text>
301      </xsl:otherwise>
302     </xsl:choose>
303    </xsl:variable>
304    <xsl:text>..</xsl:text><xsl:value-of select="$my-series" /><xsl:text>/</xsl:text><xsl:value-of select="@book" /><xsl:text>/</xsl:text><xsl:value-of select="$my-section" /><xsl:text>.htm</xsl:text>
305   </xsl:attribute>
306   <xsl:if test="@id"><xsl:attribute name="name"><xsl:value-of select="@id" /></xsl:attribute></xsl:if>
307   <xsl:apply-templates />
308  </a>
309 </xsl:template>
310
311 <xsl:template match="em">
312  <em><xsl:apply-templates /></em>
313 </xsl:template>
314
315 <xsl:template match="strong">
316  <strong><xsl:apply-templates /></strong>
317 </xsl:template>
318
319 <xsl:template match="thought">
320  <i><xsl:apply-templates /></i>
321 </xsl:template>
322
323 <xsl:template match="onomatopoeia">
324  <i><xsl:apply-templates /></i>
325 </xsl:template>
326
327 <xsl:template match="foreign">
328  <i><xsl:apply-templates /></i>
329 </xsl:template>
330
331 <xsl:template match="quote">
332  <xsl:text>&#8216;</xsl:text>
333   <xsl:apply-templates />
334  <xsl:if test="not(self::*[@class='open-ended'])"><xsl:text>&#8217;</xsl:text></xsl:if>
335 </xsl:template>
336
337 <xsl:template match="quote//quote">
338  <xsl:text>&#8220;</xsl:text>
339   <xsl:apply-templates />
340  <xsl:if test="not(self::*[@class='open-ended'])"><xsl:text>&#8221;</xsl:text></xsl:if>
341 </xsl:template>
342
343 <xsl:template match="cite">
344  <cite><xsl:apply-templates /></cite>
345 </xsl:template>
346
347 <xsl:template match="code">
348  <tt><xsl:apply-templates /></tt>
349 </xsl:template>
350
351 <xsl:template match="line">
352  <xsl:apply-templates />
353  <xsl:if test="position( ) != last( )"><br /></xsl:if>
354 </xsl:template>
355
356 <xsl:template match="br">
357  <br />
358 </xsl:template>
359
360 <!-- ==================== character elements ==================== -->
361 <!--
362
363 These templates define the mapping between the character elements used in
364 the Project Aon instances of Gamebook XML and the Unicode characters.
365
366 Portions Copyright International Organization for Standardization 1986 
367 Permission to copy in any form is granted for use with conforming SGML 
368 systems and applications as defined in ISO 8879, provided this notice 
369 is included in all copies.
370
371 -->
372
373 <xsl:template match="ch.apos"><xsl:text>&#39;</xsl:text></xsl:template><!-- apostrophe = single quotation mark -->
374 <xsl:template match="ch.nbsp"><xsl:text>&#160;</xsl:text></xsl:template><!-- no-break space = non-breaking space, U+00A0 ISOnum -->
375 <xsl:template match="ch.iexcl"><xsl:text>&#161;</xsl:text></xsl:template><!-- inverted exclamation mark, U+00A1 ISOnum -->
376 <xsl:template match="ch.cent"><xsl:text>&#162;</xsl:text></xsl:template><!-- cent sign, U+00A2 ISOnum -->
377 <xsl:template match="ch.pound"><xsl:text>&#163;</xsl:text></xsl:template><!-- pound sign, U+00A3 ISOnum -->
378 <xsl:template match="ch.curren"><xsl:text>&#164;</xsl:text></xsl:template><!-- currency sign, U+00A4 ISOnum -->
379 <xsl:template match="ch.yen"><xsl:text>&#165;</xsl:text></xsl:template><!-- yen sign = yuan sign, U+00A5 ISOnum -->
380 <xsl:template match="ch.brvbar"><xsl:text>&#166;</xsl:text></xsl:template><!-- broken bar = broken vertical bar, U+00A6 ISOnum -->
381 <xsl:template match="ch.sect"><xsl:text>&#167;</xsl:text></xsl:template><!-- section sign, U+00A7 ISOnum -->
382 <xsl:template match="ch.uml"><xsl:text>&#168;</xsl:text></xsl:template><!-- diaeresis = spacing diaeresis, U+00A8 ISOdia -->
383 <xsl:template match="ch.copy"><xsl:text>&#169;</xsl:text></xsl:template><!-- copyright sign, U+00A9 ISOnum -->
384 <xsl:template match="ch.ordf"><xsl:text>&#170;</xsl:text></xsl:template><!-- feminine ordinal indicator, U+00AA ISOnum -->
385 <xsl:template match="ch.laquo"><xsl:text>&#171;</xsl:text></xsl:template><!-- left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum -->
386 <xsl:template match="ch.not"><xsl:text>&#172;</xsl:text></xsl:template><!-- not sign, U+00AC ISOnum -->
387 <xsl:template match="ch.shy"><xsl:text>&#173;</xsl:text></xsl:template><!-- soft hyphen = discretionary hyphen, U+00AD ISOnum -->
388 <xsl:template match="ch.reg"><xsl:text>&#174;</xsl:text></xsl:template><!-- registered sign = registered trade mark sign, U+00AE ISOnum -->
389 <xsl:template match="ch.macr"><xsl:text>&#175;</xsl:text></xsl:template><!-- macron = spacing macron = overline = APL overbar, U+00AF ISOdia -->
390 <xsl:template match="ch.deg"><xsl:text>&#176;</xsl:text></xsl:template><!-- degree sign, U+00B0 ISOnum -->
391 <xsl:template match="ch.plusmn"><xsl:text>&#177;</xsl:text></xsl:template><!-- plus-minus sign = plus-or-minus sign, U+00B1 ISOnum -->
392 <xsl:template match="ch.sup2"><xsl:text>&#178;</xsl:text></xsl:template><!-- superscript two = superscript digit two = squared, U+00B2 ISOnum -->
393 <xsl:template match="ch.sup3"><xsl:text>&#179;</xsl:text></xsl:template><!-- superscript three = superscript digit three = cubed, U+00B3 ISOnum -->
394 <xsl:template match="ch.acute"><xsl:text>&#180;</xsl:text></xsl:template><!-- acute accent = spacing acute, U+00B4 ISOdia -->
395 <xsl:template match="ch.micro"><xsl:text>&#181;</xsl:text></xsl:template><!-- micro sign, U+00B5 ISOnum -->
396 <xsl:template match="ch.para"><xsl:text>&#182;</xsl:text></xsl:template><!-- pilcrow sign  = paragraph sign, U+00B6 ISOnum -->
397 <xsl:template match="ch.middot"><xsl:text>&#183;</xsl:text></xsl:template><!-- middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum -->
398 <xsl:template match="ch.cedil"><xsl:text>&#184;</xsl:text></xsl:template><!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
399 <xsl:template match="ch.sup1"><xsl:text>&#185;</xsl:text></xsl:template><!-- superscript one = superscript digit one, U+00B9 ISOnum -->
400 <xsl:template match="ch.ordm"><xsl:text>&#186;</xsl:text></xsl:template><!-- masculine ordinal indicator, U+00BA ISOnum -->
401 <xsl:template match="ch.raquo"><xsl:text>&#187;</xsl:text></xsl:template><!-- right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum -->
402 <xsl:template match="ch.frac14"><xsl:text>&#188;</xsl:text></xsl:template><!-- vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum -->
403 <xsl:template match="ch.frac12"><xsl:text>&#189;</xsl:text></xsl:template><!-- vulgar fraction one half = fraction one half, U+00BD ISOnum -->
404 <xsl:template match="ch.frac34"><xsl:text>&#190;</xsl:text></xsl:template><!-- vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum -->
405 <xsl:template match="ch.iquest"><xsl:text>&#191;</xsl:text></xsl:template><!-- inverted question mark = turned question mark, U+00BF ISOnum -->
406 <xsl:template match="ch.Agrave"><xsl:text>&#192;</xsl:text></xsl:template><!-- latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 -->
407 <xsl:template match="ch.Aacute"><xsl:text>&#193;</xsl:text></xsl:template><!-- latin capital letter A with acute, U+00C1 ISOlat1 -->
408 <xsl:template match="ch.Acirc"><xsl:text>&#194;</xsl:text></xsl:template><!-- latin capital letter A with circumflex, U+00C2 ISOlat1 -->
409 <xsl:template match="ch.Atilde"><xsl:text>&#195;</xsl:text></xsl:template><!-- latin capital letter A with tilde, U+00C3 ISOlat1 -->
410 <xsl:template match="ch.Auml"><xsl:text>&#196;</xsl:text></xsl:template><!-- latin capital letter A with diaeresis, U+00C4 ISOlat1 -->
411 <xsl:template match="ch.Aring"><xsl:text>&#197;</xsl:text></xsl:template><!-- latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 -->
412 <xsl:template match="ch.AElig"><xsl:text>&#198;</xsl:text></xsl:template><!-- latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 -->
413 <xsl:template match="ch.Ccedil"><xsl:text>&#199;</xsl:text></xsl:template><!-- latin capital letter C with cedilla, U+00C7 ISOlat1 -->
414 <xsl:template match="ch.Egrave"><xsl:text>&#200;</xsl:text></xsl:template><!-- latin capital letter E with grave, U+00C8 ISOlat1 -->
415 <xsl:template match="ch.Eacute"><xsl:text>&#201;</xsl:text></xsl:template><!-- latin capital letter E with acute, U+00C9 ISOlat1 -->
416 <xsl:template match="ch.Ecirc"><xsl:text>&#202;</xsl:text></xsl:template><!-- latin capital letter E with circumflex, U+00CA ISOlat1 -->
417 <xsl:template match="ch.Euml"><xsl:text>&#203;</xsl:text></xsl:template><!-- latin capital letter E with diaeresis, U+00CB ISOlat1 -->
418 <xsl:template match="ch.Igrave"><xsl:text>&#204;</xsl:text></xsl:template><!-- latin capital letter I with grave, U+00CC ISOlat1 -->
419 <xsl:template match="ch.Iacute"><xsl:text>&#205;</xsl:text></xsl:template><!-- latin capital letter I with acute, U+00CD ISOlat1 -->
420 <xsl:template match="ch.Icirc"><xsl:text>&#206;</xsl:text></xsl:template><!-- latin capital letter I with circumflex, U+00CE ISOlat1 -->
421 <xsl:template match="ch.Iuml"><xsl:text>&#207;</xsl:text></xsl:template><!-- latin capital letter I with diaeresis, U+00CF ISOlat1 -->
422 <xsl:template match="ch.ETH"><xsl:text>&#208;</xsl:text></xsl:template><!-- latin capital letter ETH, U+00D0 ISOlat1 -->
423 <xsl:template match="ch.Ntilde"><xsl:text>&#209;</xsl:text></xsl:template><!-- latin capital letter N with tilde, U+00D1 ISOlat1 -->
424 <xsl:template match="ch.Ograve"><xsl:text>&#210;</xsl:text></xsl:template><!-- latin capital letter O with grave, U+00D2 ISOlat1 -->
425 <xsl:template match="ch.Oacute"><xsl:text>&#211;</xsl:text></xsl:template><!-- latin capital letter O with acute, U+00D3 ISOlat1 -->
426 <xsl:template match="ch.Ocirc"><xsl:text>&#212;</xsl:text></xsl:template><!-- latin capital letter O with circumflex, U+00D4 ISOlat1 -->
427 <xsl:template match="ch.Otilde"><xsl:text>&#213;</xsl:text></xsl:template><!-- latin capital letter O with tilde, U+00D5 ISOlat1 -->
428 <xsl:template match="ch.Ouml"><xsl:text>&#214;</xsl:text></xsl:template><!-- latin capital letter O with diaeresis, U+00D6 ISOlat1 -->
429 <xsl:template match="ch.times"><xsl:text>&#215;</xsl:text></xsl:template><!-- multiplication sign, U+00D7 ISOnum -->
430 <xsl:template match="ch.Oslash"><xsl:text>&#216;</xsl:text></xsl:template><!-- latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 -->
431 <xsl:template match="ch.Ugrave"><xsl:text>&#217;</xsl:text></xsl:template><!-- latin capital letter U with grave, U+00D9 ISOlat1 -->
432 <xsl:template match="ch.Uacute"><xsl:text>&#218;</xsl:text></xsl:template><!-- latin capital letter U with acute, U+00DA ISOlat1 -->
433 <xsl:template match="ch.Ucirc"><xsl:text>&#219;</xsl:text></xsl:template><!-- latin capital letter U with circumflex, U+00DB ISOlat1 -->
434 <xsl:template match="ch.Uuml"><xsl:text>&#220;</xsl:text></xsl:template><!-- latin capital letter U with diaeresis, U+00DC ISOlat1 -->
435 <xsl:template match="ch.Yacute"><xsl:text>&#221;</xsl:text></xsl:template><!-- latin capital letter Y with acute, U+00DD ISOlat1 -->
436 <xsl:template match="ch.THORN"><xsl:text>&#222;</xsl:text></xsl:template><!-- latin capital letter THORN, U+00DE ISOlat1 -->
437 <xsl:template match="ch.szlig"><xsl:text>&#223;</xsl:text></xsl:template><!-- latin small letter sharp s = ess-zed, U+00DF ISOlat1 -->
438 <xsl:template match="ch.agrave"><xsl:text>&#224;</xsl:text></xsl:template><!-- latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 -->
439 <xsl:template match="ch.aacute"><xsl:text>&#225;</xsl:text></xsl:template><!-- latin small letter a with acute, U+00E1 ISOlat1 -->
440 <xsl:template match="ch.acirc"><xsl:text>&#226;</xsl:text></xsl:template><!-- latin small letter a with circumflex, U+00E2 ISOlat1 -->
441 <xsl:template match="ch.atilde"><xsl:text>&#227;</xsl:text></xsl:template><!-- latin small letter a with tilde, U+00E3 ISOlat1 -->
442 <xsl:template match="ch.auml"><xsl:text>&#228;</xsl:text></xsl:template><!-- latin small letter a with diaeresis, U+00E4 ISOlat1 -->
443 <xsl:template match="ch.aring"><xsl:text>&#229;</xsl:text></xsl:template><!-- latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 -->
444 <xsl:template match="ch.aelig"><xsl:text>&#230;</xsl:text></xsl:template><!-- latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 -->
445 <xsl:template match="ch.ccedil"><xsl:text>&#231;</xsl:text></xsl:template><!-- latin small letter c with cedilla, U+00E7 ISOlat1 -->
446 <xsl:template match="ch.egrave"><xsl:text>&#232;</xsl:text></xsl:template><!-- latin small letter e with grave, U+00E8 ISOlat1 -->
447 <xsl:template match="ch.eacute"><xsl:text>&#233;</xsl:text></xsl:template><!-- latin small letter e with acute, U+00E9 ISOlat1 -->
448 <xsl:template match="ch.ecirc"><xsl:text>&#234;</xsl:text></xsl:template><!-- latin small letter e with circumflex, U+00EA ISOlat1 -->
449 <xsl:template match="ch.euml"><xsl:text>&#235;</xsl:text></xsl:template><!-- latin small letter e with diaeresis, U+00EB ISOlat1 -->
450 <xsl:template match="ch.igrave"><xsl:text>&#236;</xsl:text></xsl:template><!-- latin small letter i with grave, U+00EC ISOlat1 -->
451 <xsl:template match="ch.iacute"><xsl:text>&#237;</xsl:text></xsl:template><!-- latin small letter i with acute, U+00ED ISOlat1 -->
452 <xsl:template match="ch.icirc"><xsl:text>&#238;</xsl:text></xsl:template><!-- latin small letter i with circumflex, U+00EE ISOlat1 -->
453 <xsl:template match="ch.iuml"><xsl:text>&#239;</xsl:text></xsl:template><!-- latin small letter i with diaeresis, U+00EF ISOlat1 -->
454 <xsl:template match="ch.eth"><xsl:text>&#240;</xsl:text></xsl:template><!-- latin small letter eth, U+00F0 ISOlat1 -->
455 <xsl:template match="ch.ntilde"><xsl:text>&#241;</xsl:text></xsl:template><!-- latin small letter n with tilde, U+00F1 ISOlat1 -->
456 <xsl:template match="ch.ograve"><xsl:text>&#242;</xsl:text></xsl:template><!-- latin small letter o with grave, U+00F2 ISOlat1 -->
457 <xsl:template match="ch.oacute"><xsl:text>&#243;</xsl:text></xsl:template><!-- latin small letter o with acute, U+00F3 ISOlat1 -->
458 <xsl:template match="ch.ocirc"><xsl:text>&#244;</xsl:text></xsl:template><!-- latin small letter o with circumflex, U+00F4 ISOlat1 -->
459 <xsl:template match="ch.otilde"><xsl:text>&#245;</xsl:text></xsl:template><!-- latin small letter o with tilde, U+00F5 ISOlat1 -->
460 <xsl:template match="ch.ouml"><xsl:text>&#246;</xsl:text></xsl:template><!-- latin small letter o with diaeresis, U+00F6 ISOlat1 -->
461 <xsl:template match="ch.divide"><xsl:text>&#247;</xsl:text></xsl:template><!-- division sign, U+00F7 ISOnum -->
462 <xsl:template match="ch.oslash"><xsl:text>&#248;</xsl:text></xsl:template><!-- latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 -->
463 <xsl:template match="ch.ugrave"><xsl:text>&#249;</xsl:text></xsl:template><!-- latin small letter u with grave, U+00F9 ISOlat1 -->
464 <xsl:template match="ch.uacute"><xsl:text>&#250;</xsl:text></xsl:template><!-- latin small letter u with acute, U+00FA ISOlat1 -->
465 <xsl:template match="ch.ucirc"><xsl:text>&#251;</xsl:text></xsl:template><!-- latin small letter u with circumflex, U+00FB ISOlat1 -->
466 <xsl:template match="ch.uuml"><xsl:text>&#252;</xsl:text></xsl:template><!-- latin small letter u with diaeresis, U+00FC ISOlat1 -->
467 <xsl:template match="ch.yacute"><xsl:text>&#253;</xsl:text></xsl:template><!-- latin small letter y with acute, U+00FD ISOlat1 -->
468 <xsl:template match="ch.thorn"><xsl:text>&#254;</xsl:text></xsl:template><!-- latin small letter thorn, U+00FE ISOlat1 -->
469 <xsl:template match="ch.yuml"><xsl:text>&#255;</xsl:text></xsl:template><!-- latin small letter y with diaeresis, U+00FF ISOlat1 -->
470
471 <!-- ~~~~~~~~~~~~~~~~~~~~~ Special Characters ~~~~~~~~~~~~~~~~~~~~ -->
472
473 <xsl:template match="ch.ampersand">&amp;</xsl:template><!-- ampersand -->
474 <xsl:template match="ch.lsquot">&#8216;</xsl:template><!-- opening left quotation mark -->
475 <xsl:template match="ch.rsquot">&#8217;</xsl:template><!-- closing right quotation mark -->
476 <xsl:template match="ch.ldquot">&#8220;</xsl:template><!-- opening left double quotation mark -->
477 <xsl:template match="ch.rdquot">&#8221;</xsl:template><!-- closing right double quotation mark -->
478 <xsl:template match="ch.minus">&#8722;</xsl:template><!-- mathematical minus -->
479 <xsl:template match="ch.endash">&#8211;</xsl:template><!-- endash -->
480 <xsl:template match="ch.emdash">&#160;&#8212;&#32;</xsl:template><!-- emdash -->
481 <xsl:template match="ch.ellips">&#160;&#8230;&#32;</xsl:template><!-- ellipsis -->
482 <xsl:template match="ch.lellips">&#8230;&#32;</xsl:template><!-- left ellipsis, used at the beginning of edited material -->
483 <xsl:template match="ch.blankline">_______</xsl:template><!-- blank line to be filled in -->
484 <xsl:template match="ch.percent"><xsl:text>&#37;</xsl:text></xsl:template><!-- percent sign -->
485 <xsl:template match="ch.thinspace"><xsl:text>&#32;</xsl:text></xsl:template><!-- small horizontal space for use between adjacent quotation marks - added mainly for LaTeX's sake -->
486 <xsl:template match="ch.frac116"><xsl:text>1/16</xsl:text></xsl:template><!-- vulgar fraction one sixteenth = fraction on sixteenth -->
487 <xsl:template match="ch.plus"><xsl:text>+</xsl:text></xsl:template><!-- mathematical plus -->
488
489 </xsl:transform>