summaryrefslogtreecommitdiffstats
path: root/WebCore/html/HTMLElementFactory.cpp
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
commit8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch)
tree11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /WebCore/html/HTMLElementFactory.cpp
parent648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff)
downloadexternal_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'WebCore/html/HTMLElementFactory.cpp')
-rw-r--r--WebCore/html/HTMLElementFactory.cpp520
1 files changed, 520 insertions, 0 deletions
diff --git a/WebCore/html/HTMLElementFactory.cpp b/WebCore/html/HTMLElementFactory.cpp
new file mode 100644
index 0000000..1b9b0cc
--- /dev/null
+++ b/WebCore/html/HTMLElementFactory.cpp
@@ -0,0 +1,520 @@
+/*
+ * This file is part of the HTML DOM implementation for KDE.
+ *
+ * Copyright (C) 2005 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "HTMLElementFactory.h"
+
+#include "HTMLAnchorElement.h"
+#include "HTMLAppletElement.h"
+#include "HTMLAreaElement.h"
+#include "HTMLAudioElement.h"
+#include "HTMLBRElement.h"
+#include "HTMLBaseElement.h"
+#include "HTMLBaseFontElement.h"
+#include "HTMLBlockquoteElement.h"
+#include "HTMLBodyElement.h"
+#include "HTMLButtonElement.h"
+#include "HTMLCanvasElement.h"
+#include "HTMLDListElement.h"
+#include "HTMLDirectoryElement.h"
+#include "HTMLDivElement.h"
+#include "HTMLDocument.h"
+#include "HTMLEmbedElement.h"
+#include "HTMLFieldSetElement.h"
+#include "HTMLFontElement.h"
+#include "HTMLFormElement.h"
+#include "HTMLFrameElement.h"
+#include "HTMLFrameSetElement.h"
+#include "HTMLHRElement.h"
+#include "HTMLHeadElement.h"
+#include "HTMLHeadingElement.h"
+#include "HTMLHtmlElement.h"
+#include "HTMLIFrameElement.h"
+#include "HTMLImageElement.h"
+#include "HTMLIsIndexElement.h"
+#include "HTMLKeygenElement.h"
+#include "HTMLLIElement.h"
+#include "HTMLLabelElement.h"
+#include "HTMLLegendElement.h"
+#include "HTMLLinkElement.h"
+#include "HTMLMapElement.h"
+#include "HTMLMarqueeElement.h"
+#include "HTMLMenuElement.h"
+#include "HTMLMetaElement.h"
+#include "HTMLModElement.h"
+#include "HTMLNames.h"
+#include "HTMLOListElement.h"
+#include "HTMLObjectElement.h"
+#include "HTMLOptGroupElement.h"
+#include "HTMLOptionElement.h"
+#include "HTMLParagraphElement.h"
+#include "HTMLParamElement.h"
+#include "HTMLPreElement.h"
+#include "HTMLQuoteElement.h"
+#include "HTMLScriptElement.h"
+#include "HTMLSelectElement.h"
+#include "HTMLSourceElement.h"
+#include "HTMLStyleElement.h"
+#include "HTMLTableCaptionElement.h"
+#include "HTMLTableCellElement.h"
+#include "HTMLTableColElement.h"
+#include "HTMLTableElement.h"
+#include "HTMLTableRowElement.h"
+#include "HTMLTableSectionElement.h"
+#include "HTMLTextAreaElement.h"
+#include "HTMLTitleElement.h"
+#include "HTMLUListElement.h"
+#include "HTMLVideoElement.h"
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+typedef PassRefPtr<HTMLElement> (*ConstructorFunc)(const AtomicString& tagName, Document*, HTMLFormElement*, bool createdByParser);
+typedef HashMap<AtomicStringImpl*, ConstructorFunc> FunctionMap;
+static FunctionMap* gFunctionMap;
+
+static PassRefPtr<HTMLElement> htmlConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLHtmlElement(doc);
+}
+
+static PassRefPtr<HTMLElement> headConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLHeadElement(doc);
+}
+
+static PassRefPtr<HTMLElement> bodyConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLBodyElement(doc);
+}
+
+static PassRefPtr<HTMLElement> baseConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLBaseElement(doc);
+}
+
+static PassRefPtr<HTMLElement> linkConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLLinkElement> link = new HTMLLinkElement(doc);
+ link->setCreatedByParser(createdByParser);
+ return link.release();
+}
+
+static PassRefPtr<HTMLElement> metaConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLMetaElement(doc);
+}
+
+static PassRefPtr<HTMLElement> styleConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLStyleElement> style = new HTMLStyleElement(doc);
+ style->setCreatedByParser(createdByParser);
+ return style.release();
+}
+
+static PassRefPtr<HTMLElement> titleConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTitleElement(doc);
+}
+
+static PassRefPtr<HTMLElement> frameConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLFrameElement> frame = new HTMLFrameElement(doc);
+ frame->setCreatedByParser(createdByParser);
+ return frame.release();
+}
+
+static PassRefPtr<HTMLElement> framesetConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLFrameSetElement(doc);
+}
+
+static PassRefPtr<HTMLElement> iframeConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLIFrameElement> iFrame = new HTMLIFrameElement(doc);
+ iFrame->setCreatedByParser(createdByParser);
+ return iFrame.release();
+}
+
+static PassRefPtr<HTMLElement> formConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLFormElement(doc);
+}
+
+static PassRefPtr<HTMLElement> buttonConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLButtonElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> inputConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLInputElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> isindexConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLIsIndexElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> fieldsetConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLFieldSetElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> keygenConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLKeygenElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> labelConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLLabelElement(doc);
+}
+
+static PassRefPtr<HTMLElement> legendConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLLegendElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> optgroupConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLOptGroupElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> optionConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLOptionElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> selectConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLSelectElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> textareaConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLTextAreaElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> dlConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLDListElement(doc);
+}
+
+static PassRefPtr<HTMLElement> ulConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLUListElement(doc);
+}
+
+static PassRefPtr<HTMLElement> olConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLOListElement(doc);
+}
+
+static PassRefPtr<HTMLElement> dirConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLDirectoryElement(doc);
+}
+
+static PassRefPtr<HTMLElement> menuConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLMenuElement(doc);
+}
+
+static PassRefPtr<HTMLElement> liConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLLIElement(doc);
+}
+
+static PassRefPtr<HTMLElement> blockquoteConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLBlockquoteElement(doc);
+}
+
+static PassRefPtr<HTMLElement> divConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLDivElement(doc);
+}
+
+static PassRefPtr<HTMLElement> headingConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLHeadingElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> hrConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLHRElement(doc);
+}
+
+static PassRefPtr<HTMLElement> paragraphConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLParagraphElement(doc);
+}
+
+static PassRefPtr<HTMLElement> preConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLPreElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> basefontConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLBaseFontElement(doc);
+}
+
+static PassRefPtr<HTMLElement> fontConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLFontElement(doc);
+}
+
+static PassRefPtr<HTMLElement> modConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLModElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> anchorConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLAnchorElement(doc);
+}
+
+static PassRefPtr<HTMLElement> imageConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+ return new HTMLImageElement(doc, form);
+}
+
+static PassRefPtr<HTMLElement> mapConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLMapElement(doc);
+}
+
+static PassRefPtr<HTMLElement> areaConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLAreaElement(doc);
+}
+
+static PassRefPtr<HTMLElement> canvasConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLCanvasElement(doc);
+}
+
+static PassRefPtr<HTMLElement> appletConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLAppletElement(doc);
+}
+
+static PassRefPtr<HTMLElement> embedConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLEmbedElement(doc);
+}
+
+static PassRefPtr<HTMLElement> objectConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLObjectElement> object = new HTMLObjectElement(doc, createdByParser);
+ return object.release();
+}
+
+static PassRefPtr<HTMLElement> paramConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLParamElement(doc);
+}
+
+static PassRefPtr<HTMLElement> scriptConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool createdByParser)
+{
+ RefPtr<HTMLScriptElement> script = new HTMLScriptElement(doc);
+ script->setCreatedByParser(createdByParser);
+ return script.release();
+}
+
+static PassRefPtr<HTMLElement> tableConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableElement(doc);
+}
+
+static PassRefPtr<HTMLElement> tableCaptionConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableCaptionElement(doc);
+}
+
+static PassRefPtr<HTMLElement> tableColConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableColElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> tableRowConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableRowElement(doc);
+}
+
+static PassRefPtr<HTMLElement> tableCellConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableCellElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> tableSectionConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLTableSectionElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+static PassRefPtr<HTMLElement> brConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLBRElement(doc);
+}
+
+static PassRefPtr<HTMLElement> quoteConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLQuoteElement(doc);
+}
+
+static PassRefPtr<HTMLElement> marqueeConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
+{
+ return new HTMLMarqueeElement(doc);
+}
+
+#if ENABLE(VIDEO)
+static PassRefPtr<HTMLElement> audioConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ if (!MediaPlayer::isAvailable())
+ return new HTMLElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+ return new HTMLAudioElement(doc);
+}
+
+static PassRefPtr<HTMLElement> videoConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ if (!MediaPlayer::isAvailable())
+ return new HTMLElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+ return new HTMLVideoElement(doc);
+}
+
+static PassRefPtr<HTMLElement> sourceConstructor(const AtomicString& tagName, Document* doc, HTMLFormElement*, bool)
+{
+ if (!MediaPlayer::isAvailable())
+ return new HTMLElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+ return new HTMLSourceElement(doc);
+}
+#endif
+
+static void addTag(const QualifiedName& tag, ConstructorFunc func)
+{
+ gFunctionMap->set(tag.localName().impl(), func);
+}
+
+static void createFunctionMap()
+{
+ // Create the table.
+ gFunctionMap = new FunctionMap;
+
+ // Populate it with constructor functions.
+ addTag(aTag, anchorConstructor);
+ addTag(appletTag, appletConstructor);
+ addTag(areaTag, areaConstructor);
+ addTag(baseTag, baseConstructor);
+ addTag(basefontTag, basefontConstructor);
+ addTag(blockquoteTag, blockquoteConstructor);
+ addTag(bodyTag, bodyConstructor);
+ addTag(brTag, brConstructor);
+ addTag(buttonTag, buttonConstructor);
+ addTag(canvasTag, canvasConstructor);
+ addTag(captionTag, tableCaptionConstructor);
+ addTag(colTag, tableColConstructor);
+ addTag(colgroupTag, tableColConstructor);
+ addTag(delTag, modConstructor);
+ addTag(dirTag, dirConstructor);
+ addTag(divTag, divConstructor);
+ addTag(dlTag, dlConstructor);
+ addTag(embedTag, embedConstructor);
+ addTag(fieldsetTag, fieldsetConstructor);
+ addTag(fontTag, fontConstructor);
+ addTag(formTag, formConstructor);
+ addTag(frameTag, frameConstructor);
+ addTag(framesetTag, framesetConstructor);
+ addTag(h1Tag, headingConstructor);
+ addTag(h2Tag, headingConstructor);
+ addTag(h3Tag, headingConstructor);
+ addTag(h4Tag, headingConstructor);
+ addTag(h5Tag, headingConstructor);
+ addTag(h6Tag, headingConstructor);
+ addTag(headTag, headConstructor);
+ addTag(hrTag, hrConstructor);
+ addTag(htmlTag, htmlConstructor);
+ addTag(iframeTag, iframeConstructor);
+ addTag(imageTag, imageConstructor);
+ addTag(imgTag, imageConstructor);
+ addTag(inputTag, inputConstructor);
+ addTag(insTag, modConstructor);
+ addTag(isindexTag, isindexConstructor);
+ addTag(keygenTag, keygenConstructor);
+ addTag(labelTag, labelConstructor);
+ addTag(legendTag, legendConstructor);
+ addTag(liTag, liConstructor);
+ addTag(linkTag, linkConstructor);
+ addTag(listingTag, preConstructor);
+ addTag(mapTag, mapConstructor);
+ addTag(marqueeTag, marqueeConstructor);
+ addTag(menuTag, menuConstructor);
+ addTag(metaTag, metaConstructor);
+ addTag(objectTag, objectConstructor);
+ addTag(olTag, olConstructor);
+ addTag(optgroupTag, optgroupConstructor);
+ addTag(optionTag, optionConstructor);
+ addTag(pTag, paragraphConstructor);
+ addTag(paramTag, paramConstructor);
+ addTag(preTag, preConstructor);
+ addTag(qTag, quoteConstructor);
+ addTag(scriptTag, scriptConstructor);
+ addTag(selectTag, selectConstructor);
+ addTag(styleTag, styleConstructor);
+ addTag(tableTag, tableConstructor);
+ addTag(tbodyTag, tableSectionConstructor);
+ addTag(tdTag, tableCellConstructor);
+ addTag(textareaTag, textareaConstructor);
+ addTag(tfootTag, tableSectionConstructor);
+ addTag(thTag, tableCellConstructor);
+ addTag(theadTag, tableSectionConstructor);
+ addTag(titleTag, titleConstructor);
+ addTag(trTag, tableRowConstructor);
+ addTag(ulTag, ulConstructor);
+ addTag(xmpTag, preConstructor);
+#if ENABLE(VIDEO)
+ addTag(audioTag, audioConstructor);
+ addTag(sourceTag, sourceConstructor);
+ addTag(videoTag, videoConstructor);
+#endif
+}
+
+PassRefPtr<HTMLElement> HTMLElementFactory::createHTMLElement(const AtomicString& tagName, Document* doc, HTMLFormElement* form, bool createdByParser)
+{
+ if (!doc)
+ return 0; // Don't allow elements to ever be made without having a doc.
+
+ if (!gFunctionMap)
+ createFunctionMap();
+
+ ConstructorFunc func = gFunctionMap->get(tagName.impl());
+ if (func)
+ return func(tagName, doc, form, createdByParser);
+
+ // elements with no special representation in the DOM
+ return new HTMLElement(QualifiedName(nullAtom, tagName, xhtmlNamespaceURI), doc);
+}
+
+}
+