Merging code from trunk that fixes #774, this work was done by incastrix
[phpeclipse.git] / net.sourceforge.phpeclipse.help / docbook-src / guide / xsl / phpeclipse_pdf.xsl
1 <?xml version='1.0' encoding='ISO-8859-1'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:fo="http://www.w3.org/1999/XSL/Format"
4                 xmlns:exsl="http://exslt.org/common"
5                 extension-element-prefixes="exsl"
6                 exclude-result-prefixes="exsl"
7                 version="1.0">
8
9 <xsl:import href="file:///c:/docbook/docbook-xsl/fo/profile-docbook.xsl"/>
10 <xsl:import href="file:///c:/docbook/docbook-xsl/fo/docbook.xsl"/>
11 <xsl:import href="phpeclipse_pagemaster.xsl"/>
12
13 <xsl:param name="profile.role" select="'with_index;fo;bold'"/>
14
15 <xsl:param name="paper.type" select="'A4'"/>
16 <xsl:param name="double.sided" select="1"/>
17 <xsl:param name="section.autolabel" select="1"/>
18 <xsl:param name="toc.section.depth" select="2"/>
19 <xsl:param name="section.label.includes.component.label" select="1"/>
20 <xsl:param name="draft.watermark.image" select="''"/>
21 <xsl:param name="draft.mode" select="'no'"/>
22 <xsl:param name="fop.extensions" select="1"/>
23
24 <xsl:param name="headers.on.blank.pages" select="1"/>
25 <xsl:param name="header.rule" select="1"/>
26 <xsl:param name="line-height" select="'normal'"/>
27
28 <xsl:param name="saxon.extensions" select="1"/>
29
30 <xsl:param name="use.extensions"  select="1"/>
31 <xsl:param name="callouts.extension"  select="1"/>
32 <xsl:param name="textinsert.extension" select="1"/>
33 <xsl:param name="tablecolumns.extension" select="'0'"></xsl:param>
34
35 <xsl:param name="callout.graphics">1</xsl:param>
36 <xsl:param name="callout.graphics.extension">.png</xsl:param>
37 <xsl:param name="callout.graphics.path" select="'img/callouts/'"></xsl:param>
38
39 <xsl:param name="admon.graphics" select="1"></xsl:param>
40 <xsl:param name="admon.graphics.path">img/admon/</xsl:param>
41
42 <xsl:param name="qanda.defaultlabel">none</xsl:param>
43
44 <xsl:param name="insert.xref.page.number" select="1"/>
45 <!--
46 <xsl:param name="footnote.number.format" select="i"></xsl:param>
47 <xsl:param name="footnote.number.symbols" select="*"></xsl:param>
48 -->
49
50 <xsl:param name="body.margin.top" select="'13mm'"/>
51 <xsl:param name="body.margin.bottom" select="'5mm'"/>
52
53 <xsl:param name="region.before.extent" select="'7.80mm'"/>
54 <xsl:param name="region.after.extent" select="'5mm'"/>
55
56 <xsl:param name="region.side.extent" select="'30mm'"/>
57 <xsl:param name="region.side.margin" select="'4mm'"/>
58
59 <xsl:param name="sidebar.background.color" select="'#eaECF0'"/>
60
61 <!-- use vertical-align instead of baseline-shift (baseline-shift doesn't work with fop!) -->
62
63 <xsl:template name="format.footnote.mark">
64   <xsl:param name="mark" select="'?'"/>
65   <fo:inline vertical-align="super" font-size="75%">
66     <xsl:copy-of select="$mark"/>
67   </fo:inline>
68 </xsl:template>
69
70
71 <!-- title.margin.left gives the distance between start of chapter and sections title and normal text flow. -->
72 <!-- with -0pc the titles and the text flow begin at the same column. -->
73 <xsl:param name="title.margin.left" select="'-0pc'"/>
74
75 <!-- ==================================================================== -->
76
77 <xsl:param name="page.margin.inner">
78   <xsl:choose>
79     <xsl:when test="$double.sided != 0">5mm</xsl:when>
80     <xsl:otherwise>5mm</xsl:otherwise>
81   </xsl:choose>
82 </xsl:param>
83
84 <!-- ==================================================================== -->
85
86 <xsl:param name="page.margin.outer">
87   <xsl:choose>
88     <xsl:when test="$double.sided != 0">15mm</xsl:when>
89     <xsl:otherwise>20mm</xsl:otherwise>
90   </xsl:choose>
91 </xsl:param>
92
93 <!-- ==================================================================== -->
94
95 <xsl:param name="formal.title.placement">
96 figure after
97 example before
98 equation after
99 table after
100 procedure before
101 </xsl:param>
102
103 <!-- ==================================================================== -->
104
105 <xsl:template name="book.titlepage">
106   <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">
107     <fo:block>
108     <xsl:call-template name="book.titlepage.before.recto"/>
109     <xsl:call-template name="book.titlepage.recto"/>
110     </fo:block>
111     <fo:block>
112     <xsl:call-template name="book.titlepage.before.verso"/>
113     <xsl:call-template name="book.titlepage.verso"/>
114     </fo:block>
115 <!--
116     <xsl:call-template name="book.titlepage.separator"/>
117 -->
118   </fo:block>
119 </xsl:template>
120
121 <!-- ==================================================================== -->
122
123 <xsl:template name="header.content">
124   <xsl:param name="pageclass" select="''"/>
125   <xsl:param name="sequence" select="''"/>
126   <xsl:param name="position" select="''"/>
127   <xsl:param name="gentext-key" select="''"/>
128
129   <xsl:variable name="candidate">
130     <!-- sequence can be odd, even, first, blank -->
131     <!-- position can be left, center, right -->
132     <xsl:choose>
133 <!--
134       <xsl:when test="$sequence = 'odd' and $position = 'left'">
135         <fo:retrieve-marker retrieve-class-name="section.head.marker"
136                             retrieve-position="first-including-carryover"
137                             retrieve-boundary="page"/>
138       </xsl:when>
139 -->
140       <xsl:when test="($sequence = 'odd' or $sequence = 'even' or
141                        $sequence = 'blank' or $sequence = 'first') and $position = 'center'">
142       </xsl:when>
143
144       <xsl:when test="($sequence = 'odd'   and $position = 'right') or
145                       ($sequence = 'even'  and $position = 'left') or
146                       ($sequence = 'blank' and $position = 'left') or
147                       ($sequence = 'first' and $position = 'right')">
148         <xsl:choose>
149           <xsl:when test="name(/book[position() = 1]) = 'book'">
150             <xsl:value-of select="ancestor-or-self::book/bookinfo/edition"/>
151           </xsl:when>
152
153           <xsl:when test="name(/article[position() = 1]) = 'article'">
154             <xsl:value-of  select="ancestor-or-self::article/articleinfo/edition"/>
155           </xsl:when>
156
157           <xsl:otherwise>
158             <xsl:value-of select="name(/book[position() = 1])"/>
159             <xsl:value-of select="name(/article[position() = 1])"/>
160           </xsl:otherwise>
161         </xsl:choose>
162       </xsl:when>
163
164       <xsl:when test="($sequence = 'odd'   and $position = 'left') or
165                       ($sequence = 'even'  and $position = 'right') or
166                       ($sequence = 'blank' and $position = 'right') or
167                       ($sequence = 'first' and $position = 'left')">
168         <xsl:choose>
169           <xsl:when test="name(/book[position() = 1]) = 'book'">
170             <xsl:value-of select="ancestor-or-self::book/bookinfo/title"/>
171           </xsl:when>
172
173           <xsl:when test="name(/article[position() = 1]) = 'article'">
174             <xsl:value-of select="ancestor-or-self::article/articleinfo/title"/>
175           </xsl:when>
176
177           <xsl:otherwise>
178             <xsl:value-of select="name(/book[position() = 1])"/>
179             <xsl:value-of select="name(/article[position() = 1])"/>
180           </xsl:otherwise>
181        </xsl:choose>
182
183       </xsl:when>
184 <!--
185       <xsl:when test="$sequence = 'even' and $position = 'right'">
186          <fo:block><xsl:apply-templates select="." mode="object.title.markup"/></fo:block>
187       </xsl:when>
188 -->
189
190       <xsl:when test="$sequence = 'first' and $position = 'left'">
191       </xsl:when>
192
193       <xsl:when test="$sequence = 'first' and $position = 'right'">
194       </xsl:when>
195
196       <xsl:when test="$sequence = 'first' and $position = 'center'">
197         <xsl:value-of select="ancestor-or-self::book/bookinfo/corpauthor"/>
198       </xsl:when>
199
200       <xsl:when test="$sequence = 'blank' and $headers.on.blank.pages = 1">
201         <xsl:choose>
202           <xsl:when test="$position = 'left'">
203           </xsl:when>
204
205           <xsl:when test="$position = 'center'">
206             <!--  <xsl:text>This page intentionally left blank</xsl:text> -->
207           </xsl:when>
208
209           <xsl:when test="$position = 'right'">
210           </xsl:when>
211         </xsl:choose>
212       </xsl:when>
213
214     </xsl:choose>
215   </xsl:variable>
216
217   <!-- Does runtime parameter turn off blank page headers? -->
218   <xsl:choose>
219     <xsl:when test="$sequence='blank' and $headers.on.blank.pages=0">
220       <!-- no output -->
221     </xsl:when>
222
223     <xsl:when test="$pageclass = 'titlepage'">
224       <!-- titlepages have no headers -->
225     </xsl:when>
226
227     <xsl:otherwise>
228       <xsl:copy-of select="$candidate"/>
229     </xsl:otherwise>
230   </xsl:choose>
231 </xsl:template>
232
233 <!-- ==================================================================== -->
234
235 <xsl:template name="footer.content">
236   <xsl:param name="pageclass" select="''"/>
237   <xsl:param name="sequence" select="''"/>
238   <xsl:param name="position" select="''"/>
239   <xsl:param name="gentext-key" select="''"/>
240
241   <fo:block>
242     <!-- pageclass can be front, body, back      -->
243     <!-- sequence can be odd, even, first, blank -->
244     <!-- position can be left, center, right     -->
245
246     <xsl:choose>
247       <xsl:when test="$pageclass = 'titlepage'">
248         <!-- nop; no footer on title pages -->
249       </xsl:when>
250
251       <!--
252       <xsl:when test="($sequence='even' and $double.sided != 0 and $position='left') or
253                       ($sequence='odd' and $double.sided != 0 and $position='right')">
254         page <fo:page-number/> of <fo:page-number-citation ref-id="TheVeryLastPage"/>
255       </xsl:when>
256       -->
257       <xsl:when test="($sequence='even'  and $position='left') or
258                       ($sequence='odd'   and $position='right') or
259                       ($sequence='first' and $position='right') or
260                       ($sequence='blank' and $position='left')">
261         <fo:page-number/>
262       </xsl:when>
263
264       <xsl:when test="($sequence='even'  and $position='right') or
265                       ($sequence='odd'   and $position='left') or
266                       ($sequence='first' and $position='left') or
267                       ($sequence='blank' and $position='right')">
268         <xsl:choose>
269           <xsl:when test="name(/book[position() = 1]) = 'book'">
270             <xsl:value-of select="ancestor-or-self::book/bookinfo/orgname"/>
271           </xsl:when>
272
273           <xsl:when test="name(/article[position() = 1]) = 'article'">
274             <xsl:value-of select="ancestor-or-self::article/articleinfo/orgname"/>
275           </xsl:when>
276
277           <xsl:otherwise>
278             <xsl:value-of select="name(/book[position() = 1])"/>
279             <xsl:value-of select="name(/article[position() = 1])"/>
280           </xsl:otherwise>
281        </xsl:choose>
282
283       </xsl:when>
284
285       <xsl:when test="$position='center'">
286         <xsl:choose>
287           <xsl:when test="name(/book[position() = 1]) = 'book'">
288             <xsl:value-of select="ancestor-or-self::book/bookinfo/pubdate"/>
289           </xsl:when>
290
291           <xsl:when test="name(/article[position() = 1]) = 'article'">
292             <xsl:value-of select="ancestor-or-self::article/articleinfo/pubdate"/>
293           </xsl:when>
294
295           <xsl:otherwise>
296             <xsl:value-of select="name(/book[position() = 1])"/>
297             <xsl:value-of select="name(/article[position() = 1])"/>
298           </xsl:otherwise>
299         </xsl:choose>
300       </xsl:when>
301
302       <xsl:otherwise>
303         <!-- nop -->
304       </xsl:otherwise>
305     </xsl:choose>
306   </fo:block>
307 </xsl:template>
308
309 <!-- ==================================================================== -->
310
311 <xsl:template name="inline.frameseq">
312   <xsl:param name="content">
313     <xsl:apply-templates/>
314   </xsl:param>
315   <fo:inline font-weight="bold" color="#555555">
316     <xsl:if test="@dir">
317       <xsl:attribute name="direction">
318         <xsl:choose>
319           <xsl:when test="@dir = 'ltr' or @dir = 'lro'">ltr</xsl:when>
320           <xsl:otherwise>rtl</xsl:otherwise>
321         </xsl:choose>
322       </xsl:attribute>
323     </xsl:if>
324     [<xsl:copy-of select="$content"/>]
325   </fo:inline>
326 </xsl:template>
327
328 <!-- ==================================================================== -->
329
330 <xsl:template name="inline.highlightsseq">
331   <xsl:param name="content">
332     <xsl:apply-templates/>
333   </xsl:param>
334   <fo:block>
335   <fo:inline font-weight="bold" font-size="125%">
336     <xsl:if test="@dir">
337       <xsl:attribute name="direction">
338         <xsl:choose>
339           <xsl:when test="@dir = 'ltr' or @dir = 'lro'">ltr</xsl:when>
340           <xsl:otherwise>rtl</xsl:otherwise>
341         </xsl:choose>
342       </xsl:attribute>
343     </xsl:if>
344     <xsl:copy-of select="$content"/>
345   </fo:inline>
346   </fo:block>
347 </xsl:template>
348
349 <!-- ==================================================================== -->
350
351 <xsl:template  match="guibutton">
352   <xsl:call-template  name="inline.frameseq"/>
353 </xsl:template>
354
355
356 <xsl:template  match="guilabel">
357   <xsl:call-template  name="inline.frameseq"/>
358 </xsl:template>
359
360
361 <xsl:template  match="database">
362   <xsl:call-template  name="inline.boldseq"/>
363 </xsl:template>
364
365
366 <xsl:template  match="highlights">
367   <xsl:call-template  name="inline.highlightsseq"/>
368 </xsl:template>
369
370 <!-- ==================================================================== -->
371
372 <xsl:template name="inline.monoseq">
373    <xsl:param name="content">
374      <xsl:apply-templates/>
375    </xsl:param>
376    <fo:inline xsl:use-attribute-sets="monospace.properties">
377      <xsl:if test="@dir">
378        <xsl:attribute name="direction">
379          <xsl:choose>
380            <xsl:when test="@dir = 'ltr' or @dir = 'lro'">ltr</xsl:when>
381            <xsl:otherwise>rtl</xsl:otherwise>
382          </xsl:choose>
383        </xsl:attribute>
384      </xsl:if>
385      <xsl:apply-templates select="exsl:node-set($content)" mode="hyphenate"/>
386    </fo:inline>
387 </xsl:template>
388
389 <xsl:template match="text()" mode="hyphenate" priority="2">
390    <xsl:call-template name="string.subst">
391      <xsl:with-param name="string">
392        <xsl:call-template name="string.subst">
393          <xsl:with-param name="string">
394            <xsl:call-template name="string.subst">
395              <xsl:with-param name="string" select="."/>
396              <xsl:with-param name="target" select="'.'"/>
397              <xsl:with-param name="replacement" select="'.&#x200B;'"/>
398            </xsl:call-template>
399          </xsl:with-param>
400          <xsl:with-param name="target" select="'\'"/>
401          <xsl:with-param name="replacement" select="'\&#x200B;'"/>
402        </xsl:call-template>
403      </xsl:with-param>
404      <xsl:with-param name="target" select="'/'"/>
405      <xsl:with-param name="replacement" select="'/&#x200B;'"/>
406    </xsl:call-template>
407 </xsl:template>
408
409 <xsl:template match="node()|@*" mode="hyphenate">
410    <xsl:copy>
411      <xsl:apply-templates select="node()|@*" mode="hyphenate"/>
412    </xsl:copy>
413 </xsl:template>
414
415 <!-- ==================================================================== -->
416
417 </xsl:stylesheet>