1 /*
2 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
3 *
4 * This file was generated by the dom/make_names.pl script.
5 *
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 #include "config.h"
31
32 #if ENABLE(MATHML)
33
34 #include "MathMLElementFactory.h"
35 #include "MathMLNames.h"
36 #include "MathMLMathElement.h"
37 #include "MathMLInlineContainerElement.h"
38 #include "MathMLTextElement.h"
39
40 #include <wtf/HashMap.h>
41
42 #if ENABLE(DASHBOARD_SUPPORT) || ENABLE(VIDEO)
43 #include "Document.h"
44 #include "Settings.h"
45 #endif
46
47 namespace WebCore {
48
49 using namespace MathMLNames;
50
51 typedef PassRefPtr<MathMLElement> (*ConstructorFunction)(const QualifiedName&, Document*, bool createdByParser);
52 typedef HashMap<AtomicStringImpl*, ConstructorFunction> FunctionMap;
53
54 static FunctionMap* gFunctionMap = 0;
55
mathConstructor(const QualifiedName & tagName,Document * document,bool)56 static PassRefPtr<MathMLElement> mathConstructor(const QualifiedName& tagName, Document* document, bool)
57 {
58 return MathMLMathElement::create(tagName, document);
59 }
60
inlinecontainerConstructor(const QualifiedName & tagName,Document * document,bool)61 static PassRefPtr<MathMLElement> inlinecontainerConstructor(const QualifiedName& tagName, Document* document, bool)
62 {
63 return MathMLInlineContainerElement::create(tagName, document);
64 }
65
textConstructor(const QualifiedName & tagName,Document * document,bool)66 static PassRefPtr<MathMLElement> textConstructor(const QualifiedName& tagName, Document* document, bool)
67 {
68 return MathMLTextElement::create(tagName, document);
69 }
70
addTag(const QualifiedName & tag,ConstructorFunction func)71 static void addTag(const QualifiedName& tag, ConstructorFunction func)
72 {
73 gFunctionMap->set(tag.localName().impl(), func);
74 }
75
createFunctionMap()76 static void createFunctionMap()
77 {
78 ASSERT(!gFunctionMap);
79
80 // Create the table.
81 gFunctionMap = new FunctionMap;
82
83 // Populate it with constructor functions.
84 addTag(mathTag, mathConstructor);
85 addTag(mfencedTag, inlinecontainerConstructor);
86 addTag(mfracTag, inlinecontainerConstructor);
87 addTag(miTag, textConstructor);
88 addTag(mnTag, textConstructor);
89 addTag(moTag, textConstructor);
90 addTag(moverTag, inlinecontainerConstructor);
91 addTag(mrootTag, inlinecontainerConstructor);
92 addTag(mrowTag, inlinecontainerConstructor);
93 addTag(msqrtTag, inlinecontainerConstructor);
94 addTag(msubTag, inlinecontainerConstructor);
95 addTag(msubsupTag, inlinecontainerConstructor);
96 addTag(msupTag, inlinecontainerConstructor);
97 addTag(mtextTag, textConstructor);
98 addTag(munderTag, inlinecontainerConstructor);
99 addTag(munderoverTag, inlinecontainerConstructor);
100 }
101
createMathMLElement(const QualifiedName & qName,Document * document,bool createdByParser)102 PassRefPtr<MathMLElement> MathMLElementFactory::createMathMLElement(const QualifiedName& qName, Document* document, bool createdByParser)
103 {
104 if (!document)
105 return 0;
106
107 #if ENABLE(DASHBOARD_SUPPORT)
108 Settings* settings = document->settings();
109 if (settings && settings->usesDashboardBackwardCompatibilityMode())
110 return 0;
111 #endif
112 if (!gFunctionMap)
113 createFunctionMap();
114 if (ConstructorFunction function = gFunctionMap->get(qName.localName().impl()))
115 return function(qName, document, createdByParser);
116 return MathMLElement::create(qName, document);
117 }
118
119 } // namespace WebCore
120
121 #endif
122