midl.xsl revision f1915f434becbe05b150ebb5f81c0c700556b672
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<?xml version="1.0"?>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!-- $Id$ -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * A template to generate a MS IDL compatible interface definition file
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * from the generic interface definition expressed in XML.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync Copyright (C) 2006-2012 Oracle Corporation
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync This file is part of VirtualBox Open Source Edition (OSE), as
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync available from http://www.virtualbox.org. This file is free software;
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync you can redistribute it and/or modify it under the terms of the GNU
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync General Public License (GPL) as published by the Free Software
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync Foundation, in version 2 as it comes in the "COPYING" file of the
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync VirtualBox OSE distribution. VirtualBox OSE is distributed in the
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:output method="text"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:strip-space elements="*"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!-- Whether to generate proxy code and type library ('yes'), or just the type-library. -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:param name="g_fGenProxy" select="'no'"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync// helper definitions
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/////////////////////////////////////////////////////////////////////////////
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * capitalizes the first letter
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
28626a5957b49791b505bf66131448a847043763vboxsync<xsl:template name="capitalize">
2f827df539da232220444c27f2b207a707a045b0vboxsync <xsl:param name="str" select="."/>
ae6cc8f82ba26e3940022ea7d26078bec3d2a05fvboxsync <xsl:value-of select="
2f827df539da232220444c27f2b207a707a045b0vboxsync concat(
2f827df539da232220444c27f2b207a707a045b0vboxsync translate(substring($str,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
2f827df539da232220444c27f2b207a707a045b0vboxsync substring($str,2)
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync )
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync "/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync</xsl:template>
9b0ba1d4360299b4e6ee23c946feb5a4f16c6d00vboxsync
9b0ba1d4360299b4e6ee23c946feb5a4f16c6d00vboxsync<!--
9b0ba1d4360299b4e6ee23c946feb5a4f16c6d00vboxsync * uncapitalizes the first letter only if the second one is not capital
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * otherwise leaves the string unchanged
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync-->
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync<xsl:template name="uncapitalize">
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:param name="str" select="."/>
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:choose>
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:when test="not(contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ', substring($str,2,1)))">
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:value-of select="
2f827df539da232220444c27f2b207a707a045b0vboxsync concat(
2f827df539da232220444c27f2b207a707a045b0vboxsync translate(substring($str,1,1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),
2f827df539da232220444c27f2b207a707a045b0vboxsync substring($str,2)
2f827df539da232220444c27f2b207a707a045b0vboxsync )
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync "/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:when>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:otherwise>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="string($str)"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:otherwise>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:choose>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync</xsl:template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync// templates
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/////////////////////////////////////////////////////////////////////////////
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * not explicitly matched elements and attributes
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:template match="*"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!--
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * header
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:template match="/idl">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/*
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * DO NOT EDIT! This is a generated file.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync *
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * MS IDL (MIDL) definition for VirtualBox Main API (COM interfaces)
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * generated from XIDL (XML interface definition).
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync *
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * Source : src/VBox/Main/idl/VirtualBox.xidl
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * Generator : src/VBox/Main/idl/midl.xsl
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync */
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>import "unknwn.idl";&#x0A;&#x0A;</xsl:text>
2f827df539da232220444c27f2b207a707a045b0vboxsync <xsl:apply-templates/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<!--
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * ignore all |if|s except those for MIDL target
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync-->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="if">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="@target='midl'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="if" mode="forward">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="@target='midl'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates mode="forward"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="if" mode="forwarder">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:param name="nameOnly"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="@target='midl'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates mode="forwarder">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:with-param name="nameOnly" select="$nameOnly"/>
2f827df539da232220444c27f2b207a707a045b0vboxsync </xsl:apply-templates>
2f827df539da232220444c27f2b207a707a045b0vboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
2f827df539da232220444c27f2b207a707a045b0vboxsync
2f827df539da232220444c27f2b207a707a045b0vboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<!--
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * cpp_quote
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync-->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="cpp">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>cpp_quote("</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:value-of select="@line"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>")&#x0A;&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<!--
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * #if statement (@if attribute)
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync-->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="@if" mode="begin">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>#if </xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:value-of select="."/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>&#x0A;</xsl:text>
2f827df539da232220444c27f2b207a707a045b0vboxsync</xsl:template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="@if" mode="end">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>#endif&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync</xsl:template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync
2f827df539da232220444c27f2b207a707a045b0vboxsync
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<!--
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * libraries
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync-->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync<xsl:template match="library">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="$g_fGenProxy = 'yes'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- Declare everything outside the library and then reference these
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync from inside the library statement. See:
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync http://msdn.microsoft.com/en-us/library/windows/desktop/aa366841(v=vs.85).aspx -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- forward declarations -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="if | interface" mode="forward"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- all enums go first -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:apply-templates select="enum | if/enum"/>
38754ce3fec7064c34ccedb1dbce89cdfba65953vboxsync <!-- declare the interfaces -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="if | interface"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:if>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync[
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync uuid(<xsl:value-of select="@uuid"/>),
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync version(<xsl:value-of select="@version"/>),
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync helpstring("<xsl:value-of select="@desc"/>")
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync]
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:text>library </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>&#x0A;{&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>&#x0A;importlib("stdole2.tlb");&#x0A;&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- result codes -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:for-each select="result">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="."/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:for-each>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:choose>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:when test="$g_fGenProxy = 'yes'">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- reference enums and interfaces -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="if | interface" mode="forward"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="enum | if/enum" mode="forward"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- the modules (i.e. everything else) -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="module | if/module"/>
2f827df539da232220444c27f2b207a707a045b0vboxsync </xsl:when>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:otherwise>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- forward declarations -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="if | interface" mode="forward"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- all enums go first -->
2f827df539da232220444c27f2b207a707a045b0vboxsync <xsl:apply-templates select="enum | if/enum"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- everything else but result codes and enums -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="*[not(self::result or self::enum) and
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync not(self::if[result] or self::if[enum])]"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:otherwise>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:choose>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>}; /* library </xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:value-of select="@name"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text> */&#x0A;&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync</xsl:template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<!--
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * result codes
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync-->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:template match="result">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="concat('#define ',@name,' ',@value)"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>")&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync</xsl:template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<!--
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * forward declarations
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync-->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:template match="interface" mode="forward">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>interface </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>;&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync</xsl:template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:template match="enum" mode="forward">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>enum </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>;&#x0A;&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync</xsl:template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<!--
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * interfaces
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync-->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:template match="interface">[
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync uuid(<xsl:value-of select="@uuid"/>),
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync object,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync dual,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync oleautomation
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync]
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<xsl:text>interface </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text> : </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:choose>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:when test="@extends='$unknown'">IDispatch</xsl:when>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:when test="@extends='$dispatched'">IDispatch</xsl:when>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:when test="@extends='$errorinfo'">IErrorInfo</xsl:when>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:otherwise><xsl:value-of select="@extends"/></xsl:otherwise>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:choose>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>&#x0A;{&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- attributes (properties) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="attribute"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- methods -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="method"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- 'if' enclosed elements, unsorted -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="if"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>}; /* interface </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text> */&#x0A;&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- Interface implementation forwarder macro -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>/* Interface implementation forwarder macro */&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- 1) individual methods -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="attribute" mode="forwarder"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="method" mode="forwarder"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:apply-templates select="if" mode="forwarder"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- 2) COM_FORWARD_Interface_TO(smth) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO(smth) </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="attribute" mode="forwarder">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:with-param name="nameOnly" select="'yes'"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:apply-templates>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="method" mode="forwarder">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:with-param name="nameOnly" select="'yes'"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:apply-templates>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="if" mode="forwarder">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:with-param name="nameOnly" select="'yes'"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:apply-templates>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>")&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- 3) COM_FORWARD_Interface_TO_OBJ(obj) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="@name"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>_TO_OBJ(obj) COM_FORWARD_</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>_TO ((obj)->)")&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- 4) COM_FORWARD_Interface_TO_BASE(base) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>_TO_BASE(base) COM_FORWARD_</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>_TO (base::)")&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- end -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>&#x0A;</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync</xsl:template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync<!--
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * attributes
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync-->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:template match="interface//attribute">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="@if" mode="begin"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- getter -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text> [propget] HRESULT </xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:call-template name="capitalize">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:with-param name="str" select="@name"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:call-template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text> ([out, retval] </xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:if test="@safearray='yes'">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>SAFEARRAY(</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:if>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="@type"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:if test="@safearray='yes'">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>)</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text> * a</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:call-template name="capitalize">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:with-param name="str" select="@name"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:call-template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>);&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- setter -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="not(@readonly='yes')">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text> [propput] HRESULT </xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:call-template name="capitalize">
2f827df539da232220444c27f2b207a707a045b0vboxsync <xsl:with-param name="str" select="@name"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:call-template>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text> ([in] </xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="@safearray='yes'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>SAFEARRAY(</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="@type"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:if test="@safearray='yes'">
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:text>)</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:if>
2f827df539da232220444c27f2b207a707a045b0vboxsync <xsl:text> a</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>);&#x0A;</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync </xsl:if>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="@if" mode="end"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync</xsl:template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:template match="interface//attribute" mode="forwarder">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- if nameOnly='yes' then only the macro name is composed
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync followed by a space -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:param name="nameOnly"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:variable name="parent" select="ancestor::interface"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:apply-templates select="@if" mode="begin"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:choose>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:when test="$nameOnly='yes'">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO(smth) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_GETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO (smth) </xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO(smth) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:if test="not(@readonly='yes')">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>COM_FORWARD_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:value-of select="$parent/@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_SETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO (smth) </xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:if>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:when>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:otherwise>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO(smth) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="$parent/@name"/>
7cc5e93b9f64360aceb38f7ff4c756a5d8475009vboxsync <xsl:text>_GETTER_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO(smth) HRESULT STDMETHODCALLTYPE get_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text> (</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:choose>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:when test="@safearray='yes'">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>SAFEARRAY *</xsl:text>
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync </xsl:when>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:otherwise>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:apply-templates select="@type"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:otherwise>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:choose>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text> * a</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>) { return smth get_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text> (a</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>); }")&#x0A;</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_OBJ(obj) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:value-of select="$parent/@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_GETTER_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO_OBJ(obj) COM_FORWARD_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:value-of select="$parent/@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_GETTER_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO ((obj)->)")&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_BASE(base) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_GETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO_BASE(base) COM_FORWARD_</xsl:text>
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_GETTER_</xsl:text>
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:call-template name="capitalize">
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:with-param name="str" select="@name"/>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync </xsl:call-template>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO (base::)")&#x0A;</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <!-- -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:if test="not(@readonly='yes')">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO(smth) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_SETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO(smth) HRESULT STDMETHODCALLTYPE put_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text> (</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:choose>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:when test="@safearray='yes'">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>SAFEARRAY *</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:when>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:otherwise>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:apply-templates select="@type"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:otherwise>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:choose>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text> a</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>) { return smth put_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text> (a</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>); }")&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_OBJ(obj) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_SETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO_OBJ(obj) COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:value-of select="$parent/@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_SETTER_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:call-template name="capitalize">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:with-param name="str" select="@name"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync </xsl:call-template>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO ((obj)->)")&#x0A;</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_BASE(base) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#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:call-template>
<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:call-template>
<xsl:text>_TO (base::)")&#x0A;</xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="@if" mode="end"/>
</xsl:template>
<!--
* methods
-->
<xsl:template match="interface//method">
<xsl:apply-templates select="@if" mode="begin"/>
<xsl:text> HRESULT </xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="param">
<xsl:text> (&#x0A;</xsl:text>
<xsl:for-each select="param [position() != last()]">
<xsl:text> </xsl:text>
<xsl:apply-templates select="."/>
<xsl:text>,&#x0A;</xsl:text>
</xsl:for-each>
<xsl:text> </xsl:text>
<xsl:apply-templates select="param [last()]"/>
<xsl:text>&#x0A; );&#x0A;</xsl:text>
</xsl:when>
<xsl:otherwise test="not(param)">
<xsl:text>();&#x0A;</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="@if" mode="end"/>
<xsl:text>&#x0A;</xsl:text>
</xsl:template>
<xsl:template match="interface//method" mode="forwarder">
<!-- if nameOnly='yes' then only the macro name is composed followed by \ -->
<xsl:param name="nameOnly"/>
<xsl:variable name="parent" select="ancestor::interface"/>
<xsl:apply-templates select="@if" mode="begin"/>
<xsl:choose>
<xsl:when test="$nameOnly='yes'">
<!-- COM_FORWARD_Interface_Method_TO(smth) -->
<xsl:text>COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO (smth) </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO(smth) HRESULT STDMETHODCALLTYPE </xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="param">
<xsl:text> (</xsl:text>
<xsl:for-each select="param [position() != last()]">
<xsl:apply-templates select="." mode="forwarder"/>
<xsl:text>, </xsl:text>
</xsl:for-each>
<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:call-template>
<xsl:text> (</xsl:text>
<xsl:for-each select="param [position() != last()]">
<xsl:text>a</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
</xsl:for-each>
<xsl:text>a</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="param [last()]/@name"/>
</xsl:call-template>
<xsl:text>); }</xsl:text>
</xsl:when>
<xsl:otherwise test="not(param)">
<xsl:text>() { return smth </xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>(); }</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>")&#x0A;</xsl:text>
<!-- COM_FORWARD_Interface_Method_TO_OBJ(obj) -->
<xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO_OBJ(obj) COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO ((obj)->)")&#x0A;</xsl:text>
<!-- COM_FORWARD_Interface_Method_TO_BASE(base) -->
<xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO_BASE(base) COM_FORWARD_</xsl:text>
<xsl:value-of select="$parent/@name"/>
<xsl:text>_</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
<xsl:text>_TO (base::)")&#x0A;</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="@if" mode="end"/>
</xsl:template>
<!--
* modules
-->
<xsl:template match="module">
<xsl:apply-templates select="class"/>
</xsl:template>
<!--
* co-classes
-->
<xsl:template match="module/class">[
uuid(<xsl:value-of select="@uuid"/>)
]
<xsl:text>coclass </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>&#x0A;{&#x0A;</xsl:text>
<xsl:for-each select="interface">
<xsl:text> </xsl:text>
<xsl:if test="@default='yes'">
<xsl:text>[default] </xsl:text>
</xsl:if>
<xsl:text>interface </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>;&#x0A;</xsl:text>
</xsl:for-each>
<xsl:for-each select="eventsink">
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="@default='yes'"><xsl:text>[default,source]</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>[source]</xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:text> interface </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>;&#x0A;</xsl:text>
</xsl:for-each>
<xsl:text>&#x0A;}; /* coclass </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text> */&#x0A;&#x0A;</xsl:text>
</xsl:template>
<!--
* enums
-->
<xsl:template match="enum">[
uuid(<xsl:value-of select="@uuid"/>),
v1_enum
]
<xsl:text>typedef enum &#x0A;{&#x0A;</xsl:text>
<xsl:for-each select="const">
<xsl:text> </xsl:text>
<xsl:value-of select="concat(../@name,'_',@name)"/> = <xsl:value-of select="@value"/>
<xsl:choose>
<xsl:when test="position()!=last()"><xsl:text>,&#x0A;</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>&#x0A;</xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:text>} </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>;&#x0A;&#x0A;</xsl:text>
<!-- -->
<xsl:value-of select="concat('/* cross-platform type name for ', @name, ' */&#x0A;')"/>
<xsl:value-of select="concat('cpp_quote(&quot;#define ', @name, '_T', ' ',
@name, '&quot;)&#x0A;&#x0A;')"/>
<xsl:text>&#x0A;&#x0A;</xsl:text>
</xsl:template>
<!--
* method parameters
-->
<xsl:template match="method/param">
<xsl:text>[</xsl:text>
<xsl:choose>
<xsl:when test="@dir='in'">in</xsl:when>
<xsl:when test="@dir='out'">out</xsl:when>
<xsl:when test="@dir='return'">out, retval</xsl:when>
<xsl:otherwise>in</xsl:otherwise>
</xsl:choose>
<xsl:text>] </xsl:text>
<xsl:if test="@safearray='yes'">
<xsl:text>SAFEARRAY(</xsl:text>
</xsl:if>
<xsl:apply-templates select="@type"/>
<xsl:if test="@safearray='yes'">
<xsl:text>)</xsl:text>
</xsl:if>
<xsl:if test="@dir='out' or @dir='return'">
<xsl:text> *</xsl:text>
</xsl:if>
<xsl:text> a</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="method/param" mode="forwarder">
<xsl:choose>
<xsl:when test="@safearray='yes'">
<xsl:text>SAFEARRAY *</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@type"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="@dir='out' or @dir='return' or @safearray='yes'">
<xsl:text> *</xsl:text>
</xsl:if>
<xsl:text> a</xsl:text>
<xsl:call-template name="capitalize">
<xsl:with-param name="str" select="@name"/>
</xsl:call-template>
</xsl:template>
<!--
* attribute/parameter type conversion
-->
<xsl:template match="attribute/@type | param/@type">
<xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
<xsl:choose>
<!-- modifiers -->
<xsl:when test="name(current())='type' and ../@mod">
<xsl:choose>
<xsl:when test="../@mod='ptr'">
<xsl:choose>
<!-- standard types -->
<!--xsl:when test=".='result'">??</xsl:when-->
<xsl:when test=".='boolean'">BOOL *</xsl:when>
<xsl:when test=".='octet'">BYTE *</xsl:when>
<xsl:when test=".='short'">SHORT *</xsl:when>
<xsl:when test=".='unsigned short'">USHORT *</xsl:when>
<xsl:when test=".='long'">LONG *</xsl:when>
<xsl:when test=".='long long'">LONG64 *</xsl:when>
<xsl:when test=".='unsigned long'">ULONG *</xsl:when>
<xsl:when test=".='unsigned long long'">
<xsl:message terminate="yes">
<xsl:value-of select="'&quot;unsigned long long&quot; no longer supported'" />
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<xsl:text>attribute 'mod=</xsl:text>
<xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
<xsl:text>' cannot be used with type </xsl:text>
<xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="../@mod='string'">
<xsl:choose>
<!-- standard types -->
<!--xsl:when test=".='result'">??</xsl:when-->
<xsl:when test=".='uuid'">BSTR</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<xsl:text>attribute 'mod=</xsl:text>
<xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
<xsl:text>' cannot be used with type </xsl:text>
<xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
<xsl:value-of select="concat('value &quot;',../@mod,'&quot; ')"/>
<xsl:text>of attribute 'mod' is invalid!</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<!-- no modifiers -->
<xsl:otherwise>
<xsl:choose>
<!-- standard types -->
<xsl:when test=".='result'">HRESULT</xsl:when>
<xsl:when test=".='boolean'">BOOL</xsl:when>
<xsl:when test=".='octet'">BYTE</xsl:when>
<xsl:when test=".='short'">SHORT</xsl:when>
<xsl:when test=".='unsigned short'">USHORT</xsl:when>
<xsl:when test=".='long'">LONG</xsl:when>
<xsl:when test=".='long long'">LONG64</xsl:when>
<xsl:when test=".='unsigned long'">ULONG</xsl:when>
<xsl:when test=".='char'">CHAR</xsl:when>
<xsl:when test=".='string'">CHAR *</xsl:when>
<xsl:when test=".='wchar'">OLECHAR</xsl:when>
<xsl:when test=".='wstring'">BSTR</xsl:when>
<!-- UUID type -->
<xsl:when test=".='uuid'">GUID</xsl:when>
<!-- system interface types -->
<xsl:when test=".='$unknown'">IUnknown *</xsl:when>
<xsl:when test=".='unsigned long long'">
<xsl:message terminate="yes">
<xsl:value-of select="'&quot;unsigned long long&quot; no longer supported'" />
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<!-- enum types -->
<xsl:when test="
(ancestor::library/enum[@name=current()]) or
(ancestor::library/if[@target=$self_target]/enum[@name=current()])
">
<xsl:value-of select="."/>
</xsl:when>
<!-- custom interface types -->
<xsl:when test="
((ancestor::library/interface[@name=current()]) or
(ancestor::library/if[@target=$self_target]/interface[@name=current()])
)
">
<xsl:value-of select="."/><xsl:text> *</xsl:text>
</xsl:when>
<!-- other types -->
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:text>Unknown parameter type: </xsl:text>
<xsl:value-of select="."/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>