source: clfs-embedded/BOOK/stylesheets/lfs-xsl/docbook-xsl-snapshot/common/stripns.xsl @ 9882b55

Last change on this file since 9882b55 was 9882b55, checked in by Manuel Canales Esparcia <manuel@…>, 17 years ago

Added the new lfs-xsl stylesheets.

  • Property mode set to 100644
File size: 13.1 KB
Line 
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                xmlns:ng="http://docbook.org/docbook-ng"
4                xmlns:db="http://docbook.org/ns/docbook"
5                xmlns:saxon="http://icl.com/saxon"
6                xmlns:NodeInfo="http://org.apache.xalan.lib.NodeInfo"
7                xmlns:exsl="http://exslt.org/common"
8                exclude-result-prefixes="db ng exsl saxon NodeInfo"
9                version='1.0'>
10
11<!-- ********************************************************************
12     $Id$
13     ********************************************************************
14
15     This file is part of the XSL DocBook Stylesheet distribution.
16     See ../README or http://docbook.sf.net/release/xsl/current/ for
17     copyright and other information.
18
19     This file contains general templates common to both the HTML and FO
20     versions of the DocBook stylesheets.
21     ******************************************************************** -->
22
23<xsl:import href="utility.xsl"/>
24
25<!-- * Get a title for current doc so that we let the user -->
26<!-- * know what document we are processing at this point. -->
27<xsl:variable name="doc.title">
28  <xsl:call-template name="get.doc.title"/>
29</xsl:variable>
30
31<!-- put an xml:base attribute on the root element -->
32<xsl:template match="/*" mode="stripNS">
33  <xsl:choose>
34    <xsl:when test="self::ng:* or self::db:*">
35      <xsl:element name="{local-name(.)}">
36        <xsl:copy-of select="@*[not(name(.) = 'xml:id')
37                                and not(name(.) = 'version')]"/>
38        <xsl:if test="@xml:id">
39          <xsl:attribute name="id">
40            <xsl:value-of select="@xml:id"/>
41          </xsl:attribute>
42        </xsl:if>
43
44        <xsl:call-template name="add-xml-base"/>
45
46        <xsl:apply-templates mode="stripNS"/>
47      </xsl:element>
48    </xsl:when>
49    <xsl:otherwise>
50      <xsl:copy>
51        <xsl:copy-of select="@*[not(name(.) = 'xml:id')
52                                and not(name(.) = 'version')]"/>
53        <xsl:if test="@xml:id">
54          <xsl:attribute name="id">
55            <xsl:value-of select="@xml:id"/>
56          </xsl:attribute>
57        </xsl:if>
58
59        <xsl:call-template name="add-xml-base"/>
60
61        <xsl:apply-templates mode="stripNS"/>
62      </xsl:copy>
63    </xsl:otherwise>
64  </xsl:choose>
65</xsl:template>
66
67<xsl:template match="*" mode="stripNS">
68  <xsl:choose>
69    <xsl:when test="self::ng:* or self::db:*">
70      <xsl:element name="{local-name(.)}">
71        <xsl:copy-of select="@*[not(name(.) = 'xml:id')
72                                and not(name(.) = 'version')]"/>
73        <xsl:if test="@xml:id">
74          <xsl:attribute name="id">
75            <xsl:value-of select="@xml:id"/>
76          </xsl:attribute>
77        </xsl:if>
78        <xsl:apply-templates mode="stripNS"/>
79      </xsl:element>
80    </xsl:when>
81    <xsl:otherwise>
82      <xsl:copy>
83        <xsl:copy-of select="@*[not(name(.) = 'xml:id')
84                                and not(name(.) = 'version')]"/>
85        <xsl:if test="@xml:id">
86          <xsl:attribute name="id">
87            <xsl:value-of select="@xml:id"/>
88          </xsl:attribute>
89        </xsl:if>
90        <xsl:apply-templates mode="stripNS"/>
91      </xsl:copy>
92    </xsl:otherwise>
93  </xsl:choose>
94</xsl:template>
95
96<xsl:template match="db:info" mode="stripNS">
97  <xsl:variable name="info">
98    <xsl:choose>
99      <xsl:when test="parent::db:article
100                      |parent::db:appendix
101                      |parent::db:bibliography
102                      |parent::db:book
103                      |parent::db:chapter
104                      |parent::db:glossary
105                      |parent::db:index
106                      |parent::db:part
107                      |parent::db:preface
108                      |parent::db:refentry
109                      |parent::db:reference
110                      |parent::db:refsect1
111                      |parent::db:refsect2
112                      |parent::db:refsect3
113                      |parent::db:refsection
114                      |parent::db:refsynopsisdiv
115                      |parent::db:sect1
116                      |parent::db:sect2
117                      |parent::db:sect3
118                      |parent::db:sect4
119                      |parent::db:sect5
120                      |parent::db:section
121                      |parent::db:setindex
122                      |parent::db:set
123                      |parent::db:slides
124                      |parent::db:sidebar">
125        <xsl:value-of select="local-name(parent::*)"/>
126        <xsl:text>info</xsl:text>
127      </xsl:when>
128      <xsl:when test="parent::db:audioobject
129                      |parent::db:imageobject
130                      |parent::db:inlinemediaobject
131                      |parent::db:mediaobject
132                      |parent::db:mediaobjectco
133                      |parent::db:textobject
134                      |parent::db:videoobject">
135        <xsl:text>objectinfo</xsl:text>
136      </xsl:when>
137      <xsl:otherwise>blockinfo</xsl:otherwise>
138    </xsl:choose>
139  </xsl:variable>
140
141  <xsl:element name="{$info}">
142    <xsl:copy-of select="@*[not(name(.) = 'xml:id')
143                         and not(name(.) = 'version')]"/>
144    <xsl:if test="@xml:id">
145      <xsl:attribute name="id">
146        <xsl:value-of select="@xml:id"/>
147      </xsl:attribute>
148    </xsl:if>
149    <xsl:apply-templates mode="stripNS"/>
150  </xsl:element>
151
152  <xsl:if test="(not(../db:title) and not(../ng:title))
153                and ($info = 'prefaceinfo'
154                     or $info = 'chapterinfo'
155                     or $info = 'sectioninfo'
156                     or $info = 'sect1info'
157                     or $info = 'sect2info'
158                     or $info = 'sect3info'
159                     or $info = 'sect4info'
160                     or $info = 'sect5info'
161                     or $info = 'refsectioninfo'
162                     or $info = 'refsect1info'
163                     or $info = 'refsect2info'
164                     or $info = 'refsect3info'
165                     or $info = 'blockinfo'
166                     or $info = 'appendixinfo')">
167    <xsl:apply-templates select="db:title|ng:title" mode="stripNS"/>
168  </xsl:if>
169
170</xsl:template>
171
172<xsl:template match="ng:link|db:link" mode="stripNS">
173  <xsl:variable xmlns:xlink="http://www.w3.org/1999/xlink"
174                name="href" select="@xlink:href|@href"/>
175  <xsl:choose>
176    <xsl:when test="$href != '' and not(starts-with($href,'#'))">
177      <ulink url="{$href}">
178        <xsl:for-each select="@*">
179          <xsl:if test="local-name(.) != 'href'
180                        and name(.) != 'version'
181                        and name(.) != 'xml:id'">
182            <xsl:copy/>
183          </xsl:if>
184        </xsl:for-each>
185        <xsl:if test="@xml:id">
186          <xsl:attribute name="id">
187            <xsl:value-of select="@xml:id"/>
188          </xsl:attribute>
189        </xsl:if>
190        <xsl:apply-templates mode="stripNS"/>
191      </ulink>
192    </xsl:when>
193    <xsl:when test="$href != '' and starts-with($href,'#')">
194      <link linkend="{substring-after($href,'#')}">
195        <xsl:for-each select="@*">
196          <xsl:if test="local-name(.) != 'href'
197                        and name(.) != 'version'
198                        and name(.) != 'xml:id'">
199            <xsl:copy/>
200          </xsl:if>
201        </xsl:for-each>
202        <xsl:if test="@xml:id">
203          <xsl:attribute name="id">
204            <xsl:value-of select="@xml:id"/>
205          </xsl:attribute>
206        </xsl:if>
207        <xsl:apply-templates mode="stripNS"/>
208      </link>
209    </xsl:when>
210    <xsl:otherwise>
211      <link>
212        <xsl:copy-of select="@*[not(name(.) = 'xml:id')
213                             and not(name(.) = 'version')]"/>
214        <xsl:if test="@xml:id">
215          <xsl:attribute name="id">
216            <xsl:value-of select="@xml:id"/>
217          </xsl:attribute>
218        </xsl:if>
219        <xsl:apply-templates mode="stripNS"/>
220      </link>
221    </xsl:otherwise>
222  </xsl:choose>
223</xsl:template>
224
225<xsl:template match="ng:tag|db:tag" mode="stripNS">
226  <sgmltag>
227    <xsl:copy-of select="@*[not(name(.) = 'xml:id')
228                         and not(name(.) = 'version')]"/>
229    <xsl:apply-templates mode="stripNS"/>
230  </sgmltag>
231</xsl:template>
232
233<xsl:template match="ng:textdata|db:textdata
234                     |ng:imagedata|db:imagedata
235                     |ng:videodata|db:videodata
236                     |ng:audiodata|db:audiodata" mode="stripNS">
237  <xsl:element name="{local-name(.)}">
238    <xsl:copy-of select="@*[not(name(.) = 'xml:id')
239                            and not(name(.) = 'version')
240                            and not(name(.) = 'entityref')]"/>
241    <xsl:if test="@xml:id">
242      <xsl:attribute name="id">
243        <xsl:value-of select="@xml:id"/>
244      </xsl:attribute>
245    </xsl:if>
246
247    <xsl:choose>
248      <xsl:when test="@entityref">
249        <xsl:attribute name="fileref">
250          <xsl:value-of select="unparsed-entity-uri(@entityref)"/>
251        </xsl:attribute>
252      </xsl:when>
253    </xsl:choose>
254
255    <xsl:apply-templates mode="stripNS"/>
256  </xsl:element>
257</xsl:template>
258
259<xsl:template name="add-xml-base">
260  <xsl:if test="not(@xml:base)">
261    <xsl:variable name="base">
262      <xsl:choose>
263        <xsl:when test="function-available('saxon:systemId')">
264          <xsl:value-of select="saxon:systemId()"/>
265        </xsl:when>
266        <xsl:when test="function-available('NodeInfo:systemId')">
267          <xsl:value-of select="NodeInfo:systemId()"/>
268        </xsl:when>
269        <xsl:otherwise>
270          <xsl:call-template name="log.message">
271            <xsl:with-param name="level">Warn</xsl:with-param>
272            <xsl:with-param name="source" select="$doc.title"/>
273            <xsl:with-param name="context-desc">
274              <xsl:text>no @xml:base</xsl:text>
275            </xsl:with-param>
276            <xsl:with-param name="message">
277              <xsl:text>cannot add @xml:base to node-set root element</xsl:text>
278            </xsl:with-param>
279          </xsl:call-template>
280          <xsl:call-template name="log.message">
281            <xsl:with-param name="level">Warn</xsl:with-param>
282            <xsl:with-param name="source" select="$doc.title"/>
283            <xsl:with-param name="context-desc">
284              <xsl:text>no @xml:base</xsl:text>
285            </xsl:with-param>
286            <xsl:with-param name="message">
287              <xsl:text>relative paths may not work</xsl:text>
288            </xsl:with-param>
289          </xsl:call-template>
290        </xsl:otherwise>
291      </xsl:choose>
292    </xsl:variable>
293    <!-- debug
294    <xsl:message>base is <xsl:value-of select="$base"/></xsl:message>
295    -->
296    <xsl:if test="$base != ''">
297      <xsl:attribute name="xml:base">
298        <xsl:call-template name="systemIdToBaseURI">
299          <xsl:with-param name="systemId">
300            <!-- file: seems to confuse some processors. -->
301            <xsl:choose>
302              <!-- however, windows paths must use file:///c:/path -->
303              <xsl:when test="starts-with($base, 'file:///') and
304                              substring($base, 10, 1) = ':'">
305                <xsl:value-of select="$base"/>
306              </xsl:when>
307              <xsl:when test="starts-with($base, 'file:/')
308                              and substring($base, 8, 1) = ':'">
309                <xsl:value-of select="concat('file:///',
310                                      substring-after($base,'file:/'))"/>
311              </xsl:when>
312              <xsl:when test="starts-with($base, 'file:///')">
313                <xsl:value-of select="substring-after($base,'file://')"/>
314              </xsl:when>
315              <xsl:when test="starts-with($base, 'file://')">
316                <xsl:value-of select="substring-after($base,'file:/')"/>
317              </xsl:when>
318              <xsl:when test="starts-with($base, 'file:/')">
319                <xsl:value-of select="substring-after($base,'file:')"/>
320              </xsl:when>
321              <xsl:otherwise>
322                <xsl:value-of select="$base"/>
323              </xsl:otherwise>
324            </xsl:choose>
325          </xsl:with-param>
326        </xsl:call-template>
327      </xsl:attribute>
328    </xsl:if>
329  </xsl:if>
330</xsl:template>
331
332<xsl:template name="systemIdToBaseURI">
333  <xsl:param name="systemId" select="''"/>
334  <xsl:if test="contains($systemId,'/')">
335    <xsl:value-of select="substring-before($systemId,'/')"/>
336    <xsl:text>/</xsl:text>
337    <xsl:call-template name="systemIdToBaseURI">
338      <xsl:with-param name="systemId"
339                      select="substring-after($systemId,'/')"/>
340    </xsl:call-template>
341  </xsl:if>
342</xsl:template>
343
344<xsl:template match="comment()|processing-instruction()|text()" mode="stripNS">
345  <xsl:copy/>
346</xsl:template>
347
348<xsl:template match="/" priority="-1">
349  <xsl:choose>
350    <xsl:when test="(function-available('exsl:node-set') or
351                     contains(system-property('xsl:vendor'),
352                       'Apache Software Foundation'))
353                    and (*/self::ng:* or */self::db:*)">
354      <xsl:message>Stripping namespace from DocBook 5 document.</xsl:message>
355      <xsl:variable name="nons">
356        <xsl:apply-templates mode="stripNS"/>
357      </xsl:variable>
358      <xsl:message>Processing stripped document.</xsl:message>
359      <xsl:apply-templates select="exsl:node-set($nons)"/>
360    </xsl:when>
361    <xsl:otherwise>
362      <xsl:copy-of select="@* | node()"/>
363    </xsl:otherwise>
364  </xsl:choose>
365</xsl:template>
366
367</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.