[runtime] Disable some tests in full-aot mode which cannot be AOTed because of type...
[mono.git] / mcs / class / monodoc / Resources / mono-ecma-impl.xsl
1 <?xml version="1.0"?>
2
3 <!--
4         mono-ecma-impl.xsl: ECMA-style docs to HTML stylesheet trasformation
5
6         Author: Joshua Tauberer (tauberer@for.net)
7         Author: Jonathan Pryor (jpryor@novell.com)
8
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)
18
19 -->
20
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"
26         >
27         <xsl:include href="mdoc-html-utils.xsl" />
28         
29         <!-- TEMPLATE PARAMETERS -->
30
31         <xsl:param name="show"/>
32         <xsl:param name="membertype"/>
33         <xsl:param name="namespace"/>
34
35         <!-- THE MAIN RENDERING TEMPLATE -->
36
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)"/>
40
41                 <!-- HEADER -->
42
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>
61
62                 <xsl:call-template name="CreateHeader">
63                         <xsl:with-param name="content">
64                           <ul class="breadcrumb">
65                                 <xsl:choose>
66                                         <xsl:when test="$show='masteroverview'">
67                                                 <li class="namespace">
68                                                   <xsl:text>Namespaces in this Collection</xsl:text>
69                                                 </li>
70                                         </xsl:when>
71                                         <xsl:when test="$show='typeoverview'">
72                                                 <li class="namespace">
73                                                 <a>
74                                                         <xsl:attribute name="href">N:<xsl:value-of select="$TypeNamespace"/></xsl:attribute>
75                                                         <xsl:value-of select="$TypeNamespace"/></a>
76                                                 </li>
77                                                 <li class="pubclass">
78                                                         <xsl:value-of select="@Name"/>
79                                                 </li>
80                                         </xsl:when>
81                                         <xsl:when test="$show='members'">
82                                                 <li class="namespace">
83                                                   <a>
84                                                     <xsl:attribute name="href">N:<xsl:value-of select="$TypeNamespace"/></xsl:attribute>
85                                                     <xsl:value-of select="$TypeNamespace"/>
86                                                   </a>
87                                                 </li>
88                                                 <li class="pubclass">
89                                                   <a>
90                                                         <xsl:attribute name="href">
91                                                                 <xsl:text>T:</xsl:text>
92                                                                 <xsl:value-of select="$typelink" />
93                                                         </xsl:attribute>                                                  
94                                                         <xsl:value-of select="@Name"/>
95                                                   </a>
96                                                 </li>
97                                                 <li class="members">
98                                                   Members
99                                                 </li>
100                                         </xsl:when>
101                                         <xsl:when test="$show='member' or $show='overloads'">
102                                                 <li class="namespace">
103                                                 <a>
104                                                         <xsl:attribute name="href">N:<xsl:value-of select="$TypeNamespace"/></xsl:attribute>
105                                                         <xsl:value-of select="$TypeNamespace"/></a>
106                                                 </li>
107                                                 <li class="pubclass">
108                                                   <a>
109                                                         <xsl:attribute name="href">
110                                                                 <xsl:text>T:</xsl:text>
111                                                                 <xsl:value-of select="$typelink" />
112                                                         </xsl:attribute>                                                  
113                                                         <xsl:value-of select="@Name"/>
114                                                   </a>
115                                                 </li>
116                                                 <li class="pubproperty">
117                                                   <xsl:choose>
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_')"/>
122                                                   </xsl:when>
123                                                   <xsl:when test="$membertype='Constructor'">
124                                                         <xsl:value-of select="$typename"/>
125                                                   </xsl:when>
126                                                   <xsl:otherwise>
127                                                         <xsl:value-of select="Members/Member[MemberType=$membertype][position()=$index+1]/@MemberName"/>
128                                                   </xsl:otherwise>
129                                                   </xsl:choose>
130                                                 </li>
131                                         </xsl:when>
132                                         <xsl:when test="$show='namespace'">
133                                                 <li class="namespace">
134                                                   <xsl:value-of select="$namespace"/>
135                                                 </li>
136                                         </xsl:when>
137                                 </xsl:choose>
138                         </ul>
139                         <div class="named-header">
140                                 <xsl:choose>
141                                         <xsl:when test="$show='masteroverview'">
142                                                 <xsl:text>Master Overview</xsl:text>
143                                         </xsl:when>
144                                         <xsl:when test="$show='typeoverview'">
145                                                 <xsl:value-of select="$typename"/>
146                                                 <xsl:value-of select="' '"/>
147                                                 <xsl:call-template name="gettypetype"/>
148                                         </xsl:when>
149                                         <xsl:when test="$show='members' and $membertype='All'">
150                                                 <xsl:value-of select="$typename"/>
151                                                 <xsl:text> Members</xsl:text>
152                                         </xsl:when>
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>
158                                         </xsl:when>
159                                         <xsl:when test="$show='member'">
160                                                 <xsl:choose>
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_')"/>
165                                                 </xsl:when>
166                                                 <xsl:when test="$membertype='Constructor'">
167                                                         <xsl:value-of select="$typename"/>
168                                                 </xsl:when>
169                                                 <xsl:otherwise>
170                                                         <xsl:value-of select="$typename"/>.<xsl:value-of select="Members/Member[MemberType=$membertype][position()=$index+1]/@MemberName"/>
171                                                 </xsl:otherwise>
172                                                 </xsl:choose>
173                                                 <xsl:value-of select="' '"/>
174                                                 <xsl:value-of select="$membertype"/>
175                                         </xsl:when>
176
177                                         <xsl:when test="$show='namespace'">
178                                                 <xsl:value-of select="$namespace"/>
179                                                 <xsl:text> Namespace</xsl:text>
180                                         </xsl:when>
181                                         
182                                         <xsl:when test="$show='overloads'">
183                                                 <xsl:value-of select="$typename"/>.<xsl:value-of select="$index"/> Overloads
184                                         </xsl:when>
185
186                                 </xsl:choose>
187                         </div>
188                         </xsl:with-param>
189                 </xsl:call-template>
190
191                 <!-- SELECT WHAT TYPE OF VIEW:
192                                 typeoverview
193                                 members
194                                 member
195                                 -->
196                 <div class="Content">
197                 <xsl:choose>
198                 <xsl:when test="$show='masteroverview'">
199                 
200                         <xsl:for-each select="namespace">
201                                 <xsl:sort select="@ns"/>
202                                 
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">
208
209                                 <p>
210                                         <b><a href="N:{@ns}"><xsl:value-of select="@ns"/></a></b>
211                                 </p>
212                                 <blockquote>
213                                         <div>
214                                         <xsl:apply-templates select="summary" mode="notoppara"/>
215                                         </div>
216                                         
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, '.'))]">
220                                                 <br/>
221                                                 <div><a href="N:{@ns}"><xsl:value-of select="@ns"/></a></div>
222                                                 <div><xsl:apply-templates select="summary" mode="notoppara"/></div>                                             
223                                         </xsl:for-each>
224                                         </xsl:if>
225                                 </blockquote>
226                                 
227                                 </xsl:if>
228                         </xsl:for-each>
229                         
230                 </xsl:when>
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()" />
237                         </xsl:call-template>
238                         
239
240                         <!-- signature -->
241                         <xsl:call-template name="CreateTypeSignature" />
242
243                         <xsl:call-template name="DisplayDocsInformation">
244                                 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
245                         </xsl:call-template>
246                 </xsl:when>
247
248                 <!-- MEMBER LISTING -->
249                 <xsl:when test="$show='members'">
250                         <xsl:if test="$membertype='All'">
251                                 <p>
252                                         The members of <xsl:value-of select="$typename"/> are listed below.
253                                 </p>
254
255                                 <xsl:if test="Base/BaseTypeName">
256                                         <p>
257                                                 <xsl:text>See Also: </xsl:text>
258                                                 <a>
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"/>
262                                                 </a>
263                                         </p>
264                                 </xsl:if>
265
266                                 <ul class="TypeMembersIndex">
267                                         <xsl:if test="count(Members/Member[MemberType='Constructor'])">
268                                                 <li>
269                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/C</xsl:attribute>Constructors</a>
270                                                 </li>
271                                         </xsl:if>
272                                         <xsl:if test="count(Members/Member[MemberType='Field'])">
273                                                 <li>
274                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/F</xsl:attribute>Fields</a>
275                                                 </li>
276                                         </xsl:if>
277                                         <xsl:if test="count(Members/Member[MemberType='Property'])">
278                                                 <li>
279                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/P</xsl:attribute>Properties</a>
280                                                 </li>
281                                         </xsl:if>
282                                         <xsl:if test="count(Members/Member[MemberType='Method' and not(starts-with(@MemberName,'op_'))])">
283                                                 <li>
284                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/M</xsl:attribute>Methods</a>
285                                                 </li>
286                                         </xsl:if>
287                                         <xsl:if test="count(Members/Member[MemberType='Event'])">
288                                                 <li>
289                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/E</xsl:attribute>Events</a>
290                                                 </li>
291                                         </xsl:if>
292                                         <xsl:if test="count(Members/Member[MemberType='Method' and starts-with(@MemberName,'op_')])">
293                                                 <li>
294                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/E</xsl:attribute>Events</a>
295                                                 </li>
296                                         </xsl:if>
297                                         <xsl:if test="count(Members/Member[MemberType='ExtensionMethod'])">
298                                                 <li>
299                                                         <a><xsl:attribute name="href">T:<xsl:value-of select="$typelink"/>/X</xsl:attribute>Extension Methods</a>
300                                                 </li>
301                                         </xsl:if>
302                                 </ul>
303
304                                 <!-- list each type of member (public, then protected) -->
305
306                                 <xsl:call-template name="ListAllMembers" />
307                         </xsl:if>
308
309                         <xsl:if test="not($membertype='All')">
310                                 <!-- list the members of this type (public, then protected) -->
311
312                                 <p>
313                                         The
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.
318                                 </p>
319                                 
320                                 <xsl:if test="Base/BaseTypeName">
321                                         <p>
322                                                 <xsl:text>See Also: </xsl:text>
323                                                 <a>
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"/>
327                                                 </a>
328                                         </p>
329                                 </xsl:if>
330
331                                 <xsl:call-template name="ListMembers">
332                                         <xsl:with-param name="listmembertype" select="$membertype"/>
333                                         <xsl:with-param name="showprotected" select="false()"/>
334                                 </xsl:call-template>
335
336                                 <xsl:call-template name="ListMembers">
337                                         <xsl:with-param name="listmembertype" select="$membertype"/>
338                                         <xsl:with-param name="showprotected" select="true()"/>
339                                 </xsl:call-template>
340                         </xsl:if>
341
342                 </xsl:when>
343                 
344                 <xsl:when test="$show='overloads'">
345                                 <p>
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.
350                                 </p>
351                                 
352                                 <!-- TODO: can we make this actually test if there are any overloads
353                                 <xsl:if test="Base/BaseTypeName">
354                                         <p>
355                                                 See Also: <a>
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"/>
358                                         </p>
359                                 </xsl:if>
360                                  -->
361                                  
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()"/>
366                                 </xsl:call-template>
367
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()"/>
372                                 </xsl:call-template>
373                 </xsl:when>
374                 <!-- MEMBER DETAILS -->
375                 <xsl:when test="$show='member'">
376                         <xsl:variable name="Type" select="."/>
377
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]">
380
381                                 <!-- summary -->
382                                 
383                                 <xsl:call-template name="CreateMemberOverview">
384                                         <xsl:with-param name="implemented" select="monodoc:MonoImpInfo(string(AssemblyInfo/AssemblyName), string(@FullName), true())" />
385                                 </xsl:call-template>
386
387                                 <xsl:call-template name="CreateMemberSignature">
388                                         <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
389                                 </xsl:call-template>
390
391                                 <div class="MemberBox">
392                                         <xsl:call-template name="DisplayDocsInformation">
393                                                 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
394                                         </xsl:call-template>
395                                 </div>
396
397                         </xsl:for-each>
398
399                 </xsl:when>
400
401                 <!-- NAMESPACE SUMMARY -->
402                 <xsl:when test="$show='namespace'">
403
404                         <!-- summary -->
405
406                         <p><div class="msummary"><xsl:apply-templates select="summary" mode="notoppara"/></div>
407                                 
408                                 <xsl:if test="monodoc:MonoEditing()">
409                                         <xsl:value-of select="' '" />
410                                         [<a href="{monodoc:EditUrlNamespace (., $namespace, 'summary')}">Edit</a>]
411                                 </xsl:if>
412                         </p>
413
414                         <!-- remarks -->
415
416                         <xsl:if test="not(remarks = '')">
417                                 <h2>Remarks</h2>
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>]
423                                         </xsl:if>
424                                 </div>
425                         </xsl:if>
426                 
427                         <xsl:call-template name="namespacetypes">
428                                 <xsl:with-param name="typetype" select="'class'"/>
429                                 <xsl:with-param name="typetitle" select="'Classes'"/>
430                         </xsl:call-template>
431
432                         <xsl:call-template name="namespacetypes">
433                                 <xsl:with-param name="typetype" select="'interface'"/>
434                                 <xsl:with-param name="typetitle" select="'Interfaces'"/>
435                         </xsl:call-template>
436
437                         <xsl:call-template name="namespacetypes">
438                                 <xsl:with-param name="typetype" select="'struct'"/>
439                                 <xsl:with-param name="typetitle" select="'Structs'"/>
440                         </xsl:call-template>
441
442                         <xsl:call-template name="namespacetypes">
443                                 <xsl:with-param name="typetype" select="'delegate'"/>
444                                 <xsl:with-param name="typetitle" select="'Delegates'"/>
445                         </xsl:call-template>
446
447                         <xsl:call-template name="namespacetypes">
448                                 <xsl:with-param name="typetype" select="'enum'"/>
449                                 <xsl:with-param name="typetitle" select="'Enumerations'"/>
450                         </xsl:call-template>
451
452                         
453                 </xsl:when>
454
455                 <!-- don't know what kind of page this is -->
456                 <xsl:otherwise>
457                         Don't know what to do!
458                 </xsl:otherwise>
459
460                 </xsl:choose>
461                 </div>
462                 
463                 <!-- FOOTER -->
464                 
465                 <div class="Footer">
466                 </div>
467
468         </xsl:template>
469
470         <xsl:template name="GetLinkTarget">
471                 <xsl:param name="type" />
472                 <xsl:param name="cref" />
473
474                 <xsl:value-of select="$cref" />
475         </xsl:template>
476
477         <xsl:template name="namespacetypes">
478                 <xsl:param name="typetype"/>
479                 <xsl:param name="typetitle"/>
480
481                 <xsl:variable name="NODES" select="*[name()=$typetype]"/>
482
483                 <xsl:if test="count($NODES)">
484
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">
489                 
490                 <xsl:call-template name="CreateTypeDocumentationTable">
491                 <xsl:with-param name="content">
492                         <xsl:for-each select="$NODES">
493                                 <xsl:sort select="@name"/>
494
495                                 <tr>
496                                         <td>
497                                                 <a>
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" />
502                                                                 </xsl:call-template>
503                                                         </xsl:attribute>
504                                                         <xsl:value-of select="@name"/>
505                                                 </a>
506
507                                                 <xsl:variable name="containingtype" select="substring-before(@fullname, concat('+',@name))"/>
508                                                 <xsl:if test="$containingtype">
509                                                 <br/>(in
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>)
514                                                 </xsl:if>
515                                         </td>
516                                         <td>
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>
520                                         </td>
521                                 </tr>
522                         </xsl:for-each>
523                 </xsl:with-param>
524                 </xsl:call-template>
525                         </xsl:with-param>
526                 </xsl:call-template>
527
528                 </xsl:if>
529         </xsl:template>
530         
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>]
536                 </xsl:if>
537         </xsl:template>
538
539 </xsl:stylesheet>