]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/boostbook/xsl/relative-href.xsl
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / tools / boostbook / xsl / relative-href.xsl
1 <?xml version="1.0"?>
2 <!--
3 Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
4
5 Distributed under the Boost Software License, Version 1.0.
6 (See accompanying file LICENSE_1_0.txt or copy at
7 http://www.boost.org/LICENSE_1_0.txt)
8 -->
9 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
10 version="1.0">
11
12 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/lib/lib.xsl"/>
13
14 <!-- ==================================================================== -->
15
16 <!-- Check if path is absolute
17
18 Not attempting to fully parse or validate absolute vs. relative URI.
19 Assumes an absolute url when $target matches the regex '^[a-zA-Z.+-]*:'
20
21 According to RFC1808, however, the colon (':') may also appear in a relative
22 URL. To workaround this limitation for relative links containing colons one
23 may use the alternatives below, instead.
24
25 For the relative URI this:that use ./this:that or this%3Athat, instead.
26 -->
27 <xsl:template name="is.absolute.uri">
28 <xsl:param name="uri"/>
29
30 <xsl:variable name="scheme1" select="substring-before($uri, ':')"/>
31 <xsl:variable name="scheme2" select="translate($scheme1, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-.', '')"/>
32
33 <xsl:choose>
34 <xsl:when test="$scheme1 and not($scheme2)">1</xsl:when>
35 <xsl:otherwise>0</xsl:otherwise>
36 </xsl:choose>
37 </xsl:template>
38
39 <xsl:template name="href.target.relative">
40 <xsl:param name="target"/>
41 <xsl:param name="context" select="."/>
42
43 <xsl:variable name="isabsoluteuri">
44 <xsl:call-template name="is.absolute.uri">
45 <xsl:with-param name="uri" select="$target"/>
46 </xsl:call-template>
47 </xsl:variable>
48
49 <xsl:choose>
50 <xsl:when test="$isabsoluteuri='1'">
51 <xsl:value-of select="$target"/>
52 </xsl:when>
53
54 <xsl:otherwise>
55 <xsl:variable name="href.to.uri" select="$target"/>
56 <xsl:variable name="href.from.uri">
57 <xsl:call-template name="href.target.uri">
58 <xsl:with-param name="object" select="$context"/>
59 </xsl:call-template>
60 </xsl:variable>
61
62 <xsl:variable name="href.to">
63 <xsl:call-template name="trim.common.uri.paths">
64 <xsl:with-param name="uriA" select="$href.to.uri"/>
65 <xsl:with-param name="uriB" select="$href.from.uri"/>
66 <xsl:with-param name="return" select="'A'"/>
67 </xsl:call-template>
68 </xsl:variable>
69
70 <xsl:variable name="href.from">
71 <xsl:call-template name="trim.common.uri.paths">
72 <xsl:with-param name="uriA" select="$href.to.uri"/>
73 <xsl:with-param name="uriB" select="$href.from.uri"/>
74 <xsl:with-param name="return" select="'B'"/>
75 </xsl:call-template>
76 </xsl:variable>
77
78 <xsl:variable name="depth">
79 <xsl:call-template name="count.uri.path.depth">
80 <xsl:with-param name="filename" select="$href.from"/>
81 </xsl:call-template>
82 </xsl:variable>
83
84 <xsl:variable name="href">
85 <xsl:call-template name="copy-string">
86 <xsl:with-param name="string" select="'../'"/>
87 <xsl:with-param name="count" select="$depth"/>
88 </xsl:call-template>
89 <xsl:value-of select="$href.to"/>
90 </xsl:variable>
91
92 <xsl:value-of select="$href"/>
93 </xsl:otherwise>
94 </xsl:choose>
95
96 </xsl:template>
97
98 </xsl:stylesheet>