source: BOOK/stylesheets/clfs-profile.xsl@ 5508d22

Last change on this file since 5508d22 was 5508d22, checked in by Joe Ciccone <jciccone@…>, 14 years ago

Automatically add the suffix to the title containing the bitsize on multilib.

  • Property mode set to 100644
File size: 9.4 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:c="http://schema.cross-lfs.org/book"
4 version="1.0">
5
6 <!-- Declare our output type -->
7 <xsl:output method="xml"
8 indent="no"
9 omit-xml-declaration="no"
10 encoding="utf-8"
11 doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
12 doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" />
13
14 <xsl:param name="clfs.arch" select="''" />
15 <xsl:param name="clfs.multilib" select="''" />
16
17 <!-- Apply the other templates -->
18 <xsl:template match="@*|node()" priority="-1">
19 <xsl:copy>
20 <xsl:apply-templates select="@*|node()" />
21 </xsl:copy>
22 </xsl:template>
23
24 <!-- Build the package xml -->
25 <xsl:template match="//c:package">
26 <xsl:param name="id" select="@id" />
27 <xsl:param name="multibuild" select="@c:multibuild" />
28 <xsl:call-template name="package-iterator">
29 <xsl:with-param name="id" select="$id" />
30 <xsl:with-param name="multibuild" select="$multibuild" />
31 <xsl:with-param name="bits" select="$clfs.multilib" />
32 </xsl:call-template>
33 </xsl:template>
34
35 <xsl:template name="package-iterator">
36 <xsl:param name="id" /> <!-- Base ID of the resulting package -->
37 <xsl:param name="multibuild" /> <!-- Do we need to install for each bitsize? -->
38 <xsl:param name="bits" /> <!-- Which bit sizes to create a package for -->
39 <xsl:choose>
40 <xsl:when test="$multibuild = 'true'">
41 <xsl:variable name="currentbits" select="substring-before(concat($bits, ','), ',')" />
42 <xsl:variable name="remainingbits" select="substring-after($bits, ',')" />
43 <xsl:call-template name="package-stub">
44 <xsl:with-param name="id" select="$id" />
45 <xsl:with-param name="idsuffix">
46 <xsl:if test="$remainingbits">
47 <xsl:value-of select="concat('-', $currentbits)" />
48 </xsl:if>
49 </xsl:with-param>
50 <xsl:with-param name="bits" select="substring-before(concat($bits, ','), ',')" />
51 <xsl:with-param name="multi"><xsl:text>multi</xsl:text></xsl:with-param>
52 </xsl:call-template>
53 <xsl:if test="$remainingbits">
54 <xsl:text>
55
56 </xsl:text>
57 <xsl:call-template name="package-iterator">
58 <xsl:with-param name="id" select="$id" />
59 <xsl:with-param name="multibuild" select="$multibuild" />
60 <xsl:with-param name="bits" select="$remainingbits" />
61 </xsl:call-template>
62 </xsl:if>
63 </xsl:when>
64 <xsl:otherwise>
65 <xsl:call-template name="package-stub">
66 <xsl:with-param name="id" select="$id" />
67 <xsl:with-param name="idsuffix" />
68 <xsl:with-param name="bits" select="substring-before(concat($bits, ','), ',')" />
69 <xsl:with-param name="multi"><xsl:text>single</xsl:text></xsl:with-param>
70 </xsl:call-template>
71 </xsl:otherwise>
72 </xsl:choose>
73 </xsl:template>
74
75 <xsl:template name="package-stub">
76 <xsl:param name="id" /> <!-- Base ID of the resulting package -->
77 <xsl:param name="idsuffix" /> <!-- Suffix to attach to the end of the ID for this perticular instance -->
78 <xsl:param name="bits" /> <!-- Which bit sizes to create a package for -->
79 <xsl:param name="multi" /> <!-- multi/single build -->
80
81 <xsl:for-each select="sect1">
82 <xsl:copy>
83 <xsl:attribute name="id">
84 <xsl:value-of select="concat($id, $idsuffix)" />
85 </xsl:attribute>
86 <xsl:attribute name="role">
87 <xsl:text>package</xsl:text>
88 </xsl:attribute>
89 <xsl:attribute name="condition">
90 <xsl:value-of select="$multi" />
91 </xsl:attribute>
92 <xsl:processing-instruction name="dbhtml">
93 <xsl:text>filename=&quot;</xsl:text>
94 <xsl:value-of select="concat($id, $idsuffix)" />
95 <xsl:text>.html&quot;</xsl:text>
96 </xsl:processing-instruction>
97 <xsl:choose>
98 <xsl:when test="$bits = '32'">
99 <xsl:apply-templates select="@*|node()" mode="filter-bits-32" />
100 </xsl:when>
101 <xsl:when test="$bits = 'n32'">
102 <xsl:apply-templates select="@*|node()" mode="filter-bits-n32" />
103 </xsl:when>
104 <xsl:when test="$bits = '64'">
105 <xsl:apply-templates select="@*|node()" mode="filter-bits-64" />
106 </xsl:when>
107 </xsl:choose>
108 </xsl:copy>
109 </xsl:for-each>
110 </xsl:template>
111
112 <!-- Apply the profile to the 32bit package -->
113
114 <xsl:template match="//sect1/title" mode="filter-bits-32">
115 <xsl:element name="title">
116 <xsl:copy-of select="@*|node()" />
117 <xsl:if test="contains($clfs.multilib, ',')">
118 <xsl:text> - 32Bit</xsl:text>
119 </xsl:if>
120 </xsl:element>
121 </xsl:template>
122
123 <xsl:template match="@*|node()" mode="filter-bits-32">
124 <xsl:variable name="ismultilib">
125 <xsl:choose>
126 <xsl:when test="contains($clfs.multilib, ',')">
127 <xsl:text>true</xsl:text>
128 </xsl:when>
129 <xsl:otherwise>
130 <xsl:text>false</xsl:text>
131 </xsl:otherwise>
132 </xsl:choose>
133 </xsl:variable>
134 <xsl:if test="(string-length(@c:arch) = 0) or contains(concat(',',@c:arch,','), concat(',', $clfs.arch, ','))">
135 <xsl:if test="(string-length(@c:multilib) = 0) or contains(concat(',',@c:multilib,','), concat(',', $ismultilib, ','))">
136 <xsl:if test="(string-length(@c:bits) = 0) or contains(concat(',',@c:bits,','), ',32,')">
137 <xsl:copy>
138 <xsl:apply-templates select="@*|node()" mode="filter-bits-32" />
139 </xsl:copy>
140 </xsl:if>
141 </xsl:if>
142 </xsl:if>
143 </xsl:template>
144
145 <xsl:template match="@c:arch" mode="filter-bits-32" />
146 <xsl:template match="@c:bits" mode="filter-bits-32" />
147 <xsl:template match="@c:multilib" mode="filter-bits-32" />
148
149 <!-- Apply the profile to the n32 package -->
150
151 <xsl:template match="//sect1/title" mode="filter-bits-n32">
152 <xsl:element name="title">
153 <xsl:copy-of select="@*|node()" />
154 <xsl:if test="contains($clfs.multilib, ',')">
155 <xsl:text> - N32</xsl:text>
156 </xsl:if>
157 </xsl:element>
158 </xsl:template>
159
160 <xsl:template match="@*|node()" mode="filter-bits-n32">
161 <xsl:variable name="ismultilib">
162 <xsl:choose>
163 <xsl:when test="contains($clfs.multilib, ',')">
164 <xsl:text>true</xsl:text>
165 </xsl:when>
166 <xsl:otherwise>
167 <xsl:text>false</xsl:text>
168 </xsl:otherwise>
169 </xsl:choose>
170 </xsl:variable>
171 <xsl:if test="(string-length(@c:arch) = 0) or contains(concat(',',@c:arch,','), concat(',', $clfs.arch, ','))">
172 <xsl:if test="(string-length(@c:multilib) = 0) or contains(concat(',',@c:multilib,','), concat(',', $ismultilib, ','))">
173 <xsl:if test="(string-length(@c:bits) = 0) or contains(concat(',',@c:bits,','), ',n32,')">
174 <xsl:copy>
175 <xsl:apply-templates select="@*|node()" mode="filter-bits-n32" />
176 </xsl:copy>
177 </xsl:if>
178 </xsl:if>
179 </xsl:if>
180 </xsl:template>
181
182 <xsl:template match="@c:arch" mode="filter-bits-n32" />
183 <xsl:template match="@c:bits" mode="filter-bits-n32" />
184 <xsl:template match="@c:multilib" mode="filter-bits-n32" />
185
186 <!-- Apply the profile to the 64bit package -->
187
188 <xsl:template match="//sect1/title" mode="filter-bits-64">
189 <xsl:element name="title">
190 <xsl:copy-of select="@*|node()" />
191 <xsl:if test="contains($clfs.multilib, ',')">
192 <xsl:text> - 64Bit</xsl:text>
193 </xsl:if>
194 </xsl:element>
195 </xsl:template>
196
197 <xsl:template match="@*|node()" mode="filter-bits-64">
198 <xsl:variable name="ismultilib">
199 <xsl:choose>
200 <xsl:when test="contains($clfs.multilib, ',')">
201 <xsl:text>true</xsl:text>
202 </xsl:when>
203 <xsl:otherwise>
204 <xsl:text>false</xsl:text>
205 </xsl:otherwise>
206 </xsl:choose>
207 </xsl:variable>
208 <xsl:if test="(string-length(@c:arch) = 0) or contains(concat(',',@c:arch,','), concat(',', $clfs.arch, ','))">
209 <xsl:if test="(string-length(@c:multilib) = 0) or contains(concat(',',@c:multilib,','), concat(',', $ismultilib, ','))">
210 <xsl:if test="(string-length(@c:bits) = 0) or contains(concat(',',@c:bits,','), ',64,')">
211 <xsl:copy>
212 <xsl:apply-templates select="@*|node()" mode="filter-bits-64" />
213 </xsl:copy>
214 </xsl:if>
215 </xsl:if>
216 </xsl:if>
217 </xsl:template>
218
219 <xsl:template match="@c:arch" mode="filter-bits-64" />
220 <xsl:template match="@c:bits" mode="filter-bits-64" />
221 <xsl:template match="@c:multilib" mode="filter-bits-64" />
222
223 <!-- Apply the profile filter to the entire document -->
224 <xsl:template match="//*[@c:arch]|//*[@c:multilib]">
225 <xsl:variable name="ismultilib">
226 <xsl:choose>
227 <xsl:when test="contains($clfs.multilib, ',')">
228 <xsl:text>true</xsl:text>
229 </xsl:when>
230 <xsl:otherwise>
231 <xsl:text>false</xsl:text>
232 </xsl:otherwise>
233 </xsl:choose>
234 </xsl:variable>
235 <xsl:if test="(string-length(@c:arch) = 0) or contains(concat(',',@c:arch,','), concat(',', $clfs.arch, ','))">
236 <xsl:if test="(string-length(@c:multilib) = 0) or contains(concat(',',@c:multilib,','), concat(',', $ismultilib, ','))">
237 <xsl:copy>
238 <xsl:apply-templates select="@*|node()" />
239 </xsl:copy>
240 </xsl:if>
241 </xsl:if>
242 </xsl:template>
243
244 <!-- Remove the profileing attributes for the remaining objects -->
245 <xsl:template match="@c:arch" />
246 <xsl:template match="@c:bits" />
247 <xsl:template match="@c:multilib" />
248
249</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.