Imported Upstream version 1.78.1
[platform/upstream/docbook-xsl-stylesheets.git] / slides / xhtml / plain.xsl
1 <?xml version="1.0" encoding="ASCII"?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns="http://www.w3.org/1999/xhtml"
4                 xmlns:xlink="http://www.w3.org/1999/xlink"
5                 xmlns:db="http://docbook.org/ns/docbook"
6                 xmlns:dbs="http://docbook.org/ns/docbook-slides"
7                 xmlns:exsl="http://exslt.org/common"
8                 exclude-result-prefixes="dbs db xlink"
9                 extension-element-prefixes="exsl"
10                 version="1.0">
11
12 <xsl:import href="../../xhtml/chunk.xsl"/>
13 <xsl:import href="../common/common.xsl"/>
14 <xsl:import href="plain-titlepage.xsl"/>
15 <xsl:import href="param.xsl"/>
16
17 <xsl:param name="local.l10n.xml" select="document('')"/>
18 <i18n xmlns="http://docbook.sourceforge.net/xmlns/l10n/1.0">
19   <l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="en">
20     <l:gentext key="Foilgroup" text="Foil Group"/>
21     <l:gentext key="Foil" text="Foil"/>
22     <l:gentext key="Speakernotes" text="Speaker Notes"/>
23     <l:gentext key="Handoutnotes" text="Handout Notes"/>
24     <l:gentext key="SVGImage" text="SVG image"/>
25     <l:gentext key="MathMLFormula" text="MathML formula"/>
26
27     <l:context name="title">
28       <l:gentext key="foil" text="Foil %n %t"/>
29       <l:gentext key="foilgroup" text="Foil %n %t"/>
30     </l:context>
31   </l:l10n>
32 </i18n>
33
34 <!-- Overrides from DocBook XSL -->
35 <xsl:template name="process.qanda.toc"/>
36
37 <!-- Main content starts here -->
38
39 <xsl:template name="xhtml.head">
40   <meta name="generator" content="DocBook Slides Stylesheets V{$VERSION}"/>
41   <link rel="stylesheet" href="{$user.css}" type="text/css"/>
42 </xsl:template>
43
44 <xsl:template name="slideshow.head"/>
45
46 <xsl:template name="slideshow.content">
47   <div class="presentation">
48     <xsl:if test="$generate.titlepage != 0">
49       <xsl:apply-templates select="/dbs:slides" mode="titlepage"/>
50     </xsl:if>
51
52     <xsl:apply-templates select="/dbs:slides/dbs:foil|dbs:slides/dbs:foilgroup"/>
53   </div>
54 </xsl:template>
55
56 <xsl:template match="/dbs:slides" mode="titlepage">
57   <xsl:call-template name="slides.titlepage"/>
58 </xsl:template>
59
60 <xsl:template name="slide.notes">
61   <xsl:if test="($generate.speakernotes != 0) and ./dbs:speakernotes">
62     <div class="notes">
63       <h2 class="notes">
64         <xsl:call-template name="gentext">
65           <xsl:with-param name="key" select="'Speakernotes'"/>
66         </xsl:call-template>
67       </h2>
68
69       <xsl:apply-templates select="dbs:speakernotes" mode="notes.mode"/>
70     </div>
71   </xsl:if>
72
73   <xsl:if test="($generate.handoutnotes != 0) and ./dbs:handoutnotes">
74     <div class="handout">
75       <h2 class="handout">
76         <xsl:call-template name="gentext">
77           <xsl:with-param name="key" select="'Handoutnotes'"/>
78         </xsl:call-template>
79       </h2>
80
81       <xsl:apply-templates select="dbs:handoutnotes" mode="notes.mode"/>
82     </div>
83   </xsl:if>
84 </xsl:template>
85
86 <xsl:template match="/">
87   <html>
88     <xsl:if test="/dbs:slides/@xml:lang">
89       <xsl:attribute name="xml:lang">
90         <xsl:value-of select="/dbs:slides/@xml:lang"/>
91       </xsl:attribute>
92     </xsl:if>
93
94     <head>
95       <title>
96         <xsl:call-template name="get.title">
97           <xsl:with-param name="ctx" select="/dbs:slides"/>
98         </xsl:call-template>
99       </title>
100
101       <xsl:call-template name="xhtml.head"/>
102     </head>
103
104     <body>
105       <xsl:call-template name="slideshow.head"/>
106
107       <xsl:call-template name="slideshow.content"/>
108     </body>
109   </html>
110 </xsl:template>
111
112 <xsl:template name="foilgroup.content">
113       <xsl:apply-templates select="*[not(self::dbs:foil)]"/>
114
115       <xsl:if test="($generate.foilgroup.toc != 0)">
116         <xsl:choose>
117           <xsl:when test="($generate.foilgroup.numbered.toc != 0)">
118             <ol>
119               <xsl:for-each select="dbs:foil">
120                 <li><xsl:call-template name="get.title"/></li>
121               </xsl:for-each>
122             </ol>
123           </xsl:when>
124
125           <xsl:otherwise>
126             <ul>
127               <xsl:for-each select="dbs:foil">
128                 <li><xsl:call-template name="get.title"/></li>
129               </xsl:for-each>
130             </ul>
131           </xsl:otherwise>
132         </xsl:choose>
133     </xsl:if>
134 </xsl:template>
135
136 <xsl:template name="foil.classes">
137   <xsl:variable name="classValue">
138     <xsl:call-template name="process.dbs.attributes">
139       <!-- Do not put incremental or collapsible on foils -->
140       <xsl:with-param name="attributeSet" select="self::*/@dbs:style"/>
141       <xsl:with-param name="stored">
142         <xsl:value-of select="'slide'"/>
143         <xsl:if test="@*[namespace-uri() = 'http://docbook.org/ns/docbook-slides']">
144           <xsl:text> </xsl:text>
145         </xsl:if>
146       </xsl:with-param>
147     </xsl:call-template>
148   </xsl:variable>
149
150   <xsl:attribute name="class">
151     <xsl:value-of select="$classValue"/>
152   </xsl:attribute>
153 </xsl:template>
154
155 <xsl:template match="dbs:foilgroup">
156   <xsl:call-template name="generate.anchor"/>
157   <div>
158     <xsl:call-template name="foil.classes"/>
159
160     <xsl:choose>
161       <xsl:when test="($wrap.slidecontent != 0)">
162         <div class="slidecontent">
163           <xsl:call-template name="foilgroup.content"/>
164         </div>
165       </xsl:when>
166
167       <xsl:otherwise>
168         <xsl:call-template name="foilgroup.content"/>
169       </xsl:otherwise>
170     </xsl:choose>
171
172     <xsl:call-template name="slide.notes"/>
173   </div>
174
175   <xsl:apply-templates select="dbs:foil"/>
176 </xsl:template>
177
178 <xsl:template match="dbs:foil">
179   <xsl:call-template name="generate.anchor"/>
180   <div>
181     <xsl:call-template name="foil.classes"/>
182
183     <xsl:choose>
184       <xsl:when test="($wrap.slidecontent != 0)">
185         <div class="slidecontent">
186           <xsl:apply-templates select="*"/>
187         </div>
188       </xsl:when>
189
190       <xsl:otherwise>
191         <xsl:apply-templates/>
192       </xsl:otherwise>
193     </xsl:choose>
194
195     <xsl:call-template name="process.footnotes"/>
196
197     <xsl:call-template name="slide.notes"/>
198   </div>
199 </xsl:template>
200
201 <xsl:template match="dbs:handoutnotes"/>
202
203 <xsl:template match="dbs:speakernotes"/>
204
205 <xsl:template match="dbs:handoutnotes" mode="notes.mode">
206   <div class="handoutnotes">
207     <xsl:apply-templates/>
208   </div>
209 </xsl:template>
210
211 <xsl:template match="dbs:speakernotes" mode="notes.mode">
212   <div class="speakernotes">
213     <xsl:apply-templates/>
214   </div>
215 </xsl:template>
216
217 <xsl:template name="process.dbs.attributes">
218   <xsl:param name="attributeSet"/>
219   <xsl:param name="stored" select="''"/>
220
221   <xsl:variable name="gotIncremental">
222     <xsl:if test="((local-name($attributeSet[1]) = 'incremental') and ($attributeSet[1] = '1'))">1</xsl:if>
223   </xsl:variable>
224
225   <xsl:variable name="enableIncremental">
226     <xsl:if test="($disable.incremental = '0') and ($gotIncremental = '1')">1</xsl:if>
227   </xsl:variable>
228
229   <xsl:variable name="gotCollapsible">
230     <xsl:if test="((local-name($attributeSet[1]) = 'collapsible') and ($attributeSet[1] = '1'))">1</xsl:if>
231   </xsl:variable>
232
233   <xsl:variable name="enableCollapsible">
234     <xsl:if test="($disable.collapsible = '0') and ($gotCollapsible = '1')">1</xsl:if>
235   </xsl:variable>
236
237   <xsl:variable name="append">
238     <xsl:choose>
239       <xsl:when test="local-name($attributeSet[1]) = 'style'">
240         <xsl:value-of select="$attributeSet[1]"/>
241       </xsl:when>
242
243       <xsl:when test="$enableCollapsible = '1'">
244         <xsl:value-of select="'outline'"/>
245       </xsl:when>
246  
247       <xsl:when test="$enableIncremental = '1'">
248         <xsl:value-of select="'incremental'"/>
249       </xsl:when>
250     </xsl:choose>
251
252     <xsl:if test="count($attributeSet) &gt; 1">
253       <xsl:text> </xsl:text>
254     </xsl:if>
255   </xsl:variable>
256
257   <xsl:choose>
258     <xsl:when test="not($attributeSet)">
259       <xsl:value-of select="$stored"/>
260     </xsl:when>
261
262     <xsl:when test="count($attributeSet) &lt;= 1">
263       <xsl:value-of select="concat($stored, $append)"/>
264     </xsl:when>
265
266     <xsl:otherwise>
267       <xsl:call-template name="process.dbs.attributes">
268         <xsl:with-param name="attributeSet" select="$attributeSet[position() != 1]"/>
269         <xsl:with-param name="stored" select="concat($stored, $append)"/>
270       </xsl:call-template>
271     </xsl:otherwise>
272   </xsl:choose>
273 </xsl:template>
274
275 <xsl:template match="dbs:block">
276   <xsl:variable name="classValue">
277     <xsl:call-template name="process.dbs.attributes">
278       <xsl:with-param name="attributeSet" select="(ancestor-or-self::*/@dbs:incremental)[last()] | (ancestor-or-self::*/@dbs:collapsible)[last()] | self::*/@dbs:style"/>
279     </xsl:call-template>
280   </xsl:variable>
281
282   <div class="{$classValue}">
283     <xsl:apply-templates/>
284   </div>
285 </xsl:template>
286
287 <xsl:template match="db:info">
288   <xsl:apply-templates select="db:title|db:titleabbrev|db:subtitle|db:author|db:authorgroup/db:author"/>
289 </xsl:template>
290
291 <xsl:template match="db:title|db:titleabbrev">
292   <xsl:if test="not(self::db:title) or (not(preceding-sibling::db:titleabbrev) and not(following-sibling::db:titleabbrev))">
293     <h1 class="title"><xsl:value-of select="."/></h1>
294   </xsl:if>
295 </xsl:template>
296
297 <xsl:template match="db:subtitle">
298   <h1 class="subtitle"><xsl:value-of select="."/></h1>
299 </xsl:template>
300
301 <xsl:template match="db:author">
302   <h3 class="author"><xsl:apply-templates select="db:personname|db:orgname"/></h3>
303   <h4 class="email"><xsl:apply-templates select="db:email"/></h4>
304   <xsl:if test="db:affiliation">
305     <h4 class="affiliation"><xsl:value-of select="db:affiliation"/></h4>
306   </xsl:if>
307 </xsl:template>
308
309 <xsl:template match="db:email">
310   <a>
311     <xsl:attribute name="href">
312       <xsl:text>mailto:</xsl:text><xsl:value-of select="."/>
313     </xsl:attribute>
314
315     &lt;<xsl:value-of select="."/>&gt;
316   </a>
317 </xsl:template>
318
319 <xsl:template name="list.content">
320   <xsl:variable name="classValue">
321     <xsl:call-template name="process.dbs.attributes">
322       <xsl:with-param name="attributeSet" select="(ancestor-or-self::*/@dbs:incremental)[last()] | (ancestor-or-self::*/@dbs:collapsible)[last()] | self::*/@dbs:style"/>
323     </xsl:call-template>
324   </xsl:variable>
325
326   <xsl:attribute name="class">
327     <xsl:value-of select="$classValue"/>
328   </xsl:attribute>
329
330   <xsl:apply-templates select="*"/>
331 </xsl:template>
332
333 <xsl:template match="db:itemizedlist">
334   <ul>
335     <xsl:call-template name="list.content"/>
336   </ul>
337 </xsl:template>
338
339 <xsl:template match="db:orderedlist">
340   <ol>
341     <xsl:call-template name="list.content"/>
342   </ol>
343 </xsl:template>
344
345 <xsl:template match="db:mediaobject">
346   <xsl:variable name="classValue">
347     <xsl:call-template name="process.dbs.attributes">
348       <xsl:with-param name="attributeSet" select="(ancestor-or-self::*/@dbs:incremental)[last()] | (ancestor-or-self::*/@dbs:collapsible)[last()] | self::*/@dbs:style"/>
349     </xsl:call-template>
350   </xsl:variable>
351
352   <div class="{$classValue}">
353     <xsl:apply-templates select="db:imageobject[1]"/>
354   </div>
355 </xsl:template>
356
357 <xsl:template name="bibliography.titlepage"/>
358
359 <xsl:template match="db:bibliosource" mode="bibliography.mode">
360   <span>
361     <xsl:call-template name="common.html.attributes"/>
362     <xsl:call-template name="id.attribute"/>
363     <xsl:choose>
364       <xsl:when test="@xlink:href">
365         <a href="{@xlink:href}">
366           <xsl:apply-templates mode="bibliography.mode"/>
367         </a>
368       </xsl:when>
369
370       <xsl:otherwise>
371         <xsl:apply-templates mode="bibliomixed.mode"/>
372       </xsl:otherwise>
373     </xsl:choose>
374   </span>
375 </xsl:template>
376
377 <xsl:template name="href.target.uri">
378   <xsl:param name="object" select="."/>
379   <xsl:variable name="ischunk">
380     <xsl:call-template name="chunk">
381       <xsl:with-param name="node" select="$object"/>
382     </xsl:call-template>
383   </xsl:variable>
384
385   <xsl:if test="$ischunk='0'">
386     <xsl:text>#</xsl:text>
387     <xsl:call-template name="object.id">
388       <xsl:with-param name="object" select="$object"/>
389     </xsl:call-template>
390   </xsl:if>
391 </xsl:template>
392
393 <xsl:template match="dbs:foil|dbs:foilgroup" mode="xref-to">
394   <xsl:call-template name="gentext">
395     <xsl:with-param name="key" select="'Foil'"/>
396   </xsl:call-template>
397   <xsl:call-template name="gentext.space"/>
398   <xsl:value-of select="count(preceding::dbs:foil|preceding::dbs:foilgroup) + 1"/>
399   <xsl:text>: </xsl:text>
400   <xsl:call-template name="get.title"/>
401 </xsl:template>
402
403 <xsl:template name="extension.process.image.attributes">
404   <xsl:variable name="classValue">
405     <xsl:call-template name="process.dbs.attributes">
406       <xsl:with-param name="attributeSet" select="(ancestor-or-self::*/@dbs:incremental)[last()] | (ancestor-or-self::*/@dbs:collapsible)[last()] | self::*/@dbs:style"/>
407     </xsl:call-template>
408   </xsl:variable>
409
410   <xsl:if test="./@*[namespace-uri() = 'http://docbook.org/ns/docbook-slides']">
411     <xsl:attribute name="class">
412       <xsl:value-of select="$classValue"/>
413     </xsl:attribute>
414   </xsl:if>
415 </xsl:template>
416
417 <xsl:template match="*[namespace-uri() = 'http://www.w3.org/2000/svg']">
418   <xsl:call-template name="handle.embedded">
419     <xsl:with-param name="modeParam" select="$svg.embedding.mode"/>
420     <xsl:with-param name="fileExt" select="'.svg'"/>
421     <xsl:with-param name="mimeType" select="'image/svg+xml'"/>
422     <xsl:with-param name="gentextKey" select="'SVGImage'"/>
423   </xsl:call-template>
424 </xsl:template>
425
426 <xsl:template match="*[namespace-uri() = 'http://www.w3.org/1998/Math/MathML']">
427   <xsl:call-template name="handle.embedded">
428     <xsl:with-param name="modeParam" select="$mml.embedding.mode"/>
429     <xsl:with-param name="fileExt" select="'.mml'"/>
430     <xsl:with-param name="mimeType" select="'application/mathml-presentation+xml'"/>
431     <xsl:with-param name="gentextKey" select="'MathMLFormula'"/>
432   </xsl:call-template>
433 </xsl:template>
434
435 <xsl:template name="handle.embedded">
436   <xsl:param name="modeParam">inline</xsl:param>
437   <xsl:param name="fileExt"/>
438   <xsl:param name="mimeType"/>
439   <xsl:param name="gentextKey"/>
440
441   <xsl:choose>
442     <xsl:when test="$modeParam = 'inline'">
443       <xsl:copy-of select="."/>
444     </xsl:when>
445
446     <xsl:otherwise>
447       <xsl:variable name="id">
448         <xsl:call-template name="object.id"/>
449       </xsl:variable>
450       <xsl:variable name="fname">
451         <xsl:value-of select="concat($id, $fileExt)"/>
452       </xsl:variable>
453
454       <exsl:document href="{$fname}">
455         <xsl:copy-of select="."/>
456       </exsl:document>
457
458       <xsl:choose>
459         <xsl:when test="$modeParam = 'object'">
460           <object data="{$fname}" type="{$mimeType}"/>
461         </xsl:when>
462
463         <xsl:when test="$modeParam = 'image'">
464           <img alt="{$mimeType} object" src="{$fname}"/>
465         </xsl:when>
466
467         <xsl:when test="$modeParam = 'link'">
468           <a href="{$fname}">
469             <xsl:call-template name="gentext">
470               <xsl:with-param name="key" select="$gentextKey"/>
471             </xsl:call-template>
472           </a> 
473         </xsl:when>
474
475         <xsl:when test="$modeParam = 'iframe'">
476           <iframe src="{$fname}"/>
477         </xsl:when>
478
479         <xsl:when test="$modeParam = 'embed'">
480           <embed src="{$fname}" type="{$mimeType}" /> 
481         </xsl:when>
482
483         <xsl:otherwise>
484           <xsl:message terminate="yes">
485             Unknown processing mode <xsl:value-of select="$modeParam"/>.
486           </xsl:message>
487         </xsl:otherwise>
488       </xsl:choose>
489     </xsl:otherwise>
490   </xsl:choose>
491 </xsl:template>
492
493 <xsl:template name="generate.anchor">
494   <a>
495     <xsl:attribute name="name">
496       <xsl:call-template name="object.id"/>
497     </xsl:attribute>
498   </a>
499 </xsl:template>
500
501 <xsl:template name="slide.copyright">
502   <div class="copyright">
503     <xsl:call-template name="gentext">
504       <xsl:with-param name="key" select="'Copyright'"/>
505     </xsl:call-template>
506     <xsl:call-template name="gentext.space"/>
507     <xsl:text>&#xa9;</xsl:text>
508     <xsl:call-template name="gentext.space"/>
509     <xsl:value-of select="/dbs:slides/db:info/db:copyright/db:year"/>
510     <xsl:call-template name="gentext.space"/>
511     <xsl:value-of select="/dbs:slides/db:info/db:copyright/db:holder"/>
512   </div>
513 </xsl:template>
514
515 <xsl:template name="slide.pubdate">
516   <div class="pubdate">
517     <xsl:call-template name="gentext">
518       <xsl:with-param name="key" select="'Published'"/>
519     </xsl:call-template>
520     <xsl:text>: </xsl:text>
521     <xsl:value-of select="/dbs:slides/db:info/db:pubdate"/>
522   </div>
523 </xsl:template>
524
525 <xsl:template match="/" mode="slide.header.mode"/>
526
527 <xsl:template match="/" mode="slide.footer.mode">
528   <xsl:if test="($generate.copyright != 0) and /dbs:slides/db:info/db:copyright">
529     <xsl:call-template name="slide.copyright"/>
530   </xsl:if>
531   <xsl:if test="($generate.pubdate != 0) and /dbs:slides/db:info/db:pubdate">
532     <xsl:call-template name="slide.pubdate"/>
533   </xsl:if>
534 </xsl:template>
535 </xsl:stylesheet>