/*
 * Copyright 2004-2007 Jacek Caban for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include <mshtmdid.h>
#include <mshtmcid.h>
#include <olectl.h>

import "ocidl.idl";
import "dimm.idl";
import "shtypes.idl";

cpp_quote("#include <olectl.h>")

cpp_quote("DEFINE_GUID(SID_SEditCommandTarget,  0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("DEFINE_GUID(SID_SHTMLEditHost,       0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("DEFINE_GUID(SID_SHTMLEditServices,   0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("#define SID_SHTMLWindow IID_IHTMLWindow2")
cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory")

interface IHTMLDocument2;
interface IHTMLStyleSheetsCollection;
interface IHTMLFrameBase;

/*****************************************************************************
 *    IHTMLFiltersCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLFiltersCollection : IDispatch
{
    [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

[
    version(4.0),
    uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B)
]
library MSHTML
{

importlib("stdole2.tlb");

/*****************************************************************************
 *    IHTMLStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyle : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
    HRESULT font([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
    HRESULT font([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
    HRESULT color([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
    HRESULT color([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
    HRESULT padding([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
    HRESULT padding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
    HRESULT border([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
    HRESULT border([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
    HRESULT top([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
    HRESULT top([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
    HRESULT left([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind]
    HRESULT position([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
    HRESULT pixelTop([in] long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
    HRESULT pixelTop([retval, out] long *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
    HRESULT pixelLeft([in] long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
    HRESULT pixelLeft([retval, out] long *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
    HRESULT pixelWidth([in] long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
    HRESULT pixelWidth([retval, out] long *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
    HRESULT pixelHeight([in] long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
    HRESULT pixelHeight([retval, out] long *p);

    [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
    HRESULT posTop([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
    HRESULT posTop([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
    HRESULT posLeft([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
    HRESULT posLeft([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
    HRESULT posWidth([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
    HRESULT posWidth([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
    HRESULT posHeight([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
    HRESULT posHeight([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
    HRESULT clip([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
    HRESULT clip([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
    HRESULT filter([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
    HRESULT filter([retval, out] BSTR *p);

    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in]
        LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [id(DISPID_IHTMLSTYLE_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);
}

/*****************************************************************************
 *    IHTMLStyle2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle2 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    HRESULT direction([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    HRESULT direction([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([out, retval] BSTR *p);

    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
    HRESULT setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
    HRESULT getExpression(
            [in] BSTR propname,
            [out, retval] VARIANT *expression);

    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
    HRESULT removeExpression(
            [in] BSTR propname,
            [out, retval] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    HRESULT position([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    HRESULT position([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    HRESULT bottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    HRESULT bottom([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    HRESULT right([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    HRESULT right([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    HRESULT pixelBottom([in] long v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    HRESULT pixelBottom([out, retval] long *p);

    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    HRESULT pixelRight([in] long v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    HRESULT pixelRight([out, retval] long *p);

    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    HRESULT posBottom([in] float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    HRESULT posBottom([out, retval] float *p);

    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    HRESULT posRight([in] float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    HRESULT posRight([out, retval] float *p);

    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    HRESULT imeMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    HRESULT imeMode([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    HRESULT layoutGrid([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    HRESULT layoutGrid([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([out, retval] BSTR *p);
}

/*****************************************************************************
 *    IHTMLRuleStyle interface
 */
[
	odl,
	oleautomation,
	dual,
	uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLRuleStyle : IDispatch
{
    [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
    HRESULT font([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
    HRESULT font([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
    HRESULT color([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
    HRESULT color([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
    HRESULT padding([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
    HRESULT padding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
    HRESULT border([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
    HRESULT border([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
    HRESULT top([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
    HRESULT top([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
    HRESULT left([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind]
    HRESULT position([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
    HRESULT clip([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
    HRESULT clip([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
    HRESULT filter([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
    HRESULT filter([retval, out] BSTR *p);

    [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in] LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);
}

/*****************************************************************************
 *    DispHTMLStyle dispinterface
 */
[
    hidden,
    uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyle
{
properties:
methods:
    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
    void fontFamily(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
    BSTR fontFamily();

    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
    void fontStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
    BSTR fontStyle();

    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
    void fontVariant(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
    BSTR fontVariant();

    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
    void fontWeight(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
    BSTR fontWeight();

    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
    void fontSize(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
    VARIANT fontSize();

    [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
    void font(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
    BSTR font();

    [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
    void color(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
    VARIANT color();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
    BSTR background();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    void backgroundColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    VARIANT backgroundColor();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    void backgroundImage(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    BSTR backgroundImage();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    void backgroundRepeat(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    BSTR backgroundRepeat();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    void backgroundAttachment(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    BSTR backgroundAttachment();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
    void backgroundPosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
    BSTR backgroundPosition();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    void backgroundPositionX(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    VARIANT backgroundPositionX();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    void backgroundPositionY(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    VARIANT backgroundPositionY();

    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
    void wordSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
    VARIANT wordSpacing();

    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
    void letterSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
    VARIANT letterSpacing();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
    void textDecoration(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
    BSTR textDecoration();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
    void textDecorationNone(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
    VARIANT_BOOL textDecorationNone();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
    void textDecorationUnderline(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
    VARIANT_BOOL textDecorationUnderline();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
    void textDecorationOverline(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
    VARIANT_BOOL textDecorationOverline();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
    void textDecorationLineThrough(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
    VARIANT_BOOL textDecorationLineThrough();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
    void textDecorationBlink(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
    VARIANT_BOOL textDecorationBlink();

    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
    void verticalAlign(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
    VARIANT verticalAlign();

    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
    void textTransform(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
    BSTR textTransform();

    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
    void textAlign(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
    BSTR textAlign();

    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
    void textIndent(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
    VARIANT textIndent();

    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
    void lineHeight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
    VARIANT lineHeight();

    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
    void marginTop(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
    VARIANT marginTop();

    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
    void marginRight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
    VARIANT marginRight();

    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
    void marginBottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
    VARIANT marginBottom();

    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
    void marginLeft(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
    VARIANT marginLeft();

    [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
    void margin(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
    BSTR margin();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
    void paddingTop(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
    VARIANT paddingTop();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
    void paddingRight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
    VARIANT paddingRight();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
    void paddingBottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
    VARIANT paddingBottom();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
    void paddingLeft(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
    VARIANT paddingLeft();

    [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
    void padding(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
    BSTR padding();

    [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
    void border(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
    BSTR border();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
    void borderTop(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
    BSTR borderTop();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
    void borderRight(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
    BSTR borderRight();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
    void borderBottom(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
    BSTR borderBottom();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
    void borderLeft(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
    BSTR borderLeft();

    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
    void borderColor(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
    BSTR borderColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    void borderTopColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    VARIANT borderTopColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    void borderRightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    VARIANT borderRightColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    void borderBottomColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    VARIANT borderBottomColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    void borderLeftColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    VARIANT borderLeftColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
    void borderWidth(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
    BSTR borderWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    void borderTopWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    VARIANT borderTopWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    void borderRightWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    VARIANT borderRightWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    void borderBottomWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    VARIANT borderBottomWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    void borderLeftWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    VARIANT borderLeftWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
    void borderStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
    BSTR borderStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    void borderTopStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    BSTR borderTopStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    void borderRightStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    BSTR borderRightStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    void borderBottomStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    BSTR borderBottomStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    void borderLeftStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    BSTR borderLeftStyle();

    [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
    VARIANT width();

    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
    VARIANT height();

    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
    void styleFloat(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
    BSTR styleFloat();

    [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
    void clear(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
    BSTR clear();

    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
    void display(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
    BSTR display();

    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
    void visibility(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
    BSTR visibility();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
    void listStyleType(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
    BSTR listStyleType();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    void listStylePosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    BSTR listStylePosition();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    void listStyleImage(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    BSTR listStyleImage();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
    void listStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
    BSTR listStyle();

    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
    void whiteSpace(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
    BSTR whiteSpace();

    [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
    void top(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
    VARIANT top();

    [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
    void left(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
    VARIANT left();

    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
    void zIndex(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
    VARIANT zIndex();

    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
    void overflow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
    BSTR overflow();

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    void pageBreakBefore(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    BSTR pageBreakBefore();

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    void pageBreakAfter(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    BSTR pageBreakAfter();

    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
    void cssText(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
    BSTR cssText();

    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
    void pixelTop(long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
    long pixelTop();

    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
    void pixelLeft(long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
    long pixelLeft();

    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
    void pixelWidth(long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
    long pixelWidth();

    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
    void pixelHeight(long v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
    long pixelHeight();

    [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
    void posTop(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
    float posTop();

    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
    void posLeft(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
    float posLeft();

    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
    void posWidth(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
    float posWidth();

    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
    void posHeight(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
    float posHeight();

    [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
    void cursor(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
    BSTR cursor();

    [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
    void clip(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
    BSTR clip();

    [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
    void filter(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
    BSTR filter();

    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    void tableLayout(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    BSTR tableLayout();

    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    void borderCollapse(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    BSTR borderCollapse();

    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    void direction(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    BSTR direction();

    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    void behavior(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    BSTR behavior();

    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    void position(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    BSTR position();

    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    void unicodeBidi(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    BSTR unicodeBidi();

    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    void bottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    VARIANT bottom();

    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    void right(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    VARIANT right();

    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    void pixelBottom(long v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    long pixelBottom();

    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    void pixelRight(long v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    long pixelRight();

    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    void posBottom(float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    float posBottom();

    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    void posRight(float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    float posRight();

    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    void imeMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    BSTR imeMode();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    void rubyAlign(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    BSTR rubyAlign();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    void rubyPosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    BSTR rubyPosition();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    void rubyOverhang(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    BSTR rubyOverhang();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    void layoutGridChar(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    VARIANT layoutGridChar();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    void layoutGridLine(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    VARIANT layoutGridLine();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    void layoutGridMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    BSTR layoutGridMode();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    void layoutGridType(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    BSTR layoutGridType();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    void layoutGrid(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    BSTR layoutGrid();

    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    void wordBreak(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    BSTR wordBreak();

    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    void lineBreak(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    BSTR lineBreak();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    void textJustify(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    BSTR textJustify();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    void textJustifyTrim(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    BSTR textJustifyTrim();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    void textKashida(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    VARIANT textKashida();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    void textAutospace(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    BSTR textAutospace();

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    void overflowX(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    BSTR overflowX();

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    void overflowY(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    BSTR overflowY();

    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    void accelerator(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    BSTR accelerator();

    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    void layoutFlow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    BSTR layoutFlow();

    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    void zoom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    VARIANT zoom();

    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    void wordWrap(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    BSTR wordWrap();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    void textUnderlinePosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    BSTR textUnderlinePosition();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    void scrollbarBaseColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    VARIANT scrollbarBaseColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    void scrollbarFaceColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    VARIANT scrollbarFaceColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    void scrollbar3dLightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbar3dLightColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    void scrollbarShadowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarShadowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    void scrollbarHighlightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbarHighlightColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    void scrollbarDarkShadowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarDarkShadowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    void scrollbarArrowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    VARIANT scrollbarArrowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    void scrollbarTrackColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    VARIANT scrollbarTrackColor();

    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    void writingMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    BSTR writingMode();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    void textAlignLast(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    BSTR textAlignLast();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    void textKashidaSpace(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    VARIANT textKashidaSpace();

    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    void textOverflow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    BSTR textOverflow();

    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    void minHeight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    VARIANT minHeight();
}

/*****************************************************************************
 *    IHTMLRenderStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRenderStyle : IDispatch
{
    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
    HRESULT textLineThroughStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
    HRESULT textLineThroughStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
    HRESULT textUnderlineStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
    HRESULT textUnderlineStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
    HRESULT textEffect([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
    HRESULT textEffect([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
    HRESULT textColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
    HRESULT textColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
    HRESULT textBackgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
    HRESULT textBackgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
    HRESULT textDecorationColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
    HRESULT textDecorationColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
    HRESULT renderingPriority([in] long v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
    HRESULT renderingPriority([retval, out] long *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
    HRESULT defaultTextSelection([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
    HRESULT defaultTextSelection([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLCurrentStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCurrentStyle : IDispatch
{
    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
    HRESULT position([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
    HRESULT color([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
    HRESULT fontWeight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
    HRESULT top([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
    HRESULT width([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
    HRESULT height([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
    HRESULT textAlign([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
    HRESULT display([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
    HRESULT visibility([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
    HRESULT clear([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
    HRESULT clipTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
    HRESULT clipRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
    HRESULT clipBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
    HRESULT clipLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
    HRESULT overflow([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
    HRESULT cursor([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
    HRESULT direction([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([retval, out] BSTR *p);

    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
    HRESULT right([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
    HRESULT bottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
    HRESULT imeMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
    HRESULT blockDirection([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
    HRESULT borderColor([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
    HRESULT padding([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
    HRESULT margin([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
    HRESULT textTransform([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLCurrentStyle dispinterface
 */
[
    hidden,
    uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLCurrentStyle
{
properties:
methods:
    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
    BSTR position();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
    BSTR styleFloat();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
    VARIANT color();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    VARIANT backgroundColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
    BSTR fontFamily();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
    BSTR fontStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
    BSTR fontVariant();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
    VARIANT fontWeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
    VARIANT fontSize();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    BSTR backgroundImage();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    VARIANT backgroundPositionX();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    VARIANT backgroundPositionY();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    BSTR backgroundRepeat();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    VARIANT borderLeftColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    VARIANT borderTopColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    VARIANT borderRightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    VARIANT borderBottomColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    BSTR borderTopStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    BSTR borderRightStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    BSTR borderBottomStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    BSTR borderLeftStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    VARIANT borderTopWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    VARIANT borderRightWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    VARIANT borderBottomWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    VARIANT borderLeftWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
    VARIANT left();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
    VARIANT top();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
    VARIANT width();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
    VARIANT height();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
    VARIANT paddingLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
    VARIANT paddingTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
    VARIANT paddingRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
    VARIANT paddingBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
    BSTR textAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
    BSTR textDecoration();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
    BSTR display();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
    BSTR visibility();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
    VARIANT zIndex();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
    VARIANT letterSpacing();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
    VARIANT lineHeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
    VARIANT textIndent();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
    VARIANT verticalAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    BSTR backgroundAttachment();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
    VARIANT marginTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
    VARIANT marginRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
    VARIANT marginBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
    VARIANT marginLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
    BSTR clear();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
    BSTR listStyleType();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    BSTR listStylePosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    BSTR listStyleImage();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
    VARIANT clipTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
    VARIANT clipRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
    VARIANT clipBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
    VARIANT clipLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
    BSTR overflow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    BSTR pageBreakBefore();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    BSTR pageBreakAfter();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
    BSTR cursor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
    BSTR tableLayout();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
    BSTR borderCollapse();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
    BSTR direction();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
    BSTR behavior();

    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
    BSTR unicodeBidi();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
    VARIANT right();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
    VARIANT bottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
    BSTR imeMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
    BSTR rubyAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
    BSTR rubyPosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
    BSTR rubyOverhang();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
    BSTR textAutospace();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
    BSTR lineBreak();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
    BSTR wordBreak();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
    BSTR textJustify();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
    BSTR textJustifyTrim();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
    VARIANT textKashida();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
    BSTR blockDirection();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
    VARIANT layoutGridChar();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
    VARIANT layoutGridLine();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
    BSTR layoutGridMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
    BSTR layoutGridType();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
    BSTR borderStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
    BSTR borderColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
    BSTR borderWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
    BSTR padding();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
    BSTR margin();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
    BSTR accelerator();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
    BSTR overflowX();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
    BSTR overflowY();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
    BSTR textTransform();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
    BSTR layoutFlow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
    BSTR wordWrap();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
    BSTR textUnderlinePosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
    VARIANT_BOOL hasLayout();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
    VARIANT scrollbarBaseColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
    VARIANT scrollbarFaceColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbar3dLightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarShadowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbarHighlightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarDarkShadowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
    VARIANT scrollbarArrowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
    VARIANT scrollbarTrackColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
    BSTR writingMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
    VARIANT zoom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
    BSTR filter();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
    BSTR textAlignLast();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
    VARIANT textKashidaSpace();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
    VARIANT_BOOL isBlock();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
    BSTR textOverflow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
    VARIANT minHeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
    VARIANT wordSpacing();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
    BSTR whiteSpace();
}

/*****************************************************************************
 *    IHTMLRect interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRect : IDispatch
{
    [propput, id(DISPID_IHTMLRECT_LEFT)]
    HRESULT left([in] long v);

    [propget, id(DISPID_IHTMLRECT_LEFT)]
    HRESULT left([retval, out] long *p);

    [propput, id(DISPID_IHTMLRECT_TOP)]
    HRESULT top([in] long v);

    [propget, id(DISPID_IHTMLRECT_TOP)]
    HRESULT top([retval, out] long *p);

    [propput, id(DISPID_IHTMLRECT_RIGHT)]
    HRESULT right([in] long v);

    [propget, id(DISPID_IHTMLRECT_RIGHT)]
    HRESULT right([retval, out] long *p);

    [propput, id(DISPID_IHTMLRECT_BOTTOM)]
    HRESULT bottom([in] long v);

    [propget, id(DISPID_IHTMLRECT_BOTTOM)]
    HRESULT bottom([retval, out] long *p);
}

/*****************************************************************************
 *    IHTMLRectCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRectCollection : IDispatch
{
    [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLRECTCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

/*****************************************************************************
 *    IHTMLDOMNode interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMNode : IDispatch
{
    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    HRESULT nodeType([retval, out] long *p);

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    HRESULT parentNode([retval, out] IHTMLDOMNode **p);

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    HRESULT childNodes([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    HRESULT attributes([retval, out] IDispatch **p);

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    HRESULT insertBefore(
        [in] IHTMLDOMNode *newChild,
        [optional, in] VARIANT refChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    HRESULT removeChild(
        [in] IHTMLDOMNode *oldChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    HRESULT replaceChild(
        [in] IHTMLDOMNode *newChild,
        [in] IHTMLDOMNode *oldChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    HRESULT cloneNode(
        [in] VARIANT_BOOL fDeep,
        [retval, out] IHTMLDOMNode **clonedNode);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    HRESULT removeNode(
        [defaultvalue(0), in] VARIANT_BOOL fDeep,
        [retval, out] IHTMLDOMNode **removed);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    HRESULT swapNode(
        [in] IHTMLDOMNode *otherNode,
        [retval, out] IHTMLDOMNode **swappedNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    HRESULT replaceNode(
        [in] IHTMLDOMNode *replacement,
        [retval, out] IHTMLDOMNode **replaced);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    HRESULT appendChild(
        [in] IHTMLDOMNode *newChild,
        [retval, out] IHTMLDOMNode **node);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    HRESULT firstChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    HRESULT lastChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
}

/*****************************************************************************
 *    IHTMLDOMNode2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMNode2 : IDispatch
{
    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    HRESULT ownerDocument([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLDOMAttribute interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMAttribute : IDispatch
{
    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
    HRESULT specified([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    IHTMLDOMTextNode interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMTextNode : IDispatch
{
    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    HRESULT data([in] BSTR v);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    HRESULT data([out, retval] BSTR *p);

    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
    HRESULT toString([out, retval] BSTR *String);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
    HRESULT length([out, retval] long *p);

    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
    HRESULT splitText(
            [in] long offset,
            [out, retval] IHTMLDOMNode **pRetNode);
}

/*****************************************************************************
 *    IHTMLDOMImplementation interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMImplementation : IDispatch
{
    [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)]
    HRESULT hasFeature(
        [in] BSTR bstrfeature,
        [optional, in] VARIANT version,
        [retval, out] VARIANT_BOOL *pfHasFeature);
}

/*****************************************************************************
 *    DispHTMLDOMTextNode dispinterface
 */
[
    hidden,
    uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLDOMTextNode
{
properties:
methods:
    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    void data(BSTR v);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    BSTR data();

    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
    BSTR toString();

    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
    long length();

    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
    IHTMLDOMNode *splitText([in] long offset);

    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
    BSTR substringData(
            [in] long offset,
            [in] long Count);

    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
    void appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
    void insertData(
            [in] long offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
    void deleteData(
            [in] long offset,
            [in] long Count);

    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
    void replaceData(
            [in] long offset,
            [in] long Count,
            [in] BSTR bstrstring);

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode* nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();
}

/*****************************************************************************
 *    IHTMLDOMChildrenCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMChildrenCollection : IDispatch
{
    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
    HRESULT length([out, retval] long *p);

    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([out, retval] IUnknown **p);

    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
    HRESULT item(
            [in] long index,
            [out, retval] IDispatch **ppItem);
}

/*****************************************************************************
 *    DispDOMChildrenCollection dispinterface
 */
[
    hidden,
    uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispDOMChildrenCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
    IDispatch *item([in] long index);
}

interface IHTMLElementCollection;

/*****************************************************************************
 *    IHTMLElement interface
 */
[
    odl,
    dual,
    oleautomation,
    uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLElement : IDispatch
{
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in] LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)]
    HRESULT className([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)]
    HRESULT className([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_ID)]
    HRESULT id([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID)]
    HRESULT id([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    HRESULT tagName([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    HRESULT parentElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLELEMENT_STYLE)]
    HRESULT style([retval, out] IHTMLStyle **p);

    [propput, id(DISPID_IHTMLELEMENT_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK)]
    HRESULT onclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK)]
    HRESULT onclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
    HRESULT ondblclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
    HRESULT ondblclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
    HRESULT onkeydown([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
    HRESULT onkeydown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)]
    HRESULT onkeyup([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)]
    HRESULT onkeyup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
    HRESULT onkeypress([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
    HRESULT onkeypress([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
    HRESULT onmouseout([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
    HRESULT onmouseout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
    HRESULT onmouseover([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
    HRESULT onmouseover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
    HRESULT onmousemove([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
    HRESULT onmousemove([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
    HRESULT onmousedown([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
    HRESULT onmousedown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
    HRESULT onmouseup([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
    HRESULT onmouseup([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    HRESULT document([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLELEMENT_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)]
    HRESULT language([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)]
    HRESULT language([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
    HRESULT onselectstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
    HRESULT onselectstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    HRESULT scrollIntoView([optional, in] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    HRESULT contains(
        [in] IHTMLElement *pChild,
        [retval, out] VARIANT_BOOL *pfResult);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)]
    HRESULT sourceIndex([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    HRESULT recordNumber([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    HRESULT lang([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    HRESULT lang([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    HRESULT offsetLeft([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    HRESULT offsetTop([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    HRESULT offsetWidth([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    HRESULT offsetHeight([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    HRESULT offsetParent([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    HRESULT innerHTML([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    HRESULT innerHTML([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    HRESULT innerText([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    HRESULT innerText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    HRESULT outerHTML([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    HRESULT outerHTML([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    HRESULT outerText([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    HRESULT outerText([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    HRESULT parentTextEdit([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    HRESULT isTextEdit([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLELEMENT_CLICK)]
    HRESULT click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    HRESULT filters([retval, out] IHTMLFiltersCollection **p);

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
    HRESULT ondragstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
    HRESULT ondragstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
    HRESULT onafterupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
    HRESULT onafterupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
    HRESULT onerrorupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
    HRESULT onerrorupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
    HRESULT onrowexit([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
    HRESULT onrowexit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)]
    HRESULT onrowenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)]
    HRESULT onrowenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
    HRESULT ondatasetchanged([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
    HRESULT ondatasetchanged([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
    HRESULT ondatasetcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
    HRESULT ondatasetcomplete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
    HRESULT onfilterchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
    HRESULT onfilterchange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    HRESULT children([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    HRESULT all([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement2 : IDispatch
{
    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    HRESULT scopeName([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    HRESULT releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    HRESULT onlosecapture([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    HRESULT onlosecapture([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    HRESULT componentFromPoint(
        [in] long x,
        [in] long y,
        [retval, out] BSTR *component);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    HRESULT doScroll([optional, in] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    HRESULT ondrag([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    HRESULT ondrag([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    HRESULT ondragend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    HRESULT ondragend([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    HRESULT ondragenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    HRESULT ondragenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    HRESULT ondragover([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    HRESULT ondragover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    HRESULT ondragleave([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    HRESULT ondragleave([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    HRESULT ondrop([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    HRESULT ondrop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    HRESULT onbeforecut([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    HRESULT onbeforecut([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    HRESULT oncut([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    HRESULT oncut([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    HRESULT onbeforecopy([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    HRESULT onbeforecopy([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    HRESULT oncopy([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    HRESULT oncopy([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    HRESULT onbeforepaste([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    HRESULT onbeforepaste([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    HRESULT onpaste([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    HRESULT onpaste([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p);

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol);

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect);

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    HRESULT setExpression(
        [in] BSTR propname,
        [in] BSTR expression,
        [defaultvalue(""), in] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    HRESULT getExpression(
        [in] BSTR propname,
        [retval, out] VARIANT *expression);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    HRESULT removeExpression(
        [in] BSTR propname,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short *p);

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    HRESULT focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    HRESULT onresize([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    HRESULT addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    HRESULT removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    HRESULT clientHeight([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    HRESULT clientWidth([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    HRESULT clientTop([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    HRESULT clientLeft([retval, out] long *p);

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    HRESULT attachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp,
        [retval, out] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    HRESULT detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    HRESULT readyState([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    HRESULT dir([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    HRESULT createControlRange([retval, out] IDispatch **range);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    HRESULT scrollHeight([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    HRESULT scrollWidth([retval, out] long *p);

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([in] long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([retval, out] long *p);

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([in] long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([retval, out] long *p);

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    HRESULT clearAttributes();

    [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)]
    HRESULT mergeAttributes([in] IHTMLElement *mergeThis);

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    HRESULT insertAdjacentElement(
        [in] BSTR where,
        [in] IHTMLElement *insertedElement,
        [retval, out] IHTMLElement **inserted);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    HRESULT applyElement(
        [in] IHTMLElement *apply,
        [in] BSTR where,
        [retval, out] IHTMLElement **applied);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    HRESULT getAdjacentText(
        [in] BSTR where,
        [retval, out] BSTR *text);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    HRESULT replaceAdjacentText(
        [in] BSTR where,
        [in] BSTR newText,
        [retval, out] BSTR *oldText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    HRESULT addBehavior(
        [in] BSTR bstrUrl,
        [optional, in] VARIANT *pvarFactory,
        [retval, out] long *pCookie);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    HRESULT removeBehavior(
        [in] long cookie,
        [retval, out] VARIANT_BOOL *pfResult);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    HRESULT runtimeStyle([retval, out] IHTMLStyle **p);

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    HRESULT behaviorUrns([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    HRESULT tagUrn([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    HRESULT tagUrn([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    HRESULT readyStateValue([retval, out] long *p);

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);
}


/*****************************************************************************
 *    IHTMLElement3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement3 : IDispatch
{
    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in]
    IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    HRESULT isMultiLine([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    HRESULT onlayoutcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    HRESULT onlayoutcomplete([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    HRESULT onpage([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    HRESULT onpage([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    HRESULT inflateBlock([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    HRESULT inflateBlock([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    HRESULT contentEditable([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    HRESULT contentEditable([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    HRESULT isContentEditable([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    HRESULT hideFocus([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    HRESULT hideFocus([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    HRESULT isDisabled([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    HRESULT onmove([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    HRESULT onmove([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    HRESULT fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT* pvarEventObject,
        [retval, out] VARIANT_BOOL* pfCancelled);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    HRESULT onresizestart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    HRESULT onresizestart([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    HRESULT onresizeend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    HRESULT onresizeend([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    HRESULT onmovestart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    HRESULT onmovestart([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    HRESULT onmoveend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    HRESULT onmoveend([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    HRESULT onmouseenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    HRESULT onmouseenter([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    HRESULT onmouseleave([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    HRESULT onmouseleave([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out]
    VARIANT_BOOL* pfRet);

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    HRESULT glyphMode([retval, out] LONG * p);
};
/*****************************************************************************
 *    IHTMLElement4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement4 : IDispatch
{
    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    HRESULT normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    HRESULT getAttributeNode([in] BSTR bstrname,
        [retval, out] IHTMLDOMAttribute** ppAttribute);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    HRESULT setAttributeNode(
        [in] IHTMLDOMAttribute* pattr,
        [retval, out] IHTMLDOMAttribute** ppretAttribute);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    HRESULT removeAttributeNode(
        [in] IHTMLDOMAttribute* pattr,
        [retval, out] IHTMLDOMAttribute** ppretAttribute);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([retval, out] VARIANT * p);
};

/*****************************************************************************
 *    IHTMLGenericElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLGenericElement : IDispatch
{
    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
    HRESULT recordset([out, retval] IDispatch **p);

    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
    HRESULT namedRecordset(
            [in] BSTR dataMember,
            [in, optional] VARIANT *hierarchy,
            [out, retval] IDispatch **ppRecordset);
}

/*****************************************************************************
 *    DispHTMLGenericElement dispinterface
 */
[
    hidden,
    uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLGenericElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
    IDispatch *recordset();

    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
    IDispatch *namedRecordset(
            [in] BSTR dataMember,
            [in, optional] VARIANT *hierarchy);
}

/*****************************************************************************
 *    IHTMLStyleSheetRule interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetRule : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    HRESULT selectorText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    HRESULT selectorText([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)]
    HRESULT style([retval, out] IHTMLRuleStyle **p);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    IHTMLStyleSheetRulesCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetRulesCollection : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
    HRESULT item(
        [in] long index,
        [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
}

/*****************************************************************************
 *    IHTMLStyleSheet interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheet : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
    HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p);

    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
    HRESULT owningElement([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
    HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p);

    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
    HRESULT id([retval, out] BSTR *p);

    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
    HRESULT addImport(
        [in] BSTR bstrURL,
        [defaultvalue(-1), in] long lIndex,
        [retval, out] long *plIndex);

    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
    HRESULT addRule(
        [in] BSTR bstrSelector,
        [in] BSTR bstrStyle,
        [defaultvalue(-1), in] long lIndex,
        [retval, out] long *plNewIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
    HRESULT removeImport([in] long lIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
    HRESULT removeRule([in] long lIndex);

    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    HRESULT media([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    HRESULT media([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    HRESULT cssText([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
    HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p);
}

/*****************************************************************************
 *    IHTMLStyleSheetsCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetsCollection : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

/*****************************************************************************
 *    IHTMLTxtRange interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTxtRange : IDispatch
{
    [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)]
    HRESULT htmlText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTXTRANGE_TEXT)]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLTXTRANGE_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)]
    HRESULT parentElement([retval, out] IHTMLElement **parent);

    [id(DISPID_IHTMLTXTRANGE_DUPLICATE)]
    HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate);

    [id(DISPID_IHTMLTXTRANGE_INRANGE)]
    HRESULT inRange(
        [in] IHTMLTxtRange *Range,
        [retval, out] VARIANT_BOOL *InRange);

    [id(DISPID_IHTMLTXTRANGE_ISEQUAL)]
    HRESULT isEqual(
        [in] IHTMLTxtRange *Range,
        [retval, out] VARIANT_BOOL *IsEqual);

    [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)]
    HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart);

    [id(DISPID_IHTMLTXTRANGE_COLLAPSE)]
    HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start);

    [id(DISPID_IHTMLTXTRANGE_EXPAND)]
    HRESULT expand(
        [in] BSTR Unit,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_MOVE)]
    HRESULT move(
        [in] BSTR Unit,
        [defaultvalue(1), in] long Count,
        [retval, out] long *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_MOVESTART)]
    HRESULT moveStart(
        [in] BSTR Unit,
        [defaultvalue(1), in] long Count,
        [retval, out] long *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_MOVEEND)]
    HRESULT moveEnd(
        [in] BSTR Unit,
        [defaultvalue(1), in] long Count,
        [retval, out] long *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_SELECT)]
    HRESULT select();

    [id(DISPID_IHTMLTXTRANGE_PASTEHTML)]
    HRESULT pasteHTML([in] BSTR html);

    [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)]
    HRESULT moveToElementText([in] IHTMLElement *element);

    [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)]
    HRESULT setEndPoint(
        [in] BSTR how,
        [in] IHTMLTxtRange *SourceRange);

    [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)]
    HRESULT compareEndPoints(
        [in] BSTR how,
        [in] IHTMLTxtRange *SourceRange,
        [retval, out] long *ret);

    [id(DISPID_IHTMLTXTRANGE_FINDTEXT)]
    HRESULT findText(
        [in] BSTR String,
        [defaultvalue(1073741823), in] long count,
        [defaultvalue(0), in] long Flags,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)]
    HRESULT moveToPoint(
        [in] long x,
        [in] long y);

    [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)]
    HRESULT getBookmark([retval, out] BSTR *Boolmark);

    [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)]
    HRESULT moveToBookmark(
        [in] BSTR Bookmark,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)]
    HRESULT queryCommandSupported(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)]
    HRESULT queryCommandEnabled(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)]
    HRESULT queryCommandState(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)]
    HRESULT queryCommandIndeterm(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)]
    HRESULT queryCommandText(
        [in] BSTR cmdID,
        [retval, out] BSTR *pcmdText);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)]
    HRESULT queryCommandValue(
        [in] BSTR cmdID,
        [retval, out] VARIANT *pcmdValue);

    [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)]
    HRESULT execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)]
    HRESULT execCommandShowHelp(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);
}

/*****************************************************************************
 *    IHTMLFormElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLFormElement : IDispatch
{
    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    HRESULT action([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    HRESULT action([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_DIR)]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_DIR)]
    HRESULT dir([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    HRESULT encoding([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    HRESULT encoding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    HRESULT method([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    HRESULT method([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
    HRESULT elements([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    HRESULT target([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    HRESULT target([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    HRESULT onsubmit([in] VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    HRESULT onsubmit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    HRESULT onreset([in] VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    HRESULT onreset([retval, out] VARIANT *p);

    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
    HRESULT submit();

    [id(DISPID_IHTMLFORMELEMENT_RESET)]
    HRESULT reset();

    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    HRESULT length([in] long v);

    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLFORMELEMENT_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval, out] IDispatch **pdisp);

    [id(DISPID_IHTMLFORMELEMENT_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    IHTMLTextContainer interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTextContainer : IDispatch
{
    [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)]
    HRESULT createControlRange([retval, out] IDispatch **range);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable]
    HRESULT scrollHeight([retval, out] long *p);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable]
    HRESULT scrollWidth([retval, out] long *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([in] long v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([retval, out] long *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([in] long v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([retval, out] long *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([retval, out] VARIANT *p);
}

/*****************************************************************************
 *    IHTMLImgElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLImgElement : IDispatch
{
    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
    HRESULT isMap([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
    HRESULT isMap([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
    HRESULT useMap([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
    HRESULT useMap([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
    HRESULT fileSize([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
    HRESULT fileCreatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
    HRESULT fileModifiedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
    HRESULT fileUpdatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
    HRESULT nameProp([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
    HRESULT vspace([in] long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
    HRESULT vspace([retval, out] long *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
    HRESULT hspace([in] long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
    HRESULT hspace([retval, out] long *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ALT)]
    HRESULT alt([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALT)]
    HRESULT alt([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_SRC)]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
    HRESULT lowsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
    HRESULT lowsrc([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_VRML)]
    HRESULT vrml([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VRML)]
    HRESULT vrml([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
    HRESULT dynsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
    HRESULT dynsrc([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
    HRESULT complete([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)]
    HRESULT loop([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)]
    HRESULT loop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
    HRESULT onabort([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
    HRESULT onabort([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    HRESULT width([in] long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    HRESULT width([retval, out] long *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    HRESULT height([in] long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    HRESULT height([retval, out] long *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_START)]
    HRESULT start([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_START)]
    HRESULT start([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLImageElementFactory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F38E-98B5-11CF-BB82-00AAA0BDCE0B)
]
interface IHTMLImageElementFactory : IDispatch
{
    [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)]
    HRESULT create(
        [optional, in] VARIANT width,
        [optional, in] VARIANT height,
        [retval, out]  IHTMLImgElement **elem);
}

/*****************************************************************************
 *    DispHTMLImg interface
 */
[
    hidden,
    uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLImg
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
    void isMap(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
    VARIANT_BOOL isMap();

    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
    void useMap(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
    BSTR useMap();

    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
    BSTR mimeType();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
    BSTR fileSize();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
    BSTR fileCreatedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
    BSTR fileModifiedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
    BSTR fileUpdatedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
    BSTR protocol();

    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
    BSTR href();

    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
    BSTR nameProp();

    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
    VARIANT border();

    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
    void vspace(long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
    long vspace();

    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
    void hspace(long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
    long hspace();

    [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
    void alt(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
    BSTR alt();

    [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
    BSTR src();

    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
    void lowsrc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
    BSTR lowsrc();

    [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
    void vrml(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
    BSTR vrml();

    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
    void dynsrc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
    BSTR dynsrc();

    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
    VARIANT_BOOL complete();

    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
    void loop(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
    VARIANT loop();

    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
    void onabort(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
    VARIANT onabort();

    [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    void width(long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    long width();

    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    void height(long v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    long height();

    [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
    void start(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
    BSTR start();

    [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
    void longDesc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
    BSTR longDesc();
};

/*****************************************************************************
 *    IHTMLUniqueName interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLUniqueName : IDispatch
{
    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    HRESULT uniqueNumber([retval, out] long * p);

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    HRESULT uniqueID([retval, out] BSTR * p);
};

/*****************************************************************************
 *    IHTMLControlElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLControlElement : IDispatch
{
    [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short * p);

    [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)]
    HRESULT focus();

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
    HRESULT onresize([retval, out] VARIANT * p);

    [id(DISPID_IHTMLCONTROLELEMENT_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)]
    HRESULT addFilter([in] IUnknown* pUnk);

    [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)]
    HRESULT removeFilter([in] IUnknown* pUnk);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable]
    HRESULT clientHeight([retval, out] long * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable]
    HRESULT clientWidth([retval, out] long * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable]
    HRESULT clientTop([retval, out] long * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]
    HRESULT clientLeft([retval, out] long * p);
};

/*****************************************************************************
 *    IHTMLBodyElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBodyElement : IDispatch
{
    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    HRESULT bgProperties([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    HRESULT bgProperties([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    HRESULT leftMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    HRESULT leftMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    HRESULT topMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    HRESULT topMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    HRESULT rightMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    HRESULT rightMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    HRESULT bottomMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    HRESULT bottomMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    HRESULT noWrap([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    HRESULT noWrap([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    HRESULT text([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    HRESULT link([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    HRESULT link([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    HRESULT vLink([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    HRESULT vLink([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    HRESULT aLink([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    HRESULT aLink([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    HRESULT onunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    HRESULT onunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    HRESULT scroll([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    HRESULT scroll([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    HRESULT onbeforeunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    HRESULT onbeforeunload([retval, out] VARIANT *p);

    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

/*****************************************************************************
 *    IHTMLBodyElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBodyElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([retval, out] VARIANT *p);
}

[
    hidden,
    uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLBody
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement* parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle* style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([optional, in] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement* pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement* offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
        [in] BSTR where,
        [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
        [in] BSTR where,
        [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement* parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)] void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection* filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch* children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch* all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint([in] long x,[in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([optional, in] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
     void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
     VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle* currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection* getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect* getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
        [in] BSTR propname,
        [in] BSTR expr,
        [defaultvalue(""), in] BSTR lang);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
     VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown* pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown* pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
        [in] BSTR event,
        [in] IDispatch* pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
        [in] BSTR event,
        [in] IDispatch* pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
     void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch* createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement* insertAdjacentElement(
        [in] BSTR where,
        [in] IHTMLElement* insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle* runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch* behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection* getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
        [in] IHTMLElement* mergeThis,
        [optional, in] VARIANT* pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT* pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
     void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);
    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
     IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode* parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch* childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch* attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode* insertBefore(
        [in] IHTMLDOMNode* newChild,
        [optional, in] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode* replaceChild(
        [in] IHTMLDOMNode* newChild,
        [in] IHTMLDOMNode* oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode* firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode* lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode* previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode* nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch* ownerDocument();

    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    BSTR background();

    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    void bgProperties(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    BSTR bgProperties();

    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    void leftMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    VARIANT leftMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    void topMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    VARIANT topMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    void rightMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    VARIANT rightMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    void bottomMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    VARIANT bottomMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    void noWrap(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    VARIANT_BOOL noWrap();

    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    void text(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    VARIANT text();

    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    void link(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    VARIANT link();

    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    void vLink(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    VARIANT vLink();

    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    void aLink(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    VARIANT aLink();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    void onunload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    VARIANT onunload();

    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    void scroll(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    BSTR scroll();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    void onselect(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    VARIANT onselect();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    void onbeforeunload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    VARIANT onbeforeunload();

    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
    IHTMLTxtRange* createTextRange();

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    void onbeforeprint(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    VARIANT onbeforeprint();

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    void onafterprint(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    VARIANT onafterprint();
};

[
    uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLBody
{
    [default]           dispinterface DispHTMLBody;
    [source, default]   dispinterface HTMLTextContainerEvents;
    [source]            dispinterface HTMLTextContainerEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLControlElement;
                        interface IHTMLTextContainer;
                        interface IHTMLBodyElement;
                        interface IHTMLBodyElement2;
};

/*****************************************************************************
 *    IHTMLAnchorElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLAnchorElement : IDispatch
{
    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    HRESULT href([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    HRESULT target([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    HRESULT target([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    HRESULT rel([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    HRESULT rel([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    HRESULT rev([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    HRESULT rev([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    HRESULT urn([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    HRESULT urn([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    HRESULT Methods([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    HRESULT Methods([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    HRESULT host([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    HRESULT host([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    HRESULT hostname([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    HRESULT hostname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    HRESULT pathname([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    HRESULT pathname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    HRESULT port([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    HRESULT port([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    HRESULT protocol([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    HRESULT search([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    HRESULT search([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    HRESULT hash([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    HRESULT hash([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
    HRESULT protocolLong([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
    HRESULT nameProp([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short *p);

    [id(DISPID_IHTMLANCHORELEMENT_FOCUS)]
    HRESULT focus();

    [id(DISPID_IHTMLANCHORELEMENT_BLUR)]
    HRESULT blur();
}

/*****************************************************************************
 *    IHTMLElementCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLElementCollection : IDispatch
{
    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    HRESULT length([in] long v);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval,  out] IDispatch **pdisp);

    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    DispHTMLElementCollection dispinterface
 */
[
    hidden,
    uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLElementCollection
{
properties:
methods:
    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    void length(long v);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
    IDispatch *item(
            [in, optional] VARIANT name,
            [in, optional] VARIANT index);

    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
    IDispatch *tags(
            [in] VARIANT tagName);

    [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)]
    IDispatch *urns([in] VARIANT urn);

    [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)]
    IDispatch *namedItem([in] BSTR name);
}

/*****************************************************************************
 *    IHTMLSelectElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLSelectElement : IDispatch
{
    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] long *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    HRESULT multiple([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    HRESULT multiple([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
    HRESULT options([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    HRESULT selectedIndex([in] long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    HRESULT selectedIndex([retval, out] long *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
    HRESULT add(
        [in] IHTMLElement *element,
        [optional, in] VARIANT before);

    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
    HRESULT remove([defaultvalue(-1), in] long index);

    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    HRESULT length([in] long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    HRESULT length([retval, out] long *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval, out] IDispatch **pdisp);

    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    DispHTMLSelectElement dispinterface
 */
[
    hidden,
    uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLSelectElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    void size(long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    long size();

    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    void multiple(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    VARIANT_BOOL multiple();

    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
    IDispatch *options();

    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    void onchange(VARIANT v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    VARIANT onchange();

    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    void selectedIndex(long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    long selectedIndex();

    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
    IHTMLFormElement *form();

    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
    void add(
            [in] IHTMLElement *element,
            [in, optional] VARIANT before);

    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
    void remove([in, defaultvalue(-1)] long index);

    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    void length(long v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
    IDispatch *item(
            [in, optional] VARIANT name,
            [in, optional] VARIANT index);

    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
    IDispatch *tags([in] VARIANT tagName);

    [id(DISPID_IHTMLSELECTELEMENT2_URNS)]
    IDispatch *urns([in] VARIANT urn);

    [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)]
    IDispatch *namedItem([in] BSTR name);
}

/*****************************************************************************
 *    IHTMLSelectionObject interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLSelectionObject : IDispatch
{
    [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)]
    HRESULT createRange([retval, out] IDispatch **range);

    [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)]
    HRESULT empty();

    [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)]
    HRESULT clear();

    [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)]
    HRESULT type([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLOptionElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLOptionElement : IDispatch
{
    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    HRESULT selected([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    HRESULT selected([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    HRESULT defaultSelected([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    HRESULT defaultSelected([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    HRESULT index([in] LONG v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    HRESULT index([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);
}

/*****************************************************************************
 *    IHTMLOptionElementFactory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLOptionElementFactory : IDispatch
{
    [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)]
    HRESULT create(
        [optional, in] VARIANT text,
        [optional, in] VARIANT value,
        [optional, in] VARIANT defaultselected,
        [optional, in] VARIANT selected,
        [retval, out] IHTMLOptionElement **optelem);
}

/*****************************************************************************
 *    DispHTMLOptionElement dispinterface
 */
[
    hidden,
    uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLOptionElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    void selected(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    VARIANT_BOOL selected();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    BSTR value();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    void defaultSelected(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    VARIANT_BOOL defaultSelected();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    void index(LONG v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    LONG index();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    BSTR text();

    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    void label(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    BSTR label();
}

/*****************************************************************************
 *    IHTMLInputElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLInputElement : IDispatch
{
    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    HRESULT status([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([retval, out] long *p);

    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);

    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    HRESULT indeterminate([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    HRESULT indeterminate([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    HRESULT defaultChecked([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    HRESULT defaultChecked([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    HRESULT checked([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    HRESULT checked([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    HRESULT vspace([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    HRESULT vspace([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    HRESULT hspace([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    HRESULT hspace([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    HRESULT alt([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    HRESULT alt([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    HRESULT lowsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    HRESULT lowsrc([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    HRESULT vrml([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    HRESULT vrml([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    HRESULT dynsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    HRESULT dynsrc([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
    HRESULT complete([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    HRESULT loop([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    HRESULT loop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    HRESULT onabort([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    HRESULT onabort([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    HRESULT width([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    HRESULT width([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    HRESULT height([in] long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    HRESULT height([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    HRESULT start([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    HRESULT start([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLInputTextElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLInputTextElement : IDispatch
{
    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
    HRESULT status([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] long v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] long *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([in] long v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([retval, out] long *p);

    [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

[
    hidden,
    uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLInputElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    BSTR type();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    void status(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    VARIANT_BOOL status();

    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    void size(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    long size();

    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    void maxLength(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    long maxLength();

    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
    void select();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    void onchange(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    VARIANT onchange();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    void onselect(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    VARIANT onselect();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    void defaultValue(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    BSTR defaultValue();

    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    void readOnly(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    VARIANT_BOOL readOnly();

    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
    IHTMLTxtRange *createTextRange();

    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    void indeterminate(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    VARIANT_BOOL indeterminate();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    void defaultChecked(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    VARIANT_BOOL defaultChecked();

    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    void checked(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    VARIANT_BOOL checked();

    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    VARIANT border();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    void vspace(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    long vspace();

    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    void hspace(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    long hspace();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    void alt(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    BSTR alt();

    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    BSTR src();

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    void lowsrc(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    BSTR lowsrc();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    void vrml(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    BSTR vrml();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    void dynsrc(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    BSTR dynsrc();

    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
    VARIANT_BOOL complete();

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    void loop(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    VARIANT loop();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    void onabort(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    VARIANT onabort();

    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    void width(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    long width();

    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    void height(long v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    long height();

    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    void start(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    BSTR start();

    [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
    void accept(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
    BSTR accept();

    [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
    void useMap(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
    BSTR useMap();
}

/*****************************************************************************
 *    IHTMLTextAreaElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTextAreaElement : IDispatch
{
    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    HRESULT status([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    HRESULT rows([in] long v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    HRESULT rows([retval, out] long *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    HRESULT cols([in] long v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    HRESULT cols([retval, out] long *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    HRESULT wrap([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    HRESULT wrap([retval, out] BSTR *p);

    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

/*****************************************************************************
 *    DispHTMLUnknownElement interface
 */
[
    hidden,
    uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLUnknownElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();
}

/*****************************************************************************
 *    IOmHistory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6)
]
interface IOmHistory : IDispatch
{
    [propget, id(DISPID_IOMHISTORY_LENGTH)]
    HRESULT length([retval, out] short *p);

    [id(DISPID_IOMHISTORY_BACK)]
    HRESULT back([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_FORWARD)]
    HRESULT forward([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_GO)]
    HRESULT go([optional, in] VARIANT *pvargdistance);
}

/*****************************************************************************
 *    IHTMLMimeTypesCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLMimeTypesCollection : IDispatch
{
    [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);
}

/*****************************************************************************
 *    IHTMLPluginsCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLPluginsCollection : IDispatch
{
    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
    HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload);
}

/*****************************************************************************
 *    IHTMLOpsProfile interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLOpsProfile : IDispatch
{
    [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)]
    HRESULT addRequest(
        [in] BSTR name,
        [optional, in] VARIANT reserved,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)]
    HRESULT clearRequest();

    [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)]
    HRESULT doRequest(
        [in] VARIANT usage,
        [optional, in] VARIANT fname,
        [optional, in] VARIANT domain,
        [optional, in] VARIANT path,
        [optional, in] VARIANT expire,
        [optional, in] VARIANT reserved);

    [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR name,
        [retval, out] BSTR *value);

    [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR name,
        [in] BSTR value,
        [optional, in] VARIANT prefs,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)]
    HRESULT commitChanges([retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)]
    HRESULT addReadRequest(
        [in] BSTR name,
        [optional, in] VARIANT reserved,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)]
    HRESULT doReadRequest(
        [in] VARIANT usage,
        [optional, in] VARIANT fname,
        [optional, in] VARIANT domain,
        [optional, in] VARIANT path,
        [optional, in] VARIANT expire,
        [optional, in] VARIANT reserved);

    [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)]
    HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success);
}

/*****************************************************************************
 *    IOmNavigator interface
 */
[
	odl,
	oleautomation,
	dual,
	uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6)
]
interface IOmNavigator : IDispatch
{
    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
    HRESULT appCodeName([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
    HRESULT appName([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
    HRESULT appVersion([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
    HRESULT userAgent([retval, out] BSTR *p);

    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
    HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled);

    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
    HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled);

    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
    HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p);

    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
    HRESULT plugins([retval, out] IHTMLPluginsCollection **p);

    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
    HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
    HRESULT opsProfile([retval, out] IHTMLOpsProfile **p);

    [id(DISPID_IOMNAVIGATOR_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
    HRESULT cpuClass([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
    HRESULT systemLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE)]
    HRESULT browserLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
    HRESULT userLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
    HRESULT platform([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
    HRESULT appMinorVersion([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED)]
    HRESULT connectionSpeed([retval, out] long *p);

    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
    HRESULT onLine([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
    HRESULT userProfile([retval, out] IHTMLOpsProfile **p);
}

/*****************************************************************************
 *    IHTMLLocation interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(163BB1E0-6E00-11cf-837A-48DC04C10000)
]
interface IHTMLLocation : IDispatch
{
    [propput, id(DISPID_IHTMLLOCATION_HREF)]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    HRESULT protocol([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HOST)]
    HRESULT host([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOST)]
    HRESULT host([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    HRESULT hostname([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    HRESULT hostname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PORT)]
    HRESULT port([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PORT)]
    HRESULT port([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
    HRESULT pathname([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
    HRESULT pathname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
    HRESULT search([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
    HRESULT search([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HASH)]
    HRESULT hash([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HASH)]
    HRESULT hash([retval, out] BSTR *p);

    [id(DISPID_IHTMLLOCATION_RELOAD)]
    HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag);

    [id(DISPID_IHTMLLOCATION_REPLACE)]
    HRESULT replace([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_ASSIGN)]
    HRESULT assign([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBookmarkCollection : IDispatch
{
    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden]
    HRESULT length([out, retval] long *p);

    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([out, retval] IUnknown **p);

    [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)]
    HRESULT item(
            [in] long index,
            [out, retval] VARIANT *pVarBookmark);
}

/*****************************************************************************
 *    IHTMLDataTransfer interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDataTransfer : IDispatch
{
    [id(DISPID_IHTMLDATATRANSFER_SETDATA)]
    HRESULT setData(
            [in] BSTR format,
            [in] VARIANT *data,
            [out, retval] VARIANT_BOOL *pret);

    [id(DISPID_IHTMLDATATRANSFER_GETDATA)]
    HRESULT getData(
            [in] BSTR format,
            [out, retval] VARIANT *pvarRet);

    [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)]
    HRESULT clearData(
            [in] BSTR format,
            [out, retval] VARIANT_BOOL *pret);

    [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
    HRESULT dropEffect([in] BSTR v);

    [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
    HRESULT dropEffect([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
    HRESULT effectAllowed([in] BSTR v);

    [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
    HRESULT effectAllowed([out, retval] BSTR *p);
}

/*****************************************************************************
 *    IHTMLEventObj interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLEventObj : IDispatch
{
    [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)]
    HRESULT srcElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)]
    HRESULT altKey([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)]
    HRESULT ctrlKey([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)]
    HRESULT shiftKey([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    HRESULT returnValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    HRESULT returnValue([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    HRESULT cancelBubble([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    HRESULT cancelBubble([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)]
    HRESULT fromElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)]
    HRESULT toElement([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    HRESULT keyCode([in] long v);

    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    HRESULT keyCode([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)]
    HRESULT button([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)]
    HRESULT qualifier([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_REASON)]
    HRESULT reason([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_X)]
    HRESULT x([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_Y)]
    HRESULT y([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)]
    HRESULT clientX([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)]
    HRESULT clientY([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)]
    HRESULT offsetX([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)]
    HRESULT offsetY([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)]
    HRESULT screenX([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)]
    HRESULT screenY([retval, out] long *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)]
    HRESULT srcFilter([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    DispCEventObj dispinterface
 */
[
    hidden,
    uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispCEventObj
{
properties:
methods:
    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    void returnValue(VARIANT v);

    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    VARIANT returnValue();

    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    void cancelBubble(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    VARIANT_BOOL cancelBubble();

    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    void keyCode(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    long keyCode();

    [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
    void propertyName(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
    BSTR propertyName();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
    void bookmarks(IHTMLBookmarkCollection *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
    IHTMLBookmarkCollection *bookmarks();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
    void recordset(IDispatch *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
    IDispatch *recordset();

    [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
    BSTR dataFld();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
    void boundElements(IHTMLElementCollection *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
    IHTMLElementCollection *boundElements();

    [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
    void repeat(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
    VARIANT_BOOL repeat();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
    void srcUrn(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
    BSTR srcUrn();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
    void srcElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
    IHTMLElement *srcElement();

    [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
    void altKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
    VARIANT_BOOL altKey();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
    void ctrlKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
    VARIANT_BOOL ctrlKey();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
    void shiftKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
    VARIANT_BOOL shiftKey();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
    void fromElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
    IHTMLElement *fromElement();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
    void toElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
    IHTMLElement *toElement();

    [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
    void button(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
    long button();

    [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
    BSTR type();

    [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
    void qualifier(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
    BSTR qualifier();

    [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)]
    void reason(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)]
    long reason();

    [propput, id(DISPID_IHTMLEVENTOBJ2_X)]
    void x(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_X)]
    long x();

    [propput, id(DISPID_IHTMLEVENTOBJ2_Y)]
    void y(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_Y)]
    long y();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
    void clientX(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
    long clientX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
    void clientY(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
    long clientY();
    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
    void offsetX(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
    long offsetX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
    void offsetY(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
    long offsetY();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
    void screenX(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
    long screenX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
    void screenY(long v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
    long screenY();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
    void srcFilter(IDispatch *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
    IDispatch *srcFilter();

    [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)]
    IHTMLDataTransfer *dataTransfer();

    [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)]
    VARIANT_BOOL contentOverflow();

    [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
    void shiftLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
    VARIANT_BOOL shiftLeft();

    [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
    void altLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
    VARIANT_BOOL altLeft();

    [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
    void ctrlLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
    VARIANT_BOOL ctrlLeft();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable]
    LONG_PTR imeCompositionChange();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable]
    LONG_PTR imeNotifyCommand();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable]
    LONG_PTR imeNotifyData();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable]
    LONG_PTR imeRequest();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable]
    LONG_PTR imeRequestData();

    [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable]
    LONG_PTR keyboardLayout();

    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)]
    long behaviorCookie();

    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)]
    long behaviorPart();

    [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)]
    BSTR nextPage();

    [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)]
    long wheelDelta();
}

/*****************************************************************************
 *    IHTMLFramesCollection2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4426-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLFramesCollection2 : IDispatch
{
    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);

    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
    HRESULT length([retval, out] long *p);
}

/*****************************************************************************
 *    IHTMLScreen interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLScreen : IDispatch
{
    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
    HRESULT colorDepth([retval, out] long *p);

    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    HRESULT bufferDepth([in] long v);

    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    HRESULT bufferDepth([retval, out] long *p);

    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
    HRESULT width([retval, out] long *p);

    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
    HRESULT height([retval, out] long *p);

    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    HRESULT updateInterval([in] long v);

    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    HRESULT updateInterval([retval, out] long *p);

    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
    HRESULT availHeight([retval, out] long *p);

    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
    HRESULT availWidth([retval, out] long *p);

    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
    HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    IHTMLWindow2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4427-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLWindow2 : IHTMLFramesCollection2
{
    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);

    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    HRESULT defaultStatus([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    HRESULT defaultStatus([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
    HRESULT status([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
    HRESULT status([retval, out] BSTR *p);

    [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)]
    HRESULT setTimeout(
        [in] BSTR expression,
        [in] long msec,
        [optional, in] VARIANT *language,
        [retval, out] long *timerID);

    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
    HRESULT clearTimeout([in] long timerID);

    [id(DISPID_IHTMLWINDOW2_ALERT)]
    HRESULT alert([defaultvalue(""), in] BSTR message);

    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
    HRESULT confirm(
        [defaultvalue(""), in] BSTR message,
        [retval, out] VARIANT_BOOL *confirmed);

    [id(DISPID_IHTMLWINDOW2_PROMPT)]
    HRESULT prompt(
        [defaultvalue(""), in] BSTR message,
        [defaultvalue("undefined"), in] BSTR defstr,
        [retval, out] VARIANT *textdata);

    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
    HRESULT Image([retval, out] IHTMLImageElementFactory **p);

    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
    HRESULT location([retval, out] IHTMLLocation **p);

    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
    HRESULT history([retval, out] IOmHistory **p);

    [id(DISPID_IHTMLWINDOW2_CLOSE)]
    HRESULT close();

    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
    HRESULT opener([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
    HRESULT opener([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
    HRESULT navigator([retval, out] IOmNavigator **p);

    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
    HRESULT parent([retval, out] IHTMLWindow2 **p);

    [id(DISPID_IHTMLWINDOW2_OPEN)]
    HRESULT open(
        [defaultvalue(""), in] BSTR url,
        [defaultvalue(""), in] BSTR name,
        [defaultvalue(""), in] BSTR features,
        [defaultvalue(0), in] VARIANT_BOOL replace,
        [retval, out] IHTMLWindow2 **pomWindowResult);

    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
    HRESULT self([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
    HRESULT top([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
    HRESULT window([retval, out] IHTMLWindow2 **p);

    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
    HRESULT navigate([in] BSTR url);

    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
    HRESULT onbeforeunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
    HRESULT onbeforeunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
    HRESULT onunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
    HRESULT onunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONERROR)]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONERROR)]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
    HRESULT onresize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
    HRESULT onscroll([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)]
    HRESULT document([retval, out] IHTMLDocument2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
    HRESULT event([retval, out] IHTMLEventObj **p);

    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
    HRESULT showModalDialog(
        [in] BSTR dialog,
        [optional, in] VARIANT *varArgIn,
        [optional, in] VARIANT *varOptions,
        [retval, out] VARIANT *varArgOut);

    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
    HRESULT showHelp(
        [in] BSTR helpURL,
        [optional, in] VARIANT helpArg,
        [defaultvalue(""), in] BSTR features);

    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
    HRESULT screen([retval, out] IHTMLScreen **p);

    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
    HRESULT Option([retval, out] IHTMLOptionElementFactory **p);

    [id(DISPID_IHTMLWINDOW2_FOCUS)]
    HRESULT focus();

    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
    HRESULT closed([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLWINDOW2_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLWINDOW2_SCROLL)]
    HRESULT scroll([in] long x, [in] long y);

    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
    HRESULT clientInformation([retval, out] IOmNavigator **p);

    [id(DISPID_IHTMLWINDOW2_SETINTERVAL)]
    HRESULT setInterval([
        in] BSTR expression,
        [in] long msec,
        [optional, in] VARIANT *language,
        [retval, out] long *timerID);

    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
    HRESULT clearInterval([in] long timerID);

    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    HRESULT offscreenBuffering([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    HRESULT offscreenBuffering([retval, out] VARIANT *p);

    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
    HRESULT execScript(
        [in] BSTR scode,
        [defaultvalue("JScript"), in] BSTR language,
        [retval, out] VARIANT *pvarRet);

    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
    HRESULT scrollBy([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
    HRESULT scrollTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_MOVETO)]
    HRESULT moveTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
    HRESULT moveBy([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
    HRESULT resizeTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
    HRESULT resizeBy([in] long x, [in] long y);

    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
    HRESULT external([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLWindow3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLWindow3 : IDispatch
{
    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
    HRESULT screenLeft([out, retval] long *p);

    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
    HRESULT screenTop([out, retval] long *p);

    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
    HRESULT attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp,
            [out, retval] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
    HRESULT detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
    HRESULT setTimeout(
            [in] VARIANT *expression,
            [in] long msec,
            [in, optional] VARIANT *language,
            [out, retval] long *timerID);

    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
    HRESULT setInterval(
            [in] VARIANT *expression,
            [in] long msec,
            [in, optional] VARIANT *language,
            [out, retval] long *timerID);

    [id(DISPID_IHTMLWINDOW3_PRINT)]
    HRESULT print();

    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
    HRESULT clipboardData([out, retval] IHTMLDataTransfer **p);

    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
    HRESULT showModelessDialog(
            [in, defaultvalue("")] BSTR url,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *options,
            [out, retval] IHTMLWindow2 **pDialog);
}

/*****************************************************************************
 *    DispHTMLWindow2 dispinterface
 */
[
    hidden,
    uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLWindow2
{
properties:
methods:
    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
    VARIANT item([in] VARIANT *pvarIndex);

    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
    IHTMLFramesCollection2 *frames();

    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    void defaultStatus(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    BSTR defaultStatus();

    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
    void status(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
    BSTR status();

    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
    void clearTimeout([in] long timerID);

    [id(DISPID_IHTMLWINDOW2_ALERT)]
    void alert([in, defaultvalue("")] BSTR message);

    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
    VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message);

    [id(DISPID_IHTMLWINDOW2_PROMPT)]
    VARIANT prompt(
            [in, defaultvalue("")] BSTR message,
            [in, defaultvalue("undefined")] BSTR defstr);

    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
    IHTMLImageElementFactory *Image();

    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
    IHTMLLocation *location();

    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
    IOmHistory *history();

    [id(DISPID_IHTMLWINDOW2_CLOSE)]
    void close();

    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
    void opener(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
    VARIANT opener();

    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
    IOmNavigator *navigator();

    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
    BSTR name();

    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
    IHTMLWindow2 *parent();

    [id(DISPID_IHTMLWINDOW2_OPEN)]
    IHTMLWindow2 *open(
            [in, defaultvalue("")] BSTR url,
            [in, defaultvalue("")] BSTR name,
            [in, defaultvalue("")] BSTR features,
            [in, defaultvalue(0)]  VARIANT_BOOL replace);

    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
    IHTMLWindow2 *self();

    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
    IHTMLWindow2 *top();

    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
    IHTMLWindow2 *window();

    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
    void navigate([in] BSTR url);

    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    void onbeforeunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    VARIANT onbeforeunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    void onunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    VARIANT onunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
    IHTMLDocument2 *document();

    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
    IHTMLEventObj *event();

    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
    VARIANT showModalDialog(
            [in] BSTR dialog,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *varOptions);

    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
    void showHelp(
            [in] BSTR helpURL,
            [in, optional] VARIANT helpArg,
            [in, defaultvalue("")] BSTR features);

    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
    IHTMLScreen *screen();

    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
    IHTMLOptionElementFactory *Option();

    [id(DISPID_IHTMLWINDOW2_FOCUS)]
    void focus();

    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
    VARIANT_BOOL closed();

    [id(DISPID_IHTMLWINDOW2_BLUR)]
    void blur();

    [id(DISPID_IHTMLWINDOW2_SCROLL)]
    void scroll([in] long x, [in] long y);

    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
    IOmNavigator *clientInformation();

    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
    void clearInterval([in] long timerID);

    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    void offscreenBuffering(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    VARIANT offscreenBuffering();

    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
    VARIANT execScript(
            [in] BSTR _code,
            [in, defaultvalue("JScript")] BSTR language);

    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
    BSTR toString();

    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
    void scrollBy([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
    void scrollTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_MOVETO)]
    void moveTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
    void moveBy([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
    void resizeTo([in] long x, [in] long y);

    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
    void resizeBy([in] long x, [in] long y);

    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
    IDispatch *external();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
    long screenLeft();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
    long screenTop();

    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
             [in] BSTR event,
             [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
    long setTimeout(
            [in] VARIANT *expression,
            [in] long msec,
            [in, optional] VARIANT *language);

    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
    long setInterval(
            [in] VARIANT *expression,
            [in] long msec,
            [in, optional] VARIANT *language);

    [id(DISPID_IHTMLWINDOW3_PRINT)]
    void print();

    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    void onbeforeprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    VARIANT onbeforeprint();

    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    void onafterprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    VARIANT onafterprint();

    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
    IHTMLDataTransfer *clipboardData();

    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
    IHTMLWindow2 *showModelessDialog(
            [in, defaultvalue("")] BSTR url,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *options);

    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
    IDispatch *createPopup([in, optional] VARIANT *varArgIn);

    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
    IHTMLFrameBase *frameElement();
}

/*****************************************************************************
 *    HTMLDocumentEvents2 interface
 */
[
    hidden,
    uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLDocumentEvents2
{
    properties:
    methods:
    [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)]
    VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)]
    void onselectionchange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj);
}

/*****************************************************************************
 *    HTMLDocumentEvents interface
 */
[
    hidden,
    uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLDocumentEvents
{
    properties:
    methods:
    [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)]
    VARIANT_BOOL onstop();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)]
    void onselectionchange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();
}

/*****************************************************************************
 *    HTMLTextContainerEvents interface
 */
[
    hidden,
    uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d)
]
dispinterface HTMLTextContainerEvents
{
properties:

methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();

    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)]
    void onchange();

    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]
    void onselect();
};

/*****************************************************************************
 *    HTMLTextContainerEvents2 interface
 */
[
    hidden,
    uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLTextContainerEvents2
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
    void onfilterchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
    void onlosecapture([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
    void ondragend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
    void ondragleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
    void onpage([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
    void onmouseenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
    void onmouseleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
    void onmove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
    void onmoveend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
    void onresizeend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)]
    void onchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]
    void onselect([in] IHTMLEventObj* pEvtObj);
};

/*****************************************************************************
 *    IHTMLDocument interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(626FC520-A41E-11CF-A731-00A0C9082637)
]
interface IHTMLDocument : IDispatch
{
    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)]
    HRESULT Script([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLDocument2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4425-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLDocument2 : IHTMLDocument
{
    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
    HRESULT all([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
    HRESULT body([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
    HRESULT activeElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
    HRESULT images([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
    HRESULT applets([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
    HRESULT links([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
    HRESULT forms([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
    HRESULT anchors([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
    HRESULT scripts([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
    HRESULT designMode([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
    HRESULT designMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
    HRESULT selection([retval, out] IHTMLSelectionObject **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)]
     HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
    HRESULT embeds([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
    HRESULT plugins([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    HRESULT alinkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    HRESULT alinkColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    HRESULT fgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    HRESULT fgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    HRESULT linkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    HRESULT linkColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    HRESULT vlinkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    HRESULT vlinkColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
    HRESULT referrer([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
    HRESULT location([retval, out] IHTMLLocation **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
    HRESULT lastModified([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
    HRESULT URL([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
    HRESULT URL([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    HRESULT domain([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    HRESULT domain([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    HRESULT cookie([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    HRESULT cookie([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
    HRESULT expando([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
    HRESULT expando([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
     HRESULT charset([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
    HRESULT charset([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    HRESULT defaultCharset([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    HRESULT defaultCharset([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
    HRESULT fileSize([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
    HRESULT fileCreatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
    HRESULT fileModifiedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
    HRESULT fileUpdatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
    HRESULT security([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
     HRESULT nameProp([retval, out] BSTR *p);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
    HRESULT write([in] SAFEARRAY(VARIANT) psarray);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
    HRESULT writeln([in] SAFEARRAY(VARIANT) psarray);

    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
    HRESULT open(
        [defaultvalue("text/html"), in] BSTR url,
        [optional, in] VARIANT name,
        [optional, in] VARIANT features,
        [optional, in] VARIANT replace,
        [retval, out]  IDispatch **pomWindowResult);

    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
    HRESULT close();

    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
    HRESULT clear();

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
    HRESULT queryCommandSupported(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
    HRESULT queryCommandEnabled(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
    HRESULT queryCommandState(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
    HRESULT queryCommandIndeterm(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
    HRESULT queryCommandText(
        [in] BSTR cmdID,
        [retval, out] BSTR *pcmdText);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
    HRESULT queryCommandValue(
        [in] BSTR cmdID,
        [retval, out] VARIANT *pcmdValue);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
    HRESULT execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
    HRESULT execCommandShowHelp(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
     HRESULT createElement(
        [in] BSTR eTag,
        [retval, out] IHTMLElement **newElem);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
    HRESULT onclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
    HRESULT onclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
    HRESULT ondblclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
    HRESULT ondblclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
    HRESULT onkeyup([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
    HRESULT onkeyup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
    HRESULT onkeydown([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
    HRESULT onkeydown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
     HRESULT onkeypress([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
    HRESULT onkeypress([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
    HRESULT onmouseup([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
    HRESULT onmouseup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
    HRESULT onmousedown([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
    HRESULT onmousedown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
    HRESULT onmousemove([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
    HRESULT onmousemove([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
    HRESULT onmouseout([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
    HRESULT onmouseout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
    HRESULT onmouseover([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
    HRESULT onmouseover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
    HRESULT onafterupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
    HRESULT onafterupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
    HRESULT onrowexit([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
    HRESULT onrowexit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
    HRESULT onrowenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
    HRESULT onrowenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
    HRESULT ondragstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
    HRESULT ondragstart([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
    HRESULT onselectstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
    HRESULT onselectstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
    HRESULT elementFromPoint(
        [in] long x,
        [in] long y,
        [retval, out] IHTMLElement **elementHit);

    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
    HRESULT parentWindow([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
    HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
    HRESULT onerrorupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
    HRESULT onerrorupdate([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
    HRESULT createStyleSheet(
        [defaultvalue(""), in] BSTR bstrHref,
        [defaultvalue(-1), in] long lIndex,
        [retval, out] IHTMLStyleSheet **ppnewStyleSheet);
}

/*****************************************************************************
 *    IHTMLDocument3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument3 : IDispatch
{
    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
    HRESULT releaseCapture();

    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
    HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);

    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
    HRESULT createTextNode(
        [in] BSTR text,
        [retval, out] IHTMLDOMNode **newTextNode);

    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
    HRESULT documentElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
    HRESULT uniqueID([retval, out] BSTR *p);

    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
    HRESULT attachEvent(
        [in] BSTR event,
        [in] IDispatch* pDisp,
        [retval, out] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
    HRESULT detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    HRESULT ondatasetchanged([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    HRESULT ondatasetchanged([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    HRESULT ondataavailable([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    HRESULT ondataavailable([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    HRESULT ondatasetcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    HRESULT ondatasetcomplete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
    HRESULT dir([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    HRESULT onstop([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    HRESULT onstop([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
    HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);

    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
    HRESULT parentDocument([retval, out] IHTMLDocument2 **p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    HRESULT enableDownload([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    HRESULT enableDownload([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    HRESULT baseUrl([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    HRESULT baseUrl([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]
    HRESULT childNodes([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    HRESULT inheritStyleSheets([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
    HRESULT getElementsByName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
    HRESULT getElementById(
        [in] BSTR v,
        [retval, out] IHTMLElement **pel);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);
}

/*****************************************************************************
 *    IHTMLDocument4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument4 : IDispatch
{
    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
    HRESULT focus();

    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
    HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    HRESULT onselectionchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    HRESULT onselectionchange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
    HRESULT namespaces([retval, out] IDispatch **p);

    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
    HRESULT createDocumentFromUrl(
        [in] BSTR bstrUrl,
        [in] BSTR bstrOptions,
        [retval, out] IHTMLDocument2 **newDoc);

    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    HRESULT media([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    HRESULT media([retval, out] BSTR *p);

    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
    HRESULT createEventObject(
        [optional, in] VARIANT *pvarEventObject,
        [retval, out] IHTMLEventObj **ppEventObj);

    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
    HRESULT fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT *pvarEventObject,
        [retval, out] VARIANT_BOOL *pfCancelled);

    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
    HRESULT createRenderStyle(
        [in] BSTR v,
        [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
    HRESULT URLUnencoded([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLDocument5 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument5 : IDispatch
{
    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
    HRESULT doctype([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
    HRESULT implementation([retval, out] IHTMLDOMImplementation **p);

    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
    HRESULT createAttribute(
        [in] BSTR bstrattrName,
        [retval, out] IHTMLDOMAttribute **ppattribute);

    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
    HRESULT createComment(
        [in] BSTR bstrdata,
        [retval, out] IHTMLDOMNode **ppRetNode);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
    HRESULT compatMode([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLDocument dispinterface
 */
[
    hidden,
    uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLDocument
{
properties:
methods:
    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable]
    IDispatch *Script();

    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
    IHTMLElementCollection *all();

    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
    IHTMLElement *body();

    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
    IHTMLElement *activeElement();

    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
    IHTMLElementCollection *images();

    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
    IHTMLElementCollection *applets();

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
    IHTMLElementCollection *links();

    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
    IHTMLElementCollection *forms();

    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
    IHTMLElementCollection *anchors();

    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    BSTR title();

    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
    IHTMLElementCollection *scripts();

    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
    void designMode(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
    BSTR designMode();

    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
    IHTMLSelectionObject *selection();

    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable]
    BSTR readyState();

    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
    IHTMLFramesCollection2 *frames();

    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
    IHTMLElementCollection *embeds();

    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
    IHTMLElementCollection *plugins();

    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    void alinkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    VARIANT alinkColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    void fgColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    VARIANT fgColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    void linkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    VARIANT linkColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    void vlinkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    VARIANT vlinkColor();

    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
    BSTR referrer();

    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
    IHTMLLocation *location();

    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
    BSTR lastModified();

    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
    void URL(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
    BSTR URL();

    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    void domain(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    BSTR domain();

    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    void cookie(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    BSTR cookie();

    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
    void expando(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
    VARIANT_BOOL expando();

    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
    void charset(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
    BSTR charset();

    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    void defaultCharset(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    BSTR defaultCharset();

    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
    BSTR mimeType();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
    BSTR fileSize();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
    BSTR fileCreatedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
    BSTR fileModifiedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
    BSTR fileUpdatedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
    BSTR security();

    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
    BSTR protocol();

    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
    BSTR nameProp();

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
    void write([in] SAFEARRAY(VARIANT) psarray);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
    void writeln([in] SAFEARRAY(VARIANT) psarray);

    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
    IDispatch *open(
        [defaultvalue("text/html"), in] BSTR url,
        [optional, in] VARIANT name,
        [optional, in] VARIANT features,
        [optional, in] VARIANT replace);

    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
    void close();

    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
    void clear();

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
    VARIANT_BOOL queryCommandSupported([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
    VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
    VARIANT_BOOL queryCommandState([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
    VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
    BSTR queryCommandText([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
    VARIANT queryCommandValue([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
    VARIANT_BOOL execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
    VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
    IHTMLElement *createElement([in] BSTR eTag);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
    IHTMLElement *elementFromPoint(
        [in] long x,
        [in] long y);

    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
    IHTMLWindow2 *parentWindow();

    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
    IHTMLStyleSheetsCollection *styleSheets();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
    BSTR toString();

    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
    IHTMLStyleSheet *createStyleSheet(
        [defaultvalue(""), in] BSTR bstrHref,
        [defaultvalue(-1), in] long lIndex);

    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
    void releaseCapture();

    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
    void recalc([defaultvalue(0), in] VARIANT_BOOL fForce);

    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
    IHTMLDOMNode *createTextNode([in] BSTR text);

    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
    IHTMLElement *documentElement();

    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
    BSTR uniqueID();

    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
    void detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
    BSTR dir();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    void onstop(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    VARIANT onstop();

    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
    IHTMLDocument2 *createDocumentFragment();

    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
    IHTMLDocument2 *parentDocument();

    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    void enableDownload(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    VARIANT_BOOL enableDownload();

    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    void baseUrl(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    BSTR baseUrl();

    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    void inheritStyleSheets(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    VARIANT_BOOL inheritStyleSheets();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
    IHTMLElementCollection *getElementsByName([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
    IHTMLElement *getElementById([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
    void focus();

    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
    VARIANT_BOOL hasFocus();

    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    void onselectionchange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    VARIANT onselectionchange();

    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
    IDispatch *namespaces();

    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
    IHTMLDocument2 *createDocumentFromUrl(
        [in] BSTR bstrUrl,
        [in] BSTR bstrOptions);

    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    void media(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    BSTR media();

    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
    IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject);

    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
    VARIANT_BOOL fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT *pvarEventObject);

    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
    IHTMLRenderStyle *createRenderStyle([in] BSTR v);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
    BSTR URLUnencoded();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
    IHTMLDOMNode *doctype();

    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
    IHTMLDOMImplementation *implementation();

    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
    IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName);

    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
    IHTMLDOMNode *createComment([in] BSTR bstrdata);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
    BSTR compatMode();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
        [in] IHTMLDOMNode *newChild,
        [optional, in] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
        [in] IHTMLDOMNode *newChild,
        [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode* otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();
}

/*****************************************************************************
 *    HTMLDocument coclass
 */
[
    uuid(25336920-03F9-11cf-8FD0-00AA00686F13)
]
coclass HTMLDocument
{
    [default]         dispinterface DispHTMLDocument;
    [source, default] dispinterface HTMLDocumentEvents;
    [source]          dispinterface HTMLDocumentEvents2;
                      interface IHTMLDocument2;
                      interface IHTMLDocument3;
                      interface IHTMLDocument4;
                      interface IHTMLDocument5;
                      interface IHTMLDOMNode;
                      interface IHTMLDOMNode2;
}

/*****************************************************************************
 *    IHTMLCommentElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCommentElement : IDispatch
{
    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    HRESULT atomic([in] long v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    HRESULT atomic([out, retval] long *p);
}

/*****************************************************************************
 *    IHTMLCommentElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCommentElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    HRESULT data([in] BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    HRESULT data([out, retval] BSTR *p);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
    HRESULT length([out, retval] long *p);

    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
    HRESULT substringData(
            [in] long offset,
            [in] long Count,
            [out, retval] BSTR *pbstrsubString);

    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
    HRESULT appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
    HRESULT insertData(
            [in] long offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
    HRESULT deleteData(
            [in] long offset,
            [in] long Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
    HRESULT replaceData(
            [in] long offset,
            [in] long Count,
            [in] BSTR bstrstring);
}

/*****************************************************************************
 *    DispHTMLCommentElement dispinterface
 */
[
    hidden,
    uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLCommentElement
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    BSTR text();

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    void atomic(long v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    long atomic();

    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    void data(BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    BSTR data();

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
    long length();

    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
    BSTR substringData(
            [in] long offset,
            [in] long Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
    void appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
     void insertData(
            [in] long offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
    void deleteData(
            [in] long offset,
            [in] long Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
    void replaceData(
            [in] long offset,
            [in] long Count,
            [in] BSTR bstrstring);
}

/*****************************************************************************
 *    HTMLTableEvents dispinterface
 */
[
    hidden,
    uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLTableEvents
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();
}

/*****************************************************************************
 *    IHTMLTableCaption interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableCaption : IDispatch
{
    [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
    HRESULT vAlign([retval, out] BSTR *p);
}

interface IHTMLTableSection;

/*****************************************************************************
 *    IHTMLTable interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTable : IDispatch
{
    [propput, id(DISPID_IHTMLTABLE_COLS)]
    HRESULT cols([in] long v);

    [propget, id(DISPID_IHTMLTABLE_COLS)]
    HRESULT cols([retval, out] long *p);

    [propput, id(DISPID_IHTMLTABLE_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDER)]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_FRAME)]
    HRESULT frame([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_FRAME)]
    HRESULT frame([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_RULES)]
    HRESULT rules([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_RULES)]
    HRESULT rules([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
    HRESULT cellSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
    HRESULT cellSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
    HRESULT cellPadding([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
    HRESULT cellPadding([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    HRESULT borderColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    HRESULT borderColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    HRESULT borderColorDark([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    HRESULT borderColorDark([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
    HRESULT align([retval, out] BSTR * p);

    [id(DISPID_IHTMLTABLE_REFRESH)]
    HRESULT refresh();

    [propget, id(DISPID_IHTMLTABLE_ROWS)]
    HRESULT rows([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    HRESULT dataPageSize([in] long v);

    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    HRESULT dataPageSize([retval, out] long *p);

    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
    HRESULT nextPage();

    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
    HRESULT previousPage();

    [propget, id(DISPID_IHTMLTABLE_THEAD)]
    HRESULT tHead([retval, out] IHTMLTableSection **p);

    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
    HRESULT tFoot([retval, out] IHTMLTableSection **p);

    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
    HRESULT tBodies([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
    HRESULT caption([retval, out] IHTMLTableCaption **p);

    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
    HRESULT createTHead([retval, out] IDispatch **head);

    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
    HRESULT deleteTHead();

    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
    HRESULT createTFoot([retval, out] IDispatch **foot);

    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
    HRESULT deleteTFoot();

    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
    HRESULT createCaption([retval, out] IHTMLTableCaption **caption);

    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
    HRESULT deleteCaption();

    [id(DISPID_IHTMLTABLE_INSERTROW)]
    HRESULT insertRow(
            [defaultvalue(-1), in] long index,
            [retval, out] IDispatch **row);

    [id(DISPID_IHTMLTABLE_DELETEROW)]
    HRESULT deleteRow([defaultvalue(-1), in] long index);

    [propget, id(DISPID_IHTMLTABLE_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableSection : IDispatch
{
    [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)]
    HRESULT vAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLTABLESECTION_ROWS)]
    HRESULT rows([retval, out] IHTMLElementCollection **p);

    [id(DISPID_IHTMLTABLESECTION_INSERTROW)]
    HRESULT insertRow(
            [defaultvalue(-1), in] long index,
            [retval, out] IDispatch **row);

    [id(DISPID_IHTMLTABLESECTION_DELETEROW)]
    HRESULT deleteRow([defaultvalue(-1), in] long index);
}

/*****************************************************************************
 *    IHTMLTableRow interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableRow : IDispatch
{
    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
    HRESULT align([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
    HRESULT vAlign([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    HRESULT bgColor([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    HRESULT borderColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    HRESULT borderColor([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    HRESULT borderColorDark([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    HRESULT borderColorDark([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
    HRESULT rowIndex([out, retval] long *p);

    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
    HRESULT sectionRowIndex([out, retval] long *p);

    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
    HRESULT cells([out, retval] IHTMLElementCollection **p);

    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
    HRESULT insertCell(
            [in, defaultvalue(-1)] long index,
            [out, retval] IDispatch **row);

    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
    HRESULT deleteCell([in, defaultvalue(-1)] long index);
}

/*****************************************************************************
 *    DispHTMLTable interface
 */
[
    hidden,
    uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTable
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLTABLE_COLS)]
    void cols(long v);

    [propget, id(DISPID_IHTMLTABLE_COLS)]
    long cols();

    [propput, id(DISPID_IHTMLTABLE_BORDER)]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDER)]
    VARIANT border();

    [propput, id(DISPID_IHTMLTABLE_FRAME)]
    void frame(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_FRAME)]
    BSTR frame();

    [propput, id(DISPID_IHTMLTABLE_RULES)]
    void rules(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_RULES)]
    BSTR rules();

    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
    void cellSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
    VARIANT cellSpacing();

    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
    void cellPadding(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
    VARIANT cellPadding();

    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
    BSTR background();

    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    void borderColorLight(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    VARIANT borderColorLight();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    void borderColorDark(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    VARIANT borderColorDark();

    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
    BSTR align();

    [id(DISPID_IHTMLTABLE_REFRESH)]
    void refresh();

    [propget, id(DISPID_IHTMLTABLE_ROWS)]
    IHTMLElementCollection *rows();

    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
    VARIANT width();

    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    void dataPageSize(long v);

    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    long dataPageSize();

    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
    void nextPage();

    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
    void previousPage();

    [propget, id(DISPID_IHTMLTABLE_THEAD)]
    IHTMLTableSection *tHead();

    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
    IHTMLTableSection *tFoot();

    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
    IHTMLElementCollection *tBodies();

    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
    IHTMLTableCaption *caption();

    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
    IDispatch *createTHead();

    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
    void deleteTHead();

    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
    IDispatch *createTFoot();

    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
    void deleteTFoot();

    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
    IHTMLTableCaption *createCaption();

    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
    void deleteCaption();

    [id(DISPID_IHTMLTABLE_INSERTROW)]
    IDispatch *insertRow([in, defaultvalue(-1)] long index);

    [id(DISPID_IHTMLTABLE_DELETEROW)]
    void deleteRow([in, defaultvalue(-1)] long index);

    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
    void firstPage();

    [id(DISPID_IHTMLTABLE2_LASTPAGE)]
    void lastPage();

    [propget, id(DISPID_IHTMLTABLE2_CELLS)]
    IHTMLElementCollection *cells();

    [id(DISPID_IHTMLTABLE2_MOVEROW)]
    IDispatch *moveRow(
            [in, defaultvalue(-1)] long indexFrom,
            [in, defaultvalue(-1)] long indexTo);

    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    void summary(BSTR v);

    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    BSTR summary();
}

/*****************************************************************************
 *    DispHTMLTableRow dispinterface
 */
[
    hidden,
    uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTableRow
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
    BSTR align();

    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
    void vAlign(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
    BSTR vAlign();

    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    void borderColorLight(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    VARIANT borderColorLight();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    void borderColorDark(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    VARIANT borderColorDark();

    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
    long rowIndex();

    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
    long sectionRowIndex();

    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
    IHTMLElementCollection *cells();

    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
    IDispatch *insertCell([in, defaultvalue(-1)] long index);

    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
    void deleteCell([in, defaultvalue(-1)] long index);

    [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
    void ch(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
    BSTR ch();

    [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
    void chOff(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
    BSTR chOff();
}

/*****************************************************************************
 *    IHTMLScriptElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLScriptElement : IDispatch
{
    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    HRESULT htmlFor([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    HRESULT htmlFor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    HRESULT event([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    HRESULT event([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    HRESULT defer([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    HRESULT defer([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLScriptElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLScriptElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    HRESULT charset([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    HRESULT charset([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLFrameBase interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLFrameBase : IDispatch
{
    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
    HRESULT src([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
    HRESULT name([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    HRESULT border([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    HRESULT frameBorder([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    HRESULT frameBorder([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    HRESULT frameSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    HRESULT frameSpacing([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    HRESULT marginWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    HRESULT marginWidth([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    HRESULT marginHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    HRESULT marginHeight([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    HRESULT noResize([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    HRESULT noResize([out, retval] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    HRESULT scrolling([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    HRESULT scrolling([out, retval] BSTR *p);
}

/*****************************************************************************
 *    IHTMLFrameBase2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLFrameBase2 : IDispatch
{
    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
    HRESULT contentWindow([retval, out] IHTMLWindow2 **p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    HRESULT allowTransparency([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    DispHTMLIFrame dispinterface
 */
[
    hidden,
    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLIFrame
{
properties:
methods:
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    VARIANT getAttribute(
             [in] BSTR strAttributeName,
             [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    void className(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
    BSTR className();

    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
    void id(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
    BSTR id();

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    BSTR tagName();

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    IHTMLElement *parentElement();

    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
    IHTMLStyle *style();

    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    IDispatch *document();

    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
    BSTR title();

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    void language(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
    BSTR language();

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    void scrollIntoView([in, optional] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    VARIANT_BOOL contains([in] IHTMLElement *pChild);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
    long sourceIndex();

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    VARIANT recordNumber();

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    void lang(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    BSTR lang();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    long offsetLeft();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    long offsetTop();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    long offsetWidth();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    long offsetHeight();

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    IHTMLElement *offsetParent();

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    void innerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    BSTR innerHTML();

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    void innerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    BSTR innerText();

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    void outerHTML(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    BSTR outerHTML();

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    void outerText(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    BSTR outerText();

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    void insertAdjacentHTML(
            [in] BSTR where,
            [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    void insertAdjacentText(
            [in] BSTR where,
            [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    IHTMLElement *parentTextEdit();

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    VARIANT_BOOL isTextEdit();

    [id(DISPID_IHTMLELEMENT_CLICK)]
    void click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    IHTMLFiltersCollection *filters();

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    void onfilterchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
    VARIANT onfilterchange();

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    IDispatch *children();

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    IDispatch *all();

    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    BSTR scopeName();

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    void releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    void onlosecapture(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    VARIANT onlosecapture();

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    BSTR componentFromPoint(
            [in] long x,
            [in] long y);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    void doScroll([in, optional] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    void ondrag(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    VARIANT ondrag();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    void ondragend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    VARIANT ondragend();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    void ondragenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    VARIANT ondragenter();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    void ondragover(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    VARIANT ondragover();

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    void ondragleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    VARIANT ondragleave();

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    void ondrop(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    VARIANT ondrop();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    void onbeforecut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    VARIANT onbeforecut();

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    void oncut(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    VARIANT oncut();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    void onbeforecopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    VARIANT onbeforecopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    void oncopy(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    VARIANT oncopy();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    void onbeforepaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    VARIANT onbeforepaste();

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    void onpaste(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    VARIANT onpaste();

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    IHTMLCurrentStyle *currentStyle();

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    IHTMLRectCollection *getClientRects();

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    IHTMLRect *getBoundingClientRect();

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    void tabIndex(short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    short tabIndex();

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    void focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    void accessKey(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    BSTR accessKey();

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    void blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    void addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    void removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    long clientHeight();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    long clientWidth();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    long clientTop();

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    long clientLeft();

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    VARIANT readyState();

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
     VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
     void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    BSTR dir();

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    IDispatch *createControlRange();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    long scrollHeight();

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    long scrollWidth();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    void scrollTop(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    long scrollTop();

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    void scrollLeft(long v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    long scrollLeft();

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    void clearAttributes();

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    IHTMLElement *insertAdjacentElement(
            [in] BSTR where,
            [in] IHTMLElement *insertedElement);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    IHTMLElement *applyElement(
            [in] IHTMLElement *apply,
            [in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    BSTR getAdjacentText([in] BSTR where);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    BSTR replaceAdjacentText(
            [in] BSTR where,
            [in] BSTR newText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    VARIANT_BOOL canHaveChildren();

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    long addBehavior(
            [in] BSTR bstrUrl,
            [in, optional] VARIANT *pvarFactory);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    VARIANT_BOOL removeBehavior([in] long cookie);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    IHTMLStyle *runtimeStyle();

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    IDispatch *behaviorUrns();

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    void tagUrn(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    BSTR tagUrn();

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    long readyStateValue();

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
    void mergeAttributes(
            [in] IHTMLElement *mergeThis,
            [in, optional] VARIANT *pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    VARIANT_BOOL isMultiLine();

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    VARIANT_BOOL canHaveHTML();

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    void onlayoutcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    VARIANT onlayoutcomplete();

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    void onpage(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    VARIANT onpage();

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    void inflateBlock(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    VARIANT_BOOL inflateBlock();

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
    void setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    void contentEditable(BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    BSTR contentEditable();

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    VARIANT_BOOL isContentEditable();

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    void hideFocus(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    VARIANT_BOOL hideFocus();

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    VARIANT_BOOL isDisabled();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    void onmove(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    VARIANT onmove();

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    VARIANT_BOOL fireEvent(
            [in] BSTR bstrEventName,
            [in, optional] VARIANT *pvarEventObject);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    void onresizestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    VARIANT onresizestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    void onresizeend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    VARIANT onresizeend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    void onmovestart(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    VARIANT onmovestart();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    void onmoveend(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    VARIANT onmoveend();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    void onmouseenter(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    VARIANT onmouseenter();

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    void onmouseleave(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    VARIANT onmouseleave();

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
    VARIANT_BOOL dragDrop();

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    LONG glyphMode();

    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    void normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    long uniqueNumber();

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    BSTR uniqueID();

    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    IDispatch *attributes();

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [in, optional] VARIANT refChild);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    BSTR dataFld();

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    void dataSrc(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    BSTR dataSrc();

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    void dataFormatAs(BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    BSTR dataFormatAs();

    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
    BSTR src();

    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
    BSTR name();

    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    VARIANT border();

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    void frameBorder(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    BSTR frameBorder();

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    void frameSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    VARIANT frameSpacing();

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    void marginWidth(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    VARIANT marginWidth();

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    void marginHeight(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    VARIANT marginHeight();

    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    void noResize(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    VARIANT_BOOL noResize();

    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    void scrolling(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    BSTR scrolling();

    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
    IHTMLWindow2 *contentWindow();

    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    void allowTransparency(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    VARIANT_BOOL allowTransparency();

    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
    void longDesc(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
    BSTR longDesc();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    void vspace(long v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    long vspace();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    void hspace(long v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    long hspace();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
    VARIANT width();
}

} /* library MSHTML */
