source: trunk/Distribution/XSL/html/verbatim.xsl@ 2

Last change on this file since 2 was 2, checked in by jkacer, 18 years ago

Added all DocBook Framework stuff:

  • DocBook DTD
  • Transformation software FOP 0.20.5 and Saxon 6
  • XSL styles
  • Rexx scripts

Also added some WarpIN-related stuff for creation of WarpIN installation packages.
This state corresponds to version 1.0.0 from November 2005, just slightly modified to carry versioning information (Rexx scripts).

File size: 11.9 KB
Line 
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:sverb="http://nwalsh.com/xslt/ext/com.nwalsh.saxon.Verbatim"
4 xmlns:xverb="com.nwalsh.xalan.Verbatim"
5 xmlns:lxslt="http://xml.apache.org/xslt"
6 xmlns:exsl="http://exslt.org/common"
7 exclude-result-prefixes="sverb xverb lxslt exsl"
8 version='1.0'>
9
10<!-- ********************************************************************
11 $Id: verbatim.xsl,v 1.13 2004/10/29 13:28:33 nwalsh Exp $
12 ********************************************************************
13
14 This file is part of the XSL DocBook Stylesheet distribution.
15 See ../README or http://nwalsh.com/docbook/xsl/ for copyright
16 and other information.
17
18 ******************************************************************** -->
19
20<lxslt:component prefix="xverb"
21 functions="numberLines"/>
22
23<xsl:template match="programlisting|screen|synopsis">
24 <xsl:param name="suppress-numbers" select="'0'"/>
25 <xsl:variable name="id">
26 <xsl:call-template name="object.id"/>
27 </xsl:variable>
28
29 <xsl:call-template name="anchor"/>
30
31 <xsl:if test="$shade.verbatim != 0">
32 <xsl:message>
33 <xsl:text>The shade.verbatim parameter is deprecated. </xsl:text>
34 <xsl:text>Use CSS instead,</xsl:text>
35 </xsl:message>
36 <xsl:message>
37 <xsl:text>for example: pre.</xsl:text>
38 <xsl:value-of select="local-name(.)"/>
39 <xsl:text> { background-color: #E0E0E0; }</xsl:text>
40 </xsl:message>
41 </xsl:if>
42
43 <xsl:choose>
44 <xsl:when test="$suppress-numbers = '0'
45 and @linenumbering = 'numbered'
46 and $use.extensions != '0'
47 and $linenumbering.extension != '0'">
48 <xsl:variable name="rtf">
49 <xsl:apply-templates/>
50 </xsl:variable>
51 <pre class="{name(.)}">
52 <xsl:call-template name="number.rtf.lines">
53 <xsl:with-param name="rtf" select="$rtf"/>
54 </xsl:call-template>
55 </pre>
56 </xsl:when>
57 <xsl:otherwise>
58 <pre class="{name(.)}">
59 <xsl:apply-templates/>
60 </pre>
61 </xsl:otherwise>
62 </xsl:choose>
63</xsl:template>
64
65<xsl:template match="literallayout">
66 <xsl:param name="suppress-numbers" select="'0'"/>
67
68 <xsl:variable name="rtf">
69 <xsl:apply-templates/>
70 </xsl:variable>
71
72 <xsl:if test="$shade.verbatim != 0 and @class='monospaced'">
73 <xsl:message>
74 <xsl:text>The shade.verbatim parameter is deprecated. </xsl:text>
75 <xsl:text>Use CSS instead,</xsl:text>
76 </xsl:message>
77 <xsl:message>
78 <xsl:text>for example: pre.</xsl:text>
79 <xsl:value-of select="local-name(.)"/>
80 <xsl:text> { background-color: #E0E0E0; }</xsl:text>
81 </xsl:message>
82 </xsl:if>
83
84 <xsl:choose>
85 <xsl:when test="$suppress-numbers = '0'
86 and @linenumbering = 'numbered'
87 and $use.extensions != '0'
88 and $linenumbering.extension != '0'">
89 <xsl:choose>
90 <xsl:when test="@class='monospaced'">
91 <pre class="{name(.)}">
92 <xsl:call-template name="number.rtf.lines">
93 <xsl:with-param name="rtf" select="$rtf"/>
94 </xsl:call-template>
95 </pre>
96 </xsl:when>
97 <xsl:otherwise>
98 <div class="{name(.)}">
99 <p>
100 <xsl:call-template name="number.rtf.lines">
101 <xsl:with-param name="rtf" select="$rtf"/>
102 </xsl:call-template>
103 </p>
104 </div>
105 </xsl:otherwise>
106 </xsl:choose>
107 </xsl:when>
108 <xsl:otherwise>
109 <xsl:choose>
110 <xsl:when test="@class='monospaced'">
111 <pre class="{name(.)}">
112 <xsl:copy-of select="$rtf"/>
113 </pre>
114 </xsl:when>
115 <xsl:otherwise>
116 <div class="{name(.)}">
117 <p>
118 <xsl:call-template name="make-verbatim">
119 <xsl:with-param name="rtf" select="$rtf"/>
120 </xsl:call-template>
121 </p>
122 </div>
123 </xsl:otherwise>
124 </xsl:choose>
125 </xsl:otherwise>
126 </xsl:choose>
127</xsl:template>
128
129<xsl:template match="address">
130 <xsl:param name="suppress-numbers" select="'0'"/>
131
132 <xsl:variable name="rtf">
133 <xsl:apply-templates/>
134 </xsl:variable>
135
136 <xsl:choose>
137 <xsl:when test="$suppress-numbers = '0'
138 and @linenumbering = 'numbered'
139 and $use.extensions != '0'
140 and $linenumbering.extension != '0'">
141 <div class="{name(.)}">
142 <p>
143 <xsl:call-template name="number.rtf.lines">
144 <xsl:with-param name="rtf" select="$rtf"/>
145 </xsl:call-template>
146 </p>
147 </div>
148 </xsl:when>
149
150 <xsl:otherwise>
151 <div class="{name(.)}">
152 <p>
153 <xsl:call-template name="make-verbatim">
154 <xsl:with-param name="rtf" select="$rtf"/>
155 </xsl:call-template>
156 </p>
157 </div>
158 </xsl:otherwise>
159 </xsl:choose>
160</xsl:template>
161
162<xsl:template name="number.rtf.lines">
163 <xsl:param name="rtf" select="''"/>
164 <xsl:param name="pi.context" select="."/>
165
166 <!-- Save the global values -->
167 <xsl:variable name="global.linenumbering.everyNth"
168 select="$linenumbering.everyNth"/>
169
170 <xsl:variable name="global.linenumbering.separator"
171 select="$linenumbering.separator"/>
172
173 <xsl:variable name="global.linenumbering.width"
174 select="$linenumbering.width"/>
175
176 <!-- Extract the <?dbhtml linenumbering.*?> PI values -->
177 <xsl:variable name="pi.linenumbering.everyNth">
178 <xsl:call-template name="dbhtml-attribute">
179 <xsl:with-param name="pis"
180 select="$pi.context/processing-instruction('dbhtml')"/>
181 <xsl:with-param name="attribute" select="'linenumbering.everyNth'"/>
182 </xsl:call-template>
183 </xsl:variable>
184
185 <xsl:variable name="pi.linenumbering.separator">
186 <xsl:call-template name="dbhtml-attribute">
187 <xsl:with-param name="pis"
188 select="$pi.context/processing-instruction('dbhtml')"/>
189 <xsl:with-param name="attribute" select="'linenumbering.separator'"/>
190 </xsl:call-template>
191 </xsl:variable>
192
193 <xsl:variable name="pi.linenumbering.width">
194 <xsl:call-template name="dbhtml-attribute">
195 <xsl:with-param name="pis"
196 select="$pi.context/processing-instruction('dbhtml')"/>
197 <xsl:with-param name="attribute" select="'linenumbering.width'"/>
198 </xsl:call-template>
199 </xsl:variable>
200
201 <!-- Construct the 'in-context' values -->
202 <xsl:variable name="linenumbering.everyNth">
203 <xsl:choose>
204 <xsl:when test="$pi.linenumbering.everyNth != ''">
205 <xsl:value-of select="$pi.linenumbering.everyNth"/>
206 </xsl:when>
207 <xsl:otherwise>
208 <xsl:value-of select="$global.linenumbering.everyNth"/>
209 </xsl:otherwise>
210 </xsl:choose>
211 </xsl:variable>
212
213 <xsl:variable name="linenumbering.separator">
214 <xsl:choose>
215 <xsl:when test="$pi.linenumbering.separator != ''">
216 <xsl:value-of select="$pi.linenumbering.separator"/>
217 </xsl:when>
218 <xsl:otherwise>
219 <xsl:value-of select="$global.linenumbering.separator"/>
220 </xsl:otherwise>
221 </xsl:choose>
222 </xsl:variable>
223
224 <xsl:variable name="linenumbering.width">
225 <xsl:choose>
226 <xsl:when test="$pi.linenumbering.width != ''">
227 <xsl:value-of select="$pi.linenumbering.width"/>
228 </xsl:when>
229 <xsl:otherwise>
230 <xsl:value-of select="$global.linenumbering.width"/>
231 </xsl:otherwise>
232 </xsl:choose>
233 </xsl:variable>
234
235 <xsl:variable name="linenumbering.startinglinenumber">
236 <xsl:choose>
237 <xsl:when test="@startinglinenumber">
238 <xsl:value-of select="@startinglinenumber"/>
239 </xsl:when>
240 <xsl:when test="@continuation='continues'">
241 <xsl:variable name="lastLine">
242 <xsl:choose>
243 <xsl:when test="self::programlisting">
244 <xsl:call-template name="lastLineNumber">
245 <xsl:with-param name="listings"
246 select="preceding::programlisting[@linenumbering='numbered']"/>
247 </xsl:call-template>
248 </xsl:when>
249 <xsl:when test="self::screen">
250 <xsl:call-template name="lastLineNumber">
251 <xsl:with-param name="listings"
252 select="preceding::screen[@linenumbering='numbered']"/>
253 </xsl:call-template>
254 </xsl:when>
255 <xsl:when test="self::literallayout">
256 <xsl:call-template name="lastLineNumber">
257 <xsl:with-param name="listings"
258 select="preceding::literallayout[@linenumbering='numbered']"/>
259 </xsl:call-template>
260 </xsl:when>
261 <xsl:when test="self::address">
262 <xsl:call-template name="lastLineNumber">
263 <xsl:with-param name="listings"
264 select="preceding::address[@linenumbering='numbered']"/>
265 </xsl:call-template>
266 </xsl:when>
267 <xsl:when test="self::synopsis">
268 <xsl:call-template name="lastLineNumber">
269 <xsl:with-param name="listings"
270 select="preceding::synopsis[@linenumbering='numbered']"/>
271 </xsl:call-template>
272 </xsl:when>
273 <xsl:otherwise>
274 <xsl:message>
275 <xsl:text>Unexpected verbatim environment: </xsl:text>
276 <xsl:value-of select="local-name(.)"/>
277 </xsl:message>
278 <xsl:value-of select="0"/>
279 </xsl:otherwise>
280 </xsl:choose>
281 </xsl:variable>
282
283 <xsl:value-of select="$lastLine + 1"/>
284 </xsl:when>
285 <xsl:otherwise>1</xsl:otherwise>
286 </xsl:choose>
287 </xsl:variable>
288
289 <xsl:choose>
290 <xsl:when test="function-available('sverb:numberLines')">
291 <xsl:copy-of select="sverb:numberLines($rtf)"/>
292 </xsl:when>
293 <xsl:when test="function-available('xverb:numberLines')">
294 <xsl:copy-of select="xverb:numberLines($rtf)"/>
295 </xsl:when>
296 <xsl:otherwise>
297 <xsl:message terminate="yes">
298 <xsl:text>No numberLines function available.</xsl:text>
299 </xsl:message>
300 </xsl:otherwise>
301 </xsl:choose>
302</xsl:template>
303
304<xsl:template name="make-verbatim">
305 <xsl:param name="rtf"/>
306
307 <!-- I want to make this RTF verbatim. There are two possibilities: either
308 I have access to the exsl:node-set extension function and I can "do it right"
309 or I have to rely on CSS. -->
310
311 <xsl:choose>
312 <xsl:when test="function-available('exsl:node-set')">
313 <xsl:apply-templates select="exsl:node-set($rtf)" mode="make.verbatim.mode"/>
314 </xsl:when>
315 <xsl:otherwise>
316 <span style="white-space: pre;">
317 <xsl:copy-of select="$rtf"/>
318 </span>
319 </xsl:otherwise>
320 </xsl:choose>
321</xsl:template>
322
323<!-- ======================================================================== -->
324
325<xsl:template name="lastLineNumber">
326 <xsl:param name="listings"/>
327 <xsl:param name="number" select="0"/>
328
329 <xsl:variable name="lines">
330 <xsl:call-template name="countLines">
331 <xsl:with-param name="listing" select="string($listings[1])"/>
332 </xsl:call-template>
333 </xsl:variable>
334
335 <xsl:choose>
336 <xsl:when test="not($listings)">
337 <xsl:value-of select="$number"/>
338 </xsl:when>
339 <xsl:when test="$listings[1]/@startinglinenumber">
340 <xsl:value-of select="$number + $listings[1]/@startinglinenumber + $lines - 1"/>
341 </xsl:when>
342 <xsl:when test="$listings[1]/@continuation='continues'">
343 <xsl:call-template name="lastLineNumber">
344 <xsl:with-param name="listings" select="listings[position() &gt; 1]"/>
345 <xsl:with-param name="number" select="$number + $lines"/>
346 </xsl:call-template>
347 </xsl:when>
348 <xsl:otherwise>
349 <xsl:value-of select="$lines"/>
350 </xsl:otherwise>
351 </xsl:choose>
352</xsl:template>
353
354<xsl:template name="countLines">
355 <xsl:param name="listing"/>
356 <xsl:param name="count" select="1"/>
357
358 <xsl:choose>
359 <xsl:when test="contains($listing, '&#10;')">
360 <xsl:call-template name="countLines">
361 <xsl:with-param name="listing" select="substring-after($listing, '&#10;')"/>
362 <xsl:with-param name="count" select="$count + 1"/>
363 </xsl:call-template>
364 </xsl:when>
365 <xsl:otherwise>
366 <xsl:value-of select="$count"/>
367 </xsl:otherwise>
368 </xsl:choose>
369</xsl:template>
370
371</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.