VirtualBox

source: vbox/trunk/doc/manual/xidl2docbook.xsl@ 63399

Last change on this file since 63399 was 56544, checked in by vboxsync, 10 years ago

Use xi:include instead of SED for including SDKRef_apiref.xml into SDKRef.xml.

File size: 20.0 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4 xidl2docbook.xsl:
5 XSLT stylesheet that generates docbook from
6 VirtualBox.xidl.
7
8 Copyright (C) 2006-2015 Oracle Corporation
9
10 This file is part of VirtualBox Open Source Edition (OSE), as
11 available from http://www.virtualbox.org. This file is free software;
12 you can redistribute it and/or modify it under the terms of the GNU
13 General Public License (GPL) as published by the Free Software
14 Foundation, in version 2 as it comes in the "COPYING" file of the
15 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17-->
18
19<xsl:stylesheet
20 version="1.0"
21 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
22 xmlns:exsl="http://exslt.org/common"
23 extension-element-prefixes="exsl">
24
25 <xsl:output
26 method="xml"
27 version="1.0"
28 encoding="utf-8"
29 indent="yes"/>
30
31 <xsl:strip-space elements="*"/>
32
33 <!-- - - - - - - - - - - - - - - - - - - - - - -
34 Keys for more efficiently looking up of types.
35 - - - - - - - - - - - - - - - - - - - - - - -->
36
37<xsl:key name="G_keyEnumsByName" match="//enum[@name]" use="@name"/>
38<xsl:key name="G_keyInterfacesByName" match="//interface[@name]" use="@name"/>
39<xsl:key name="G_keyResultsByName" match="//result[@name]" use="@name"/>
40
41<!-- - - - - - - - - - - - - - - - - - - - - - -
42 global XSLT variables
43 - - - - - - - - - - - - - - - - - - - - - - -->
44
45<xsl:variable name="G_xsltFilename" select="'glue-jaxws.xsl'" />
46
47<!-- collect all interfaces with "wsmap='suppress'" in a global variable for
48 quick lookup -->
49<xsl:variable name="G_setSuppressedInterfaces"
50 select="//interface[@wsmap='suppress']" />
51
52<xsl:template name="makeLinkId">
53 <xsl:param name="ifname" />
54 <xsl:param name="member" />
55 <xsl:value-of select="concat($ifname, '__', $member)"/>
56</xsl:template>
57
58<xsl:template name="emitType">
59 <xsl:param name="type" />
60 <xsl:choose>
61 <xsl:when test="$type">
62 <xsl:choose>
63 <xsl:when test="count(key('G_keyInterfacesByName',$type)) > 0">
64 <link>
65 <xsl:attribute name="linkend">
66 <xsl:value-of select="translate($type, ':', '_')" />
67 </xsl:attribute>
68 <xsl:value-of select="$type" />
69 </link>
70 </xsl:when>
71 <xsl:when test="count(key('G_keyEnumsByName',$type)) > 0">
72 <link>
73 <xsl:attribute name="linkend">
74 <xsl:value-of select="translate($type, ':', '_')" />
75 </xsl:attribute>
76 <xsl:value-of select="$type" />
77 </link>
78 </xsl:when>
79 <xsl:otherwise>
80 <xsl:value-of select="$type" />
81 </xsl:otherwise>
82 </xsl:choose>
83 </xsl:when>
84 <xsl:otherwise>
85 <xsl:value-of select="'void'" />
86 </xsl:otherwise>
87 </xsl:choose>
88</xsl:template>
89
90<xsl:template name="isWebserviceOnly">
91 <xsl:for-each select="ancestor-or-self::*">
92 <xsl:if test="(name()='if') and (@target='wsdl')">
93 <xsl:text>yes</xsl:text>
94 </xsl:if>
95 </xsl:for-each>
96</xsl:template>
97
98
99<!-- - - - - - - - - - - - - - - - - - - - - - -
100 root match
101 - - - - - - - - - - - - - - - - - - - - - - -->
102
103<xsl:template match="/idl">
104 <book> <!-- Need a single top-level element for xi:include, we'll skip it using xpointer. -->
105 <chapter id="sdkref_classes">
106 <title>Classes (interfaces)</title>
107 <xsl:for-each select="//interface">
108 <xsl:sort select="@name"/>
109
110 <!-- ignore those interfaces within module sections; they don't have uuid -->
111 <xsl:if test="@uuid">
112 <xsl:variable name="ifname" select="@name" />
113 <xsl:variable name="wsmap" select="@wsmap" />
114 <xsl:variable name="wscpp" select="@wscpp" />
115 <xsl:variable name="wsonly"><xsl:call-template name="isWebserviceOnly" /></xsl:variable>
116 <xsl:variable name="extends" select="@extends" />
117 <xsl:variable name="reportExtends" select="not($extends='$unknown') and not($extends='$errorinfo')" />
118
119 <sect1>
120 <xsl:attribute name="id">
121 <xsl:value-of select="$ifname" />
122 </xsl:attribute>
123 <title><xsl:value-of select="$ifname" />
124 <xsl:if test="$reportExtends">
125 <xsl:value-of select="concat(' (', @extends, ')')" />
126 </xsl:if>
127 </title>
128
129 <xsl:choose>
130 <xsl:when test="$wsmap='suppress'">
131 <para><note><para>
132 This interface is not supported in the web service.
133 </para></note></para>
134 </xsl:when>
135 <xsl:when test="$wsmap='struct'">
136 <para><note><para>With the web service, this interface is mapped to a structure. Attributes that return this interface will not return an object, but a complete structure
137 containing the attributes listed below as structure members.</para></note></para>
138 </xsl:when>
139 <xsl:when test="$wsonly='yes'">
140 <para><note><para>This interface is supported in the web service only, not in COM/XPCOM.</para></note></para>
141 </xsl:when>
142 </xsl:choose>
143
144 <xsl:if test="$reportExtends">
145 <para><note><para>
146 This interface extends
147 <link>
148 <xsl:attribute name="linkend"><xsl:value-of select="$extends" /></xsl:attribute>
149 <xsl:value-of select="$extends" />
150 </link>
151 and therefore supports all its methods and attributes as well.
152 </para></note></para>
153 </xsl:if>
154
155 <xsl:apply-templates select="desc" />
156
157 <xsl:if test="attribute">
158 <sect2>
159 <title>Attributes</title>
160 <xsl:for-each select="attribute">
161 <xsl:variable name="attrtype" select="@type" />
162 <sect3>
163 <xsl:attribute name="id">
164 <xsl:call-template name="makeLinkId">
165 <xsl:with-param name="ifname" select="$ifname" />
166 <xsl:with-param name="member" select="@name" />
167 </xsl:call-template>
168 </xsl:attribute>
169 <title>
170 <xsl:choose>
171 <xsl:when test="@readonly='yes'">
172 <xsl:value-of select="concat(@name, ' (read-only)')" />
173 </xsl:when>
174 <xsl:otherwise>
175 <xsl:value-of select="concat(@name, ' (read/write)')" />
176 </xsl:otherwise>
177 </xsl:choose>
178 </title>
179 <programlisting>
180 <xsl:call-template name="emitType">
181 <xsl:with-param name="type" select="$attrtype" />
182 </xsl:call-template>
183 <xsl:value-of select="concat(' ', $ifname, '::', @name)" />
184 <xsl:if test="(@array='yes') or (@safearray='yes')">
185 <xsl:text>[]</xsl:text>
186 </xsl:if>
187 </programlisting>
188 <xsl:if test="( ($attrtype=($G_setSuppressedInterfaces/@name)) )">
189 <para><note><para>
190 This attribute is not supported in the web service.
191 </para></note></para>
192 </xsl:if>
193 <xsl:apply-templates select="desc" />
194 </sect3>
195 </xsl:for-each>
196 </sect2>
197 </xsl:if>
198
199 <xsl:if test="method">
200<!-- <sect2> -->
201<!-- <title>Methods</title> -->
202 <xsl:for-each select="method">
203 <xsl:sort select="@name" />
204 <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
205 <sect2>
206 <xsl:attribute name="id">
207 <xsl:call-template name="makeLinkId">
208 <xsl:with-param name="ifname" select="$ifname" />
209 <xsl:with-param name="member" select="@name" />
210 </xsl:call-template>
211 </xsl:attribute>
212 <title>
213 <xsl:value-of select="@name" />
214 </title>
215 <xsl:if test=" (param[@type=($G_setSuppressedInterfaces/@name)])
216 or (param[@mod='ptr'])" >
217 <para><note><para>
218 This method is not supported in the web service.
219 </para></note></para>
220 </xsl:if>
221 <!-- make a set of all parameters with in and out direction -->
222 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
223 <programlisting>
224 <!--emit return type-->
225 <xsl:call-template name="emitType">
226 <xsl:with-param name="type" select="$returnidltype" />
227 </xsl:call-template>
228 <xsl:if test="(param[@dir='return']/@array='yes') or (param[@dir='return']/@safearray='yes')">
229 <xsl:text>[]</xsl:text>
230 </xsl:if>
231 <xsl:value-of select="concat(' ', $ifname, '::', @name, '(')" />
232 <xsl:if test="$paramsinout">
233 <xsl:for-each select="$paramsinout">
234 <xsl:text>&#10;</xsl:text>
235 <xsl:value-of select="concat(' [', @dir, '] ')" />
236 <xsl:if test="@mod = 'ptr'">
237 <xsl:text>[ptr] </xsl:text>
238 </xsl:if>
239 <xsl:call-template name="emitType">
240 <xsl:with-param name="type" select="@type" />
241 </xsl:call-template>
242 <emphasis role="bold">
243 <xsl:value-of select="concat(' ', @name)" />
244 </emphasis>
245 <xsl:if test="(@array='yes') or (@safearray='yes')">
246 <xsl:text>[]</xsl:text>
247 </xsl:if>
248 <xsl:if test="not(position()=last())">
249 <xsl:text>, </xsl:text>
250 </xsl:if>
251 </xsl:for-each>
252 </xsl:if>
253 <xsl:text>)</xsl:text>
254 </programlisting>
255
256 <xsl:if test="$paramsinout">
257 <glosslist>
258 <xsl:for-each select="$paramsinout">
259 <glossentry>
260 <glossterm>
261 <xsl:value-of select="@name" />
262 </glossterm>
263 <glossdef>
264 <xsl:if test="not(desc)">
265 <para/>
266 </xsl:if>
267 <xsl:apply-templates select="desc" />
268 </glossdef>
269 </glossentry>
270 </xsl:for-each>
271 </glosslist>
272 </xsl:if>
273
274 <!-- dump the description here -->
275 <xsl:apply-templates select="desc" />
276
277 <xsl:if test="desc/result">
278 <para>If this method fails, the following error codes may be reported:</para>
279 <itemizedlist>
280 <xsl:for-each select="desc/result">
281 <listitem>
282 <para><code><xsl:value-of select="@name" />: </code>
283 <xsl:apply-templates />
284 </para>
285 </listitem>
286 </xsl:for-each>
287 </itemizedlist>
288 </xsl:if>
289 </sect2>
290 </xsl:for-each>
291<!-- </sect2> -->
292 </xsl:if>
293
294 </sect1>
295 </xsl:if>
296 </xsl:for-each>
297 </chapter>
298
299 <chapter id="sdkref_enums">
300 <title>Enumerations (enums)</title>
301 <xsl:for-each select="//enum">
302 <xsl:sort select="@name"/>
303
304 <xsl:variable name="ifname" select="@name" />
305 <xsl:variable name="wsmap" select="@wsmap" />
306 <xsl:variable name="wscpp" select="@wscpp" />
307
308 <sect1>
309 <xsl:attribute name="id">
310 <xsl:value-of select="$ifname" />
311 </xsl:attribute>
312 <title><xsl:value-of select="$ifname" /></title>
313
314 <xsl:apply-templates select="desc" />
315
316 <glosslist>
317 <xsl:for-each select="const">
318 <glossentry>
319 <glossterm>
320 <xsl:attribute name="id">
321 <xsl:call-template name="makeLinkId">
322 <xsl:with-param name="ifname" select="$ifname" />
323 <xsl:with-param name="member" select="@name" />
324 </xsl:call-template>
325 </xsl:attribute>
326 <xsl:value-of select="@name" />
327 </glossterm>
328 <glossdef>
329 <xsl:if test="not(desc)">
330 <para/>
331 </xsl:if>
332 <xsl:apply-templates select="desc" />
333 </glossdef>
334 </glossentry>
335 </xsl:for-each>
336 </glosslist>
337 </sect1>
338 </xsl:for-each>
339 </chapter>
340 </book>
341</xsl:template>
342
343<!-- - - - - - - - - - - - - - - - - - - - - - -
344 if
345 - - - - - - - - - - - - - - - - - - - - - - -->
346
347<!--
348 * ignore all |if|s except those for WSDL target
349-->
350<xsl:template match="if">
351 <xsl:if test="@target='wsdl'">
352 <xsl:apply-templates/>
353 </xsl:if>
354</xsl:template>
355
356<!-- - - - - - - - - - - - - - - - - - - - - - -
357 cpp
358 - - - - - - - - - - - - - - - - - - - - - - -->
359
360<xsl:template match="cpp">
361<!-- ignore this -->
362</xsl:template>
363
364<!-- - - - - - - - - - - - - - - - - - - - - - -
365 result
366 - - - - - - - - - - - - - - - - - - - - - - -->
367
368<xsl:template match="result">
369 <!-- ignore this, we handle them explicitly in method loops -->
370</xsl:template>
371
372<!-- - - - - - - - - - - - - - - - - - - - - - -
373 library
374 - - - - - - - - - - - - - - - - - - - - - - -->
375
376<xsl:template match="library">
377 <xsl:apply-templates />
378</xsl:template>
379
380<!-- - - - - - - - - - - - - - - - - - - - - - -
381 class
382 - - - - - - - - - - - - - - - - - - - - - - -->
383
384<xsl:template match="module/class">
385<!-- TODO swallow for now -->
386</xsl:template>
387
388<!-- - - - - - - - - - - - - - - - - - - - - - -
389 enum
390 - - - - - - - - - - - - - - - - - - - - - - -->
391
392<xsl:template match="enum">
393</xsl:template>
394
395<!-- - - - - - - - - - - - - - - - - - - - - - -
396 const
397 - - - - - - - - - - - - - - - - - - - - - - -->
398
399<!--
400<xsl:template match="const">
401 <xsl:apply-templates />
402</xsl:template>
403-->
404
405<!-- - - - - - - - - - - - - - - - - - - - - - -
406 desc
407 - - - - - - - - - - - - - - - - - - - - - - -->
408
409<xsl:template match="desc">
410 <!-- todo: wrapping the entire content in a single para is actually not
411 entirely correct, as it contains empty lines denoting new paragraphs -->
412 <para>
413 <xsl:apply-templates />
414 </para>
415</xsl:template>
416
417<xsl:template name="getCurrentInterface">
418 <xsl:for-each select="ancestor-or-self::*">
419 <xsl:if test="name()='interface'">
420 <xsl:value-of select="@name"/>
421 </xsl:if>
422 </xsl:for-each>
423</xsl:template>
424
425<!-- <link to="DeviceType::HardDisk"/> -->
426<xsl:template match="link">
427 <link>
428 <xsl:variable name="tmp" select="@to" />
429 <xsl:variable name="enumNameFromCombinedName">
430 <xsl:value-of select="substring-before($tmp, '_')" />
431 </xsl:variable>
432 <xsl:variable name="enumValueFromCombinedName">
433 <xsl:value-of select="substring-after($tmp, '_')" />
434 </xsl:variable>
435 <xsl:choose>
436 <xsl:when test="count(key('G_keyInterfacesByName',$tmp)) > 0 or count(key('G_keyEnumsByName',$tmp)) > 0"><!-- link to interface only -->
437 <xsl:attribute name="linkend"><xsl:value-of select="@to" /></xsl:attribute>
438 <xsl:value-of select="$tmp" />
439 </xsl:when>
440 <xsl:when test="count(key('G_keyEnumsByName',$enumNameFromCombinedName)) > 0">
441 <xsl:attribute name="linkend">
442 <xsl:value-of select="concat($enumNameFromCombinedName, '__', $enumValueFromCombinedName)" />
443 </xsl:attribute>
444 <xsl:value-of select="$enumValueFromCombinedName" />
445 </xsl:when>
446 <xsl:otherwise>
447 <xsl:variable name="currentif">
448 <xsl:call-template name="getCurrentInterface" />
449 </xsl:variable>
450 <xsl:variable name="if"><!-- interface -->
451 <xsl:choose>
452 <xsl:when test="contains(@to, '#')">
453 <xsl:value-of select="$currentif" />
454 </xsl:when>
455 <xsl:otherwise>
456 <xsl:value-of select="substring-before(@to, '::')" />
457 </xsl:otherwise>
458 </xsl:choose>
459 </xsl:variable>
460 <xsl:variable name="member"><!-- member in that interface -->
461 <xsl:choose>
462 <xsl:when test="contains(@to, '#')">
463 <xsl:value-of select="substring-after(@to, '#')" />
464 </xsl:when>
465 <xsl:otherwise>
466 <xsl:value-of select="substring-after(@to, '::')" />
467 </xsl:otherwise>
468 </xsl:choose>
469 </xsl:variable>
470
471 <xsl:attribute name="linkend"><xsl:value-of select="concat($if, '__', $member)" /></xsl:attribute>
472 <xsl:variable name="autotextsuffix">
473 <xsl:choose>
474 <!-- if link points to a method, append "()" -->
475 <xsl:when test="key('G_keyInterfacesByName',$if)/method[@name=$member]">
476 <xsl:value-of select="'()'" />
477 </xsl:when>
478 <!-- if link points to a safearray attribute, append "[]" -->
479 <xsl:when test="key('G_keyInterfacesByName',$if)/attribute[@name=$member]/@safearray = 'yes'">
480 <xsl:value-of select="'[]'" />
481 </xsl:when>
482 <xsl:when test="key('G_keyInterfacesByName',$if)/attribute[@name=$member]"/>
483 <xsl:when test="key('G_keyEnumsByName',$if)/const[@name=$member]"/>
484 <xsl:when test="count(key('G_keyResultsByName',$tmp)) > 0"/>
485 <xsl:otherwise>
486 <xsl:message terminate="yes">
487 <xsl:value-of select="concat('Invalid link pointing to &quot;', $tmp, '&quot;')" />
488 </xsl:message>
489 </xsl:otherwise>
490 </xsl:choose>
491 </xsl:variable>
492 <xsl:choose>
493 <xsl:when test="./text()"><!-- link text given in source -->
494 <xsl:apply-templates />
495 </xsl:when>
496 <xsl:when test="$if=$currentif"><!-- "near" link to method or attribute in current interface -->
497 <xsl:value-of select="concat($member, $autotextsuffix)" />
498 </xsl:when>
499 <xsl:otherwise><!-- "far" link to other method or attribute -->
500 <xsl:value-of select="concat($if, '::', $member, $autotextsuffix)" />
501 </xsl:otherwise>
502 </xsl:choose>
503 </xsl:otherwise>
504 </xsl:choose>
505 </link>
506</xsl:template>
507
508<!-- - - - - - - - - - - - - - - - - - - - - - -
509 note
510 - - - - - - - - - - - - - - - - - - - - - - -->
511
512<xsl:template match="note">
513 <xsl:if test="not(@internal='yes')">
514 <note><para>
515 <xsl:apply-templates />
516 </para></note>
517 </xsl:if>
518</xsl:template>
519
520<xsl:template match="tt">
521 <computeroutput>
522 <xsl:apply-templates />
523 </computeroutput>
524</xsl:template>
525
526<xsl:template match="b">
527 <emphasis role="bold">
528 <xsl:apply-templates />
529 </emphasis>
530</xsl:template>
531
532<xsl:template match="i">
533 <emphasis>
534 <xsl:apply-templates />
535 </emphasis>
536</xsl:template>
537
538<xsl:template match="see">
539 <xsl:text>See also: </xsl:text>
540 <xsl:apply-templates />
541</xsl:template>
542
543<xsl:template match="ul">
544 <itemizedlist>
545 <xsl:apply-templates />
546 </itemizedlist>
547</xsl:template>
548
549<xsl:template match="ol">
550 <orderedlist>
551 <xsl:apply-templates />
552 </orderedlist>
553</xsl:template>
554
555<xsl:template match="li">
556 <listitem>
557 <para>
558 <xsl:apply-templates />
559 </para>
560 </listitem>
561</xsl:template>
562
563<xsl:template match="h3">
564 <emphasis role="bold">
565 <xsl:apply-templates />
566 </emphasis>
567</xsl:template>
568
569<xsl:template match="pre">
570 <screen><xsl:apply-templates /></screen>
571</xsl:template>
572
573<xsl:template match="table">
574 <xsl:apply-templates /> <!-- todo -->
575</xsl:template>
576
577</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.

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