VirtualBox

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

Last change on this file was 99726, checked in by vboxsync, 12 months ago

Main: Doxygen fixes. bugref:10442

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

© 2023 Oracle
ContactPrivacy policyTerms of Use