526c177acb7926d8e2970185cb14430f7e8fe4d0
[mono.git] / mcs / class / Mono.C5 / current / doc / trans.xslt
1 <?xml version="1.0" ?>\r
2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\r
3   <xsl:output encoding = "ISO-8859-1"/>\r
4   <xsl:template match="/">\r
5     <xsl:apply-templates select="/Assembly/Interface" />\r
6     <xsl:apply-templates select="/Assembly/Class" />\r
7     <xsl:apply-templates select="/Assembly/Struct" />\r
8     <xsl:apply-templates select="/Assembly/Delegate" />\r
9   </xsl:template>\r
10   <xsl:template match="/Assembly/Interface">\r
11     <xsl:call-template name="file"/>\r
12   </xsl:template>\r
13   <xsl:template match="/Assembly/Class">\r
14     <xsl:call-template name="file"/>\r
15   </xsl:template>\r
16   <xsl:template match="/Assembly/Struct">\r
17     <xsl:call-template name="file"/>\r
18   </xsl:template>\r
19   <xsl:template match="/Assembly/Delegate">\r
20     <xsl:call-template name="file"/>\r
21   </xsl:template>\r
22   <xsl:template name="file">\r
23     <xsl:if test="@Access[.!='private']">\r
24       <xsl:text>&#13;&#10;</xsl:text>\r
25       <xsl:element name="filestart">\r
26         <xsl:attribute name="name">\r
27           <xsl:value-of select="substring(@refid,3)"/>\r
28           <xsl:text>.htm</xsl:text>\r
29         </xsl:attribute>\r
30       </xsl:element>\r
31       <xsl:text>&#13;&#10;</xsl:text>\r
32       <html >\r
33         <head>\r
34           <title>\r
35             <xsl:text>C5 doc: </xsl:text>\r
36             <xsl:value-of select="@Name" />\r
37           </title>\r
38           <link rel="stylesheet" type="text/css" href="../docnet.css" />\r
39         </head>\r
40         <xsl:element name="body">\r
41           <xsl:attribute name="onLoad">\r
42             <xsl:text>parent.document.title ='C5 doc: </xsl:text>\r
43             <xsl:value-of select="@Name" />\r
44             <xsl:text>'</xsl:text>\r
45           </xsl:attribute>\r
46           <h2>\r
47             <xsl:value-of select="name()"/>\r
48             <xsl:text>&#32;</xsl:text>\r
49             <xsl:call-template name="htmlname" />\r
50           </h2>\r
51           <xsl:apply-templates select="summary" />\r
52           <xsl:call-template name="typeparams" />\r
53           <xsl:call-template name="implements" />\r
54           <xsl:call-template name="implementedby" />\r
55           <xsl:call-template name="super" />\r
56           <xsl:apply-templates select="Bases" />\r
57           <xsl:call-template name="baseof" />\r
58           <xsl:call-template name="foverview" />\r
59           <xsl:call-template name="eoverview" />\r
60           <xsl:call-template name="poverview" />\r
61           <xsl:call-template name="coverview" />\r
62           <xsl:call-template name="moverview" />\r
63           <xsl:call-template name="ooverview" />\r
64           <xsl:call-template name="ftable" />\r
65           <xsl:call-template name="etable" />\r
66           <xsl:call-template name="ptable" />\r
67           <xsl:call-template name="ctable" />\r
68           <xsl:call-template name="mtable" />\r
69           <xsl:call-template name="otable" />\r
70         </xsl:element>\r
71       </html>\r
72     </xsl:if>\r
73   </xsl:template>\r
74   <xsl:template name="implements">\r
75     <xsl:for-each select="Implements">\r
76       <xsl:sort select="@refid" />\r
77       <xsl:if test="position()=1">\r
78         <h3>Implements</h3>\r
79       </xsl:if>\r
80       <xsl:call-template name="htmllink" />\r
81       <xsl:if test="position()!=last()">, </xsl:if>\r
82     </xsl:for-each>\r
83   </xsl:template>\r
84   <xsl:template name="super">\r
85     <xsl:variable name="leRefid" select="@refid" />\r
86     <xsl:for-each select="/Assembly/Interface[Implements[@refid = $leRefid ] and @Access != 'private']">\r
87       <xsl:sort select="@Name" />\r
88       <xsl:if test="position()=1">\r
89         <h3>Super</h3>\r
90       </xsl:if>\r
91       <xsl:call-template name="htmllink" />\r
92       <xsl:if test="position()!=last()">, </xsl:if>\r
93     </xsl:for-each>\r
94   </xsl:template>\r
95   <xsl:template name="implementedby">\r
96     <xsl:variable name="leRefid" select="@refid" />\r
97     <xsl:for-each select="/Assembly/Class[Implements[@refid = $leRefid ] and @Access != 'private']">\r
98       <xsl:sort select="@Name" />\r
99       <xsl:if test="position()=1">\r
100         <h3>Implemented by</h3>\r
101       </xsl:if>\r
102       <xsl:call-template name="htmllink" />\r
103       <xsl:if test="position()!=last()">, </xsl:if>\r
104     </xsl:for-each>\r
105   </xsl:template>\r
106   <xsl:template match="Bases">\r
107     <xsl:if test="position()=1">\r
108       <h3>Bases</h3>\r
109     </xsl:if>\r
110     <xsl:call-template name="htmllink" />\r
111     <xsl:if test="position()!=last()">, </xsl:if>\r
112   </xsl:template>\r
113   <xsl:template name="baseof">\r
114     <xsl:variable name="leRefid" select="@refid" />\r
115     <xsl:for-each select="/Assembly/Class[Bases[@refid = $leRefid ] and @Access != 'private']">\r
116       <xsl:sort select="@Name" />\r
117       <xsl:if test="position()=1">\r
118         <h3>Base of</h3>\r
119       </xsl:if>\r
120       <xsl:call-template name="htmllink" />\r
121       <xsl:if test="position()!=last()">, </xsl:if>\r
122     </xsl:for-each>\r
123   </xsl:template>\r
124   <xsl:template match="param">\r
125     <tr>\r
126       <td valign="top">\r
127         <!--code-->\r
128         <xsl:value-of select="@name" />\r
129         <!--/code-->\r
130         <xsl:text>:</xsl:text>\r
131       </td>\r
132       <td valign="top">\r
133         <xsl:apply-templates/>\r
134       </td>\r
135     </tr>\r
136   </xsl:template>\r
137   <xsl:template match="returns">\r
138     <xsl:if test="current()[../@ReturnType!='void']">\r
139       <tr>\r
140         <td valign="top">\r
141           <b>Returns:</b>\r
142         </td>\r
143         <td valign="top">\r
144           <xsl:apply-templates/>\r
145         </td>\r
146       </tr>\r
147     </xsl:if>\r
148   </xsl:template>\r
149   <xsl:template match="Signature">\r
150     <code>\r
151       <xsl:value-of select="." />\r
152     </code>\r
153   </xsl:template>\r
154   <xsl:template match="summary">\r
155     <xsl:apply-templates />\r
156   </xsl:template>\r
157   <xsl:template match="value">\r
158     <p>\r
159       <b>Value:</b>\r
160       <xsl:apply-templates />\r
161     </p>\r
162   </xsl:template>\r
163   <!-- templates for VS 2005 doc tags-->\r
164   <xsl:template match="exception">\r
165     <xsl:choose>\r
166       <xsl:when test="current()[name(..)='summary']">\r
167         <b>/Throws</b>\r
168         <xsl:value-of select="substring(@cref,3)" />\r
169         <xsl:apply-templates />\r
170       </xsl:when>\r
171       <xsl:otherwise>\r
172         <tr>\r
173           <td valign="top">\r
174             <xsl:variable name="leRefid" select="@cref" />\r
175             <xsl:variable name="leExcNode" select="/Assembly/Class[@refid = $leRefid  and @Access != 'private']"/>\r
176             <xsl:choose>\r
177               <xsl:when test="$leExcNode">\r
178                 <xsl:for-each select="$leExcNode">\r
179                   <xsl:call-template name="htmllink" />\r
180                 </xsl:for-each>\r
181               </xsl:when>\r
182               <xsl:otherwise>\r
183                 <xsl:value-of select="substring(@cref,3)" />\r
184               </xsl:otherwise>\r
185             </xsl:choose>\r
186           </td>\r
187           <td valign="top">\r
188             <xsl:apply-templates />\r
189           </td>\r
190         </tr>\r
191       </xsl:otherwise>\r
192     </xsl:choose>\r
193   </xsl:template>\r
194   <!--xsl:template match="code">\r
195         <code>\r
196             <xsl:apply-templates select="@* | node()" />\r
197         </code>\r
198     </xsl:template-->\r
199   <xsl:template match="item">\r
200     <li>\r
201       <xsl:apply-templates select="@* | node()" />\r
202     </li>\r
203   </xsl:template>\r
204   <!-- also do description and term tags, and other list types?-->\r
205   <xsl:template match="list">\r
206     <xsl:choose>\r
207       <xsl:when test="@type='ordered'">\r
208         <ol>\r
209           <xsl:apply-templates select="@* | node()" />\r
210         </ol>\r
211       </xsl:when>\r
212       <xsl:otherwise>\r
213         <ul>\r
214           <xsl:apply-templates select="@* | node()" />\r
215         </ul>\r
216       </xsl:otherwise>\r
217     </xsl:choose>\r
218   </xsl:template>\r
219   <xsl:template match="para">\r
220     <p>\r
221       <xsl:apply-templates select="@* | node()" />\r
222     </p>\r
223   </xsl:template>\r
224   <xsl:template match="seealso">\r
225     <xsl:text>See also</xsl:text>\r
226     <xsl:variable name="leRefid" select="@cref" />\r
227     <xsl:variable name="leNode" select="//*[@refid=$leRefid]" />\r
228     <xsl:variable name="leFile" select="substring(ancestor::*[@refid and not(@Declared)]/@refid,3)" />\r
229     <xsl:choose>\r
230       <xsl:when test ="substring(@cref,1,2) = 'T:'">\r
231         <xsl:element name="a">\r
232           <xsl:attribute name="href">\r
233             <xsl:value-of select="substring(@cref,3)" />\r
234             <xsl:text>.htm</xsl:text>\r
235           </xsl:attribute>\r
236           <xsl:value-of select="$leNode/Signature" />\r
237         </xsl:element>\r
238       </xsl:when>\r
239       <xsl:when test="$leNode/@CDeclared=$leFile">\r
240         <xsl:element name="a">\r
241           <xsl:attribute name="href">\r
242             #<xsl:value-of select="@cref" />\r
243           </xsl:attribute>\r
244           <xsl:value-of select="$leNode/Signature" />\r
245         </xsl:element>\r
246       </xsl:when>\r
247       <xsl:otherwise>\r
248         <xsl:element name="a">\r
249           <xsl:attribute name="href">\r
250             <xsl:value-of select="$leNode/@CDeclared" />.htm#<xsl:value-of select="@cref" />\r
251           </xsl:attribute>\r
252           <xsl:value-of select="$leNode/@Declared" />.<xsl:value-of select="$leNode/Signature" />\r
253         </xsl:element>\r
254       </xsl:otherwise>\r
255     </xsl:choose>\r
256   </xsl:template>\r
257   <xsl:template match="see">\r
258     <!--xsl:text>See </xsl:text-->\r
259     <xsl:variable name="leRefid" select="@cref" />\r
260     <xsl:variable name="leNode" select="//*[@refid=$leRefid]" />\r
261     <xsl:variable name="leFile" select="substring(ancestor::*[@refid and not(@Declared)]/@refid,3)" />\r
262     <xsl:choose>\r
263       <xsl:when test ="substring(@cref,1,2) = 'T:'">\r
264         <xsl:element name="a">\r
265           <xsl:attribute name="href">\r
266             <xsl:value-of select="substring(@cref,3)" />\r
267             <xsl:text>.htm</xsl:text>\r
268           </xsl:attribute>\r
269           <xsl:value-of select="$leNode/Signature" />\r
270         </xsl:element>\r
271       </xsl:when>\r
272       <xsl:when test="$leNode/@CDeclared=$leFile">\r
273         <xsl:element name="a">\r
274           <xsl:attribute name="href">\r
275             <xsl:text>#</xsl:text>\r
276             <xsl:value-of select="@cref" />\r
277           </xsl:attribute>\r
278           <xsl:value-of select="$leNode/Signature" />\r
279         </xsl:element>\r
280       </xsl:when>\r
281       <xsl:otherwise>\r
282         <xsl:element name="a">\r
283           <xsl:attribute name="href">\r
284             <xsl:value-of select="$leNode/@CDeclared" />.htm#<xsl:value-of select="@cref" />\r
285           </xsl:attribute>\r
286           <xsl:value-of select="$leNode/@Declared" />.<xsl:value-of select="$leNode/Signature" />\r
287         </xsl:element>\r
288       </xsl:otherwise>\r
289     </xsl:choose>\r
290   </xsl:template>\r
291   <xsl:template match="typeparam">\r
292     <tr>\r
293       <td valign="top">\r
294         <xsl:value-of select="@name" />\r
295       </td>\r
296       <td valign="top">\r
297         <xsl:apply-templates />\r
298       </td>\r
299     </tr>\r
300   </xsl:template>\r
301   <xsl:template match="constraint">\r
302     <tr>\r
303       <td valign="top"></td>\r
304       <td valign="top">\r
305         <xsl:value-of select="@Value" />\r
306       </td>\r
307     </tr>\r
308   </xsl:template>\r
309   <xsl:template match="@* | node()">\r
310     <xsl:copy>\r
311       <xsl:apply-templates select="@* | node()" />\r
312     </xsl:copy>\r
313   </xsl:template>\r
314   <!-- end templates for VS 2005 doc tags -->\r
315   <xsl:template name="typeparams">\r
316     <xsl:if test="typeparam">\r
317       <table>\r
318         <tr>\r
319           <td>\r
320             <b>Type parameters:</b>\r
321           </td>\r
322           <td></td>\r
323         </tr>\r
324         <xsl:apply-templates select="typeparam"/>\r
325         <xsl:if test="constraint">\r
326           <tr>\r
327             <td>\r
328               <b>Constraints:</b>\r
329             </td>\r
330             <td></td>\r
331           </tr>\r
332           <xsl:apply-templates select="constraint"/>\r
333         </xsl:if>\r
334       </table>\r
335     </xsl:if>\r
336   </xsl:template>\r
337   <xsl:template name="htmllink">\r
338     <xsl:choose>\r
339       <xsl:when test="@C5">\r
340         <xsl:element name="a">\r
341           <xsl:attribute name="href">\r
342             <xsl:choose>\r
343               <xsl:when test ="substring(@refid,1,2) = 'T:'">\r
344                 <xsl:value-of select="substring(@refid,3)" />\r
345                 <xsl:text>.htm</xsl:text>\r
346               </xsl:when>\r
347               <xsl:otherwise>\r
348                 <xsl:value-of select="@CDeclared"/>.htm#<xsl:value-of select="@refid" />\r
349               </xsl:otherwise>\r
350             </xsl:choose>\r
351           </xsl:attribute>\r
352           <xsl:apply-templates select="Signature" />\r
353         </xsl:element>\r
354       </xsl:when>\r
355       <xsl:otherwise>\r
356         <xsl:apply-templates select="Signature" />\r
357       </xsl:otherwise>\r
358     </xsl:choose>\r
359   </xsl:template>\r
360   <xsl:template name="locallink">\r
361     <xsl:choose>\r
362       <xsl:when test="@refid">\r
363         <xsl:element name="a">\r
364           <xsl:attribute name="href">\r
365             <xsl:text>#</xsl:text>\r
366             <xsl:value-of select="concat(../@refid , '|',@refid)" />\r
367           </xsl:attribute>\r
368           <xsl:apply-templates select="Signature" />\r
369         </xsl:element>\r
370       </xsl:when>\r
371       <xsl:otherwise>\r
372         <xsl:apply-templates select="Signature" />\r
373       </xsl:otherwise>\r
374     </xsl:choose>\r
375   </xsl:template>\r
376   <xsl:template name="htmlname">\r
377     <xsl:choose>\r
378       <xsl:when test="@refid">\r
379         <xsl:choose>\r
380           <xsl:when test ="not(@Declared)">\r
381             <!-- i.e. a type -->\r
382             <xsl:element name="a">\r
383               <xsl:attribute name="name">\r
384                 <xsl:value-of select="@refid" />\r
385               </xsl:attribute>\r
386               <xsl:apply-templates select="Signature" />\r
387             </xsl:element>\r
388           </xsl:when>\r
389           <xsl:otherwise>\r
390             <!-- i.e. a member -->\r
391             <xsl:element name="a">\r
392               <xsl:attribute name="name">\r
393                 <xsl:value-of select="concat(../@refid , '|',@refid)" />\r
394               </xsl:attribute>\r
395               <xsl:apply-templates select="Signature" />\r
396             </xsl:element>\r
397             <xsl:if test ="not(@Inherited)">\r
398               <!-- the canonical description -->\r
399               <xsl:element name="a">\r
400                 <xsl:attribute name="name">\r
401                   <xsl:value-of select="@refid" />\r
402                 </xsl:attribute>\r
403               </xsl:element>\r
404             </xsl:if>\r
405           </xsl:otherwise>\r
406         </xsl:choose>\r
407       </xsl:when>\r
408       <xsl:otherwise>\r
409         <xsl:apply-templates select="Signature" />\r
410       </xsl:otherwise>\r
411     </xsl:choose>\r
412   </xsl:template>\r
413   <xsl:template name="ftable">\r
414     <xsl:call-template name="table">\r
415       <xsl:with-param name="type">Field</xsl:with-param>\r
416     </xsl:call-template>\r
417   </xsl:template>\r
418   <xsl:template name="etable">\r
419     <xsl:call-template name="table">\r
420       <xsl:with-param name="type">Event</xsl:with-param>\r
421     </xsl:call-template>\r
422   </xsl:template>\r
423   <xsl:template name="ptable">\r
424     <xsl:call-template name="table">\r
425       <xsl:with-param name="type">Property</xsl:with-param>\r
426     </xsl:call-template>\r
427   </xsl:template>\r
428   <xsl:template name="ctable">\r
429     <xsl:call-template name="table">\r
430       <xsl:with-param name="type">Constructor</xsl:with-param>\r
431     </xsl:call-template>\r
432   </xsl:template>\r
433   <xsl:template name="mtable">\r
434     <xsl:call-template name="table">\r
435       <xsl:with-param name="type" select="'Method'"/>\r
436     </xsl:call-template>\r
437   </xsl:template>\r
438   <xsl:template name="otable">\r
439     <xsl:call-template name="table">\r
440       <xsl:with-param name="type" select="'Operator'"/>\r
441     </xsl:call-template>\r
442   </xsl:template>\r
443   <xsl:template name="table">\r
444     <xsl:param name="type" />\r
445     <xsl:param name="protection" />\r
446     <xsl:variable name="thenodes" select="*[name() = $type and @Access != 'private' and not(@Inherited)]" />\r
447     <xsl:if test="$thenodes">\r
448       <h3>\r
449         <xsl:value-of select="$type" />\r
450         <xsl:text> details</xsl:text>\r
451       </h3>\r
452       <table border="1">\r
453         <xsl:for-each select="$thenodes">\r
454           <xsl:sort select="@Name" />\r
455           <tr>\r
456             <td valign="top">\r
457               <xsl:if test="current()[@Virtual != 'True' and @Static != 'True']">\r
458                 <code class="greenbg">N</code>\r
459               </xsl:if>\r
460               <xsl:if test="current()[@Final = 'True' and @Static != 'True']">\r
461                 <code class="greenbg">F</code>\r
462               </xsl:if>\r
463               <xsl:if test="current()[@Abstract = 'True']">\r
464                 <code class="greenbg">A</code>\r
465               </xsl:if>\r
466               <xsl:if test="current()[@Static = 'True']">\r
467                 <code class="greenbg">S</code>\r
468               </xsl:if>\r
469               <xsl:if test="current()[@Access = 'protected']">\r
470                 <code class="greenbg">P</code>\r
471               </xsl:if>\r
472               <code>\r
473                 <xsl:text>&#32;</xsl:text>\r
474                 <xsl:choose>\r
475                   <xsl:when test="@ReturnType">\r
476                     <xsl:value-of select="@ReturnType"/>\r
477                   </xsl:when>\r
478                   <xsl:otherwise>\r
479                     <xsl:value-of select="@Type"/>\r
480                   </xsl:otherwise>\r
481                 </xsl:choose>\r
482                 <xsl:text>&#32;</xsl:text>\r
483               </code>\r
484               <xsl:call-template name="htmlname" />\r
485             </td>\r
486             <td>\r
487               <!--xsl:if test="@Inherited">\r
488                                 <xsl:text>Inherited from </xsl:text>\r
489                                 <xsl:value-of select="@Declared"/>\r
490                                 <xsl:text>: </xsl:text>\r
491                                 <xsl:call-template name="htmllink" />\r
492                             </xsl:if-->\r
493               <xsl:if test="not(@Inherited)">\r
494                 <xsl:if test="@Get">\r
495                   <b>Access: </b>\r
496                   <xsl:if test="@Get='True' and @Set='True'">Read-Write</xsl:if>\r
497                   <xsl:if test="@Get='True' and @Set='False'">Read-Only</xsl:if>\r
498                   <xsl:if test="@Get='False' and @Set='True'">Write-Only</xsl:if>\r
499                   <br/>\r
500                 </xsl:if>\r
501                 <xsl:apply-templates select="value" />\r
502                 <xsl:apply-templates select="summary" />\r
503                 <xsl:if test="exception">\r
504                   <table>\r
505                     <tr>\r
506                       <td>\r
507                         <b>Throws</b>\r
508                       </td>\r
509                       <td></td>\r
510                     </tr>\r
511                     <xsl:apply-templates select="exception" />\r
512                   </table>\r
513                 </xsl:if>\r
514                 <xsl:call-template name="typeparams"/>\r
515                 <xsl:if test="current()[@ReturnType != 'void'] or param">\r
516                   <table>\r
517                     <xsl:apply-templates select="returns" />\r
518                     <xsl:if test="param">\r
519                       <tr>\r
520                         <td>\r
521                           <b>Parameters:</b>\r
522                         </td>\r
523                       </tr>\r
524                       <xsl:apply-templates select="param" />\r
525                     </xsl:if>\r
526                   </table>\r
527                 </xsl:if>\r
528               </xsl:if>\r
529             </td>\r
530           </tr>\r
531         </xsl:for-each>\r
532       </table>\r
533     </xsl:if>\r
534   </xsl:template>\r
535   <xsl:template name="foverview">\r
536     <xsl:call-template name="overview">\r
537       <xsl:with-param name="type">Field</xsl:with-param>\r
538     </xsl:call-template>\r
539   </xsl:template>\r
540   <xsl:template name="eoverview">\r
541     <xsl:call-template name="overview">\r
542       <xsl:with-param name="type">Event</xsl:with-param>\r
543     </xsl:call-template>\r
544   </xsl:template>\r
545   <xsl:template name="poverview">\r
546     <xsl:call-template name="overview">\r
547       <xsl:with-param name="type">Property</xsl:with-param>\r
548     </xsl:call-template>\r
549   </xsl:template>\r
550   <xsl:template name="coverview">\r
551     <xsl:call-template name="overview">\r
552       <xsl:with-param name="type">Constructor</xsl:with-param>\r
553     </xsl:call-template>\r
554   </xsl:template>\r
555   <xsl:template name="moverview">\r
556     <xsl:call-template name="overview">\r
557       <xsl:with-param name="type">Method</xsl:with-param>\r
558     </xsl:call-template>\r
559   </xsl:template>\r
560   <xsl:template name="ooverview">\r
561     <xsl:call-template name="overview">\r
562       <xsl:with-param name="type">Operator</xsl:with-param>\r
563     </xsl:call-template>\r
564   </xsl:template>\r
565   <xsl:template name="overview">\r
566     <xsl:param name="type" select="'[Unknown Locale]'" />\r
567     <xsl:for-each select="*[name() = $type and @Access != 'private']">\r
568       <xsl:sort select="@Name" />\r
569       <xsl:if test="position() = 1">\r
570         <h3>\r
571           <xsl:value-of select="$type" />\r
572           <xsl:text> overview</xsl:text>\r
573         </h3>\r
574       </xsl:if>\r
575       <xsl:choose>\r
576         <xsl:when test="@Inherited">\r
577           <xsl:call-template name="htmllink" />\r
578           <xsl:text>, </xsl:text>\r
579           <xsl:text>Inherited from </xsl:text>\r
580           <xsl:value-of select="@Declared"/>\r
581         </xsl:when>\r
582         <xsl:otherwise>\r
583           <xsl:call-template name="locallink" />\r
584         </xsl:otherwise>\r
585       </xsl:choose>\r
586       <xsl:if test="position()!=last()">\r
587         ,<br/>\r
588       </xsl:if>\r
589     </xsl:for-each>\r
590   </xsl:template>\r
591 </xsl:stylesheet>\r