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
11 - CreateCodeBlock (language, content)
12 - CreateEnumerationTable (content)
13 - CreateHeader (content)
14 - CreateListTable (header, content)
15 - CreateMembersTable (content)
16 - CreateSignature (content)
17 - CreateTypeDocumentationTable (content)
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)"/>
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" />
49 <xsl:variable name=
"basename">
50 <xsl:if test=
"Base/BaseTypeName">
51 <xsl:value-of select=
"translate (Base/BaseTypeName, '+', '.')" />
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" />
62 <xsl:call-template name=
"CreateHeader">
63 <xsl:with-param name=
"content">
64 <ul class=
"breadcrumb">
66 <xsl:when test=
"$show='masteroverview'">
67 <li class=
"namespace">
68 <xsl:text>Namespaces in this Collection
</xsl:text>
71 <xsl:when test=
"$show='typeoverview'">
72 <li class=
"namespace">
74 <xsl:attribute name=
"href">N:
<xsl:value-of select=
"$TypeNamespace"/></xsl:attribute>
75 <xsl:value-of select=
"$TypeNamespace"/></a>
78 <xsl:value-of select=
"@Name"/>
81 <xsl:when test=
"$show='members'">
82 <li class=
"namespace">
84 <xsl:attribute name=
"href">N:
<xsl:value-of select=
"$TypeNamespace"/></xsl:attribute>
85 <xsl:value-of select=
"$TypeNamespace"/>
90 <xsl:attribute name=
"href">
91 <xsl:text>T:
</xsl:text>
92 <xsl:value-of select=
"$typelink" />
94 <xsl:value-of select=
"@Name"/>
101 <xsl:when test=
"$show='member' or $show='overloads'">
102 <li class=
"namespace">
104 <xsl:attribute name=
"href">N:
<xsl:value-of select=
"$TypeNamespace"/></xsl:attribute>
105 <xsl:value-of select=
"$TypeNamespace"/></a>
107 <li class=
"pubclass">
109 <xsl:attribute name=
"href">
110 <xsl:text>T:
</xsl:text>
111 <xsl:value-of select=
"$typelink" />
113 <xsl:value-of select=
"@Name"/>
116 <li class=
"pubproperty">
118 <xsl:when test=
"$membertype='Operator'">
119 <xsl:value-of select=
"$typename"/>
120 <xsl:value-of select=
"' '"/> <!-- hard space -->
121 <xsl:value-of select=
"substring-after(Members/Member[MemberType='Method'][position()=$index+1]/@MemberName, 'op_')"/>
123 <xsl:when test=
"$membertype='Constructor'">
124 <xsl:value-of select=
"$typename"/>
127 <xsl:value-of select=
"Members/Member[MemberType=$membertype][position()=$index+1]/@MemberName"/>
132 <xsl:when test=
"$show='namespace'">
133 <li class=
"namespace">
134 <xsl:value-of select=
"$namespace"/>
139 <div class=
"named-header">
141 <xsl:when test=
"$show='masteroverview'">
142 <xsl:text>Master Overview
</xsl:text>
144 <xsl:when test=
"$show='typeoverview'">
145 <xsl:value-of select=
"$typename"/>
146 <xsl:value-of select=
"' '"/>
147 <xsl:call-template name=
"gettypetype"/>
149 <xsl:when test=
"$show='members' and $membertype='All'">
150 <xsl:value-of select=
"$typename"/>
151 <xsl:text> Members
</xsl:text>
153 <xsl:when test=
"$show='members'">
154 <xsl:value-of select=
"$typename"/>
155 <xsl:text>:
</xsl:text>
156 <xsl:value-of select=
"$membertype"/>
157 <xsl:text> Members
</xsl:text>
159 <xsl:when test=
"$show='member'">
161 <xsl:when test=
"$membertype='Operator'">
162 <xsl:value-of select=
"$typename"/>
163 <xsl:value-of select=
"' '"/> <!-- hard space -->
164 <xsl:value-of select=
"substring-after(Members/Member[MemberType='Method'][position()=$index+1]/@MemberName, 'op_')"/>
166 <xsl:when test=
"$membertype='Constructor'">
167 <xsl:value-of select=
"$typename"/>
170 <xsl:value-of select=
"$typename"/>.
<xsl:value-of select=
"Members/Member[MemberType=$membertype][position()=$index+1]/@MemberName"/>
173 <xsl:value-of select=
"' '"/>
174 <xsl:value-of select=
"$membertype"/>
177 <xsl:when test=
"$show='namespace'">
178 <xsl:value-of select=
"$namespace"/>
179 <xsl:text> Namespace
</xsl:text>
182 <xsl:when test=
"$show='overloads'">
183 <xsl:value-of select=
"$typename"/>.
<xsl:value-of select=
"$index"/> Overloads
191 <!-- SELECT WHAT TYPE OF VIEW:
196 <div class=
"Content">
198 <xsl:when test=
"$show='masteroverview'">
200 <xsl:for-each select=
"namespace">
201 <xsl:sort select=
"@ns"/>
203 <!-- Don't display the namespace if it is a sub-namespace of another one.
204 But don't consider namespaces without periods, e.g. 'System', to be
205 parent namespaces because then most everything will get grouped under it. -->
206 <xsl:variable name=
"ns" select=
"@ns"/>
207 <xsl:if test=
"count(parent::*/namespace[not(substring-before(@ns, '.')='') and starts-with($ns, concat(@ns, '.'))])=0">
210 <b><a href=
"N:{@ns}"><xsl:value-of select=
"@ns"/></a></b>
214 <xsl:apply-templates select=
"summary" mode=
"notoppara"/>
217 <!-- Display the sub-namespaces of this namespace -->
218 <xsl:if test=
"not(substring-before($ns, '.')='')">
219 <xsl:for-each select=
"parent::*/namespace[starts-with(@ns, concat($ns, '.'))]">
221 <div><a href=
"N:{@ns}"><xsl:value-of select=
"@ns"/></a></div>
222 <div><xsl:apply-templates select=
"summary" mode=
"notoppara"/></div>
231 <!-- TYPE OVERVIEW -->
232 <xsl:when test=
"$show='typeoverview'">
233 <xsl:variable name=
"implemented" select=
"monodoc:MonoImpInfo(string(AssemblyInfo/AssemblyName), string(@FullName), true())" />
234 <xsl:call-template name=
"CreateTypeOverview">
235 <xsl:with-param name=
"implemented" select=
"$implemented" />
236 <xsl:with-param name=
"show-members-link" select=
"true()" />
241 <xsl:call-template name=
"CreateTypeSignature" />
243 <xsl:call-template name=
"DisplayDocsInformation">
244 <xsl:with-param name=
"linkid" select=
"concat ('T:', @FullName)" />
248 <!-- MEMBER LISTING -->
249 <xsl:when test=
"$show='members'">
250 <xsl:if test=
"$membertype='All'">
252 The members of
<xsl:value-of select=
"$typename"/> are listed below.
255 <xsl:if test=
"Base/BaseTypeName">
257 <xsl:text>See Also:
</xsl:text>
259 <xsl:attribute name=
"href">T:
<xsl:value-of select=
"$baselink"/>/*
</xsl:attribute>
260 <xsl:text>Inherited members from
</xsl:text>
261 <xsl:value-of select=
"$basename"/>
266 <ul class=
"TypeMembersIndex">
267 <xsl:if test=
"count(Members/Member[MemberType='Constructor'])">
269 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/C
</xsl:attribute>Constructors
</a>
272 <xsl:if test=
"count(Members/Member[MemberType='Field'])">
274 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/F
</xsl:attribute>Fields
</a>
277 <xsl:if test=
"count(Members/Member[MemberType='Property'])">
279 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/P
</xsl:attribute>Properties
</a>
282 <xsl:if test=
"count(Members/Member[MemberType='Method' and not(starts-with(@MemberName,'op_'))])">
284 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/M
</xsl:attribute>Methods
</a>
287 <xsl:if test=
"count(Members/Member[MemberType='Event'])">
289 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/E
</xsl:attribute>Events
</a>
292 <xsl:if test=
"count(Members/Member[MemberType='Method' and starts-with(@MemberName,'op_')])">
294 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/E
</xsl:attribute>Events
</a>
297 <xsl:if test=
"count(Members/Member[MemberType='ExtensionMethod'])">
299 <a><xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/X
</xsl:attribute>Extension Methods
</a>
304 <!-- list each type of member (public, then protected) -->
306 <xsl:call-template name=
"ListAllMembers" />
309 <xsl:if test=
"not($membertype='All')">
310 <!-- list the members of this type (public, then protected) -->
314 <xsl:call-template name=
"membertypeplurallc"><xsl:with-param name=
"name" select=
"$membertype"/></xsl:call-template>
315 of
<xsl:value-of select=
"$typename"/> are listed below. For a list of all members, see the
<a>
316 <xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/*
</xsl:attribute>
317 <xsl:value-of select=
"@Name"/> Members
</a> list.
320 <xsl:if test=
"Base/BaseTypeName">
322 <xsl:text>See Also:
</xsl:text>
324 <xsl:attribute name=
"href">T:
<xsl:value-of select=
"$baselink"/>/*
</xsl:attribute>
325 <xsl:text>Inherited members from
</xsl:text>
326 <xsl:value-of select=
"$basename"/>
331 <xsl:call-template name=
"ListMembers">
332 <xsl:with-param name=
"listmembertype" select=
"$membertype"/>
333 <xsl:with-param name=
"showprotected" select=
"false()"/>
336 <xsl:call-template name=
"ListMembers">
337 <xsl:with-param name=
"listmembertype" select=
"$membertype"/>
338 <xsl:with-param name=
"showprotected" select=
"true()"/>
344 <xsl:when test=
"$show='overloads'">
346 The overloads of
<xsl:value-of select=
"$index"/>
347 are listed below. For a list of all members, see the
<a>
348 <xsl:attribute name=
"href">T:
<xsl:value-of select=
"$typelink"/>/*
</xsl:attribute>
349 <xsl:value-of select=
"@Name"/> Members
</a> list.
352 <!-- TODO: can we make this actually test if there are any overloads
353 <xsl:if test="Base/BaseTypeName">
356 <xsl:attribute name="href">T:<xsl:value-of select="Base/BaseTypeName"/>/*</xsl:attribute>
357 Inherited members</a> from <xsl:value-of select="Base/BaseTypeName"/>
362 <xsl:call-template name=
"ListMembers">
363 <xsl:with-param name=
"listmembertype" select=
"$membertype"/>
364 <xsl:with-param name=
"showprotected" select=
"false()"/>
365 <xsl:with-param name=
"overloads-mode" select=
"true()"/>
368 <xsl:call-template name=
"ListMembers">
369 <xsl:with-param name=
"listmembertype" select=
"$membertype"/>
370 <xsl:with-param name=
"showprotected" select=
"true()"/>
371 <xsl:with-param name=
"overloads-mode" select=
"true()"/>
374 <!-- MEMBER DETAILS -->
375 <xsl:when test=
"$show='member'">
376 <xsl:variable name=
"Type" select=
"."/>
378 <!-- select the member, this just loops through the one member that we are to display -->
379 <xsl:for-each select=
"Members/Member[MemberType=$membertype or ($membertype='Operator' and MemberType='Method')][position()=$index+1]">
383 <xsl:call-template name=
"CreateMemberOverview">
384 <xsl:with-param name=
"implemented" select=
"monodoc:MonoImpInfo(string(AssemblyInfo/AssemblyName), string(@FullName), true())" />
387 <xsl:call-template name=
"CreateMemberSignature">
388 <xsl:with-param name=
"linkid" select=
"concat ('T:', @FullName)" />
391 <div class=
"MemberBox">
392 <xsl:call-template name=
"DisplayDocsInformation">
393 <xsl:with-param name=
"linkid" select=
"concat ('T:', @FullName)" />
401 <!-- NAMESPACE SUMMARY -->
402 <xsl:when test=
"$show='namespace'">
406 <p><div class=
"msummary"><xsl:apply-templates select=
"summary" mode=
"notoppara"/></div>
408 <xsl:if test=
"monodoc:MonoEditing()">
409 <xsl:value-of select=
"' '" />
410 [
<a href=
"{monodoc:EditUrlNamespace (., $namespace, 'summary')}">Edit
</a>]
416 <xsl:if test=
"not(remarks = '')">
418 <div class=
"SectionBox">
419 <xsl:apply-templates select=
"remarks"/>
420 <xsl:if test=
"monodoc:MonoEditing()">
421 <xsl:value-of select=
"' '" />
422 [
<a href=
"{monodoc:EditUrlNamespace (., $namespace, 'remarks')}">Edit
</a>]
427 <xsl:call-template name=
"namespacetypes">
428 <xsl:with-param name=
"typetype" select=
"'class'"/>
429 <xsl:with-param name=
"typetitle" select=
"'Classes'"/>
432 <xsl:call-template name=
"namespacetypes">
433 <xsl:with-param name=
"typetype" select=
"'interface'"/>
434 <xsl:with-param name=
"typetitle" select=
"'Interfaces'"/>
437 <xsl:call-template name=
"namespacetypes">
438 <xsl:with-param name=
"typetype" select=
"'struct'"/>
439 <xsl:with-param name=
"typetitle" select=
"'Structs'"/>
442 <xsl:call-template name=
"namespacetypes">
443 <xsl:with-param name=
"typetype" select=
"'delegate'"/>
444 <xsl:with-param name=
"typetitle" select=
"'Delegates'"/>
447 <xsl:call-template name=
"namespacetypes">
448 <xsl:with-param name=
"typetype" select=
"'enum'"/>
449 <xsl:with-param name=
"typetitle" select=
"'Enumerations'"/>
455 <!-- don't know what kind of page this is -->
457 Don't know what to do!
470 <xsl:template name=
"GetLinkTarget">
471 <xsl:param name=
"type" />
472 <xsl:param name=
"cref" />
474 <xsl:value-of select=
"$cref" />
477 <xsl:template name=
"namespacetypes">
478 <xsl:param name=
"typetype"/>
479 <xsl:param name=
"typetitle"/>
481 <xsl:variable name=
"NODES" select=
"*[name()=$typetype]"/>
483 <xsl:if test=
"count($NODES)">
485 <xsl:call-template name=
"CreateH2Section">
486 <xsl:with-param name=
"name" select=
"$typetitle" />
487 <xsl:with-param name=
"child-id" select=
"$typetitle" />
488 <xsl:with-param name=
"content">
490 <xsl:call-template name=
"CreateTypeDocumentationTable">
491 <xsl:with-param name=
"content">
492 <xsl:for-each select=
"$NODES">
493 <xsl:sort select=
"@name"/>
498 <xsl:attribute name=
"href">
499 <xsl:text>T:
</xsl:text>
500 <xsl:call-template name=
"GetEscapedTypeName">
501 <xsl:with-param name=
"typename" select=
"@fullname" />
504 <xsl:value-of select=
"@name"/>
507 <xsl:variable name=
"containingtype" select=
"substring-before(@fullname, concat('+',@name))"/>
508 <xsl:if test=
"$containingtype">
510 <xsl:call-template name=
"maketypelink">
511 <xsl:with-param name=
"type" select=
"$containingtype"/>
512 <xsl:with-param name=
"wrt" select=
"$namespace"/>
513 </xsl:call-template>)
517 <xsl:apply-templates select=
"summary" mode=
"notoppara"/>
518 <xsl:variable name=
"MonoImplInfo" select=
"monodoc:MonoImpInfo(string(@assembly), string(@fullname), false())"/>
519 <xsl:if test=
"$MonoImplInfo"><br/><b><xsl:value-of disable-output-escaping=
"yes" select=
"$MonoImplInfo"/></b></xsl:if>
531 <xsl:template name=
"CreateEditLink">
532 <xsl:param name=
"e" />
533 <xsl:if test=
"monodoc:MonoEditing()">
534 <xsl:value-of select=
"' '" />
535 [
<a href=
"{monodoc:EditUrl ($e)}">Edit
</a>]