source: docs/Balisage13/balisage-1-3-xsl/balisage-html.xsl @ 4857

Last change on this file since 4857 was 3397, checked in by cameron, 6 years ago

Clean up references and links.

File size: 38.1 KB
Line 
1<?xml version="1.0"?>
2<!-- ============================================================= -->
3<!-- MODULE:    Balisage Conference Paper Preview XSLT             -->
4<!-- VERSION:   1.2                                                -->
5<!-- DATE:      March, 2010                                        -->
6<!--                                                               -->
7<!-- ============================================================= -->
8
9<!-- ============================================================= -->
10<!-- SYSTEM:    Balisage: The Markup Conference papers             -->
11<!--                                                               -->
12<!-- PURPOSE:   Created for preview display (HTML) of papers       -->
13<!--            submitted for Balisage: The Markup Conference      -->
14<!--                                                               -->
15<!-- CREATED BY:                                                   -->
16<!--            Mulberry Technologies, Inc. (wap)                  -->
17<!--            17 West Jefferson Street, Suite 207                -->
18<!--            Rockville, MD  20850  USA                          -->
19<!--            Phone:  +1 301/315-9631                            -->
20<!--            Fax:    +1 301/315-8285                            -->
21<!--            e-mail: info@mulberrytech.com                      -->
22<!--            WWW:    http://www.mulberrytech.com                -->
23<!--                                                               -->
24<!-- ============================================================= -->
25
26<!-- ============================================================= -->
27<!--                    DESIGN CONSIDERATIONS                      -->
28<!-- ============================================================= -->
29<!--
30  This stylesheet is designed to handle the subset of Docbook V5
31  defined by the Balisage-1-2.dtd. It is implemented in XSLT 1.0
32  without extensions, and should work in any XSLT 1.0 processor.
33 
34  As a standalone stylesheet, in conjunction with an associated
35  CSS stylesheet (balisage-preview.css, linked from the result file),
36  it specifies processing resulting in a clean "preview" display of
37  a Balisage paper conformant with the 1.2 DTD.
38 
39  Additionally, this stylesheet is intended to serve as the core
40  of the Balisage Proceedings production system and for related
41  (ancillary) productions such as peer-review versions of the
42  papers, etc.                                                     -->
43
44<!-- ============================================================= -->
45<!--                    OWNERSHIP AND LICENSES                     -->
46<!-- ============================================================= -->
47<!--
48 
49  This stylesheet was developed by, and is copyright 2010
50  Mulberry Technologies, Inc. It is released for use by authors in
51  production of papers submitted to Balisage: The Markup Conference
52  (http://www.balisage.net)                                        -->
53<!-- ============================================================= -->
54
55  <!--<xsl:output method="html" encoding="UTF-8" indent="no"
56    doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
57    doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>-->
58
59  <!--<xsl:output method="xml" encoding="UTF-8" indent="no"
60     omit-xml-declaration="yes"
61     doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
62     doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>-->
63
64<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
65  xmlns:d="http://docbook.org/ns/docbook"
66  xmlns:xlink="http://www.w3.org/1999/xlink"
67  exclude-result-prefixes="d xlink"
68  version="1.0">
69 
70 
71  <xsl:strip-space elements="d:article d:info d:appendix d:bibliography
72    d:abstract d:author d:legalnotice d:keywordset d:confgroup
73    d:personname d:personblurb d:affiliation d:section d:blockquote
74    d:note d:footnote d:caption d:equation d:itemizedlist d:orderedlist
75    d:listitem d:variablelist d:varlistentry d:figure d:mediaobject
76    d:inlinemediaobject d:imageobject d:imagedata d:footnoteref
77    d:xref d:tfoot d:tbody d:informaltable d:table d:col d:colgroup
78    d:thead d:tr"/>
79
80
81  <xsl:key match="*[@xml:id]" name="element-by-id" use="@xml:id"/>
82
83  <xsl:key name="xref-by-linkend" match="*[normalize-space(@linkend)]" use="@linkend"/>
84 
85
86  <xsl:template match="*">
87    <xsl:message>
88      <xsl:value-of select="name()"/>
89      <xsl:text> not matched</xsl:text>
90    </xsl:message>
91    <xsl:apply-templates/>
92  </xsl:template>
93 
94  <xsl:param name="css-file">balisage-plain.css</xsl:param>
95 
96  <xsl:template match="/">
97    <html lang="en">
98      <head>
99        <title>
100          <xsl:call-template name="html-title"/>
101        </title>
102        <link rel="stylesheet" href="{$css-file}" type="text/css"/>
103        <xsl:for-each select="/d:article/d:info/d:keywordset">
104          <meta name="keywords">
105            <xsl:attribute name="content">
106              <xsl:for-each select="d:keyword">
107                <xsl:if test="not(position()=1)">, </xsl:if>
108                <xsl:value-of select="."/>
109              </xsl:for-each>
110            </xsl:attribute>
111          </meta>
112        </xsl:for-each>
113      </head>
114      <body>
115        <xsl:call-template name="balisage-header"/>
116        <xsl:apply-templates select="/d:article"/>
117        <xsl:call-template name="balisage-footer"/>
118      </body>
119    </html>
120  </xsl:template>
121
122  <xsl:template name="html-title">
123    <xsl:apply-templates select="/d:article/d:title" mode="text-only"/>
124  </xsl:template>
125 
126  <xsl:template name="balisage-header">
127    <div id="balisage-header">
128      <h1 style="text-align: right; font-family: serif; margin:0.25em">
129        <i>Balisage:</i>&#xA0;<small>The Markup Conference</small>
130      </h1>
131    </div>
132  </xsl:template>
133
134
135  <xsl:template name="balisage-footer">
136    <div id="balisage-footer">
137      <h3 style="font-family: serif; margin:0.25em">
138        <i>Balisage:</i>&#xA0;<small>The Markup Conference</small>
139      </h3>
140    </div>
141  </xsl:template>
142 
143 
144  <xsl:template match="d:article">
145    <div lang="en" class="article">
146      <xsl:call-template name="titlepage"/>
147      <xsl:call-template name="toc"/>
148      <xsl:apply-templates/>
149      <xsl:call-template name="footnotes"/>
150    </div>
151  </xsl:template>
152
153
154  <xsl:template name="titlepage">
155    <div class="titlepage">
156        <xsl:apply-templates mode="titlepage"
157          select="/d:article/d:title | /d:article/d:subtitle"/>
158        <xsl:for-each select="/d:article/d:info">
159          <xsl:apply-templates mode="titlepage" select="d:author"/>
160          <xsl:apply-templates mode="titlepage" select="d:legalnotice"/>
161          <xsl:apply-templates mode="titlepage" select="d:abstract"/>
162        </xsl:for-each>
163      <hr/>
164    </div>
165  </xsl:template>
166
167
168  <!-- titlepage mode -->
169
170  <xsl:template match="d:title" mode="titlepage">
171      <h2 class="article-title">
172        <xsl:call-template name="attach-id"/>
173        <xsl:apply-templates/>
174      </h2>
175  </xsl:template>
176
177
178  <xsl:template match="d:subtitle" mode="titlepage">
179      <h3 class="subtitle">
180        <i>
181          <xsl:apply-templates/>
182        </i>
183      </h3>
184  </xsl:template>
185
186
187  <xsl:template match="d:author" mode="titlepage">
188    <div class="author">
189      <xsl:apply-templates select="d:personname" mode="titlepage"/>
190      <xsl:apply-templates select="d:affiliation" mode="titlepage"/>
191      <xsl:apply-templates select="d:email" mode="titlepage"/>
192    </div>
193  </xsl:template>
194 
195  <xsl:template match="d:personname" mode="titlepage">
196    <h3 class="author">
197      <xsl:apply-templates select="."/>
198    </h3>
199  </xsl:template>
200
201  <xsl:template match="d:personname">
202    <xsl:for-each select="*">
203      <xsl:if test="not(position()=1)">
204        <xsl:text> </xsl:text>
205      </xsl:if>
206      <xsl:apply-templates/>
207    </xsl:for-each>
208  </xsl:template>
209 
210  <xsl:template match="d:affiliation" mode="titlepage">
211    <div class="affiliation">
212      <xsl:for-each select="*">
213        <p class="{local-name()}">
214          <xsl:apply-templates/>
215        </p>
216      </xsl:for-each>
217    </div>
218  </xsl:template>
219
220
221  <xsl:template match="d:email" mode="titlepage">
222    <h5 class="author-email">
223      <xsl:apply-templates select="."/>
224    </h5>
225  </xsl:template>
226
227
228  <xsl:template match="d:legalnotice" mode="titlepage">
229    <div class="legalnotice">
230      <xsl:call-template name="attach-id"/>
231      <xsl:apply-templates/>
232    </div>
233  </xsl:template>
234
235
236  <xsl:template match="d:abstract" mode="titlepage">
237    <div class="abstract">
238      <p class="title">
239        <b>Abstract</b>
240      </p>
241      <xsl:apply-templates/>
242    </div>
243  </xsl:template>
244 
245  <xsl:template match="d:personblurb" mode="titlepage">
246    <div class="personblurb">
247      <xsl:apply-templates/>
248    </div>
249  </xsl:template>
250 
251 
252  <!-- toc mode -->
253 
254  <xsl:template name="toc">
255    <!-- working around how CMSMcQ keynotes will have sections with
256         dummy titles -->
257    <xsl:variable name="contents">
258      <xsl:apply-templates select="d:section | d:appendix" mode="toc"/>
259    </xsl:variable>
260    <xsl:if test="normalize-space($contents)">
261      <div class="toc">
262        <p>
263          <b>Table of Contents</b>
264        </p>
265        <dl>
266          <xsl:copy-of select="$contents"/>
267        </dl>
268      </div>
269    </xsl:if>
270  </xsl:template>
271
272
273  <xsl:template match="d:section | d:appendix" mode="toc">
274    <dt>
275      <span class="{local-name()}">
276        <xsl:variable name="id">
277          <xsl:apply-templates select="." mode="id"/>
278        </xsl:variable>
279        <a href="#{$id}" class="toc">
280          <xsl:apply-templates select="self::d:appendix" mode="label-text"/>
281          <xsl:if test="self::d:appendix">. </xsl:if>
282          <xsl:apply-templates select="d:title" mode="toc"/>
283        </a>
284      </span>
285    </dt>
286    <xsl:if test="d:section and not(../parent::d:section|../parent::d:appendix)">
287      <!-- we go three levels deep -->
288      <dd>
289        <dl>
290          <xsl:apply-templates select="d:section" mode="toc"/>
291        </dl>
292      </dd>
293    </xsl:if>
294  </xsl:template>
295 
296  <xsl:template match="d:title" mode="toc">
297    <xsl:apply-templates mode="toc"/>
298  </xsl:template>
299 
300  <xsl:template match="*" mode="toc">
301    <xsl:apply-templates select="."/>
302  </xsl:template>
303 
304  <!-- cross-references do not work in the table of contents -->
305  <xsl:template match="d:footnote" mode="toc"/>
306 
307  <!-- default mode -->
308 
309  <!-- suppress these (they appear in other modes) -->
310  <xsl:template match="d:article/d:title | d:article/d:subtitle | d:info"/>
311 
312  <xsl:template match="d:section | d:appendix">
313    <div class="{local-name()}">
314      <xsl:call-template name="attach-id"/>
315      <xsl:apply-templates/>
316    </div>
317  </xsl:template>
318
319
320  <xsl:template match="d:section/d:title | d:appendix/d:title">
321    <xsl:variable name="level" select="count(ancestor::d:section | ancestor::d:appendix)"/>
322    <xsl:if test="$level > 5">
323      <xsl:call-template name="runtime-warning">
324        <xsl:with-param name="message">
325          <xsl:text>Generating 'h</xsl:text>
326          <xsl:value-of select="$level + 1"/>
327          <xsl:text>' element for section title </xsl:text>
328          <xsl:value-of select="$level"/>
329          <xsl:text>s deep -- not valid HTML</xsl:text>
330        </xsl:with-param>
331      </xsl:call-template>
332    </xsl:if>
333    <!-- because of browser bugs, we want to avoid emitting an empty tag
334         for titles that have no content -->
335    <xsl:if test="normalize-space(.)">
336      <xsl:element name="h{$level+1}">
337        <xsl:attribute name="class">title</xsl:attribute>
338        <xsl:attribute name="style">clear: both</xsl:attribute>
339        <xsl:apply-templates select="parent::d:appendix" mode="label-text"/>
340        <xsl:if test="parent::d:appendix">. </xsl:if>
341        <xsl:apply-templates/>
342      </xsl:element>
343    </xsl:if>
344  </xsl:template>
345 
346  <xsl:template match="d:section/d:subtitle">
347    <xsl:variable name="level" select="count(ancestor::d:section | ancestor::d:appendix)"/>
348    <xsl:if test="$level > 4">
349      <xsl:call-template name="runtime-warning">
350        <xsl:with-param name="message">
351          <xsl:text>Generating 'h</xsl:text>
352          <xsl:value-of select="$level + 2"/>
353          <xsl:text>' element for section title </xsl:text>
354          <xsl:value-of select="$level"/>
355          <xsl:text>s deep -- not valid HTML</xsl:text>
356        </xsl:with-param>
357      </xsl:call-template>
358    </xsl:if>
359    <xsl:element name="h{$level+2}">
360      <xsl:attribute name="class">subtitle</xsl:attribute>
361      <xsl:attribute name="style">clear: both</xsl:attribute>
362      <xsl:apply-templates/>
363    </xsl:element>
364  </xsl:template>
365 
366 
367  <xsl:template match="d:bibliography">
368    <div class="bibliography">
369      <xsl:call-template name="attach-id"/>
370      <xsl:apply-templates/>
371    </div>
372  </xsl:template>
373 
374 
375  <xsl:template match="d:bibliography/d:title">
376    <h2 class="title" style="clear:both">
377      <xsl:apply-templates/>
378    </h2>
379  </xsl:template>
380
381  <xsl:template match="d:bibliomixed">
382    <xsl:variable name="label">
383      <xsl:apply-templates select="." mode="label-text"/>
384    </xsl:variable>
385    <p class="bibliomixed">
386      <xsl:call-template name="attach-id"/>
387      <xsl:if test="normalize-space($label)">
388        <xsl:choose>
389          <xsl:when test="key('xref-by-linkend',@xml:id)">
390            <a>
391              <xsl:attribute name="href">
392                <xsl:text>#</xsl:text>
393                <xsl:apply-templates select="key('xref-by-linkend',@xml:id)[1]" mode="id"/>
394              </xsl:attribute>
395              <xsl:text>[</xsl:text>
396              <xsl:value-of select="$label"/>
397              <xsl:text>] </xsl:text>
398            </a>
399          </xsl:when>
400          <xsl:otherwise>
401            <xsl:text>[</xsl:text>
402            <xsl:value-of select="$label"/>
403            <xsl:text>] </xsl:text>
404          </xsl:otherwise>
405        </xsl:choose>
406      </xsl:if>
407      <xsl:apply-templates/>
408    </p>
409  </xsl:template>
410
411
412  <xsl:template match="d:note">
413    <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
414      <xsl:call-template name="attach-id"/>
415      <xsl:apply-templates select="." mode="labeled-title"/>
416      <xsl:apply-templates/>
417      </div>
418  </xsl:template>
419
420
421  <xsl:template match="d:blockquote">
422    <div class="blockquote">
423      <blockquote class="blockquote">
424        <xsl:apply-templates/>
425      </blockquote>
426    </div>
427  </xsl:template>
428
429
430  <xsl:template match="d:attribution">
431    <p class="attribution">
432      <xsl:text>&#x2014; </xsl:text>
433      <xsl:apply-templates/>
434    </p>
435  </xsl:template>
436
437
438  <xsl:template match="d:equation">
439    <div class="equation">
440      <xsl:call-template name="attach-id"/>
441      <p class="title">
442        <xsl:apply-templates select="." mode="label-text"/>
443      </p>
444      <div class="equation-contents">
445        <xsl:apply-templates/>
446      </div>
447    </div>
448  </xsl:template>
449 
450 
451  <xsl:template match="d:figure">
452    <div class="figure">
453      <xsl:call-template name="attach-id"/>
454      <xsl:apply-templates select="." mode="labeled-title"/>
455      <div class="figure-contents">
456        <xsl:apply-templates/>
457      </div>
458    </div>
459  </xsl:template>
460
461
462  <xsl:template match="d:table">
463    <div class="table-wrapper">
464      <xsl:call-template name="attach-id"/>
465      <p class="title">
466        <xsl:apply-templates select="." mode="label-text"/>
467      </p>
468      <xsl:apply-templates select="d:caption"/>
469      <table class="table">
470        <xsl:copy-of select="@*"/>
471        <xsl:apply-templates mode="table-contents"/>
472      </table>
473    </div>   
474  </xsl:template>
475
476
477  <xsl:template match="d:caption">
478    <div class="caption">
479      <xsl:apply-templates/>
480    </div>
481  </xsl:template>
482 
483 
484  <!-- table captions are moved up into the wrapper div, so
485       suppressed here -->
486  <xsl:template match="d:caption" mode="table-contents"/>
487 
488 
489  <xsl:template match="d:th/* | d:td/*" mode="table-contents">
490    <!-- as soon as we're inside a th or td, we kick out
491         of this mode -->
492    <xsl:apply-templates select="."/>
493  </xsl:template>
494
495
496  <xsl:template match="*" mode="table-contents">
497    <!-- otherwise, we strip the namespace -->
498    <xsl:element name="{local-name()}">
499      <xsl:copy-of select="@*"/>
500      <xsl:apply-templates mode="table-contents"/>
501    </xsl:element>
502  </xsl:template>
503
504
505  <xsl:template match="d:informaltable">
506    <table class="table">
507      <xsl:call-template name="attach-id"/>
508      <xsl:apply-templates mode="table-contents"/>
509    </table>
510  </xsl:template>
511 
512
513  <xsl:template match="d:mediaobject">
514    <div class="mediaobject">
515      <xsl:call-template name="attach-id"/>
516      <xsl:apply-templates/>
517    </div>
518  </xsl:template>
519 
520 
521  <xsl:template match="d:itemizedlist">
522    <div class="itemizedlist">
523      <xsl:call-template name="attach-id"/>
524      <xsl:apply-templates select="." mode="labeled-title"/>
525      <ul>
526        <xsl:apply-templates/>
527      </ul>
528    </div>
529  </xsl:template>
530
531
532  <xsl:template match="d:orderedlist">
533    <div class="orderedlist">
534      <xsl:call-template name="attach-id"/>
535      <xsl:apply-templates select="." mode="labeled-title"/>
536      <xsl:variable name="list-style">
537        <xsl:apply-templates select="." mode="list-style"/>
538      </xsl:variable>
539      <ol>
540        <xsl:if test="@startingnumber|@continuation">
541          <xsl:attribute name="start">
542            <xsl:choose>
543              <xsl:when test="number(@startingnumber)">
544                <xsl:value-of select="@startingnumber"/>
545              </xsl:when>
546              <xsl:otherwise>
547                <xsl:variable name="continued-from">
548                  <xsl:apply-templates select="@continuation" mode="continued-list"/>
549                </xsl:variable>
550                <xsl:value-of select="$continued-from + 1"/>
551              </xsl:otherwise>
552            </xsl:choose>
553          </xsl:attribute>
554        </xsl:if>
555        <xsl:if test="normalize-space($list-style)">
556          <xsl:attribute name="style">
557            <xsl:value-of select="normalize-space($list-style)"/>
558          </xsl:attribute>
559        </xsl:if>
560        <xsl:apply-templates/>
561      </ol>
562    </div>
563  </xsl:template>
564
565
566  <xsl:template match="d:orderedlist/@continuation[not(.='continues')]" mode="continued-list">
567    <xsl:text>0</xsl:text>
568  </xsl:template>
569
570
571  <xsl:template match="d:orderedlist/@continuation[.='continues']" mode="continued-list">
572    <xsl:text>0</xsl:text>
573    <xsl:apply-templates select="../preceding-sibling::d:orderedlist[1]" mode="continued-list"/>
574  </xsl:template>
575 
576 
577  <xsl:template match="d:orderedlist" mode="continued-list">
578    <xsl:variable name="count" select="count(d:listitem)"/>
579    <xsl:variable name="preceding-count">
580      <xsl:text>0</xsl:text>
581      <xsl:choose>
582        <xsl:when test="number(@startingnumber)">
583          <xsl:value-of select="@startingnumber - 1"/>
584        </xsl:when>
585        <xsl:otherwise>
586          <xsl:apply-templates select="@continuation" mode="continued-list"/>
587        </xsl:otherwise>
588      </xsl:choose>
589    </xsl:variable>
590    <xsl:value-of select="$count + $preceding-count"/>
591  </xsl:template>
592
593
594  <xsl:template match="d:orderedlist" mode="list-style">
595    <xsl:variable name="continuing-style">
596      <xsl:if test="@continuation='continues'">
597        <xsl:apply-templates select="preceding-sibling::d:orderedlist[1]" mode="list-style"/>
598      </xsl:if>
599    </xsl:variable>
600    <xsl:value-of select="$continuing-style"/>
601    <xsl:if test="not(normalize-space($continuing-style))">
602      <xsl:apply-templates select="@numeration" mode="list-style"/>
603      <xsl:if test="not(@numeration)">
604        <xsl:call-template name="default-list-style"/>
605      </xsl:if>     
606    </xsl:if>
607  </xsl:template>
608
609
610  <xsl:template match="d:orderedlist/@numeration[.='upperalpha']" mode="list-style">
611     <xsl:text>list-style-type: upper-alpha; </xsl:text>   
612  </xsl:template>
613
614
615  <xsl:template match="d:orderedlist/@numeration[.='loweralpha']" mode="list-style">
616     <xsl:text>list-style-type: lower-alpha; </xsl:text>   
617  </xsl:template>
618 
619 
620  <xsl:template match="d:orderedlist/@numeration[.='upperroman']" mode="list-style">
621     <xsl:text>list-style-type: upper-roman; </xsl:text>   
622  </xsl:template>
623 
624 
625  <xsl:template match="d:orderedlist/@numeration[.='lowerroman']" mode="list-style">
626     <xsl:text>list-style-type: lower-roman; </xsl:text>   
627  </xsl:template>
628 
629 
630  <xsl:template match="d:orderedlist/@numeration[.='arabic']" mode="style"
631    name="default-list-style">
632     <xsl:text>list-style-type: decimal; </xsl:text>   
633  </xsl:template>
634 
635 
636  <xsl:template match="d:listitem">
637    <li>
638      <xsl:call-template name="attach-id"/>
639      <xsl:apply-templates/>
640    </li>
641  </xsl:template>
642
643
644  <xsl:template match="d:variablelist">
645    <div class="variablelist">
646      <xsl:call-template name="attach-id"/>
647      <xsl:apply-templates select="d:title"/>
648      <table border="0" class="variablelist">
649        <col valign="top" align="left"/>
650        <tbody>
651          <xsl:apply-templates select="d:varlistentry"/>
652        </tbody>
653      </table></div>
654  </xsl:template>
655
656
657  <xsl:template match="d:varlistentry">
658    <tr>
659      <xsl:call-template name="attach-id"/>
660      <xsl:apply-templates/>
661    </tr>
662  </xsl:template>
663
664
665  <xsl:template match="d:varlistentry/d:term">
666    <td class="varlist-term">
667      <p>
668        <span class="term">
669          <xsl:apply-templates/></span>
670      </p>
671    </td>
672  </xsl:template>
673
674
675  <xsl:template match="d:varlistentry/d:listitem">
676    <td class="varlist-item">
677      <xsl:apply-templates/>
678    </td>
679  </xsl:template>
680
681
682  <xsl:template match="d:programlisting">
683    <pre class="programlisting">
684      <xsl:call-template name="attach-id"/>
685      <xsl:apply-templates/>
686    </pre>
687  </xsl:template>
688
689
690  <xsl:template match="d:title">
691    <!-- because of browser bugs, we want to avoid emitting an empty tag
692         for titles that have no content -->
693    <xsl:if test="normalize-space(.)">
694      <p class="title">
695        <xsl:apply-templates/>
696      </p>
697    </xsl:if>
698  </xsl:template>
699
700
701  <!-- All these are titled in "labeled-title" mode -->
702  <xsl:template match="d:figure/d:title | d:table/d:title | d:note/d:title |
703    d:orderedlist/d:title | d:itemizedlist/d:title"/>
704
705
706  <xsl:template match="d:figure | d:table" mode="labeled-title">
707    <p class="title">
708      <xsl:apply-templates select="." mode="label-text"/>
709      <xsl:for-each select="d:title">
710        <xsl:text>: </xsl:text>
711        <xsl:apply-templates/>
712      </xsl:for-each>
713    </p>
714  </xsl:template>
715 
716 
717  <xsl:template match="d:orderedlist | d:itemizedlist" mode="labeled-title">
718    <xsl:for-each select="d:title">
719      <p class="title">
720        <xsl:apply-templates/>
721      </p>
722    </xsl:for-each>
723  </xsl:template>
724 
725 
726  <xsl:template match="d:note" mode="labeled-title">
727    <h3 class="title">
728      <xsl:apply-templates select="." mode="label-text"/>
729      <xsl:for-each select="d:title">
730        <xsl:text>: </xsl:text>
731        <xsl:apply-templates/>
732      </xsl:for-each>
733    </h3>
734  </xsl:template>
735
736
737  <xsl:template match="d:para">
738    <p>
739      <xsl:call-template name="attach-id"/>
740      <xsl:apply-templates/>
741    </p>
742  </xsl:template>
743
744
745  <!-- inline elements -->
746
747  <xsl:template match="d:code">
748    <code class="code">
749      <xsl:apply-templates/>
750    </code>
751  </xsl:template>
752
753
754  <xsl:template match="d:email">
755    <code class="email">
756      <xsl:text>&lt;</xsl:text>
757      <a class="email" href="mailto:{.}">
758        <xsl:apply-templates/>
759      </a>
760      <xsl:text>&gt;</xsl:text>
761    </code>
762  </xsl:template>
763
764 
765  <xsl:template match="d:emphasis">
766    <span class="ital">
767      <xsl:for-each select="@role">
768        <xsl:attribute name="class">
769          <xsl:value-of select="."/>
770        </xsl:attribute>
771      </xsl:for-each>
772      <xsl:apply-templates/>
773    </span>
774  </xsl:template>
775
776
777  <xsl:template match="d:quote">
778    <q>
779      <xsl:apply-templates/>
780    </q> 
781  </xsl:template>
782
783
784  <xsl:template match="d:footnote">
785    <xsl:param name="primary" select="true()"/>
786    <!-- $primary is passed in as false when we process
787         a footnote by virtue of an xref to it, instead
788         of on its own -->
789    <xsl:variable name="id">
790      <xsl:apply-templates select="." mode="id"/>
791    </xsl:variable>
792    <sup class="fn-label">
793      <a href="#{$id}" class="footnoteref">
794        <xsl:if test="$primary">
795          <!-- the primary occurrence gets an ID so the footnote
796          can link back here -->
797          <xsl:attribute name="id">
798            <xsl:value-of select="$id"/>
799            <xsl:text>-ref</xsl:text>
800          </xsl:attribute>
801        </xsl:if>
802        <xsl:apply-templates select="." mode="label-text"/>
803      </a>
804    </sup>
805  </xsl:template>
806
807
808  <xsl:template match="d:subscript">
809    <sub>
810      <xsl:apply-templates/>
811    </sub>
812  </xsl:template>
813
814
815  <xsl:template match="d:superscript">
816    <sup>
817      <xsl:apply-templates/>
818    </sup>
819  </xsl:template>
820
821
822  <xsl:template match="d:trademark">
823    <xsl:apply-templates select="@class[.='copyright']"/>
824    <span class="trademark">
825      <xsl:apply-templates/>
826    </span>
827    <xsl:apply-templates select="@class[not(.='copyright')]"/>
828    <xsl:if test="not(@class)">
829      <xsl:text>&#x2122;</xsl:text>
830    </xsl:if>
831  </xsl:template>
832
833
834  <!-- trademark class (copyright | registered | service | trade) -->
835                         
836  <xsl:template match="d:trademark/@class[.='copyright']">
837    <xsl:text>&#xa9;&#xa0;</xsl:text>
838  </xsl:template>
839 
840  <xsl:template match="d:trademark/@class[.='registered']">
841    <xsl:text>&#xae;</xsl:text>
842  </xsl:template>
843 
844  <xsl:template match="d:trademark/@class[.='service']">
845    <xsl:text>&#x2120;</xsl:text>
846  </xsl:template>
847 
848  <xsl:template match="d:trademark/@class[.='trade']">
849    <xsl:text>&#x2122;</xsl:text>
850  </xsl:template>
851
852
853  <xsl:template match="d:citation">
854    <xsl:apply-templates/>
855    <xsl:if test="not(normalize-space(.))">
856      <xsl:call-template name="runtime-warning">
857          <xsl:with-param name="message">
858            <xsl:text>citation has neither @linkend nor content</xsl:text>
859          </xsl:with-param>
860      </xsl:call-template>
861    </xsl:if>
862  </xsl:template>
863
864
865  <xsl:template match="d:citation[@linkend]">
866    <xsl:variable name="target"
867      select="key('element-by-id',@linkend)/self::d:bibliomixed"/>
868    <xsl:choose>
869      <xsl:when test="$target">
870        <xsl:apply-templates select="$target" mode="xref">
871          <xsl:with-param name="xref-id">
872            <xsl:apply-templates select="." mode="id"/>
873          </xsl:with-param>
874          <xsl:with-param name="text-contents">
875            <xsl:apply-templates/>
876            <xsl:if test="not(normalize-space())">
877              <xsl:apply-templates select="$target" mode="label-text"/>
878            </xsl:if>
879          </xsl:with-param>
880        </xsl:apply-templates>
881      </xsl:when>
882      <xsl:otherwise>
883        <xsl:call-template name="runtime-warning">
884          <xsl:with-param name="message">
885            <xsl:text>citation with @linkend </xsl:text>
886            <xsl:value-of select="@linkend"/>
887            <xsl:text> must point to bibliomixed</xsl:text>
888          </xsl:with-param>
889        </xsl:call-template>
890      </xsl:otherwise>
891    </xsl:choose>
892  </xsl:template>
893
894 
895  <xsl:template match="d:link[@xlink:href]">
896    <a href="{@xlink:href}" class="link" target="_new">
897      <xsl:apply-templates select="@xlink:title"/>
898      <xsl:apply-templates/>
899      <xsl:if test="not(normalize-space(.))">
900        <xsl:value-of select="normalize-space(@xlink:href)"/>
901      </xsl:if>     
902    </a>
903  </xsl:template>
904
905
906  <xsl:template match="d:link">
907    <a href="#{@linkend}" class="xref">
908      <xsl:apply-templates select="@xlink:title"/>
909      <xsl:if test="not(@linkend)">
910        <xsl:attribute name="class">link</xsl:attribute>
911        <xsl:attribute name="target">_new</xsl:attribute>
912        <xsl:attribute name="href">
913          <xsl:value-of select="normalize-space(.)"/>
914        </xsl:attribute>
915      </xsl:if>
916      <xsl:apply-templates/>
917      <xsl:if test="not(normalize-space(.))">
918        <xsl:call-template name="runtime-warning">
919          <xsl:with-param name="message">
920            <xsl:text>link to internal resource may not be empty; provide content</xsl:text>
921            <xsl:text> or use xref for internal cross-reference</xsl:text>
922          </xsl:with-param>
923        </xsl:call-template>
924      </xsl:if>
925    </a>
926  </xsl:template>
927
928
929  <xsl:template match="@xlink:title">
930    <xsl:attribute name="title">
931      <xsl:value-of select="."/>
932    </xsl:attribute>
933  </xsl:template>
934 
935  <xsl:template match="d:biblioid[@class='doi']">
936    <a href="http://dx.doi.org/{.}" class="doi" target="_new">
937      <xsl:apply-templates/>
938    </a>
939  </xsl:template>
940 
941  <xsl:template match="d:biblioid">
942    <span class="biblioid">
943      <xsl:apply-templates/>
944    </span>
945  </xsl:template>
946 
947  <xsl:template match="d:xref">
948    <xsl:variable name="target"
949      select="key('element-by-id',@linkend)"/>
950    <xsl:apply-templates select="$target" mode="xref">
951      <xsl:with-param name="xref-id">
952        <xsl:apply-templates select="." mode="id"/>
953      </xsl:with-param>
954    </xsl:apply-templates>
955  </xsl:template>
956 
957
958  <!-- utility templates and modes -->
959
960
961  <xsl:template match="d:inlinemediaobject">
962    <span class="inlinemediaobject">
963      <xsl:apply-templates/>
964    </span>
965  </xsl:template>
966
967
968  <xsl:template match="d:imageobject">
969    <xsl:apply-templates/>
970  </xsl:template>
971
972
973  <xsl:template match="d:imagedata">
974    <xsl:variable name="alt">
975      <xsl:for-each select="@format">
976        <xsl:value-of select="."/>
977        <xsl:text> </xsl:text>
978      </xsl:for-each>
979      <xsl:text>image (</xsl:text>
980      <xsl:value-of select="@fileref"/>
981      <xsl:text>)</xsl:text>
982    </xsl:variable>
983    <img alt="{$alt}" src="{@fileref}">
984      <xsl:copy-of select="@width"/>
985    </img>
986  </xsl:template>
987
988
989  <xsl:template match="d:mathphrase">
990    <span class="mathphrase">
991      <xsl:apply-templates/>
992    </span>
993  </xsl:template>
994
995
996  <xsl:template name="footnotes">
997    <xsl:if test="//d:footnote">
998    <div class="footnotes">
999      <br/>
1000      <hr width="100" align="left"/>
1001      <xsl:apply-templates select="//d:footnote" mode="footnote"/>
1002    </div>
1003    </xsl:if>   
1004  </xsl:template>
1005
1006
1007  <xsl:template match="d:footnote" mode="footnote">
1008    <xsl:variable name="id">
1009      <xsl:apply-templates select="." mode="id"/>
1010    </xsl:variable>
1011    <div id="{$id}" class="footnote">
1012      <p>
1013        <sup class="fn-label">
1014          <a href="#{$id}-ref" class="footnoteref">     
1015            <xsl:apply-templates select="." mode="label-text"/>
1016          </a>
1017        </sup>
1018        <xsl:text> </xsl:text>
1019        <xsl:apply-templates select="d:para[1]/node()"/>
1020      </p>
1021      <xsl:apply-templates select="d:para[position() &gt; 1]"/>
1022    </div>
1023  </xsl:template>
1024
1025
1026  <xsl:template match="*" mode="xref">
1027    <xsl:param name="text-contents">
1028      <xsl:apply-templates/>
1029    </xsl:param>
1030    <xsl:call-template name="runtime-warning">
1031      <xsl:with-param name="message">
1032        <xsl:text>Sorry: xref not supported to </xsl:text>
1033        <xsl:value-of select="local-name()"/>
1034        <xsl:text>[@xml:id='</xsl:text>
1035        <xsl:value-of select="@xml:id"/>
1036        <xsl:text>'] without @xreflabel</xsl:text>
1037      </xsl:with-param>
1038    </xsl:call-template>
1039  </xsl:template>
1040
1041  <xsl:template match="*[@xreflabel]" mode="xref" priority="99">
1042    <!-- this template overrides the template that would
1043         otherwise match a cross-reference target to
1044         generate content for the link -->
1045    <xsl:param name="text-contents">
1046      <xsl:value-of select="@xreflabel"/>
1047    </xsl:param>
1048    <xsl:param name="xref-id" select="'xxx'"/>
1049    <a class="xref" href="#{@xml:id}" id="{$xref-id}">
1050       <xsl:copy-of select="$text-contents"/>
1051    </a>
1052  </xsl:template>
1053
1054
1055  <xsl:template match="d:footnote" mode="xref">
1056    <xsl:param name="text-contents"/>
1057    <xsl:apply-templates select=".">
1058      <xsl:with-param name="primary" select="false()"/>
1059    </xsl:apply-templates>
1060  </xsl:template>
1061
1062
1063  <xsl:template match="d:bibliomixed" mode="xref">
1064    <xsl:param name="text-contents">
1065      <xsl:apply-templates select="." mode="label-text"/>
1066    </xsl:param>
1067    <xsl:param name="xref-id" select="'xxx'"/>
1068    <xsl:variable name="cite-id">
1069      <xsl:apply-templates select="." mode="id"/>
1070    </xsl:variable>
1071    <a class="xlink" href="#{$cite-id}" id="{$xref-id}">
1072      <xsl:copy-of select="$text-contents"/>
1073    </a>
1074  </xsl:template>
1075
1076  <xsl:template match="d:section | d:appendix |
1077    d:figure | d:equation | d:table" mode="xref">
1078    <xsl:param name="text-contents">
1079      <xsl:apply-templates select="." mode="label-text"/>
1080    </xsl:param>
1081    <a class="xref" href="#{@xml:id}">
1082      <xsl:for-each select="d:title">
1083        <xsl:attribute name="title">
1084          <xsl:value-of select="."/>
1085        </xsl:attribute>
1086      </xsl:for-each>
1087      <xsl:copy-of select="$text-contents"/>
1088    </a>
1089  </xsl:template>
1090
1091
1092  <xsl:template match="d:orderedlist/d:listitem" mode="xref">
1093    <xsl:param name="text-contents">
1094      <xsl:number level="multiple" format="1.1"/>
1095    </xsl:param>
1096    <a class="xref" href="#{@xml:id}">
1097      <xsl:copy-of select="$text-contents"/>
1098    </a>
1099  </xsl:template>
1100
1101
1102  <xsl:template match="d:section//d:para" mode="xref">
1103    <xsl:param name="text-contents">
1104      <xsl:text>in </xsl:text>
1105      <xsl:apply-templates select="ancestor::d:section[1]" mode="label-text"/>
1106    </xsl:param>
1107    <a class="xref" href="#{@xml:id}">
1108      <xsl:copy-of select="$text-contents"/>
1109    </a>
1110  </xsl:template>
1111 
1112 
1113  <xsl:template match="d:itemizedlist | d:orderedlist | d:variablelist" mode="xref">
1114    <xsl:param name="text-contents">
1115      <xsl:apply-templates select="." mode="label-text"/>
1116    </xsl:param>
1117    <xsl:choose>
1118      <xsl:when test="normalize-space(d:title)">
1119        <a class="xref" href="#{@xml:id}">
1120          <xsl:copy-of select="$text-contents"/>
1121        </a>
1122      </xsl:when>
1123      <xsl:otherwise>
1124        <xsl:call-template name="runtime-warning">
1125          <xsl:with-param name="message">
1126            <xsl:text>Can't create xref to </xsl:text>
1127            <xsl:value-of select="local-name(.)"/>
1128            <xsl:text>[@xml:id='</xsl:text>
1129            <xsl:value-of select="@xml:id"/>
1130            <xsl:text>']: it has no title or @xreflabel</xsl:text>
1131          </xsl:with-param>
1132        </xsl:call-template>
1133      </xsl:otherwise>
1134    </xsl:choose>
1135  </xsl:template>
1136 
1137
1138  <xsl:template match="*[@xml:id]" mode="id">
1139    <xsl:value-of select="@xml:id"/>
1140  </xsl:template>
1141
1142
1143  <xsl:template match="*" mode="id">
1144    <!-- matches a footnote that doesn't have its own ID -->
1145    <xsl:value-of select="generate-id(.)"/>
1146  </xsl:template>
1147
1148  <xsl:template name="attach-id">
1149    <xsl:variable name="id">
1150      <xsl:apply-templates select="." mode="id"/>
1151    </xsl:variable>
1152    <xsl:if test="normalize-space($id)">
1153      <xsl:attribute name="id">
1154        <xsl:value-of select="$id"/>
1155      </xsl:attribute>
1156    </xsl:if>
1157  </xsl:template>
1158
1159  <xsl:template match="*[normalize-space(@xreflabel)]" mode="label-text" priority="99">
1160    <!-- this template overrides the template that would
1161      otherwise match to generate label content for the link -->
1162    <xsl:value-of select="normalize-space(@xreflabel)"/>
1163  </xsl:template>
1164
1165  <xsl:template match="d:section" mode="label-text">
1166    <xsl:text>Section</xsl:text>
1167    <xsl:for-each select="d:title">
1168      <xsl:text> &#x201c;</xsl:text>
1169      <xsl:apply-templates/>
1170      <xsl:text>&#x201d;</xsl:text>
1171    </xsl:for-each>
1172  </xsl:template>
1173
1174  <xsl:template match="d:appendix" mode="label-text">
1175    <xsl:text>Appendix </xsl:text>
1176    <xsl:number level="any" format="A"/>
1177  </xsl:template>
1178
1179  <xsl:template match="d:itemizedlist | d:orderedlist | d:variablelist" mode="label-text">
1180    <xsl:for-each select="d:title">
1181      <xsl:text>&#x201c;</xsl:text>
1182      <xsl:apply-templates/>
1183      <xsl:text>&#x201d;</xsl:text>
1184    </xsl:for-each>
1185    <xsl:if test="not(d:title)">
1186      <xsl:call-template name="runtime-warning">
1187        <xsl:with-param name="message">
1188        <xsl:text>title needed to label </xsl:text>
1189        <xsl:value-of select="local-name()"/>
1190        </xsl:with-param>
1191      </xsl:call-template>
1192    </xsl:if>
1193  </xsl:template>
1194
1195  <xsl:template match="d:footnote" mode="label-text">
1196    <xsl:text>[</xsl:text>
1197    <xsl:number level="any"/>
1198    <xsl:text>]</xsl:text>
1199  </xsl:template>
1200
1201  <xsl:template match="d:note" mode="label-text">
1202    <xsl:text>Note</xsl:text>
1203  </xsl:template>
1204
1205  <xsl:template match="d:equation" mode="label-text">
1206    <xsl:text>Equation&#xA0;</xsl:text>
1207    <xsl:number level="any" format="(a)"/>
1208  </xsl:template>
1209
1210  <xsl:template match="d:figure" mode="label-text">
1211    <xsl:text>Figure&#xA0;</xsl:text>
1212    <xsl:number level="any"/>
1213  </xsl:template>
1214
1215  <xsl:template match="d:table" mode="label-text">
1216    <xsl:text>Table&#xA0;</xsl:text>
1217    <xsl:number level="any" format="I"/>
1218  </xsl:template>
1219 
1220  <xsl:template match="d:bibliomixed" mode="label-text">
1221    <xsl:value-of select="normalize-space(@xml:id)"/>
1222  </xsl:template>
1223 
1224  <xsl:template match="*" mode="text-only">
1225    <xsl:apply-templates mode="text-only"/>
1226  </xsl:template>
1227 
1228  <xsl:template match="d:footnote" mode="text-only"/>
1229 
1230  <xsl:template name="runtime-warning">
1231    <xsl:param name="message">RUNTIME WARNING</xsl:param>
1232    <span style="color:red">
1233      <xsl:copy-of select="$message"/>
1234    </span>
1235    <xsl:message>
1236      <xsl:value-of select="$message"/>
1237    </xsl:message>
1238  </xsl:template>
1239 
1240 
1241</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.