source: BMXNET_RPMS_dotNET_UTILITIES-BMX/branch/IHS BMX Framework/IndianHealthService.BMXNet.Doc/Help/Presentation/Shared/transforms/utilities_metadata.xsl@ 1146

Last change on this file since 1146 was 1146, checked in by Sam Habiel, 13 years ago

Initial Import of BMX4

File size: 9.0 KB
Line 
1<?xml version="1.0"?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1"
3 xmlns:msxsl="urn:schemas-microsoft-com:xslt" >
4
5 <xsl:template name="typeNameWithTicks">
6 <xsl:for-each select="type|(containers/type)">
7 <xsl:call-template name="typeNameWithTicks" />
8 <xsl:text>.</xsl:text>
9 </xsl:for-each>
10 <xsl:value-of select="apidata/@name" />
11 <xsl:if test="boolean(templates/template)">
12 <xsl:text>`</xsl:text>
13 <xsl:value-of select="count(templates/template)"/>
14 </xsl:if>
15 </xsl:template>
16
17 <xsl:template name="qualifiedTextNames">
18 <xsl:choose>
19 <!-- explicit interface implementations -->
20 <xsl:when test="memberdata[@visibility='private'] and proceduredata[@virtual = 'true']">
21 <xsl:variable name="left">
22 <xsl:for-each select="containers/type">
23 <xsl:call-template name="textNames"/>
24 </xsl:for-each>
25 </xsl:variable>
26 <xsl:variable name="right">
27 <xsl:for-each select="implements/member">
28 <xsl:call-template name="textNames" />
29 </xsl:for-each>
30 </xsl:variable>
31 <xsl:call-template name="combineTextNames">
32 <xsl:with-param name="left" select="msxsl:node-set($left)" />
33 <xsl:with-param name="right" select="msxsl:node-set($right)" />
34 </xsl:call-template>
35 </xsl:when>
36 <!-- members get qualified by type name -->
37 <xsl:when test="apidata/@group='member' and containers/type">
38 <xsl:variable name="left">
39 <xsl:for-each select="containers/type">
40 <xsl:call-template name="textNames"/>
41 </xsl:for-each>
42 </xsl:variable>
43 <xsl:variable name="right">
44 <xsl:call-template name="simpleTextNames" />
45 </xsl:variable>
46 <xsl:call-template name="combineTextNames">
47 <xsl:with-param name="left" select="msxsl:node-set($left)" />
48 <xsl:with-param name="right" select="msxsl:node-set($right)" />
49 </xsl:call-template>
50 </xsl:when>
51 <!-- types get qualified by namespace name -->
52 <xsl:when test="typedata and containers/namespace/apidata/@name">
53 <xsl:variable name="left">
54 <xsl:for-each select="containers/namespace">
55 <xsl:call-template name="simpleTextNames"/>
56 </xsl:for-each>
57 </xsl:variable>
58 <xsl:variable name="right">
59 <xsl:call-template name="textNames" />
60 </xsl:variable>
61 <xsl:call-template name="combineTextNames">
62 <xsl:with-param name="left" select="msxsl:node-set($left)" />
63 <xsl:with-param name="right" select="msxsl:node-set($right)" />
64 </xsl:call-template>
65 </xsl:when>
66 </xsl:choose>
67 </xsl:template>
68
69 <!-- given two XML lists of API names (produced by textNames template below), produces an XML list
70 that dot-concatenates them, respecting the @language attributes -->
71 <xsl:template name="combineTextNames">
72 <xsl:param name="left" />
73 <xsl:param name="right" />
74 <xsl:choose>
75 <xsl:when test="count($left/name) &gt; 1">
76 <xsl:choose>
77 <xsl:when test="count($right/name) &gt; 1">
78 <!-- both left and right are multi-language -->
79 <xsl:for-each select="$left/name">
80 <xsl:variable name="language" select="@language" />
81 <name language="{$language}">
82 <xsl:apply-templates select="." />
83 <xsl:value-of select="'.'"/>
84 <xsl:apply-templates select="$right/name[@language=$language]" />
85 </name>
86 </xsl:for-each>
87 </xsl:when>
88 <xsl:otherwise>
89 <!-- left is multi-language, right is not -->
90 <xsl:for-each select="$left/name">
91 <xsl:variable name="language" select="@language" />
92 <name language="{$language}">
93 <xsl:apply-templates select="." />
94 <xsl:value-of select="concat('.', $right/name)"/>
95 </name>
96 </xsl:for-each>
97 </xsl:otherwise>
98 </xsl:choose>
99 </xsl:when>
100 <xsl:otherwise>
101 <xsl:choose>
102 <xsl:when test="count($right/name) &gt; 1">
103 <!-- right is multi-language, left is not -->
104 <xsl:for-each select="$right/name">
105 <xsl:variable name="language" select="@language" />
106 <name language="{.}">
107 <xsl:value-of select="concat($left/name, '.')"/>
108 <xsl:apply-templates select="." />
109 </name>
110 </xsl:for-each>
111 </xsl:when>
112 <xsl:otherwise>
113 <!-- neiter is multi-language -->
114 <name>
115 <xsl:value-of select="concat($left/name,'.',$right/name)" />
116 </name>
117 </xsl:otherwise>
118 </xsl:choose>
119 </xsl:otherwise>
120 </xsl:choose>
121 </xsl:template>
122
123 <!-- produces an XML list of API names; context is parent of apidata element -->
124 <!-- if there are no templates: <name>Blah</name> -->
125 <!-- if there are templates: <name langauge="c">Blah<T></name><name language="v">Blah(Of T)</name> -->
126 <xsl:template name="simpleTextNames">
127 <xsl:choose>
128 <xsl:when test="specialization | templates">
129 <xsl:apply-templates select="specialization | templates" mode="index">
130 <xsl:with-param name="name" select="apidata/@name" />
131 </xsl:apply-templates>
132 </xsl:when>
133 <xsl:otherwise>
134 <name>
135 <xsl:choose>
136 <xsl:when test="apidata/@subgroup = 'constructor'">
137 <xsl:value-of select="containers/type/apidata/@name"/>
138 </xsl:when>
139 <xsl:otherwise>
140 <xsl:value-of select="apidata/@name"/>
141 </xsl:otherwise>
142 </xsl:choose>
143 </name>
144 </xsl:otherwise>
145 </xsl:choose>
146 </xsl:template>
147
148 <xsl:template name="textNames">
149 <xsl:choose>
150 <xsl:when test="typedata and (containers/type | type)">
151 <xsl:variable name="left">
152 <xsl:apply-templates select="type | (containers/type)" mode="index" />
153 </xsl:variable>
154 <xsl:variable name="right">
155 <xsl:call-template name="simpleTextNames" />
156 </xsl:variable>
157 <xsl:call-template name="combineTextNames">
158 <xsl:with-param name="left" select="msxsl:node-set($left)" />
159 <xsl:with-param name="right" select="msxsl:node-set($right)" />
160 </xsl:call-template>
161 </xsl:when>
162 <xsl:when test="type">
163 <xsl:variable name="left">
164 <xsl:apply-templates select="type" mode="index" />
165 </xsl:variable>
166 <xsl:variable name="right">
167 <xsl:call-template name="simpleTextNames" />
168 </xsl:variable>
169 <xsl:call-template name="combineTextNames">
170 <xsl:with-param name="left" select="msxsl:node-set($left)" />
171 <xsl:with-param name="right" select="msxsl:node-set($right)" />
172 </xsl:call-template>
173 </xsl:when>
174 <xsl:otherwise>
175 <xsl:call-template name="simpleTextNames" />
176 </xsl:otherwise>
177 </xsl:choose>
178 </xsl:template>
179
180 <!-- produces a C#/C++ style generic template parameter list for inclusion in the index -->
181 <xsl:template name="csTemplateText">
182 <xsl:text>%3C</xsl:text>
183 <xsl:call-template name="templateText" />
184 <xsl:text>%3E</xsl:text>
185 </xsl:template>
186
187 <!-- produces a VB-style generic template parameter list for inclusion in the index -->
188 <xsl:template name="vbTemplateText">
189 <xsl:text>(Of </xsl:text>
190 <xsl:call-template name="templateText" />
191 <xsl:text>)</xsl:text>
192 </xsl:template>
193
194 <!-- produces a comma-seperated list of generic template parameter names -->
195 <!-- comma character is URL-encoded so as not to create sub-index entries -->
196 <xsl:template name="templateText">
197 <xsl:for-each select="*">
198 <xsl:apply-templates select="." mode="index" />
199 <xsl:if test="not(position()=last())">
200 <xsl:text>%2C </xsl:text>
201 </xsl:if>
202 </xsl:for-each>
203 </xsl:template>
204
205
206 <xsl:template match="specialization | templates" mode="index" >
207 <xsl:param name="name" />
208 <name language="c">
209 <xsl:value-of select="$name" />
210 <xsl:call-template name="csTemplateText" />
211 </name>
212 <name language="v">
213 <xsl:value-of select="$name" />
214 <xsl:call-template name="vbTemplateText" />
215 </name>
216 </xsl:template>
217
218 <xsl:template match="template" mode="index">
219 <xsl:value-of select="@name" />
220 </xsl:template>
221
222 <xsl:template match="type" mode="index">
223 <xsl:call-template name="textNames" />
224 </xsl:template>
225
226 <xsl:template match="name/name">
227 <xsl:variable name="lang" select="ancestor::*/@language"/>
228
229 <xsl:if test="@language = $lang">
230 <xsl:value-of select="."/>
231 </xsl:if>
232 </xsl:template>
233
234 <xsl:template match="name/text()">
235 <xsl:value-of select="."/>
236 </xsl:template>
237
238</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.