2010-04-08 Jb Evain <jbevain@novell.com>
[mcs.git] / tools / monodoc / Resources / mono-ecma-impl.xsl
blob81da95cd14dc4312b9aaa12027501365695ac4f8
1 <?xml version="1.0"?>
3 <!--
4 mono-ecma-impl.xsl: ECMA-style docs to HTML stylesheet trasformation
6 Author: Joshua Tauberer (tauberer@for.net)
7 Author: Jonathan Pryor (jpryor@novell.com)
9 This file requires that including files define the following callable
10 templates:
11 - CreateCodeBlock (language, content)
12 - CreateEnumerationTable (content)
13 - CreateHeader (content)
14 - CreateListTable (header, content)
15 - CreateMembersTable (content)
16 - CreateSignature (content)
17 - CreateTypeDocumentationTable (content)
19 -->
21 <xsl:stylesheet
22 version="1.0"
23 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
24 xmlns:monodoc="monodoc:///extensions"
25 exclude-result-prefixes="monodoc"
27 <xsl:include href="mdoc-html-utils.xsl" />
29 <!-- TEMPLATE PARAMETERS -->
31 <xsl:param name="show"/>
32 <xsl:param name="membertype"/>
33 <xsl:param name="namespace"/>
35 <!-- THE MAIN RENDERING TEMPLATE -->
37 <xsl:template match="Type|elements">
38 <!-- The namespace that the current type belongs to. -->
39 <xsl:variable name="TypeNamespace" select="substring(@FullName, 1, string-length(@FullName) - string-length(@Name) - 1)"/>
41 <!-- HEADER -->
43 <xsl:variable name="typename" select="translate (@FullName, '+', '.')" />
44 <xsl:variable name="typelink">
45 <xsl:call-template name="GetEscapedTypeName">
46 <xsl:with-param name="typename" select="@FullName" />
47 </xsl:call-template>
48 </xsl:variable>
49 <xsl:variable name="basename">
50 <xsl:if test="Base/BaseTypeName">
51 <xsl:value-of select="translate (Base/BaseTypeName, '+', '.')" />
52 </xsl:if>
53 </xsl:variable>
54 <xsl:variable name="baselink">
55 <xsl:if test="Base/BaseTypeName">
56 <xsl:call-template name="GetEscapedTypeName">
57 <xsl:with-param name="typename" select="Base/BaseTypeName" />
58 </xsl:call-template>
59 </xsl:if>
60 </xsl:variable>
62 <xsl:call-template name="CreateHeader">
63 <xsl:with-param name="content">
64 <i class="subtitle">Mono Class Library</i>
66 <xsl:choose>
67 <xsl:when test="$show='masteroverview'">
68 </xsl:when>
69 <xsl:when test="$show='typeoverview'">
70 <xsl:text>: </xsl:text>
71 <a>
72 <xsl:attribute name="href">N:<xsl:value-of select="$TypeNamespace"/></xsl:attribute>
73 <xsl:value-of select="$TypeNamespace"/> Namespace</a>
74 </xsl:when>
75 <xsl:when test="$show='members'">
76 <xsl:text>: </xsl:text>
77 <a>
78 <xsl:attribute name="href">
79 <xsl:text>T:</xsl:text>
80 <xsl:value-of select="$typelink" />
81 </xsl:attribute>
82 <xsl:value-of select="typename"/> Overview</a>
83 </xsl:when>
84 <xsl:when test="$show='member' or $show='overloads'">
85 <xsl:text>: </xsl:text>
86 <a>
87 <xsl:attribute name="href">
88 <xsl:text>T:</xsl:text>
89 <xsl:value-of select="$typelink" />
90 </xsl:attribute>
91 <xsl:value-of select="$typename"/> Overview</a>
92 <xsl:text> | </xsl:text>
93 <a>
94 <xsl:attribute name="href">
95 <xsl:text>T:</xsl:text>
96 <xsl:value-of select="$typelink" />
97 <xsl:text>/*</xsl:text>
98 </xsl:attribute>
99 <xsl:text>Members</xsl:text>
100 </a>
101 </xsl:when>
102 <xsl:when test="$show='namespace'">
103 <xsl:text>: </xsl:text>
104 <a href="root:/classlib">Namespaces</a>
105 </xsl:when>
106 </xsl:choose>
108 <h3>
109 <xsl:choose>
110 <xsl:when test="$show='masteroverview'">
111 <xsl:text>Master Overview</xsl:text>
112 </xsl:when>
113 <xsl:when test="$show='typeoverview'">
114 <xsl:value-of select="$typename"/>
115 <xsl:value-of select="' '"/>
116 <xsl:call-template name="gettypetype"/>
117 </xsl:when>
118 <xsl:when test="$show='members' and $membertype='All'">
119 <xsl:value-of select="$typename"/>
120 <xsl:text>: Members</xsl:text>
121 </xsl:when>
122 <xsl:when test="$show='members'">
123 <xsl:value-of select="$typename"/>
124 <xsl:text>: </xsl:text>
125 <xsl:value-of select="$membertype"/>
126 <xsl:text> Members</xsl:text>
127 </xsl:when>
128 <xsl:when test="$show='member'">
129 <xsl:choose>
130 <xsl:when test="$membertype='Operator'">
131 <xsl:value-of select="$typename"/>
132 <xsl:value-of select="' '"/> <!-- hard space -->
133 <xsl:value-of select="substring-after(Members/Member[MemberType='Method'][position()=$index+1]/@MemberName, 'op_')"/>
134 </xsl:when>
135 <xsl:when test="$membertype='Constructor'">
136 <xsl:value-of select="$typename"/>
137 </xsl:when>
138 <xsl:otherwise>
139 <xsl:value-of select="$typename"/>.<xsl:value-of select="Members/Member[MemberType=$membertype][position()=$index+1]/@MemberName"/>
140 </xsl:otherwise>
141 </xsl:choose>
142 <xsl:value-of select="' '"/>
143 <xsl:value-of select="$membertype"/>
144 </xsl:when>
146 <xsl:when test="$show='namespace'">
147 <xsl:value-of select="$namespace"/>
148 <xsl:text> Namespace</xsl:text>
149 </xsl:when>
151 <xsl:when test="$show='overloads'">
152 <xsl:value-of select="$typename"/>.<xsl:value-of select="$index"/> Overloads
153 </xsl:when>
155 </xsl:choose>
156 </h3>
157 </xsl:with-param>
158 </xsl:call-template>
160 <!-- SELECT WHAT TYPE OF VIEW:
161 typeoverview
162 members
163 member
165 <div class="Content">
166 <xsl:choose>
167 <xsl:when test="$show='masteroverview'">
169 <xsl:for-each select="namespace">
170 <xsl:sort select="@ns"/>
172 <!-- Don't display the namespace if it is a sub-namespace of another one.
173 But don't consider namespaces without periods, e.g. 'System', to be
174 parent namespaces because then most everything will get grouped under it. -->
175 <xsl:variable name="ns" select="@ns"/>
176 <xsl:if test="count(parent::*/namespace[not(substring-before(@ns, '.')='') and starts-with($ns, concat(@ns, '.'))])=0">
179 <b><a href="N:{@ns}"><xsl:value-of select="@ns"/></a></b>
180 </p>
181 <blockquote>
182 <div>
183 <xsl:apply-templates select="summary" mode="notoppara"/>
184 </div>
186 <!-- Display the sub-namespaces of this namespace -->
187 <xsl:if test="not(substring-before($ns, '.')='')">
188 <xsl:for-each select="parent::*/namespace[starts-with(@ns, concat($ns, '.'))]">
189 <br/>
190 <div><a href="N:{@ns}"><xsl:value-of select="@ns"/></a></div>
191 <div><xsl:apply-templates select="summary" mode="notoppara"/></div>
192 </xsl:for-each>
193 </xsl:if>
194 </blockquote>
196 </xsl:if>
197 </xsl:for-each>
199 </xsl:when>
200 <!-- TYPE OVERVIEW -->
201 <xsl:when test="$show='typeoverview'">
202 <xsl:variable name="implemented" select="monodoc:MonoImpInfo(string(AssemblyInfo/AssemblyName), string(@FullName), true())" />
203 <xsl:call-template name="CreateTypeOverview">
204 <xsl:with-param name="implemented" select="$implemented" />
205 <xsl:with-param name="show-members-link" select="true()" />
206 </xsl:call-template>
209 <!-- signature -->
210 <xsl:call-template name="CreateTypeSignature" />
212 <xsl:call-template name="DisplayDocsInformation">
213 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
214 </xsl:call-template>
215 </xsl:when>
217 <!-- MEMBER LISTING -->
218 <xsl:when test="$show='members'">
219 <xsl:if test="$membertype='All'">
221 The members of <xsl:value-of select="$typename"/> are listed below.
222 </p>
224 <xsl:if test="Base/BaseTypeName">
226 <xsl:text>See Also: </xsl:text>
228 <xsl:attribute name="href">T:<xsl:value-of select="$baselink"/>/*</xsl:attribute>
229 <xsl:text>Inherited members from </xsl:text>
230 <xsl:value-of select="$basename"/>
231 </a>
232 </p>
233 </xsl:if>
235 <ul class="TypeMembersIndex">
236 <xsl:if test="count(Members/Member[MemberType='Constructor'])">
237 <li>
238 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/C</xsl:attribute>Constructors</a>
239 </li>
240 </xsl:if>
241 <xsl:if test="count(Members/Member[MemberType='Field'])">
242 <li>
243 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/F</xsl:attribute>Fields</a>
244 </li>
245 </xsl:if>
246 <xsl:if test="count(Members/Member[MemberType='Property'])">
247 <li>
248 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/P</xsl:attribute>Properties</a>
249 </li>
250 </xsl:if>
251 <xsl:if test="count(Members/Member[MemberType='Method' and not(starts-with(@MemberName,'op_'))])">
252 <li>
253 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/M</xsl:attribute>Methods</a>
254 </li>
255 </xsl:if>
256 <xsl:if test="count(Members/Member[MemberType='Event'])">
257 <li>
258 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/E</xsl:attribute>Events</a>
259 </li>
260 </xsl:if>
261 <xsl:if test="count(Members/Member[MemberType='Method' and starts-with(@MemberName,'op_')])">
262 <li>
263 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/E</xsl:attribute>Events</a>
264 </li>
265 </xsl:if>
266 <xsl:if test="count(Members/Member[MemberType='ExtensionMethod'])">
267 <li>
268 <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/X</xsl:attribute>Extension Methods</a>
269 </li>
270 </xsl:if>
271 </ul>
273 <!-- list each type of member (public, then protected) -->
275 <xsl:call-template name="ListAllMembers" />
276 </xsl:if>
278 <xsl:if test="not($membertype='All')">
279 <!-- list the members of this type (public, then protected) -->
283 <xsl:call-template name="membertypeplurallc"><xsl:with-param name="name" select="$membertype"/></xsl:call-template>
284 of <xsl:value-of select="$typename"/> are listed below. For a list of all members, see the <a>
285 <xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/*</xsl:attribute>
286 <xsl:value-of select="@Name"/> Members</a> list.
287 </p>
289 <xsl:if test="Base/BaseTypeName">
291 <xsl:text>See Also: </xsl:text>
293 <xsl:attribute name="href">T:<xsl:value-of select="$baselink"/>/*</xsl:attribute>
294 <xsl:text>Inherited members from </xsl:text>
295 <xsl:value-of select="$basename"/>
296 </a>
297 </p>
298 </xsl:if>
300 <xsl:call-template name="ListMembers">
301 <xsl:with-param name="listmembertype" select="$membertype"/>
302 <xsl:with-param name="showprotected" select="false()"/>
303 </xsl:call-template>
305 <xsl:call-template name="ListMembers">
306 <xsl:with-param name="listmembertype" select="$membertype"/>
307 <xsl:with-param name="showprotected" select="true()"/>
308 </xsl:call-template>
309 </xsl:if>
311 </xsl:when>
313 <xsl:when test="$show='overloads'">
315 The overloads of <xsl:value-of select="$index"/>
316 are listed below. For a list of all members, see the <a>
317 <xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/*</xsl:attribute>
318 <xsl:value-of select="@Name"/> Members</a> list.
319 </p>
321 <!-- TODO: can we make this actually test if there are any overloads
322 <xsl:if test="Base/BaseTypeName">
324 See Also: <a>
325 <xsl:attribute name="href">T:<xsl:value-of select="Base/BaseTypeName"/>/*</xsl:attribute>
326 Inherited members</a> from <xsl:value-of select="Base/BaseTypeName"/>
327 </p>
328 </xsl:if>
331 <xsl:call-template name="ListMembers">
332 <xsl:with-param name="listmembertype" select="$membertype"/>
333 <xsl:with-param name="showprotected" select="false()"/>
334 <xsl:with-param name="overloads-mode" select="true()"/>
335 </xsl:call-template>
337 <xsl:call-template name="ListMembers">
338 <xsl:with-param name="listmembertype" select="$membertype"/>
339 <xsl:with-param name="showprotected" select="true()"/>
340 <xsl:with-param name="overloads-mode" select="true()"/>
341 </xsl:call-template>
342 </xsl:when>
343 <!-- MEMBER DETAILS -->
344 <xsl:when test="$show='member'">
345 <xsl:variable name="Type" select="."/>
347 <!-- select the member, this just loops through the one member that we are to display -->
348 <xsl:for-each select="Members/Member[MemberType=$membertype or ($membertype='Operator' and MemberType='Method')][position()=$index+1]">
350 <!-- summary -->
352 <xsl:call-template name="CreateMemberOverview">
353 <xsl:with-param name="implemented" select="monodoc:MonoImpInfo(string(AssemblyInfo/AssemblyName), string(@FullName), true())" />
354 </xsl:call-template>
356 <xsl:call-template name="CreateMemberSignature">
357 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
358 </xsl:call-template>
360 <div class="MemberBox">
361 <xsl:call-template name="DisplayDocsInformation">
362 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
363 </xsl:call-template>
364 </div>
366 </xsl:for-each>
368 </xsl:when>
370 <!-- NAMESPACE SUMMARY -->
371 <xsl:when test="$show='namespace'">
373 <!-- summary -->
376 <xsl:apply-templates select="summary" mode="notoppara"/>
377 <xsl:if test="monodoc:MonoEditing()">
378 <xsl:value-of select="' '" />
379 [<a href="{monodoc:EditUrlNamespace (., $namespace, 'summary')}">Edit</a>]
380 </xsl:if>
381 </p>
383 <!-- remarks -->
385 <xsl:if test="not(remarks = '')">
386 <h4>Remarks</h4>
387 <blockquote>
388 <xsl:apply-templates select="remarks"/>
389 <xsl:if test="monodoc:MonoEditing()">
390 <xsl:value-of select="' '" />
391 [<a href="{monodoc:EditUrlNamespace (., $namespace, 'remarks')}">Edit</a>]
392 </xsl:if>
393 </blockquote>
394 </xsl:if>
396 <xsl:call-template name="namespacetypes">
397 <xsl:with-param name="typetype" select="'class'"/>
398 <xsl:with-param name="typetitle" select="'Classes'"/>
399 </xsl:call-template>
401 <xsl:call-template name="namespacetypes">
402 <xsl:with-param name="typetype" select="'interface'"/>
403 <xsl:with-param name="typetitle" select="'Interfaces'"/>
404 </xsl:call-template>
406 <xsl:call-template name="namespacetypes">
407 <xsl:with-param name="typetype" select="'struct'"/>
408 <xsl:with-param name="typetitle" select="'Structs'"/>
409 </xsl:call-template>
411 <xsl:call-template name="namespacetypes">
412 <xsl:with-param name="typetype" select="'delegate'"/>
413 <xsl:with-param name="typetitle" select="'Delegates'"/>
414 </xsl:call-template>
416 <xsl:call-template name="namespacetypes">
417 <xsl:with-param name="typetype" select="'enum'"/>
418 <xsl:with-param name="typetitle" select="'Enumerations'"/>
419 </xsl:call-template>
422 </xsl:when>
424 <!-- don't know what kind of page this is -->
425 <xsl:otherwise>
426 Don't know what to do!
427 </xsl:otherwise>
429 </xsl:choose>
430 </div>
432 <!-- FOOTER -->
434 <div class="Footer">
435 <hr/>
436 This documentation is part of the <a target="_top" title="Mono Project" href="http://www.mono-project.com/">Mono Project</a>.
437 </div>
439 </xsl:template>
441 <xsl:template name="GetLinkTarget">
442 <xsl:param name="type" />
443 <xsl:param name="cref" />
445 <xsl:value-of select="$cref" />
446 </xsl:template>
448 <xsl:template name="namespacetypes">
449 <xsl:param name="typetype"/>
450 <xsl:param name="typetitle"/>
452 <xsl:variable name="NODES" select="*[name()=$typetype]"/>
454 <xsl:if test="count($NODES)">
456 <xsl:call-template name="CreateH4Section">
457 <xsl:with-param name="name" select="$typetitle" />
458 <xsl:with-param name="child-id" select="$typetitle" />
459 <xsl:with-param name="content">
461 <xsl:call-template name="CreateTypeDocumentationTable">
462 <xsl:with-param name="content">
463 <xsl:for-each select="$NODES">
464 <xsl:sort select="@name"/>
466 <tr>
467 <td>
469 <xsl:attribute name="href">
470 <xsl:text>T:</xsl:text>
471 <xsl:call-template name="GetEscapedTypeName">
472 <xsl:with-param name="typename" select="@fullname" />
473 </xsl:call-template>
474 </xsl:attribute>
475 <xsl:value-of select="@name"/>
476 </a>
478 <xsl:variable name="containingtype" select="substring-before(@fullname, concat('+',@name))"/>
479 <xsl:if test="$containingtype">
480 <br/>(in
481 <xsl:call-template name="maketypelink">
482 <xsl:with-param name="type" select="$containingtype"/>
483 <xsl:with-param name="wrt" select="$namespace"/>
484 </xsl:call-template>)
485 </xsl:if>
486 </td>
487 <td>
488 <xsl:apply-templates select="summary" mode="notoppara"/>
490 <xsl:variable name="MonoImplInfo" select="monodoc:MonoImpInfo(string(@assembly), string(@fullname), false())"/>
491 <xsl:if test="$MonoImplInfo"><br/><b><xsl:value-of disable-output-escaping="yes" select="$MonoImplInfo"/></b></xsl:if>
492 </td>
493 </tr>
494 </xsl:for-each>
495 </xsl:with-param>
496 </xsl:call-template>
497 </xsl:with-param>
498 </xsl:call-template>
500 </xsl:if>
501 </xsl:template>
503 <xsl:template name="CreateEditLink">
504 <xsl:param name="e" />
505 <xsl:if test="monodoc:MonoEditing()">
506 <xsl:value-of select="' '" />
507 [<a href="{monodoc:EditUrl ($e)}">Edit</a>]
508 </xsl:if>
509 </xsl:template>
511 </xsl:stylesheet>