File indexing completed on 2024-04-28 15:23:14

0001 /*
0002  *  This file is part of the KDE libraries
0003  *  Copyright (C) 1999 Harri Porten (porten@kde.org)
0004  *  Copyright (C) 2003 Apple Computer, Inc.
0005  *
0006  *  This library is free software; you can redistribute it and/or
0007  *  modify it under the terms of the GNU Library General Public
0008  *  License as published by the Free Software Foundation; either
0009  *  version 2 of the License, or (at your option) any later version.
0010  *
0011  *  This library is distributed in the hope that it will be useful,
0012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014  *  Library General Public License for more details.
0015  *
0016  *  You should have received a copy of the GNU Library General Public
0017  *  License along with this library; if not, write to the Free Software
0018  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
0019  */
0020 
0021 #ifndef _KJS_HTML_H_
0022 #define _KJS_HTML_H_
0023 
0024 #include "html/html_documentimpl.h"
0025 #include "html/html_baseimpl.h"
0026 #include "html/html_miscimpl.h"
0027 #include "html/html_formimpl.h"
0028 #include "misc/loader_client.h"
0029 
0030 #include "ecma/kjs_binding.h"
0031 #include "ecma/kjs_dom.h"
0032 #include "ecma/kjs_scriptable.h"
0033 #include "xml/dom_nodeimpl.h"  // for NodeImpl::Id
0034 
0035 namespace KJS
0036 {
0037 class HTMLElement;
0038 class Window;
0039 
0040 class HTMLDocument : public DOMDocument
0041 {
0042 public:
0043     HTMLDocument(ExecState *exec, DOM::HTMLDocumentImpl *d);
0044     JSValue *getValueProperty(ExecState *exec, int token);
0045     using KJS::JSObject::getOwnPropertySlot;
0046     bool getOwnPropertySlot(ExecState *exec, const Identifier &propertyName, PropertySlot &slot) override;
0047     using KJS::JSObject::put;
0048     void put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr = None) override;
0049     void putValueProperty(ExecState *exec, int token, JSValue *value, int /*attr*/);
0050 
0051     const ClassInfo *classInfo() const override
0052     {
0053         return &info;
0054     }
0055     static const ClassInfo info;
0056     enum { Referrer, Domain, URL, Body, Location, Cookie,
0057            Images, Applets, Links, Forms, Layers, Anchors, Scripts, All, Clear, Open, Close,
0058            Write, WriteLn, GetElementsByName, GetSelection, CaptureEvents, ReleaseEvents,
0059            BgColor, FgColor, AlinkColor, LinkColor, VlinkColor, LastModified,
0060            Height, Width, Dir, Frames, CompatMode, DesignMode, ActiveElement
0061          };
0062     DOM::HTMLDocumentImpl *impl() const
0063     {
0064         return static_cast<DOM::HTMLDocumentImpl *>(m_impl.get());
0065     }
0066 private:
0067     static JSValue *nameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0068     static JSValue *frameNameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0069     static JSValue *objectNameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0070     static JSValue *layerNameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0071 };
0072 
0073 DEFINE_PSEUDO_CONSTRUCTOR(HTMLDocumentPseudoCtor)
0074 
0075 class HTMLElement : public DOMElement
0076 {
0077 public:
0078     HTMLElement(ExecState *exec, DOM::HTMLElementImpl *e);
0079     using KJS::JSObject::getOwnPropertySlot;
0080     bool getOwnPropertySlot(ExecState *exec, const Identifier &propertyName, PropertySlot &slot) override;
0081     JSValue *getValueProperty(ExecState *exec, int token) const;
0082     using KJS::JSObject::put;
0083     void put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr = None) override;
0084     void putValueProperty(ExecState *exec, int token, JSValue *value, int);
0085     UString toString(ExecState *exec) const override;
0086     void pushEventHandlerScope(ExecState *exec, ScopeChain &scope) const override;
0087     const ClassInfo *classInfo() const override;
0088     static const ClassInfo info;
0089 
0090     static const ClassInfo html_info, head_info, link_info, title_info,
0091            meta_info, base_info, isIndex_info, style_info, body_info, form_info,
0092            select_info, optGroup_info, option_info, input_info, textArea_info,
0093            button_info, label_info, fieldSet_info, legend_info, ul_info, ol_info,
0094            dl_info, dir_info, menu_info, li_info, div_info, p_info, heading_info,
0095            blockQuote_info, q_info, pre_info, br_info, baseFont_info, font_info,
0096            hr_info, mod_info, a_info, canvas_info, img_info, object_info, param_info,
0097            applet_info, map_info, area_info, script_info, table_info,
0098            caption_info, col_info, tablesection_info, tr_info,
0099            tablecell_info, frameSet_info, frame_info, iFrame_info, marquee_info, layer_info;
0100 
0101     enum { HtmlVersion, HeadProfile, LinkHref, LinkRel, LinkMedia,
0102            LinkCharset, LinkDisabled, LinkHrefLang, LinkRev, LinkTarget, LinkType,
0103            LinkSheet, TitleText, MetaName, MetaHttpEquiv, MetaContent, MetaScheme,
0104            BaseHref, BaseTarget, IsIndexForm, IsIndexPrompt, StyleDisabled,
0105            StyleSheet, StyleType, StyleMedia, BodyBackground, BodyVLink, BodyText,
0106            BodyLink, BodyALink, BodyBgColor, BodyOnLoad, BodyOnBlur, BodyOnFocus,
0107            BodyOnError, BodyOnMessage, BodyFocus, BodyOnHashChange,
0108            FormAction, FormEncType, FormElements, FormLength, FormAcceptCharset,
0109            FormReset, FormTarget, FormName, FormMethod, FormSubmit, SelectAdd,
0110            SelectValue, SelectSelectedIndex, SelectLength,
0111            SelectRemove, SelectForm, SelectType, SelectOptions,
0112            SelectDisabled, SelectMultiple, SelectName, SelectSize, SelectItem,
0113            OptGroupDisabled, OptGroupLabel, OptionIndex, OptionSelected,
0114            OptionForm, OptionText, OptionDefaultSelected, OptionDisabled,
0115            OptionLabel, OptionValue, InputReadOnly, InputAccept,
0116            InputSize, InputDefaultValue, InputValue, InputType,
0117            InputMaxLength, InputDefaultChecked, InputDisabled,
0118            InputChecked, InputIndeterminate, InputForm, InputAccessKey, InputAlign, InputAlt,
0119            InputName, InputSrc, InputUseMap, InputSelect, InputClick,
0120            InputSelectionStart, InputSelectionEnd, InputSetSelectionRange, InputPlaceholder,
0121            TextAreaAccessKey, TextAreaName, TextAreaDefaultValue, TextAreaSelect,
0122            TextAreaCols, TextAreaDisabled, TextAreaForm, TextAreaType,
0123            TextAreaReadOnly, TextAreaRows, TextAreaValue,
0124            TextAreaSelectionStart, TextAreaSelectionEnd, TextAreaSetSelectionRange,
0125            TextAreaTextLength,  TextAreaPlaceholder,
0126            ButtonClick, ButtonForm, ButtonName,
0127            ButtonDisabled, ButtonAccessKey, ButtonType, ButtonValue, LabelHtmlFor,
0128            LabelForm, LabelAccessKey, FieldSetForm, LegendForm, LegendAccessKey,
0129            LegendAlign, UListType, UListCompact, OListStart, OListCompact,
0130            OListType, DListCompact, DirectoryCompact, MenuCompact, LIType,
0131            LIValue, DivAlign, ParagraphAlign, HeadingAlign, BlockQuoteCite,
0132            QuoteCite, PreWidth, BRClear, BaseFontColor, BaseFontSize,
0133            BaseFontFace, FontColor, FontSize, FontFace, HRWidth, HRNoShade,
0134            HRAlign, HRSize, ModCite, ModDateTime, AnchorShape, AnchorRel,
0135            AnchorAccessKey, AnchorCoords, AnchorHref, AnchorProtocol, AnchorHost,
0136            AnchorCharset, AnchorHrefLang, AnchorHostname, AnchorType,
0137            AnchorPort, AnchorPathName, AnchorHash, AnchorSearch, AnchorName,
0138            AnchorRev, AnchorTarget, AnchorText, AnchorClick, AnchorToString,
0139            ImageName, ImageAlign, ImageHspace, ImageVspace, ImageUseMap, ImageAlt,
0140            ImageLowSrc, ImageWidth, ImageIsMap, ImageBorder, ImageHeight,
0141            ImageLongDesc, ImageSrc, ImageX, ImageY, ImageComplete, ObjectHspace, ObjectHeight, ObjectAlign,
0142            ObjectBorder, ObjectCode, ObjectType, ObjectVspace, ObjectArchive,
0143            ObjectDeclare, ObjectForm, ObjectCodeBase, ObjectCodeType, ObjectData, ObjectGetSVGDocument,
0144            ObjectName, ObjectStandby, ObjectUseMap, ObjectWidth, ObjectContentDocument,
0145            ParamName, ParamType, ParamValueType, ParamValue, AppletArchive,
0146            AppletAlt, AppletCode, AppletWidth, AppletAlign, AppletCodeBase,
0147            AppletName, AppletHeight, AppletHspace, AppletObject, AppletVspace,
0148            MapAreas, MapName, AreaHash, AreaHref, AreaTarget, AreaPort, AreaShape,
0149            AreaCoords, AreaAlt, AreaAccessKey, AreaNoHref, AreaHost, AreaProtocol,
0150            AreaHostName, AreaPathName, AreaSearch, ScriptEvent,
0151            ScriptType, ScriptHtmlFor, ScriptText, ScriptSrc, ScriptCharset,
0152            ScriptDefer, TableSummary, TableTBodies, TableTHead, TableCellPadding,
0153            TableDeleteCaption, TableCreateCaption, TableCaption, TableWidth,
0154            TableCreateTFoot, TableAlign, TableTFoot, TableDeleteRow,
0155            TableCellSpacing, TableRows, TableBgColor, TableBorder, TableFrame,
0156            TableRules, TableCreateTHead, TableDeleteTHead, TableDeleteTFoot,
0157            TableInsertRow, TableCaptionAlign, TableColCh, TableColChOff,
0158            TableColAlign, TableColSpan, TableColVAlign, TableColWidth,
0159            TableSectionCh, TableSectionDeleteRow, TableSectionChOff,
0160            TableSectionRows, TableSectionAlign, TableSectionVAlign,
0161            TableSectionInsertRow, TableRowSectionRowIndex, TableRowRowIndex,
0162            TableRowChOff, TableRowCells, TableRowVAlign, TableRowCh,
0163            TableRowAlign, TableRowBgColor, TableRowDeleteCell, TableRowInsertCell,
0164            TableCellColSpan, TableCellNoWrap, TableCellAbbr, TableCellHeight,
0165            TableCellWidth, TableCellCellIndex, TableCellChOff, TableCellBgColor,
0166            TableCellCh, TableCellVAlign, TableCellRowSpan, TableCellHeaders,
0167            TableCellAlign, TableCellAxis, TableCellScope, FrameSetCols,
0168            FrameSetRows, FrameSetOnMessage, FrameSrc, FrameLocation, FrameFrameBorder, FrameScrolling,
0169            FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName,
0170            FrameContentDocument, FrameContentWindow,
0171            FrameNoResize, FrameWidth, FrameHeight, IFrameLongDesc, IFrameAlign,
0172            IFrameFrameBorder, IFrameSrc, IFrameName, IFrameHeight,
0173            IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth,
0174            IFrameContentDocument, IFrameContentWindow, IFrameGetSVGDocument,
0175            MarqueeStart, MarqueeStop,
0176            CanvasGetContext, CanvasWidth, CanvasHeight, CanvasToDataURL,
0177            LayerTop, LayerLeft, LayerVisibility, LayerBgColor, LayerClip, LayerDocument, LayerLayers,
0178            ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
0179            ElementClassName, ElementInnerText, ElementDocument,
0180            ElementChildren, ElementContentEditable, ElementIsContentEditable,
0181            ElementAll, ElementScrollIntoView, ElementTabIndex
0182          };
0183 
0184     DOM::HTMLElementImpl *impl() const
0185     {
0186         return static_cast<DOM::HTMLElementImpl *>(m_impl.get());
0187     }
0188     JSValue *indexGetter(ExecState *exec, unsigned index);
0189 private:
0190     static JSValue *formNameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0191 
0192     QString getURLArg(unsigned id) const;
0193 
0194     static KParts::ScriptableExtension *getScriptableExtension(const DOM::HTMLElementImpl &element);
0195 
0196     /* Many of properties in the DOM bindings can be implemented by merely returning
0197       an attribute as the right type, and setting it in similar manner; or perhaps
0198       returning a collection of appropriate type*/
0199     enum BoundPropType {
0200         T_String, //String, to be return by String()
0201         T_StrOrNl, //String, to be return by getStringOrNull()
0202         T_Bool,   //Boolean, return true if property is not null
0203         T_Int,
0204         T_URL,
0205         T_Res,      //Reserved, ignore sets, return empty string
0206         T_Coll,     //Collection, type is in attrID
0207         T_ReadOnly = 0x80 //Property should be handled only on read.
0208     };
0209 
0210     enum {
0211         NotApplicable = 0xFFFFFFFu
0212     };
0213 
0214     struct BoundPropInfo {
0215         unsigned elId;  //Applicable element type
0216         int      token; //Token
0217         BoundPropType type;
0218         unsigned attrId; //Attribute to get
0219     };
0220 
0221     JSValue *handleBoundRead(ExecState *exec, int token) const;
0222     bool      handleBoundWrite(ExecState *exec, int token, JSValue *value);
0223 
0224     static const BoundPropInfo bpTable[];
0225 
0226     static QHash<int, const BoundPropInfo *> *s_boundPropInfo;
0227     static QHash<int, const BoundPropInfo *> *boundPropInfo();
0228 
0229     // returns our window object --- may return 0.
0230     KJS::Window *ourWindow() const;
0231     JSValue     *getWindowListener(ExecState *exec, int eventId) const;
0232     void         setWindowListener(ExecState *exec, int eventId, JSValue *val) const;
0233 };
0234 
0235 class HTMLCollection : public DOMObject
0236 {
0237 public:
0238     HTMLCollection(ExecState *exec,  DOM::HTMLCollectionImpl *c);
0239     HTMLCollection(KJS::JSObject *proto, DOM::HTMLCollectionImpl *c);
0240     ~HTMLCollection();
0241     JSValue *getValueProperty(ExecState *exec, int token);
0242     using KJS::JSObject::getOwnPropertySlot;
0243     bool getOwnPropertySlot(ExecState *exec, const Identifier &propertyName, PropertySlot &slot) override;
0244 
0245     JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args) override;
0246     bool implementsCall() const override
0247     {
0248         return true;
0249     }
0250     bool isFunctionType() const override
0251     {
0252         return false;
0253     }
0254     bool masqueradeAsUndefined() const override;
0255     bool toBoolean(ExecState *) const override;
0256     void getOwnPropertyNames(ExecState *, PropertyNameArray &, PropertyMap::PropertyMode mode) override;
0257     enum { Item, NamedItem, Tags };
0258     JSValue *getNamedItems(ExecState *exec, const Identifier &propertyName) const;
0259     const ClassInfo *classInfo() const override
0260     {
0261         return &info;
0262     }
0263     static const ClassInfo info;
0264     DOM::HTMLCollectionImpl *impl() const
0265     {
0266         return m_impl.get();
0267     }
0268     virtual void hide()
0269     {
0270         hidden = true;
0271     }
0272     JSValue *indexGetter(ExecState *exec, unsigned index);
0273 protected:
0274     SharedPtr<DOM::HTMLCollectionImpl> m_impl;
0275     bool hidden;
0276 private:
0277     static JSValue *lengthGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0278     static JSValue *nameGetter(ExecState *exec, JSObject *, const Identifier &name, const PropertySlot &slot);
0279 };
0280 
0281 class HTMLSelectCollection : public HTMLCollection
0282 {
0283 public:
0284     enum { Add, Remove };
0285     HTMLSelectCollection(ExecState *exec, DOM::HTMLCollectionImpl *c, DOM::HTMLSelectElementImpl *e);
0286     using KJS::JSObject::getOwnPropertySlot;
0287     bool getOwnPropertySlot(ExecState *exec, const Identifier &propertyName, PropertySlot &slot) override;
0288     using KJS::JSObject::put;
0289     void put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr = None) override;
0290 
0291     const ClassInfo *classInfo() const override
0292     {
0293         return &info;
0294     }
0295     static const ClassInfo info;
0296 
0297     DOM::HTMLSelectElementImpl *toElement() const
0298     {
0299         return element.get();
0300     }
0301 private:
0302     SharedPtr<DOM::HTMLSelectElementImpl> element;
0303     static JSValue *selectedIndexGetter(ExecState *exec, JSObject *, const Identifier &propertyName, const PropertySlot &slot);
0304     static JSValue *selectedValueGetter(ExecState *exec, JSObject *, const Identifier &propertyName, const PropertySlot &slot);
0305 };
0306 
0307 ////////////////////// Option Object ////////////////////////
0308 
0309 class OptionConstructorImp : public JSObject
0310 {
0311 public:
0312     OptionConstructorImp(ExecState *exec, DOM::DocumentImpl *d);
0313     bool implementsConstruct() const override;
0314     using KJS::JSObject::construct;
0315     JSObject *construct(ExecState *exec, const List &args) override;
0316 private:
0317     SharedPtr<DOM::DocumentImpl> doc;
0318 };
0319 
0320 ////////////////////// Image Object ////////////////////////
0321 
0322 class ImageConstructorImp : public JSObject
0323 {
0324 public:
0325     ImageConstructorImp(ExecState *exec, DOM::DocumentImpl *d);
0326     bool implementsConstruct() const override;
0327     using KJS::JSObject::construct;
0328     JSObject *construct(ExecState *exec, const List &args) override;
0329 private:
0330     SharedPtr<DOM::DocumentImpl> doc;
0331 };
0332 
0333 JSValue *getHTMLCollection(ExecState *exec, DOM::HTMLCollectionImpl *c, bool hide = false);
0334 JSValue *getSelectHTMLCollection(ExecState *exec, DOM::HTMLCollectionImpl *c, DOM::HTMLSelectElementImpl *e);
0335 
0336 //All the pseudo constructors..
0337 DEFINE_PSEUDO_CONSTRUCTOR(HTMLElementPseudoCtor)
0338 DEFINE_PSEUDO_CONSTRUCTOR(HTMLHtmlElementPseudoCtor)
0339 DEFINE_PSEUDO_CONSTRUCTOR(HTMLHeadElementPseudoCtor)
0340 DEFINE_PSEUDO_CONSTRUCTOR(HTMLLinkElementPseudoCtor)
0341 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTitleElementPseudoCtor)
0342 DEFINE_PSEUDO_CONSTRUCTOR(HTMLMetaElementPseudoCtor)
0343 DEFINE_PSEUDO_CONSTRUCTOR(HTMLBaseElementPseudoCtor)
0344 DEFINE_PSEUDO_CONSTRUCTOR(HTMLIsIndexElementPseudoCtor)
0345 DEFINE_PSEUDO_CONSTRUCTOR(HTMLStyleElementPseudoCtor)
0346 DEFINE_PSEUDO_CONSTRUCTOR(HTMLBodyElementPseudoCtor)
0347 DEFINE_PSEUDO_CONSTRUCTOR(HTMLFormElementPseudoCtor)
0348 DEFINE_PSEUDO_CONSTRUCTOR(HTMLSelectElementPseudoCtor)
0349 DEFINE_PSEUDO_CONSTRUCTOR(HTMLOptGroupElementPseudoCtor)
0350 DEFINE_PSEUDO_CONSTRUCTOR(HTMLOptionElementPseudoCtor)
0351 DEFINE_PSEUDO_CONSTRUCTOR(HTMLInputElementPseudoCtor)
0352 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTextAreaElementPseudoCtor)
0353 DEFINE_PSEUDO_CONSTRUCTOR(HTMLButtonElementPseudoCtor)
0354 DEFINE_PSEUDO_CONSTRUCTOR(HTMLLabelElementPseudoCtor)
0355 DEFINE_PSEUDO_CONSTRUCTOR(HTMLFieldSetElementPseudoCtor)
0356 DEFINE_PSEUDO_CONSTRUCTOR(HTMLLegendElementPseudoCtor)
0357 DEFINE_PSEUDO_CONSTRUCTOR(HTMLUListElementPseudoCtor)
0358 DEFINE_PSEUDO_CONSTRUCTOR(HTMLOListElementPseudoCtor)
0359 DEFINE_PSEUDO_CONSTRUCTOR(HTMLDListElementPseudoCtor)
0360 DEFINE_PSEUDO_CONSTRUCTOR(HTMLDirectoryElementPseudoCtor)
0361 DEFINE_PSEUDO_CONSTRUCTOR(HTMLMenuElementPseudoCtor)
0362 DEFINE_PSEUDO_CONSTRUCTOR(HTMLLIElementPseudoCtor)
0363 DEFINE_PSEUDO_CONSTRUCTOR(HTMLDivElementPseudoCtor)
0364 DEFINE_PSEUDO_CONSTRUCTOR(HTMLParagraphElementPseudoCtor)
0365 DEFINE_PSEUDO_CONSTRUCTOR(HTMLHeadingElementPseudoCtor)
0366 DEFINE_PSEUDO_CONSTRUCTOR(HTMLBlockQuoteElementPseudoCtor)
0367 DEFINE_PSEUDO_CONSTRUCTOR(HTMLQuoteElementPseudoCtor)
0368 DEFINE_PSEUDO_CONSTRUCTOR(HTMLPreElementPseudoCtor)
0369 DEFINE_PSEUDO_CONSTRUCTOR(HTMLBRElementPseudoCtor)
0370 DEFINE_PSEUDO_CONSTRUCTOR(HTMLBaseFontElementPseudoCtor)
0371 DEFINE_PSEUDO_CONSTRUCTOR(HTMLFontElementPseudoCtor)
0372 DEFINE_PSEUDO_CONSTRUCTOR(HTMLHRElementPseudoCtor)
0373 DEFINE_PSEUDO_CONSTRUCTOR(HTMLModElementPseudoCtor)
0374 DEFINE_PSEUDO_CONSTRUCTOR(HTMLAnchorElementPseudoCtor)
0375 DEFINE_PSEUDO_CONSTRUCTOR(HTMLImageElementPseudoCtor)
0376 DEFINE_PSEUDO_CONSTRUCTOR(HTMLObjectElementPseudoCtor)
0377 DEFINE_PSEUDO_CONSTRUCTOR(HTMLParamElementPseudoCtor)
0378 DEFINE_PSEUDO_CONSTRUCTOR(HTMLAppletElementPseudoCtor)
0379 DEFINE_PSEUDO_CONSTRUCTOR(HTMLMapElementPseudoCtor)
0380 DEFINE_PSEUDO_CONSTRUCTOR(HTMLAreaElementPseudoCtor)
0381 DEFINE_PSEUDO_CONSTRUCTOR(HTMLScriptElementPseudoCtor)
0382 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableElementPseudoCtor)
0383 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableCaptionElementPseudoCtor)
0384 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableColElementPseudoCtor)
0385 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableSectionElementPseudoCtor)
0386 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableRowElementPseudoCtor)
0387 DEFINE_PSEUDO_CONSTRUCTOR(HTMLTableCellElementPseudoCtor)
0388 DEFINE_PSEUDO_CONSTRUCTOR(HTMLFrameSetElementPseudoCtor)
0389 DEFINE_PSEUDO_CONSTRUCTOR(HTMLLayerElementPseudoCtor)
0390 DEFINE_PSEUDO_CONSTRUCTOR(HTMLFrameElementPseudoCtor)
0391 DEFINE_PSEUDO_CONSTRUCTOR(HTMLIFrameElementPseudoCtor)
0392 DEFINE_PSEUDO_CONSTRUCTOR(HTMLCollectionPseudoCtor)
0393 DEFINE_PSEUDO_CONSTRUCTOR(HTMLMarqueeElementPseudoCtor)
0394 DEFINE_PSEUDO_CONSTRUCTOR(HTMLCanvasElementPseudoCtor)
0395 } // namespace
0396 
0397 #endif