root/docs/docbook-xsl/fo/block.xsl

Revision 23dea7e00df87480acb58bb3398283c2bb227949, 19.4 kB (checked in by Theo Schlossnagle <jesus@omniti.com>, 7 years ago)

pull docs into master

  • Property mode set to 100644
Line 
1 <?xml version='1.0'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:fo="http://www.w3.org/1999/XSL/Format"
4                 version='1.0'>
5
6 <!-- ********************************************************************
7      $Id: block.xsl,v 1.27 2005/08/09 09:30:43 bobstayton Exp $
8      ********************************************************************
9
10      This file is part of the XSL DocBook Stylesheet distribution.
11      See ../README or http://nwalsh.com/docbook/xsl/ for copyright
12      and other information.
13
14      ******************************************************************** -->
15
16 <!-- ==================================================================== -->
17 <!-- What should we do about styling blockinfo? -->
18
19 <xsl:template match="blockinfo">
20   <!-- suppress -->
21 </xsl:template>
22
23 <!-- ==================================================================== -->
24
25 <xsl:template name="block.object">
26   <fo:block>
27     <xsl:if test="@id">
28       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
29     </xsl:if>
30     <xsl:apply-templates/>
31   </fo:block>
32 </xsl:template>
33
34 <!-- ==================================================================== -->
35
36 <xsl:template match="para">
37   <fo:block xsl:use-attribute-sets="normal.para.spacing">
38     <xsl:call-template name="anchor"/>
39     <xsl:apply-templates/>
40   </fo:block>
41 </xsl:template>
42
43 <xsl:template match="simpara">
44   <fo:block xsl:use-attribute-sets="normal.para.spacing">
45     <xsl:if test="@id">
46       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
47     </xsl:if>
48     <xsl:apply-templates/>
49   </fo:block>
50 </xsl:template>
51
52 <xsl:template match="formalpara">
53   <fo:block xsl:use-attribute-sets="normal.para.spacing">
54     <xsl:if test="@id">
55       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
56     </xsl:if>
57     <xsl:apply-templates/>
58   </fo:block>
59 </xsl:template>
60
61 <xsl:template match="formalpara/title">
62   <xsl:variable name="titleStr">
63       <xsl:apply-templates/>
64   </xsl:variable>
65   <xsl:variable name="lastChar">
66     <xsl:if test="$titleStr != ''">
67       <xsl:value-of select="substring($titleStr,string-length($titleStr),1)"/>
68     </xsl:if>
69   </xsl:variable>
70
71   <fo:inline font-weight="bold"
72              keep-with-next.within-line="always"
73              padding-end="1em">
74     <xsl:copy-of select="$titleStr"/>
75     <xsl:if test="$lastChar != ''
76                   and not(contains($runinhead.title.end.punct, $lastChar))">
77       <xsl:value-of select="$runinhead.default.title.end.punct"/>
78     </xsl:if>
79     <xsl:text>&#160;</xsl:text>
80   </fo:inline>
81 </xsl:template>
82
83 <xsl:template match="formalpara/para">
84   <xsl:apply-templates/>
85 </xsl:template>
86
87 <!-- ==================================================================== -->
88
89 <xsl:template match="blockquote">
90   <fo:block xsl:use-attribute-sets="blockquote.properties">
91     <xsl:call-template name="anchor"/>
92     <fo:block>
93       <xsl:if test="title">
94         <fo:block xsl:use-attribute-sets="formal.title.properties">
95           <xsl:apply-templates select="." mode="object.title.markup"/>
96         </fo:block>
97       </xsl:if>
98       <xsl:apply-templates select="*[local-name(.) != 'title'
99                                    and local-name(.) != 'attribution']"/>
100     </fo:block>
101     <xsl:if test="attribution">
102       <fo:block text-align="right">
103         <!-- mdash -->
104         <xsl:text>&#x2014;</xsl:text>
105         <xsl:apply-templates select="attribution"/>
106       </fo:block>
107     </xsl:if>
108   </fo:block>
109 </xsl:template>
110
111 <xsl:template match="epigraph">
112   <fo:block>
113     <xsl:call-template name="anchor"/>
114     <xsl:apply-templates select="para|simpara|formalpara|literallayout"/>
115     <xsl:if test="attribution">
116       <fo:inline>
117         <xsl:text>--</xsl:text>
118         <xsl:apply-templates select="attribution"/>
119       </fo:inline>
120     </xsl:if>
121   </fo:block>
122 </xsl:template>
123
124 <xsl:template match="attribution">
125   <fo:inline><xsl:apply-templates/></fo:inline>
126 </xsl:template>
127
128 <!-- ==================================================================== -->
129
130 <xsl:template name="floater">
131   <xsl:param name="position" select="'none'"/>
132   <xsl:param name="clear" select="'both'"/>
133   <xsl:param name="width"/>
134   <xsl:param name="content"/>
135   <xsl:param name="start.indent">0pt</xsl:param>
136   <xsl:param name="end.indent">0pt</xsl:param>
137
138   <xsl:choose>
139     <xsl:when test="$fop.extensions">
140       <!-- fop 0.20.5 does not support floats -->
141       <xsl:copy-of select="$content"/>
142     </xsl:when>
143     <xsl:when test="$position = 'none'">
144       <xsl:copy-of select="$content"/>
145     </xsl:when>
146     <xsl:when test="$position = 'before'">
147       <fo:float float="before">
148         <xsl:copy-of select="$content"/>
149       </fo:float>
150     </xsl:when>
151     <xsl:when test="$position = 'left' or
152                     $position = 'start' or
153                     $position = 'right' or
154                     $position = 'end' or
155                     $position = 'inside' or
156                     $position = 'outside'">
157       <xsl:variable name="float">
158         <fo:float float="{$position}"
159                   clear="{$clear}">
160           <fo:block-container
161                     start-indent="{$start.indent}"
162                     end-indent="{$end.indent}">
163             <xsl:if test="$width != ''">
164               <xsl:attribute name="inline-progression-dimension">
165                 <xsl:value-of select="$width"/>
166               </xsl:attribute>
167             </xsl:if>
168             <fo:block>
169               <xsl:copy-of select="$content"/>
170             </fo:block>
171           </fo:block-container>
172         </fo:float>
173       </xsl:variable>
174       <xsl:choose>
175         <xsl:when test="$axf.extensions != 0 and self::sidebar">
176           <fo:block xsl:use-attribute-sets="normal.para.spacing"
177                     space-after="0pt"
178                     space-after.precedence="force"
179                     start-indent="0pt" end-indent="0pt">
180             <xsl:copy-of select="$float"/>
181           </fo:block>
182         </xsl:when>
183         <xsl:when test="$axf.extensions != 0 and
184                         ($position = 'left' or $position = 'start')">
185           <fo:float float="{$position}"
186                     clear="{$clear}">
187             <fo:block-container
188                       inline-progression-dimension=".001mm"
189                       end-indent="{$start.indent} + {$width} + {$end.indent}">
190               <xsl:attribute name="start-indent">
191                 <xsl:choose>
192                   <xsl:when test="ancestor::para">
193                     <!-- Special case for handling inline floats
194                          in Antenna House-->
195                     <xsl:value-of select="concat('-', $body.start.indent)"/>
196                   </xsl:when>
197                   <xsl:otherwise>0pt</xsl:otherwise>
198                 </xsl:choose>
199               </xsl:attribute>
200               <fo:block start-indent="{$start.indent}"
201                         end-indent="-{$start.indent} - {$width}">
202                 <xsl:copy-of select="$content"/>
203               </fo:block>
204             </fo:block-container>
205           </fo:float>
206
207         </xsl:when>
208         <xsl:when test="$axf.extensions != 0 and
209                         ($position = 'right' or $position = 'end')">
210           <!-- Special case for handling inline floats in Antenna House-->
211           <fo:float float="{$position}"
212                     clear="{$clear}">
213             <fo:block-container
214                       inline-progression-dimension=".001mm"
215                       end-indent="-{$body.end.indent}"
216                       start-indent="{$start.indent} + {$width} + {$end.indent}">
217               <fo:block end-indent="{$end.indent}"
218                         start-indent="-{$end.indent} - {$width}">
219                 <xsl:copy-of select="$content"/>
220               </fo:block>
221             </fo:block-container>
222           </fo:float>
223
224         </xsl:when>
225         <xsl:when test="$xep.extensions != 0 and self::sidebar">
226           <!-- float needs some space above  to line up with following para -->
227           <fo:block xsl:use-attribute-sets="normal.para.spacing">
228             <xsl:copy-of select="$float"/>
229           </fo:block>
230         </xsl:when>
231         <xsl:when test="$xep.extensions != 0">
232           <xsl:copy-of select="$float"/>
233         </xsl:when>
234         <xsl:otherwise>
235           <xsl:copy-of select="$float"/>
236         </xsl:otherwise>
237       </xsl:choose>
238     </xsl:when>
239     <xsl:otherwise>
240       <xsl:copy-of select="$content"/>
241     </xsl:otherwise>
242   </xsl:choose>
243 </xsl:template>
244
245 <xsl:template match="sidebar" name="sidebar">
246   <!-- Also does margin notes -->
247   <xsl:variable name="pi-type">
248     <xsl:call-template name="dbfo-attribute">
249       <xsl:with-param name="pis"
250                       select="processing-instruction('dbfo')"/>
251       <xsl:with-param name="attribute" select="'float-type'"/>
252     </xsl:call-template>
253   </xsl:variable>
254
255   <xsl:choose>
256     <xsl:when test="$pi-type = 'margin.note'">
257       <xsl:call-template name="margin.note"/>
258     </xsl:when>
259     <xsl:otherwise>
260       <xsl:variable name="content">
261         <fo:block xsl:use-attribute-sets="sidebar.properties">
262           <xsl:if test="./title">
263             <fo:block xsl:use-attribute-sets="sidebar.title.properties">
264               <xsl:apply-templates select="./title" mode="sidebar.title.mode"/>
265             </fo:block>
266           </xsl:if>
267           <xsl:apply-templates/>
268         </fo:block>
269       </xsl:variable>
270    
271       <xsl:variable name="pi-width">
272         <xsl:call-template name="dbfo-attribute">
273           <xsl:with-param name="pis"
274                           select="processing-instruction('dbfo')"/>
275           <xsl:with-param name="attribute" select="'sidebar-width'"/>
276         </xsl:call-template>
277       </xsl:variable>
278
279       <xsl:variable name="position">
280         <xsl:choose>
281           <xsl:when test="$pi-type != ''">
282             <xsl:value-of select="$pi-type"/>
283           </xsl:when>
284           <xsl:otherwise>
285             <xsl:value-of select="$sidebar.float.type"/>
286           </xsl:otherwise>
287         </xsl:choose>
288       </xsl:variable>
289    
290       <xsl:call-template name="floater">
291         <xsl:with-param name="content" select="$content"/>
292         <xsl:with-param name="position" select="$position"/>
293         <xsl:with-param name="width">
294           <xsl:choose>
295             <xsl:when test="$pi-width != ''">
296               <xsl:value-of select="$pi-width"/>
297             </xsl:when>
298             <xsl:otherwise>
299               <xsl:value-of select="$sidebar.float.width"/>
300             </xsl:otherwise>
301           </xsl:choose>
302         </xsl:with-param>
303         <xsl:with-param name="start.indent">
304           <xsl:choose>
305             <xsl:when test="$position = 'start' or
306                             $position = 'left'">0pt</xsl:when>
307             <xsl:when test="$position = 'end' or
308                             $position = 'right'">0.5em</xsl:when>
309           </xsl:choose>
310         </xsl:with-param>
311         <xsl:with-param name="end.indent">
312           <xsl:choose>
313             <xsl:when test="$position = 'start' or
314                             $position = 'left'">0.5em</xsl:when>
315             <xsl:when test="$position = 'end' or
316                             $position = 'right'">0pt</xsl:when>
317           </xsl:choose>
318         </xsl:with-param>
319       </xsl:call-template>
320     </xsl:otherwise>
321   </xsl:choose>
322
323 </xsl:template>
324
325 <xsl:template match="sidebar/title">
326 </xsl:template>
327
328 <xsl:template match="sidebar/title" mode="sidebar.title.mode">
329   <xsl:apply-templates/>
330 </xsl:template>
331
332 <xsl:template name="margin.note">
333   <xsl:param name="content">
334     <fo:block xsl:use-attribute-sets="margin.note.properties">
335       <xsl:if test="./title">
336         <fo:block xsl:use-attribute-sets="margin.note.title.properties">
337           <xsl:apply-templates select="./title" mode="margin.note.title.mode"/>
338         </fo:block>
339       </xsl:if>
340       <xsl:apply-templates/>
341     </fo:block>
342   </xsl:param>
343
344   <xsl:variable name="pi-width">
345     <xsl:call-template name="dbfo-attribute">
346       <xsl:with-param name="pis"
347                       select="processing-instruction('dbfo')"/>
348       <xsl:with-param name="attribute" select="'sidebar-width'"/>
349     </xsl:call-template>
350   </xsl:variable>
351
352   <xsl:variable name="position" select="$margin.note.float.type"/>
353
354   <xsl:call-template name="floater">
355     <xsl:with-param name="content" select="$content"/>
356     <xsl:with-param name="position" select="$position"/>
357     <xsl:with-param name="width" >
358       <xsl:choose>
359         <xsl:when test="$pi-width != ''">
360           <xsl:value-of select="$pi-width"/>
361         </xsl:when>
362         <xsl:otherwise>
363           <xsl:value-of select="$margin.note.width"/>
364         </xsl:otherwise>
365       </xsl:choose>
366     </xsl:with-param>
367     <xsl:with-param name="start.indent">
368       <xsl:choose>
369         <xsl:when test="$position = 'start' or
370                         $position = 'left'">0pt</xsl:when>
371         <xsl:when test="$position = 'end' or
372                         $position = 'right'">0.5em</xsl:when>
373       </xsl:choose>
374     </xsl:with-param>
375     <xsl:with-param name="end.indent">
376       <xsl:choose>
377         <xsl:when test="$position = 'start' or
378                         $position = 'left'">0.5em</xsl:when>
379         <xsl:when test="$position = 'end' or
380                         $position = 'right'">0pt</xsl:when>
381       </xsl:choose>
382     </xsl:with-param>
383   </xsl:call-template>
384 </xsl:template>
385
386 <xsl:template match="sidebar/title" mode="margin.note.title.mode">
387   <xsl:apply-templates/>
388 </xsl:template>
389
390 <!-- ==================================================================== -->
391
392 <xsl:template match="abstract">
393   <fo:block xsl:use-attribute-sets="abstract.properties">
394     <xsl:if test="@id">
395       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
396     </xsl:if>
397     <xsl:apply-templates/>
398   </fo:block>
399 </xsl:template>
400
401 <xsl:template match="abstract/title">
402   <fo:block xsl:use-attribute-sets="abstract.title.properties">
403     <xsl:apply-templates/>
404   </fo:block>
405 </xsl:template>
406
407 <!-- ==================================================================== -->
408
409 <xsl:template match="msgset">
410   <xsl:apply-templates/>
411 </xsl:template>
412
413 <xsl:template match="msgentry">
414   <xsl:call-template name="block.object"/>
415 </xsl:template>
416
417 <xsl:template match="simplemsgentry">
418   <xsl:call-template name="block.object"/>
419 </xsl:template>
420
421 <xsl:template match="msg">
422   <xsl:call-template name="block.object"/>
423 </xsl:template>
424
425 <xsl:template match="msgmain">
426   <xsl:apply-templates/>
427 </xsl:template>
428
429 <xsl:template match="msgsub">
430   <xsl:apply-templates/>
431 </xsl:template>
432
433 <xsl:template match="msgrel">
434   <xsl:apply-templates/>
435 </xsl:template>
436
437 <xsl:template match="msgtext">
438   <xsl:apply-templates/>
439 </xsl:template>
440
441 <xsl:template match="msginfo">
442   <xsl:call-template name="block.object"/>
443 </xsl:template>
444
445 <xsl:template match="msglevel">
446   <fo:block>
447     <fo:inline font-weight="bold"
448                keep-with-next.within-line="always">
449       <xsl:call-template name="gentext.template">
450         <xsl:with-param name="context" select="'msgset'"/>
451         <xsl:with-param name="name" select="'MsgLevel'"/>
452       </xsl:call-template>
453     </fo:inline>
454     <xsl:apply-templates/>
455   </fo:block>
456 </xsl:template>
457
458 <xsl:template match="msgorig">
459   <fo:block>
460     <fo:inline font-weight="bold"
461                keep-with-next.within-line="always">
462       <xsl:call-template name="gentext.template">
463         <xsl:with-param name="context" select="'msgset'"/>
464         <xsl:with-param name="name" select="'MsgOrig'"/>
465       </xsl:call-template>
466     </fo:inline>
467     <xsl:apply-templates/>
468   </fo:block>
469 </xsl:template>
470
471 <xsl:template match="msgaud">
472   <fo:block>
473     <fo:inline font-weight="bold"
474                keep-with-next.within-line="always">
475       <xsl:call-template name="gentext.template">
476         <xsl:with-param name="context" select="'msgset'"/>
477         <xsl:with-param name="name" select="'MsgAud'"/>
478       </xsl:call-template>
479     </fo:inline>
480     <xsl:apply-templates/>
481   </fo:block>
482 </xsl:template>
483
484 <xsl:template match="msgexplan">
485   <xsl:call-template name="block.object"/>
486 </xsl:template>
487
488 <xsl:template match="msgexplan/title">
489   <fo:block font-weight="bold"
490             keep-with-next.within-column="always"
491             hyphenate="false">
492     <xsl:apply-templates/>
493   </fo:block>
494 </xsl:template>
495
496 <!-- ==================================================================== -->
497 <!-- For better or worse, revhistory is allowed in content... -->
498
499 <xsl:template match="revhistory">
500   <fo:table table-layout="fixed">
501     <xsl:if test="@id">
502       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
503     </xsl:if>
504     <fo:table-column column-number="1" column-width="proportional-column-width(1)"/>
505     <fo:table-column column-number="2" column-width="proportional-column-width(1)"/>
506     <fo:table-column column-number="3" column-width="proportional-column-width(1)"/>
507     <fo:table-body start-indent="0pt" end-indent="0pt">
508       <fo:table-row>
509         <fo:table-cell number-columns-spanned="3">
510           <fo:block>
511             <xsl:call-template name="gentext">
512               <xsl:with-param name="key" select="'RevHistory'"/>
513             </xsl:call-template>
514           </fo:block>
515         </fo:table-cell>
516       </fo:table-row>
517       <xsl:apply-templates/>
518     </fo:table-body>
519   </fo:table>
520 </xsl:template>
521
522 <xsl:template match="revhistory/revision">
523   <xsl:variable name="revnumber" select="revnumber"/>
524   <xsl:variable name="revdate"   select="date"/>
525   <xsl:variable name="revauthor" select="authorinitials"/>
526   <xsl:variable name="revremark" select="revremark|revdescription"/>
527   <fo:table-row>
528     <fo:table-cell>
529       <fo:block>
530         <xsl:if test="@id">
531           <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
532         </xsl:if>
533         <xsl:if test="$revnumber">
534           <xsl:call-template name="gentext">
535             <xsl:with-param name="key" select="'Revision'"/>
536           </xsl:call-template>
537           <xsl:call-template name="gentext.space"/>
538           <xsl:apply-templates select="$revnumber[1]"/>
539         </xsl:if>
540       </fo:block>
541     </fo:table-cell>
542     <fo:table-cell>
543       <fo:block>
544         <xsl:apply-templates select="$revdate[1]"/>
545       </fo:block>
546     </fo:table-cell>
547     <fo:table-cell>
548       <fo:block>
549         <xsl:for-each select="$revauthor">
550           <xsl:apply-templates select="."/>
551           <xsl:if test="position() != last()">
552             <xsl:text>, </xsl:text>
553           </xsl:if>
554         </xsl:for-each>
555       </fo:block>
556     </fo:table-cell>
557   </fo:table-row>
558   <xsl:if test="$revremark">
559     <fo:table-row>
560       <fo:table-cell number-columns-spanned="3">
561         <fo:block>
562           <xsl:apply-templates select="$revremark[1]"/>
563         </fo:block>
564       </fo:table-cell>
565     </fo:table-row>
566   </xsl:if>
567 </xsl:template>
568
569 <xsl:template match="revision/revnumber">
570   <xsl:apply-templates/>
571 </xsl:template>
572
573 <xsl:template match="revision/date">
574   <xsl:apply-templates/>
575 </xsl:template>
576
577 <xsl:template match="revision/authorinitials">
578   <xsl:apply-templates/>
579 </xsl:template>
580
581 <xsl:template match="revision/revremark">
582   <xsl:apply-templates/>
583 </xsl:template>
584
585 <xsl:template match="revision/revdescription">
586   <xsl:apply-templates/>
587 </xsl:template>
588
589 <!-- ==================================================================== -->
590
591 <xsl:template match="ackno">
592   <fo:block xsl:use-attribute-sets="normal.para.spacing">
593     <xsl:if test="@id">
594       <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
595     </xsl:if>
596     <xsl:apply-templates/>
597   </fo:block>
598 </xsl:template>
599
600 <!-- ==================================================================== -->
601
602 <xsl:template match="highlights">
603   <xsl:call-template name="block.object"/>
604 </xsl:template>
605
606 <!-- ==================================================================== -->
607
608 </xsl:stylesheet>
Note: See TracBrowser for help on using the browser.