/*
 * 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 */