Replace SIZEOF_REGISTER with sizeof(mgreg_t) for consistency with sizeof(gpointer)
[mono.git] / mcs / tools / 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                                 <i class="subtitle">Mono Class Library</i>
65
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>
107                         
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>
145
146                                         <xsl:when test="$show='namespace'">
147                                                 <xsl:value-of select="$namespace"/>
148                                                 <xsl:text> Namespace</xsl:text>
149                                         </xsl:when>
150                                         
151                                         <xsl:when test="$show='overloads'">
152                                                 <xsl:value-of select="$typename"/>.<xsl:value-of select="$index"/> Overloads
153                                         </xsl:when>
154
155                                 </xsl:choose>
156                                 </h3>
157                         </xsl:with-param>
158                 </xsl:call-template>
159
160                 <!-- SELECT WHAT TYPE OF VIEW:
161                                 typeoverview
162                                 members
163                                 member
164                                 -->
165                 <div class="Content">
166                 <xsl:choose>
167                 <xsl:when test="$show='masteroverview'">
168                 
169                         <xsl:for-each select="namespace">
170                                 <xsl:sort select="@ns"/>
171                                 
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">
177
178                                 <p>
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>
185                                         
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>
195                                 
196                                 </xsl:if>
197                         </xsl:for-each>
198                         
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>
207                         
208
209                         <!-- signature -->
210                         <xsl:call-template name="CreateTypeSignature" />
211
212                         <xsl:call-template name="DisplayDocsInformation">
213                                 <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
214                         </xsl:call-template>
215                 </xsl:when>
216
217                 <!-- MEMBER LISTING -->
218                 <xsl:when test="$show='members'">
219                         <xsl:if test="$membertype='All'">
220                                 <p>
221                                         The members of <xsl:value-of select="$typename"/> are listed below.
222                                 </p>
223
224                                 <xsl:if test="Base/BaseTypeName">
225                                         <p>
226                                                 <xsl:text>See Also: </xsl:text>
227                                                 <a>
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>
234
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>
272
273                                 <!-- list each type of member (public, then protected) -->
274
275                                 <xsl:call-template name="ListAllMembers" />
276                         </xsl:if>
277
278                         <xsl:if test="not($membertype='All')">
279                                 <!-- list the members of this type (public, then protected) -->
280
281                                 <p>
282                                         The
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>
288                                 
289                                 <xsl:if test="Base/BaseTypeName">
290                                         <p>
291                                                 <xsl:text>See Also: </xsl:text>
292                                                 <a>
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>
299
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>
304
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>
310
311                 </xsl:when>
312                 
313                 <xsl:when test="$show='overloads'">
314                                 <p>
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>
320                                 
321                                 <!-- TODO: can we make this actually test if there are any overloads
322                                 <xsl:if test="Base/BaseTypeName">
323                                         <p>
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>
329                                  -->
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:with-param name="overloads-mode" select="true()"/>
335                                 </xsl:call-template>
336
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="."/>
346
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]">
349
350                                 <!-- summary -->
351                                 
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>
355
356                                 <xsl:call-template name="CreateMemberSignature">
357                                         <xsl:with-param name="linkid" select="concat ('T:', @FullName)" />
358                                 </xsl:call-template>
359
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>
365
366                         </xsl:for-each>
367
368                 </xsl:when>
369
370                 <!-- NAMESPACE SUMMARY -->
371                 <xsl:when test="$show='namespace'">
372
373                         <!-- summary -->
374
375                         <p>
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>
382
383                         <!-- remarks -->
384
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>
395                 
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>
400
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>
405
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>
410
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>
415
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>
420
421                         
422                 </xsl:when>
423
424                 <!-- don't know what kind of page this is -->
425                 <xsl:otherwise>
426                         Don't know what to do!
427                 </xsl:otherwise>
428
429                 </xsl:choose>
430                 </div>
431                 
432                 <!-- FOOTER -->
433                 
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>
438
439         </xsl:template>
440
441         <xsl:template name="GetLinkTarget">
442                 <xsl:param name="type" />
443                 <xsl:param name="cref" />
444
445                 <xsl:value-of select="$cref" />
446         </xsl:template>
447
448         <xsl:template name="namespacetypes">
449                 <xsl:param name="typetype"/>
450                 <xsl:param name="typetitle"/>
451
452                 <xsl:variable name="NODES" select="*[name()=$typetype]"/>
453
454                 <xsl:if test="count($NODES)">
455
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">
460                 
461                 <xsl:call-template name="CreateTypeDocumentationTable">
462                 <xsl:with-param name="content">
463                         <xsl:for-each select="$NODES">
464                                 <xsl:sort select="@name"/>
465
466                                 <tr>
467                                         <td>
468                                                 <a>
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>
477
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"/>
489
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>
499
500                 </xsl:if>
501         </xsl:template>
502         
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>
510
511 </xsl:stylesheet>