<
xsl:
template match="result">
<
xsl:
value-
of select="concat('#define ',@name,' ',@value)"/>
<
xsl:
text>
</
xsl:
text>
<
xsl:
template match="interface" mode="forward">
<
xsl:
text>interface </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>;
</
xsl:
text>
<
xsl:
template match="interface">[
uuid(<
xsl:
value-
of select="@uuid"/>),
<
xsl:
text>interface </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
when test="@extends='$unknown'">nsISupports</
xsl:
when>
<
xsl:
when test="@extends='$dispatched'">nsISupports</
xsl:
when>
<
xsl:
when test="@extends='$errorinfo'">nsIException</
xsl:
when>
<
xsl:
otherwise><
xsl:
value-
of select="@extends"/></
xsl:
otherwise>
<
xsl:
text>
{
</
xsl:
text>
<!-- attributes (properties) --> <
xsl:
apply-
templates select="attribute"/>
<
xsl:
apply-
templates select="method"/>
<!-- 'if' enclosed elements, unsorted --> <
xsl:
apply-
templates select="if"/>
<
xsl:
text>}; /* interface </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text> */

</
xsl:
text>
<!-- Interface implementation forwarder macro --> <
xsl:
text>/* Interface implementation forwarder macro */
</
xsl:
text>
<
xsl:
text>%{C++
</
xsl:
text>
<!-- 1) individual methods --> <
xsl:
apply-
templates select="attribute" mode="forwarder"/>
<
xsl:
apply-
templates select="method" mode="forwarder"/>
<
xsl:
apply-
templates select="if" mode="forwarder"/>
<!-- 2) COM_FORWARD_Interface_TO(smth) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>_TO(smth) NS_FORWARD_</
xsl:
text>
<
xsl:
call-
template name="uppercase">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text> (smth)
</
xsl:
text>
<!-- 3) COM_FORWARD_Interface_TO_OBJ(obj) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>_TO_OBJ(obj) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>_TO ((obj)->)
</
xsl:
text>
<!-- 4) COM_FORWARD_Interface_TO_BASE(base) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>_TO_BASE(base) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>_TO (base::)

</
xsl:
text>
<
xsl:
text>// for compatibility with Win32
</
xsl:
text>
<
xsl:
text>VBOX_EXTERN_C const nsID IID_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>;
</
xsl:
text>
<
xsl:
text>%}

</
xsl:
text>
<
xsl:
template match="interface//attribute">
<
xsl:
apply-
templates select="@if" mode="begin"/>
<
xsl:
if test="@mod='ptr'">
<!-- attributes using native types must be non-scriptable --> <
xsl:
text> [noscript]
</
xsl:
text>
<!-- safearray pseudo attribute --> <
xsl:
when test="@safearray='yes'">
<
xsl:
text> void get</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text> (
</
xsl:
text>
<
xsl:
text> out unsigned long </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size,
</
xsl:
text>
<
xsl:
text> [array, size_is(</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size), retval] out </
xsl:
text>
<
xsl:
apply-
templates select="@type"/>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>
 );
</
xsl:
text>
<
xsl:
if test="not(@readonly='yes')">
<
xsl:
text> void set</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text> (
</
xsl:
text>
<
xsl:
text> in unsigned long </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size,
</
xsl:
text>
<
xsl:
text> [array, size_is(</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size)] in </
xsl:
text>
<
xsl:
apply-
templates select="@type"/>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>
 );
</
xsl:
text>
<!-- normal attribute --> <
xsl:
if test="@readonly='yes'">
<
xsl:
text>readonly </
xsl:
text>
<
xsl:
text>attribute </
xsl:
text>
<
xsl:
apply-
templates select="@type"/>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>;
</
xsl:
text>
<
xsl:
apply-
templates select="@if" mode="end"/>
<
xsl:
text>
</
xsl:
text>
<
xsl:
template match="interface//attribute" mode="forwarder">
<
xsl:
variable name="parent" select="ancestor::interface"/>
<
xsl:
apply-
templates select="@if" mode="begin"/>
<!-- getter: COM_FORWARD_Interface_GETTER_Name_TO(smth) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_GETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO(smth) NS_IMETHOD Get</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
text>PRUint32 * a</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>Size, </
xsl:
text>
<
xsl:
apply-
templates select="@type" mode="forwarder"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
text> * a</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>) { return smth Get</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>Size, </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>); }
</
xsl:
text>
<!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_OBJ(obj) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_GETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_OBJ(obj) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_GETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO ((obj)->)
</
xsl:
text>
<!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_BASE(base) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_GETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_BASE(base) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_GETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO (base::)
</
xsl:
text>
<
xsl:
if test="not(@readonly='yes')">
<!-- setter: COM_FORWARD_Interface_SETTER_Name_TO(smth) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_SETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO(smth) NS_IMETHOD Set</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
text>PRUint32 a</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>Size, </
xsl:
text>
<
xsl:
if test="not(@safearray='yes') and (@type='string' or @type='wstring')">
<
xsl:
text>const </
xsl:
text>
<
xsl:
apply-
templates select="@type" mode="forwarder"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>) { return smth Set</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>); }
</
xsl:
text>
<!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_OBJ(obj) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_SETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_OBJ(obj) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_SETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO ((obj)->)
</
xsl:
text>
<!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_BASE(base) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_SETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_BASE(base) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
text>_SETTER_</
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO (base::)
</
xsl:
text>
<
xsl:
apply-
templates select="@if" mode="end"/>
<
xsl:
template match="interface//method">
<
xsl:
apply-
templates select="@if" mode="begin"/>
<
xsl:
if test="param/@mod='ptr'">
<!-- methods using native types must be non-scriptable --> <
xsl:
text> [noscript]
</
xsl:
text>
<
xsl:
text> void </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text> (
</
xsl:
text>
<
xsl:
for-
each select="param [position() != last()]">
<
xsl:
apply-
templates select="."/>
<
xsl:
text>,
</
xsl:
text>
<
xsl:
apply-
templates select="param [last()]"/>
<
xsl:
text>
 );
</
xsl:
text>
<
xsl:
if test="not(param)">
<
xsl:
text>();
</
xsl:
text>
<
xsl:
apply-
templates select="@if" mode="end"/>
<
xsl:
text>
</
xsl:
text>
<
xsl:
template match="interface//method" mode="forwarder">
<
xsl:
variable name="parent" select="ancestor::interface"/>
<
xsl:
apply-
templates select="@if" mode="begin"/>
<
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO(smth) NS_IMETHOD </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
for-
each select="param [position() != last()]">
<
xsl:
apply-
templates select="." mode="forwarder"/>
<
xsl:
apply-
templates select="param [last()]" mode="forwarder"/>
<
xsl:
text>) { return smth </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
for-
each select="param [position() != last()]">
<
xsl:
if test="@safearray='yes'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>Size+++, </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
if test="param [last()]/@safearray='yes'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="param [last()]/@name"/>
<
xsl:
text>Size, </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="param [last()]/@name"/>
<
xsl:
text>); }</
xsl:
text>
<
xsl:
otherwise test="not(param)">
<
xsl:
text>() { return smth </
xsl:
text>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>(); }</
xsl:
text>
<
xsl:
text>
</
xsl:
text>
<!-- COM_FORWARD_Interface_Method_TO_OBJ(obj) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_OBJ(obj) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO ((obj)->)
</
xsl:
text>
<!-- COM_FORWARD_Interface_Method_TO_BASE(base) --> <
xsl:
text>#define COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO_BASE(base) COM_FORWARD_</
xsl:
text>
<
xsl:
value-
of select="$parent/@name"/>
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_TO (base::)
</
xsl:
text>
<
xsl:
apply-
templates select="@if" mode="end"/>
<
xsl:
template match="module">
<
xsl:
apply-
templates select="class"/>
<!-- class and contract id --> <
xsl:
text>%{C++
</
xsl:
text>
<
xsl:
text>// Definitions for module </
xsl:
text>
<
xsl:
value-
of select="../@name"/>
<
xsl:
text>, class </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>:
</
xsl:
text>
<
xsl:
text>#define NS_</
xsl:
text>
<
xsl:
call-
template name="uppercase">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_CID { \
</
xsl:
text>
<
xsl:
text> 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,1,8)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,10,4)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,15,4)"/>
<
xsl:
text>, \
 </
xsl:
text>
<
xsl:
text>{ 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,20,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,22,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,25,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,27,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,29,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,31,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,33,2)"/>
<
xsl:
text>, 0x</
xsl:
text><
xsl:
value-
of select="substring(@uuid,35,2)"/>
<
xsl:
text> } \
}
</
xsl:
text>
<
xsl:
text>#define NS_</
xsl:
text>
<
xsl:
call-
template name="uppercase">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>_CONTRACTID "@</
xsl:
text>
<
xsl:
value-
of select="@namespace"/>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>;1"
</
xsl:
text>
<!-- CLSID_xxx declarations for XPCOM, for compatibility with Win32 --> <
xsl:
text>// for compatibility with Win32
</
xsl:
text>
<
xsl:
text>VBOX_EXTERN_C const nsCID CLSID_</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>;
</
xsl:
text>
<
xsl:
text>%}

</
xsl:
text>
<
xsl:
template match="enum">[
uuid(<
xsl:
value-
of select="@uuid"/>),
<
xsl:
text>interface </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>
{
</
xsl:
text>
<
xsl:
for-
each select="const">
<
xsl:
text> const PRUint32 </
xsl:
text>
<
xsl:
value-
of select="@name"/> = <
xsl:
value-
of select="@value"/>
<
xsl:
text>;
</
xsl:
text>
<
xsl:
text>};

</
xsl:
text>
<
xsl:
value-
of select="concat('/* cross-platform type name for ', @name, ' */
')"/>
<
xsl:
text>%{C++
</
xsl:
text>
<
xsl:
value-
of select="concat('#define ', @name, '_T', ' ', <
xsl:
text>%}

</
xsl:
text>
<
xsl:
value-
of select="concat('/* cross-platform constants for ', @name, ' */
')"/>
<
xsl:
text>%{C++
</
xsl:
text>
<
xsl:
for-
each select="const">
<
xsl:
value-
of select="concat('#define ', ../@name, '_', @name, ' ', ../@name, '::', @name, '
')"/>
<
xsl:
text>%}

</
xsl:
text>
<!-- safearray parameters --> <
xsl:
when test="@safearray='yes'">
<
xsl:
when test="@dir='in'">in </
xsl:
when>
<
xsl:
when test="@dir='out'">out </
xsl:
when>
<
xsl:
when test="@dir='return'">out </
xsl:
when>
<
xsl:
otherwise>in </
xsl:
otherwise>
<
xsl:
text>unsigned long </
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size,
</
xsl:
text>
<
xsl:
text> [array, size_is(</
xsl:
text>
<
xsl:
value-
of select="@name"/>
<
xsl:
text>Size)</
xsl:
text>
<
xsl:
when test="@dir='in'">] in </
xsl:
when>
<
xsl:
when test="@dir='out'">] out </
xsl:
when>
<
xsl:
when test="@dir='return'"> , retval] out </
xsl:
when>
<
xsl:
otherwise>] in </
xsl:
otherwise>
<
xsl:
apply-
templates select="@type"/>
<
xsl:
value-
of select="@name"/>
<!-- normal and array parameters --> <
xsl:
when test="@dir='in'">in </
xsl:
when>
<
xsl:
when test="@dir='out'">out </
xsl:
when>
<
xsl:
when test="@dir='return'">[retval] out </
xsl:
when>
<
xsl:
otherwise>in </
xsl:
otherwise>
<
xsl:
apply-
templates select="@type"/>
<
xsl:
value-
of select="@name"/>
<
xsl:
if test="@safearray='yes'">
<
xsl:
text>PRUint32</
xsl:
text>
<
xsl:
if test="@dir='out' or @dir='return'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
text>Size, </
xsl:
text>
<
xsl:
apply-
templates select="@type" mode="forwarder"/>
<
xsl:
if test="@dir='out' or @dir='return'">
<
xsl:
if test="@safearray='yes'">
<
xsl:
call-
template name="capitalize">
<
xsl:
with-
param name="str" select="@name"/>
<
xsl:
template match="attribute/@type | param/@type">
<
xsl:
variable name="self_target" select="current()/ancestor::if/@target"/>
<!-- modifiers (ignored for 'enumeration' attributes)--> <
xsl:
when test="name(current())='type' and ../@mod">
<
xsl:
when test="../@mod='ptr'">
<!--xsl:when test=".='result'">??</xsl:when--> <
xsl:
when test=".='boolean'">booleanPtr</
xsl:
when>
<
xsl:
when test=".='octet'">octetPtr</
xsl:
when>
<
xsl:
when test=".='short'">shortPtr</
xsl:
when>
<
xsl:
when test=".='unsigned short'">ushortPtr</
xsl:
when>
<
xsl:
when test=".='long'">longPtr</
xsl:
when>
<
xsl:
when test=".='long long'">llongPtr</
xsl:
when>
<
xsl:
when test=".='unsigned long'">ulongPtr</
xsl:
when>
<
xsl:
when test=".='unsigned long long'">ullongPtr</
xsl:
when>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<
xsl:
text>attribute 'mod=</
xsl:
text>
<
xsl:
value-
of select="concat('"',../@mod,'"')"/>
<
xsl:
text>' cannot be used with type </
xsl:
text>
<
xsl:
value-
of select="concat('"',current(),'"!')"/>
<
xsl:
when test="../@mod='string'">
<!--xsl:when test=".='result'">??</xsl:when--> <
xsl:
when test=".='uuid'">wstring</
xsl:
when>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<
xsl:
text>attribute 'mod=</
xsl:
text>
<
xsl:
value-
of select="concat('"',../@mod,'"')"/>
<
xsl:
text>' cannot be used with type </
xsl:
text>
<
xsl:
value-
of select="concat('"',current(),'"!')"/>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<
xsl:
value-
of select="concat('value "',../@mod,'" ')"/>
<
xsl:
text>of attribute 'mod' is invalid!</
xsl:
text>
<
xsl:
when test=".='result'">nsresult</
xsl:
when>
<
xsl:
when test=".='boolean'">boolean</
xsl:
when>
<
xsl:
when test=".='octet'">octet</
xsl:
when>
<
xsl:
when test=".='short'">short</
xsl:
when>
<
xsl:
when test=".='unsigned short'">unsigned short</
xsl:
when>
<
xsl:
when test=".='long'">long</
xsl:
when>
<
xsl:
when test=".='long long'">long long</
xsl:
when>
<
xsl:
when test=".='unsigned long'">unsigned long</
xsl:
when>
<
xsl:
when test=".='unsigned long long'">unsigned long long</
xsl:
when>
<
xsl:
when test=".='char'">char</
xsl:
when>
<
xsl:
when test=".='wchar'">wchar</
xsl:
when>
<
xsl:
when test=".='string'">string</
xsl:
when>
<
xsl:
when test=".='wstring'">wstring</
xsl:
when>
<
xsl:
when test=".='uuid'">
<
xsl:
when test="name(..)='attribute'">
<
xsl:
when test="../@readonly='yes'">
<
xsl:
text>nsIDPtr</
xsl:
text>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="../@name"/>
<
xsl:
text>: Non-readonly uuid attributes are not supported!</
xsl:
text>
<
xsl:
when test="name(..)='param'">
<
xsl:
when test="../@dir='in' and not(../@safearray='yes')">
<
xsl:
text>nsIDRef</
xsl:
text>
<
xsl:
text>nsIDPtr</
xsl:
text>
<!-- system interface types --> <
xsl:
when test=".='$unknown'">nsISupports</
xsl:
when>
(ancestor::library/if[@target=$self_target]/enum[@name=current()]) <
xsl:
text>PRUint32</
xsl:
text>
<!-- custom interface types --> (ancestor::library/if[@target=$self_target]/interface[@name=current()]) <
xsl:
value-
of select="."/>
<
xsl:
message terminate="yes">
<
xsl:
text>Unknown parameter type: </
xsl:
text>
<
xsl:
value-
of select="."/>
<
xsl:
template match="attribute/@type | param/@type" mode="forwarder">
<
xsl:
variable name="self_target" select="current()/ancestor::if/@target"/>
<!-- modifiers (ignored for 'enumeration' attributes)--> <
xsl:
when test="name(current())='type' and ../@mod">
<
xsl:
when test="../@mod='ptr'">
<!--xsl:when test=".='result'">??</xsl:when--> <
xsl:
when test=".='boolean'">PRBool *</
xsl:
when>
<
xsl:
when test=".='octet'">PRUint8 *</
xsl:
when>
<
xsl:
when test=".='short'">PRInt16 *</
xsl:
when>
<
xsl:
when test=".='unsigned short'">PRUint16 *</
xsl:
when>
<
xsl:
when test=".='long'">PRInt32 *</
xsl:
when>
<
xsl:
when test=".='long long'">PRInt64 *</
xsl:
when>
<
xsl:
when test=".='unsigned long'">PRUint32 *</
xsl:
when>
<
xsl:
when test=".='unsigned long long'">PRUint64 *</
xsl:
when>
<
xsl:
when test=".='char'">char *</
xsl:
when>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<
xsl:
text>attribute 'mod=</
xsl:
text>
<
xsl:
value-
of select="concat('"',../@mod,'"')"/>
<
xsl:
text>' cannot be used with type </
xsl:
text>
<
xsl:
value-
of select="concat('"',current(),'"!')"/>
<
xsl:
when test="../@mod='string'">
<!--xsl:when test=".='result'">??</xsl:when--> <
xsl:
when test=".='uuid'">PRUnichar *</
xsl:
when>
<
xsl:
message terminate="yes">
<
xsl:
value-
of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<
xsl:
text>attribute 'mod=</
xsl:
text>
<
xsl:
value-
of select="concat('"',../@mod,'"')"/>
<
xsl:
text>' cannot be used with type </
xsl:
text>
<
xsl:
value-
of select="concat('"',current(),'"!')"/>
<
xsl:
when test=".='result'">nsresult</
xsl:
when>
<
xsl:
when test=".='boolean'">PRBool</
xsl:
when>
<
xsl:
when test=".='octet'">PRUint8</
xsl:
when>
<
xsl:
when test=".='short'">PRInt16</
xsl:
when>
<
xsl:
when test=".='unsigned short'">PRUint16</
xsl:
when>
<
xsl:
when test=".='long'">PRInt32</
xsl:
when>
<
xsl:
when test=".='long long'">PRInt64</
xsl:
when>
<
xsl:
when test=".='unsigned long'">PRUint32</
xsl:
when>
<
xsl:
when test=".='unsigned long long'">PRUint64</
xsl:
when>
<
xsl:
when test=".='char'">char</
xsl:
when>
<
xsl:
when test=".='wchar'">PRUnichar</
xsl:
when>
<
xsl:
when test=".='string'">char *</
xsl:
when>
<
xsl:
when test=".='wstring'">PRUnichar *</
xsl:
when>
<
xsl:
when test=".='uuid'">
<
xsl:
when test="name(..)='attribute'">
<
xsl:
when test="../@readonly='yes'">
<
xsl:
text>nsID *</
xsl:
text>
<
xsl:
when test="name(..)='param'">
<
xsl:
when test="../@dir='in' and not(../@safearray='yes')">
<
xsl:
text>const nsID &</
xsl:
text>
<
xsl:
text>nsID *</
xsl:
text>
<!-- system interface types --> <
xsl:
when test=".='$unknown'">nsISupports *</
xsl:
when>
(ancestor::library/if[@target=$self_target]/enum[@name=current()]) <
xsl:
text>PRUint32</
xsl:
text>
<!-- custom interface types --> (ancestor::library/if[@target=$self_target]/interface[@name=current()]) <
xsl:
value-
of select="."/>