midl.xsl revision f1915f434becbe05b150ebb5f81c0c700556b672
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!-- $Id$ -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * A template to generate a MS IDL compatible interface definition file
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * from the generic interface definition expressed in XML.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync Copyright (C) 2006-2012 Oracle Corporation
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<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<!-- Whether to generate proxy code and type library ('yes'), or just the type-library. -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync// helper definitions
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/////////////////////////////////////////////////////////////////////////////
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * capitalizes the first letter
2f827df539da232220444c27f2b207a707a045b0vboxsync translate(substring($str,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
2f827df539da232220444c27f2b207a707a045b0vboxsync substring($str,2)
9b0ba1d4360299b4e6ee23c946feb5a4f16c6d00vboxsync * uncapitalizes the first letter only if the second one is not capital
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * otherwise leaves the string unchanged
7cca5a9aeb06913531b982bf772508d09b4c2f0bvboxsync <xsl:when test="not(contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ', substring($str,2,1)))">
2f827df539da232220444c27f2b207a707a045b0vboxsync translate(substring($str,1,1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),
2f827df539da232220444c27f2b207a707a045b0vboxsync substring($str,2)
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync// templates
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/////////////////////////////////////////////////////////////////////////////
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * not explicitly matched elements and attributes
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * DO NOT EDIT! This is a generated file.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * MS IDL (MIDL) definition for VirtualBox Main API (COM interfaces)
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * generated from XIDL (XML interface definition).
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>import "unknwn.idl";

</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * ignore all |if|s except those for MIDL target
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:with-param name="nameOnly" select="$nameOnly"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * cpp_quote
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * #if statement (@if attribute)
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * libraries
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 <!-- forward declarations -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="if | interface" mode="forward"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- all enums go first -->
38754ce3fec7064c34ccedb1dbce89cdfba65953vboxsync <!-- declare the interfaces -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>
importlib("stdole2.tlb");

</xsl:text>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- result codes -->
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 <!-- forward declarations -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <xsl:apply-templates select="if | interface" mode="forward"/>
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- all enums go first -->
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])]"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * result codes
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:value-of select="concat('#define ',@name,' ',@value)"/>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * forward declarations
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * interfaces
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync oleautomation
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 <!-- attributes (properties) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- methods -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- 'if' enclosed elements, unsorted -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- Interface implementation forwarder macro -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>/* Interface implementation forwarder macro */
</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:apply-templates select="attribute" mode="forwarder">
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:apply-templates select="method" mode="forwarder">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- 3) COM_FORWARD_Interface_TO_OBJ(obj) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- 4) COM_FORWARD_Interface_TO_BASE(base) -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- end -->
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * attributes
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync <!-- getter -->
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync <!-- setter -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync<xsl:template match="interface//attribute" mode="forwarder">
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- if nameOnly='yes' then only the macro name is composed
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync followed by a space -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:variable name="parent" select="ancestor::interface"/>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO(smth) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO(smth) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO(smth) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>_TO(smth) HRESULT STDMETHODCALLTYPE get_</xsl:text>
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_OBJ(obj) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- getter: COM_FORWARD_Interface_GETTER_Name_TO_BASE(base) -->
7753dc7a3bcd14c9ec9d969cbc1a0155b0673c06vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO(smth) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>_TO(smth) HRESULT STDMETHODCALLTYPE put_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_OBJ(obj) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <!-- setter: COM_FORWARD_Interface_SETTER_Name_TO_BASE(base) -->
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync <xsl:text>cpp_quote("#define COM_FORWARD_</xsl:text>