VirtualBox

source: vbox/trunk/src/VBox/Main/idl/doxygen.xsl@ 96324

Last change on this file since 96324 was 96308, checked in by vboxsync, 3 years ago

src/VBox/Main: XML/XSL comment fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.5 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4 * A template to generate a generic IDL file from the generic interface
5 * definition expressed in XML. The generated file is intended solely to
6 * generate the documentation using Doxygen.
7-->
8<!--
9 Copyright (C) 2006-2020 Oracle Corporation
10
11 This file is part of VirtualBox Open Source Edition (OSE), as
12 available from http://www.215389.xyz. This file is free software;
13 you can redistribute it and/or modify it under the terms of the GNU
14 General Public License (GPL) as published by the Free Software
15 Foundation, in version 2 as it comes in the "COPYING" file of the
16 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18-->
19
20<xsl:stylesheet
21 version="1.0"
22 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
23 xmlns:str="http://xsltsl.org/string"
24 exclude-result-prefixes="str"
25>
26<!-- The exclude-result-prefixes attribute is needed since otherwise the <tt>
27 tag added for the ID in interface and enum descriptions would get the
28 namespace, confusing doxygen completely. -->
29
30<xsl:import href="string.xsl"/>
31
32<xsl:output method="html" indent="yes"/>
33
34<xsl:strip-space elements="*"/>
35
36
37<!--
38// Doxygen transformation rules
39/////////////////////////////////////////////////////////////////////////////
40-->
41
42<!--
43 * all text elements that are not explicitly matched are normalized
44 * (all whitespace chars are converted to single spaces)
45-->
46<!--xsl:template match="desc//text()">
47 <xsl:value-of select="concat(' ',normalize-space(.),' ')"/>
48</xsl:template-->
49
50<!--
51 * all elements that are not explicitly matched are considered to be html tags
52 * and copied w/o modifications
53-->
54<xsl:template match="desc//*">
55 <xsl:copy>
56 <xsl:apply-templates/>
57 </xsl:copy>
58</xsl:template>
59
60<!--
61 * special treatment of <tt>, making sure that Doxygen will not interpret its
62 * contents (assuming it is a leaf tag)
63-->
64<xsl:template match="desc//tt/text()">
65 <xsl:variable name="subst1">
66 <xsl:call-template name="str:subst">
67 <xsl:with-param name="text" select="." />
68 <xsl:with-param name="replace" select="'::'" />
69 <xsl:with-param name="with" select="'\::'" />
70 </xsl:call-template>
71 </xsl:variable>
72 <xsl:value-of select="$subst1"/>
73</xsl:template>
74
75<!--
76 * same like desc//* but place <ol> at start of line otherwise Doxygen will not
77 * find it
78-->
79<xsl:template match="desc//ol">
80 <xsl:text>&#x0A;</xsl:text>
81 <xsl:copy>
82 <xsl:apply-templates/>
83 </xsl:copy>
84</xsl:template>
85
86<!--
87 * same like desc//* but place <ul> at start of line otherwise Doxygen will not
88 * find it
89-->
90<xsl:template match="desc//ul">
91 <xsl:text>&#x0A;</xsl:text>
92 <xsl:copy>
93 <xsl:apply-templates/>
94 </xsl:copy>
95</xsl:template>
96
97<!--
98 * same like desc//* but place <pre> at start of line otherwise Doxygen will not
99 * find it
100-->
101<xsl:template match="desc//pre">
102 <xsl:text>&#x0A;</xsl:text>
103 <xsl:copy>
104 <xsl:apply-templates/>
105 </xsl:copy>
106</xsl:template>
107
108<!--
109 * paragraph
110-->
111<xsl:template match="desc//p">
112 <xsl:text>&#x0A;</xsl:text>
113 <xsl:apply-templates/>
114 <xsl:text>&#x0A;</xsl:text>
115</xsl:template>
116
117<!--
118 * link
119-->
120<xsl:template match="desc//link">
121 <xsl:text>@link </xsl:text>
122 <!--
123 * sometimes Doxygen is stupid and cannot resolve global enums properly,
124 * thinking they are members of the current class. Fix it by adding ::
125 * in front of any @to value that doesn't start with #.
126 -->
127 <xsl:choose>
128 <xsl:when test="not(starts-with(@to, '#')) and not(contains(@to, '::'))">
129 <xsl:text>::</xsl:text>
130 </xsl:when>
131 </xsl:choose>
132 <!--
133 * Doxygen doesn't understand autolinks like Class::func() if Class
134 * doesn't actually contain a func with no arguments. Fix it.
135 -->
136 <xsl:choose>
137 <xsl:when test="substring(@to, string-length(@to)-1)='()'">
138 <xsl:value-of select="substring-before(@to, '()')"/>
139 </xsl:when>
140 <xsl:otherwise>
141 <xsl:value-of select="@to"/>
142 </xsl:otherwise>
143 </xsl:choose>
144 <xsl:text> </xsl:text>
145 <xsl:choose>
146 <xsl:when test="normalize-space(text())">
147 <xsl:value-of select="normalize-space(text())"/>
148 </xsl:when>
149 <xsl:otherwise>
150 <xsl:choose>
151 <xsl:when test="starts-with(@to, '#')">
152 <xsl:value-of select="substring-after(@to, '#')"/>
153 </xsl:when>
154 <xsl:when test="starts-with(@to, '::')">
155 <xsl:value-of select="substring-after(@to, '::')"/>
156 </xsl:when>
157 <xsl:otherwise>
158 <xsl:value-of select="@to"/>
159 </xsl:otherwise>
160 </xsl:choose>
161 </xsl:otherwise>
162 </xsl:choose>
163 <xsl:text>@endlink</xsl:text>
164 <!--
165 * insert a dummy empty B element to distinctly separate @endlink
166 * from the following text
167 -->
168 <xsl:element name="b"/>
169</xsl:template>
170
171<!--
172 * note
173-->
174<xsl:template match="desc/note">
175 <xsl:if test="not(@internal='yes')">
176 <xsl:text>&#x0A;@note </xsl:text>
177 <xsl:apply-templates/>
178 <xsl:text>&#x0A;</xsl:text>
179 </xsl:if>
180</xsl:template>
181
182<!--
183 * see
184-->
185<xsl:template match="desc/see">
186 <xsl:text>&#x0A;@see </xsl:text>
187 <xsl:apply-templates/>
188 <xsl:text>&#x0A;</xsl:text>
189</xsl:template>
190
191
192<!--
193 * common comment prologue (handles group IDs)
194-->
195<xsl:template match="desc" mode="begin">
196 <xsl:param name="id" select="@group | preceding::descGroup[1]/@id"/>
197 <xsl:text>/**&#x0A;</xsl:text>
198 <xsl:if test="$id">
199 <xsl:value-of select="concat(' @ingroup ',$id,'&#x0A;')"/>
200 </xsl:if>
201</xsl:template>
202
203<!--
204 * common brief comment prologue (handles group IDs)
205-->
206<xsl:template match="desc" mode="begin_brief">
207 <xsl:param name="id" select="@group | preceding::descGroup[1]/@id"/>
208 <xsl:text>/**&#x0A;</xsl:text>
209 <xsl:if test="$id">
210 <xsl:value-of select="concat(' @ingroup ',$id,'&#x0A;')"/>
211 </xsl:if>
212 <xsl:text> @brief&#x0A;</xsl:text>
213</xsl:template>
214
215<!--
216 * common middle part of the comment block
217-->
218<xsl:template match="desc" mode="middle">
219 <xsl:apply-templates select="text() | *[not(self::note or self::see)]"/>
220 <xsl:apply-templates select="note"/>
221 <xsl:apply-templates select="see"/>
222</xsl:template>
223
224<!--
225 * result part of the comment block
226-->
227<xsl:template match="desc" mode="results">
228 <xsl:if test="result">
229 <xsl:text>
230@par Expected result codes:
231 </xsl:text>
232 <table>
233 <xsl:for-each select="result">
234 <tr>
235 <xsl:choose>
236 <xsl:when test="ancestor::library/result[@name=current()/@name]">
237 <td><xsl:value-of select=
238 "concat('@link ::',@name,' ',@name,' @endlink')"/></td>
239 </xsl:when>
240 <xsl:otherwise>
241 <td><xsl:value-of select="@name"/></td>
242 </xsl:otherwise>
243 </xsl:choose>
244 <td>
245 <xsl:apply-templates select="text() | *[not(self::note or self::see or
246 self::result)]"/>
247 </td>
248 </tr>
249 </xsl:for-each>
250 </table>
251 </xsl:if>
252</xsl:template>
253
254
255<!--
256 * comment for interfaces
257-->
258<xsl:template match="interface/desc">
259 <xsl:apply-templates select="." mode="begin"/>
260 <xsl:apply-templates select="." mode="middle"/>
261@par Interface ID:
262<tt>{<xsl:call-template name="str:to-upper">
263 <xsl:with-param name="text" select="../@uuid"/>
264 </xsl:call-template>}</tt>
265 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
266</xsl:template>
267
268<!--
269 * comment for attributes
270-->
271<xsl:template match="attribute/desc">
272 <xsl:apply-templates select="." mode="begin"/>
273 <xsl:apply-templates select="text() | *[not(self::note or self::see or self::result)]"/>
274 <xsl:apply-templates select="." mode="results"/>
275 <xsl:apply-templates select="note"/>
276 <xsl:if test="../@mod='ptr'">
277 <xsl:text>
278
279@warning This attribute is non-scriptable. In particular, this also means that an
280attempt to get or set it from a process other than the process that has created and
281owns the object will most likely fail or crash your application.
282</xsl:text>
283 </xsl:if>
284 <xsl:apply-templates select="see"/>
285 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
286</xsl:template>
287
288<!--
289 * comment for methods
290-->
291<xsl:template match="method/desc">
292 <xsl:apply-templates select="." mode="begin"/>
293 <xsl:apply-templates select="text() | *[not(self::note or self::see or self::result)]"/>
294 <xsl:for-each select="../param">
295 <xsl:apply-templates select="desc"/>
296 </xsl:for-each>
297 <xsl:apply-templates select="." mode="results"/>
298 <xsl:apply-templates select="note"/>
299 <xsl:apply-templates select="../param/desc/note"/>
300 <xsl:if test="../param/@mod='ptr'">
301 <xsl:text>
302
303@warning This method is non-scriptable. In particular, this also means that an
304attempt to call it from a process other than the process that has created and
305owns the object will most likely fail or crash your application.
306</xsl:text>
307 </xsl:if>
308 <xsl:apply-templates select="see"/>
309 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
310</xsl:template>
311
312<!--
313 * comment for method parameters
314-->
315<xsl:template match="method/param/desc">
316 <xsl:text>&#x0A;@param </xsl:text>
317 <xsl:value-of select="../@name"/>
318 <xsl:text> </xsl:text>
319 <xsl:apply-templates select="text() | *[not(self::note or self::see)]"/>
320 <xsl:text>&#x0A;</xsl:text>
321</xsl:template>
322
323<!--
324 * comment for enums
325-->
326<xsl:template match="enum/desc">
327 <xsl:apply-templates select="." mode="begin"/>
328 <xsl:apply-templates select="." mode="middle"/>
329@par Interface ID:
330<tt>{<xsl:call-template name="str:to-upper">
331 <xsl:with-param name="text" select="../@uuid"/>
332 </xsl:call-template>}</tt>
333 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
334</xsl:template>
335
336<!--
337 * comment for enum values
338-->
339<xsl:template match="enum/const/desc">
340 <xsl:apply-templates select="." mode="begin_brief"/>
341 <xsl:apply-templates select="." mode="middle"/>
342 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
343</xsl:template>
344
345<!--
346 * comment for result codes
347-->
348<xsl:template match="result/desc">
349 <xsl:apply-templates select="." mode="begin_brief"/>
350 <xsl:apply-templates select="." mode="middle"/>
351 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
352</xsl:template>
353
354<!--
355 * ignore descGroups by default (processed in /idl)
356-->
357<xsl:template match="descGroup"/>
358
359<!--
360// templates
361/////////////////////////////////////////////////////////////////////////////
362-->
363
364
365<!--
366 * header
367-->
368<xsl:template match="/idl">
369/*
370 * DO NOT EDIT! This is a generated file.
371 *
372 * Doxygen IDL definition for VirtualBox Main API (COM interfaces)
373 * generated from XIDL (XML interface definition).
374 *
375 * Source : src/VBox/Main/idl/VirtualBox.xidl
376 * Generator : src/VBox/Main/idl/doxygen.xsl
377 *
378 * This IDL is generated using some generic OMG IDL-like syntax SOLELY
379 * for the purpose of generating the documentation using Doxygen and
380 * is not syntactically valid.
381 *
382 * DO NOT USE THIS HEADER IN ANY OTHER WAY!
383 */
384
385 <!-- general description -->
386 <xsl:text>/** @mainpage &#x0A;</xsl:text>
387 <xsl:apply-templates select="desc" mode="middle"/>
388 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
389
390 <!-- group (module) definitions -->
391 <xsl:for-each select="//descGroup">
392 <xsl:if test="@id and (@title or desc)">
393 <xsl:value-of select="concat('/** @defgroup ',@id,' ',@title)"/>
394 <xsl:apply-templates select="desc" mode="middle"/>
395 <xsl:text>&#x0A;*/&#x0A;</xsl:text>
396 </xsl:if>
397 </xsl:for-each>
398
399 <!-- everything else -->
400 <xsl:apply-templates select="*[not(self::desc)]"/>
401
402</xsl:template>
403
404
405<!--
406 * accept all <if>s
407-->
408<xsl:template match="if">
409 <xsl:apply-templates/>
410</xsl:template>
411
412
413<!--
414 * cpp_quote (ignore)
415-->
416<xsl:template match="cpp">
417</xsl:template>
418
419
420<!--
421 * #ifdef statement (@if attribute)
422-->
423<xsl:template match="@if" mode="begin">
424 <xsl:text>#if </xsl:text>
425 <xsl:value-of select="."/>
426 <xsl:text>&#x0A;</xsl:text>
427</xsl:template>
428<xsl:template match="@if" mode="end">
429 <xsl:text>#endif&#x0A;</xsl:text>
430</xsl:template>
431
432
433<!--
434 * libraries
435-->
436<xsl:template match="application">
437 <!-- result codes -->
438 <xsl:for-each select="result">
439 <xsl:apply-templates select="."/>
440 </xsl:for-each>
441 <!-- all enums go first -->
442 <xsl:apply-templates select="enum | if/enum"/>
443 <!-- everything else but result codes and enums -->
444 <xsl:apply-templates select="*[not(self::result or self::enum) and
445 not(self::if[result] or self::if[enum])]"/>
446</xsl:template>
447
448
449<!--
450 * result codes
451-->
452<xsl:template match="application//result">
453 <xsl:apply-templates select="@if" mode="begin"/>
454 <xsl:apply-templates select="desc"/>
455 <xsl:value-of select="concat('const HRESULT ',@name,' = ',@value,';')"/>
456 <xsl:text>&#x0A;</xsl:text>
457 <xsl:apply-templates select="@if" mode="end"/>
458</xsl:template>
459
460
461<!--
462 * interfaces
463-->
464<xsl:template match="interface">
465 <xsl:apply-templates select="desc"/>
466 <xsl:text>interface </xsl:text>
467 <xsl:value-of select="@name"/>
468 <xsl:text> : </xsl:text>
469 <xsl:value-of select="@extends"/>
470 <xsl:text>&#x0A;{&#x0A;</xsl:text>
471 <!-- attributes (properties) -->
472 <xsl:apply-templates select="attribute"/>
473 <!-- methods -->
474 <xsl:apply-templates select="method"/>
475 <!-- 'if' enclosed elements, unsorted -->
476 <xsl:apply-templates select="if"/>
477 <!-- -->
478 <xsl:text>}; /* interface </xsl:text>
479 <xsl:value-of select="@name"/>
480 <xsl:text> */&#x0A;&#x0A;</xsl:text>
481</xsl:template>
482
483
484<!--
485 * attributes
486-->
487<xsl:template match="interface//attribute">
488 <xsl:apply-templates select="@if" mode="begin"/>
489 <xsl:apply-templates select="desc"/>
490 <xsl:text> </xsl:text>
491 <xsl:if test="@readonly='yes'">
492 <xsl:text>readonly </xsl:text>
493 </xsl:if>
494 <xsl:text>attribute </xsl:text>
495 <xsl:apply-templates select="@type"/>
496 <xsl:text> </xsl:text>
497 <xsl:value-of select="@name"/>
498 <xsl:text>;&#x0A;</xsl:text>
499 <xsl:apply-templates select="@if" mode="end"/>
500 <xsl:text>&#x0A;</xsl:text>
501</xsl:template>
502
503<!--
504 * methods
505-->
506<xsl:template match="interface//method">
507 <xsl:apply-templates select="@if" mode="begin"/>
508 <xsl:apply-templates select="desc"/>
509 <xsl:text> void </xsl:text>
510 <xsl:value-of select="@name"/>
511 <xsl:if test="param">
512 <xsl:text> (&#x0A;</xsl:text>
513 <xsl:for-each select="param [position() != last()]">
514 <xsl:text> </xsl:text>
515 <xsl:apply-templates select="."/>
516 <xsl:text>,&#x0A;</xsl:text>
517 </xsl:for-each>
518 <xsl:text> </xsl:text>
519 <xsl:apply-templates select="param [last()]"/>
520 <xsl:text>&#x0A; );&#x0A;</xsl:text>
521 </xsl:if>
522 <xsl:if test="not(param)">
523 <xsl:text>();&#x0A;</xsl:text>
524 </xsl:if>
525 <xsl:apply-templates select="@if" mode="end"/>
526 <xsl:text>&#x0A;</xsl:text>
527</xsl:template>
528
529
530<!--
531 * co-classes
532-->
533<xsl:template match="module/class">
534 <!-- class and contract id: later -->
535 <!-- CLSID_xxx declarations for XPCOM, for compatibility with Win32: later -->
536</xsl:template>
537
538
539<!--
540 * enums
541-->
542<xsl:template match="enum">
543 <xsl:apply-templates select="desc"/>
544 <xsl:text>enum </xsl:text>
545 <xsl:value-of select="@name"/>
546 <xsl:text>&#x0A;{&#x0A;</xsl:text>
547 <xsl:for-each select="const">
548 <xsl:apply-templates select="desc"/>
549 <xsl:text> </xsl:text>
550 <xsl:value-of select="../@name"/>
551 <xsl:text>_</xsl:text>
552 <xsl:value-of select="@name"/> = <xsl:value-of select="@value"/>
553 <xsl:text>,&#x0A;</xsl:text>
554 </xsl:for-each>
555 <xsl:text>};&#x0A;&#x0A;</xsl:text>
556</xsl:template>
557
558
559<!--
560 * method parameters
561-->
562<xsl:template match="method/param">
563 <xsl:choose>
564 <xsl:when test="@dir='in'">in </xsl:when>
565 <xsl:when test="@dir='out'">out </xsl:when>
566 <xsl:when test="@dir='return'">[retval] out </xsl:when>
567 <xsl:otherwise>in</xsl:otherwise>
568 </xsl:choose>
569 <xsl:apply-templates select="@type"/>
570 <xsl:text> </xsl:text>
571 <xsl:value-of select="@name"/>
572</xsl:template>
573
574
575<!--
576 * attribute/parameter type conversion
577-->
578<xsl:template match="attribute/@type | param/@type">
579 <xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
580
581 <xsl:choose>
582 <!-- modifiers (ignored for 'enumeration' attributes)-->
583 <xsl:when test="name(current())='type' and ../@mod">
584 <xsl:choose>
585 <xsl:when test="../@mod='ptr'">
586 <xsl:choose>
587 <!-- standard types -->
588 <!--xsl:when test=".='result'">??</xsl:when-->
589 <xsl:when test=".='boolean'">booleanPtr</xsl:when>
590 <xsl:when test=".='octet'">octetPtr</xsl:when>
591 <xsl:when test=".='short'">shortPtr</xsl:when>
592 <xsl:when test=".='unsigned short'">ushortPtr</xsl:when>
593 <xsl:when test=".='long'">longPtr</xsl:when>
594 <xsl:when test=".='long long'">llongPtr</xsl:when>
595 <xsl:when test=".='unsigned long'">ulongPtr</xsl:when>
596 <xsl:when test=".='unsigned long long'">ullongPtr</xsl:when>
597 <xsl:otherwise>
598 <xsl:message terminate="yes">
599 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
600 <xsl:text>attribute 'mod=</xsl:text>
601 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
602 <xsl:text>' cannot be used with type </xsl:text>
603 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
604 </xsl:message>
605 </xsl:otherwise>
606 </xsl:choose>
607 </xsl:when>
608 <xsl:when test="../@mod='string'">
609 <xsl:choose>
610 <!-- standard types -->
611 <!--xsl:when test=".='result'">??</xsl:when-->
612 <xsl:when test=".='uuid'">wstringUUID</xsl:when>
613 <xsl:otherwise>
614 <xsl:message terminate="yes">
615 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
616 <xsl:text>attribute 'mod=</xsl:text>
617 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
618 <xsl:text>' cannot be used with type </xsl:text>
619 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
620 </xsl:message>
621 </xsl:otherwise>
622 </xsl:choose>
623 </xsl:when>
624 <xsl:otherwise>
625 <xsl:message terminate="yes">
626 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
627 <xsl:value-of select="concat('value &quot;',../@mod,'&quot; ')"/>
628 <xsl:text>of attribute 'mod' is invalid!</xsl:text>
629 </xsl:message>
630 </xsl:otherwise>
631 </xsl:choose>
632 </xsl:when>
633 <!-- no modifiers -->
634 <xsl:otherwise>
635 <xsl:choose>
636 <!-- standard types -->
637 <xsl:when test=".='result'">result</xsl:when>
638 <xsl:when test=".='boolean'">boolean</xsl:when>
639 <xsl:when test=".='octet'">octet</xsl:when>
640 <xsl:when test=".='short'">short</xsl:when>
641 <xsl:when test=".='unsigned short'">unsigned short</xsl:when>
642 <xsl:when test=".='long'">long</xsl:when>
643 <xsl:when test=".='long long'">long long</xsl:when>
644 <xsl:when test=".='unsigned long'">unsigned long</xsl:when>
645 <xsl:when test=".='unsigned long long'">unsigned long long</xsl:when>
646 <xsl:when test=".='char'">char</xsl:when>
647 <xsl:when test=".='wchar'">wchar</xsl:when>
648 <xsl:when test=".='string'">string</xsl:when>
649 <xsl:when test=".='wstring'">wstring</xsl:when>
650 <!-- UUID type -->
651 <xsl:when test=".='uuid'">uuid</xsl:when>
652 <!-- system interface types -->
653 <xsl:when test=".='$unknown'">$unknown</xsl:when>
654 <xsl:otherwise>
655 <xsl:choose>
656 <!-- enum types -->
657 <xsl:when test="
658 (ancestor::library/application/enum[@name=current()])
659 or (ancestor::library/if/application/enum[@name=current()])
660 or (ancestor::library/application/if[@target=$self_target]/enum[@name=current()])
661 or (ancestor::library/if/application/if[@target=$self_target]/enum[@name=current()])
662 ">
663 <xsl:value-of select="."/>
664 </xsl:when>
665 <!-- custom interface types -->
666 <xsl:when test="
667 ( (ancestor::library/application/interface[@name=current()])
668 or (ancestor::library/if/application/interface[@name=current()])
669 or (ancestor::library/application/if[@target=$self_target]/interface[@name=current()])
670 or (ancestor::library/if/application/if[@target=$self_target]/interface[@name=current()])
671 )
672 ">
673 <xsl:value-of select="."/>
674 </xsl:when>
675 <!-- other types -->
676 <xsl:otherwise>
677 <xsl:message terminate="yes">
678 <xsl:text>Unknown parameter type: </xsl:text>
679 <xsl:value-of select="."/>
680 </xsl:message>
681 </xsl:otherwise>
682 </xsl:choose>
683 </xsl:otherwise>
684 </xsl:choose>
685 </xsl:otherwise>
686 </xsl:choose>
687 <xsl:if test="../@safearray='yes'">
688 <xsl:text>[]</xsl:text>
689 </xsl:if>
690</xsl:template>
691
692</xsl:stylesheet>
693
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette