summaryrefslogtreecommitdiff
path: root/Libraries/LibWeb/DOM
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-06-07 23:27:03 +0200
committerAndreas Kling <kling@serenityos.org>2020-06-07 23:27:03 +0200
commit992697d99f40920dcd772c6e66e8eaeede8b1bb2 (patch)
tree7dcc6e77c8e74f732fb09d11ac43bec1205f8466 /Libraries/LibWeb/DOM
parent10851d87a2071d22e49fecb5a3fd19f7157c392a (diff)
downloadserenity-992697d99f40920dcd772c6e66e8eaeede8b1bb2.zip
LibWeb: Add HTML::TagNames namespace for global tag name FlyStrings
Instead of "iframe", we can now say HTML::TagNames::iframe and avoid a FlyString lookup.
Diffstat (limited to 'Libraries/LibWeb/DOM')
-rw-r--r--Libraries/LibWeb/DOM/Document.cpp1
-rw-r--r--Libraries/LibWeb/DOM/Element.h1
-rw-r--r--Libraries/LibWeb/DOM/ElementFactory.cpp50
-rw-r--r--Libraries/LibWeb/DOM/HTMLAnchorElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLBRElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLBlinkElement.h6
-rw-r--r--Libraries/LibWeb/DOM/HTMLBodyElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLCanvasElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLFontElement.h6
-rw-r--r--Libraries/LibWeb/DOM/HTMLFormElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLHRElement.h6
-rw-r--r--Libraries/LibWeb/DOM/HTMLIFrameElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLImageElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLInputElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLLinkElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLScriptElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLStyleElement.h7
-rw-r--r--Libraries/LibWeb/DOM/HTMLTableCellElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLTableElement.h2
-rw-r--r--Libraries/LibWeb/DOM/HTMLTableRowElement.h2
-rw-r--r--Libraries/LibWeb/DOM/TagNames.cpp53
-rw-r--r--Libraries/LibWeb/DOM/TagNames.h95
22 files changed, 209 insertions, 42 deletions
diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp
index b716b789ab..9973310dd9 100644
--- a/Libraries/LibWeb/DOM/Document.cpp
+++ b/Libraries/LibWeb/DOM/Document.cpp
@@ -68,6 +68,7 @@ Document::Document(const URL& url)
, m_window(Window::create_with_document(*this))
{
HTML::AttributeNames::initialize();
+ HTML::TagNames::initialize();
m_style_update_timer = Core::Timer::create_single_shot(0, [this] {
update_style();
diff --git a/Libraries/LibWeb/DOM/Element.h b/Libraries/LibWeb/DOM/Element.h
index e7d88d84ae..e8d0e4faba 100644
--- a/Libraries/LibWeb/DOM/Element.h
+++ b/Libraries/LibWeb/DOM/Element.h
@@ -31,6 +31,7 @@
#include <LibWeb/DOM/Attribute.h>
#include <LibWeb/DOM/AttributeNames.h>
#include <LibWeb/DOM/ParentNode.h>
+#include <LibWeb/DOM/TagNames.h>
#include <LibWeb/Layout/LayoutNode.h>
namespace Web {
diff --git a/Libraries/LibWeb/DOM/ElementFactory.cpp b/Libraries/LibWeb/DOM/ElementFactory.cpp
index 04874247a0..c8ba8bdb60 100644
--- a/Libraries/LibWeb/DOM/ElementFactory.cpp
+++ b/Libraries/LibWeb/DOM/ElementFactory.cpp
@@ -52,55 +52,47 @@ namespace Web {
NonnullRefPtr<Element> create_element(Document& document, const FlyString& tag_name)
{
auto lowercase_tag_name = tag_name.to_lowercase();
- if (lowercase_tag_name == "a")
+ if (lowercase_tag_name == HTML::TagNames::a)
return adopt(*new HTMLAnchorElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "html")
+ if (lowercase_tag_name == HTML::TagNames::html)
return adopt(*new HTMLHtmlElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "head")
+ if (lowercase_tag_name == HTML::TagNames::head)
return adopt(*new HTMLHeadElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "body")
+ if (lowercase_tag_name == HTML::TagNames::body)
return adopt(*new HTMLBodyElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "font")
+ if (lowercase_tag_name == HTML::TagNames::font)
return adopt(*new HTMLFontElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "hr")
+ if (lowercase_tag_name == HTML::TagNames::hr)
return adopt(*new HTMLHRElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "style")
+ if (lowercase_tag_name == HTML::TagNames::style)
return adopt(*new HTMLStyleElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "title")
+ if (lowercase_tag_name == HTML::TagNames::title)
return adopt(*new HTMLTitleElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "link")
+ if (lowercase_tag_name == HTML::TagNames::link)
return adopt(*new HTMLLinkElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "img")
+ if (lowercase_tag_name == HTML::TagNames::img)
return adopt(*new HTMLImageElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "blink")
+ if (lowercase_tag_name == HTML::TagNames::blink)
return adopt(*new HTMLBlinkElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "form")
+ if (lowercase_tag_name == HTML::TagNames::form)
return adopt(*new HTMLFormElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "input")
+ if (lowercase_tag_name == HTML::TagNames::input)
return adopt(*new HTMLInputElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "br")
+ if (lowercase_tag_name == HTML::TagNames::br)
return adopt(*new HTMLBRElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "iframe")
+ if (lowercase_tag_name == HTML::TagNames::iframe)
return adopt(*new HTMLIFrameElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "table")
+ if (lowercase_tag_name == HTML::TagNames::table)
return adopt(*new HTMLTableElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "tr")
+ if (lowercase_tag_name == HTML::TagNames::tr)
return adopt(*new HTMLTableRowElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "td" || lowercase_tag_name == "th")
+ if (lowercase_tag_name == HTML::TagNames::td || lowercase_tag_name == HTML::TagNames::th)
return adopt(*new HTMLTableCellElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "iframe")
- return adopt(*new HTMLIFrameElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "h1"
- || lowercase_tag_name == "h2"
- || lowercase_tag_name == "h3"
- || lowercase_tag_name == "h4"
- || lowercase_tag_name == "h5"
- || lowercase_tag_name == "h6") {
+ if (lowercase_tag_name.is_one_of(HTML::TagNames::h1, HTML::TagNames::h2, HTML::TagNames::h3, HTML::TagNames::h4, HTML::TagNames::h5, HTML::TagNames::h6))
return adopt(*new HTMLHeadingElement(document, lowercase_tag_name));
- }
- if (lowercase_tag_name == "script")
+ if (lowercase_tag_name == HTML::TagNames::script)
return adopt(*new HTMLScriptElement(document, lowercase_tag_name));
- if (lowercase_tag_name == "canvas")
+ if (lowercase_tag_name == HTML::TagNames::canvas)
return adopt(*new HTMLCanvasElement(document, lowercase_tag_name));
return adopt(*new Element(document, lowercase_tag_name));
}
diff --git a/Libraries/LibWeb/DOM/HTMLAnchorElement.h b/Libraries/LibWeb/DOM/HTMLAnchorElement.h
index 925d149cf5..d52557b8c3 100644
--- a/Libraries/LibWeb/DOM/HTMLAnchorElement.h
+++ b/Libraries/LibWeb/DOM/HTMLAnchorElement.h
@@ -42,7 +42,7 @@ public:
template<>
inline bool is<HTMLAnchorElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("a");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::a;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLBRElement.h b/Libraries/LibWeb/DOM/HTMLBRElement.h
index f032166438..b922c459fb 100644
--- a/Libraries/LibWeb/DOM/HTMLBRElement.h
+++ b/Libraries/LibWeb/DOM/HTMLBRElement.h
@@ -41,7 +41,7 @@ public:
template<>
inline bool is<HTMLBRElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("br");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::br;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLBlinkElement.h b/Libraries/LibWeb/DOM/HTMLBlinkElement.h
index 743f8a8af0..d9ff921fa4 100644
--- a/Libraries/LibWeb/DOM/HTMLBlinkElement.h
+++ b/Libraries/LibWeb/DOM/HTMLBlinkElement.h
@@ -42,4 +42,10 @@ private:
NonnullRefPtr<Core::Timer> m_timer;
};
+template<>
+inline bool is<HTMLBlinkElement>(const Node& node)
+{
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::blink;
+}
+
}
diff --git a/Libraries/LibWeb/DOM/HTMLBodyElement.h b/Libraries/LibWeb/DOM/HTMLBodyElement.h
index 4dafb72633..75a80743dc 100644
--- a/Libraries/LibWeb/DOM/HTMLBodyElement.h
+++ b/Libraries/LibWeb/DOM/HTMLBodyElement.h
@@ -45,7 +45,7 @@ private:
template<>
inline bool is<HTMLBodyElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("body");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::body;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLCanvasElement.h b/Libraries/LibWeb/DOM/HTMLCanvasElement.h
index fb1c9d141a..ce2f8c38d1 100644
--- a/Libraries/LibWeb/DOM/HTMLCanvasElement.h
+++ b/Libraries/LibWeb/DOM/HTMLCanvasElement.h
@@ -60,7 +60,7 @@ private:
template<>
inline bool is<HTMLCanvasElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("canvas");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::canvas;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLFontElement.h b/Libraries/LibWeb/DOM/HTMLFontElement.h
index f958f03eeb..4f9484d370 100644
--- a/Libraries/LibWeb/DOM/HTMLFontElement.h
+++ b/Libraries/LibWeb/DOM/HTMLFontElement.h
@@ -38,4 +38,10 @@ public:
virtual void apply_presentational_hints(StyleProperties&) const override;
};
+template<>
+inline bool is<HTMLFontElement>(const Node& node)
+{
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::font;
+}
+
}
diff --git a/Libraries/LibWeb/DOM/HTMLFormElement.h b/Libraries/LibWeb/DOM/HTMLFormElement.h
index dbfb97f671..db0297e1f2 100644
--- a/Libraries/LibWeb/DOM/HTMLFormElement.h
+++ b/Libraries/LibWeb/DOM/HTMLFormElement.h
@@ -45,7 +45,7 @@ public:
template<>
inline bool is<HTMLFormElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("form");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::form;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLHRElement.h b/Libraries/LibWeb/DOM/HTMLHRElement.h
index d6d3bfdbfb..31c23deae4 100644
--- a/Libraries/LibWeb/DOM/HTMLHRElement.h
+++ b/Libraries/LibWeb/DOM/HTMLHRElement.h
@@ -36,4 +36,10 @@ public:
virtual ~HTMLHRElement() override;
};
+template<>
+inline bool is<HTMLHRElement>(const Node& node)
+{
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::hr;
+}
+
}
diff --git a/Libraries/LibWeb/DOM/HTMLIFrameElement.h b/Libraries/LibWeb/DOM/HTMLIFrameElement.h
index f984eac0e9..7520779af9 100644
--- a/Libraries/LibWeb/DOM/HTMLIFrameElement.h
+++ b/Libraries/LibWeb/DOM/HTMLIFrameElement.h
@@ -52,7 +52,7 @@ private:
template<>
inline bool is<HTMLIFrameElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("iframe");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::iframe;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLImageElement.h b/Libraries/LibWeb/DOM/HTMLImageElement.h
index 533569514f..c1b28160e3 100644
--- a/Libraries/LibWeb/DOM/HTMLImageElement.h
+++ b/Libraries/LibWeb/DOM/HTMLImageElement.h
@@ -82,7 +82,7 @@ private:
template<>
inline bool is<HTMLImageElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("img");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::img;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLInputElement.h b/Libraries/LibWeb/DOM/HTMLInputElement.h
index 0bc318e9da..2277b6a8c3 100644
--- a/Libraries/LibWeb/DOM/HTMLInputElement.h
+++ b/Libraries/LibWeb/DOM/HTMLInputElement.h
@@ -45,7 +45,7 @@ public:
template<>
inline bool is<HTMLInputElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("input");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::input;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLLinkElement.h b/Libraries/LibWeb/DOM/HTMLLinkElement.h
index bae7d8d9f0..c2fc343bba 100644
--- a/Libraries/LibWeb/DOM/HTMLLinkElement.h
+++ b/Libraries/LibWeb/DOM/HTMLLinkElement.h
@@ -57,7 +57,7 @@ private:
template<>
inline bool is<HTMLLinkElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("link");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::link;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLScriptElement.h b/Libraries/LibWeb/DOM/HTMLScriptElement.h
index 9aba63d865..55bc9d024f 100644
--- a/Libraries/LibWeb/DOM/HTMLScriptElement.h
+++ b/Libraries/LibWeb/DOM/HTMLScriptElement.h
@@ -69,7 +69,7 @@ private:
template<>
inline bool is<HTMLScriptElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("script");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::script;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLStyleElement.h b/Libraries/LibWeb/DOM/HTMLStyleElement.h
index 06bd7d9feb..f4d6f30c73 100644
--- a/Libraries/LibWeb/DOM/HTMLStyleElement.h
+++ b/Libraries/LibWeb/DOM/HTMLStyleElement.h
@@ -44,4 +44,11 @@ private:
RefPtr<StyleSheet> m_stylesheet;
};
+template<>
+inline bool is<HTMLStyleElement>(const Node& node)
+{
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::style;
+}
+
+
}
diff --git a/Libraries/LibWeb/DOM/HTMLTableCellElement.h b/Libraries/LibWeb/DOM/HTMLTableCellElement.h
index 486c2e698f..40272aab9f 100644
--- a/Libraries/LibWeb/DOM/HTMLTableCellElement.h
+++ b/Libraries/LibWeb/DOM/HTMLTableCellElement.h
@@ -39,7 +39,7 @@ public:
template<>
inline bool is<HTMLTableCellElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().is_one_of("td", "th");
+ return is<Element>(node) && to<Element>(node).tag_name().is_one_of(HTML::TagNames::td, HTML::TagNames::th);
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLTableElement.h b/Libraries/LibWeb/DOM/HTMLTableElement.h
index 423345f9ce..b68a08d56e 100644
--- a/Libraries/LibWeb/DOM/HTMLTableElement.h
+++ b/Libraries/LibWeb/DOM/HTMLTableElement.h
@@ -39,7 +39,7 @@ public:
template<>
inline bool is<HTMLTableElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("table");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::table;
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLTableRowElement.h b/Libraries/LibWeb/DOM/HTMLTableRowElement.h
index f3b3870bf2..6e48579914 100644
--- a/Libraries/LibWeb/DOM/HTMLTableRowElement.h
+++ b/Libraries/LibWeb/DOM/HTMLTableRowElement.h
@@ -39,7 +39,7 @@ public:
template<>
inline bool is<HTMLTableRowElement>(const Node& node)
{
- return is<Element>(node) && to<Element>(node).tag_name().equals_ignoring_case("tr");
+ return is<Element>(node) && to<Element>(node).tag_name() == HTML::TagNames::tr;
}
}
diff --git a/Libraries/LibWeb/DOM/TagNames.cpp b/Libraries/LibWeb/DOM/TagNames.cpp
new file mode 100644
index 0000000000..b60666de26
--- /dev/null
+++ b/Libraries/LibWeb/DOM/TagNames.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <LibWeb/DOM/TagNames.h>
+
+namespace Web {
+namespace HTML {
+namespace TagNames {
+
+#define __ENUMERATE_HTML_TAG(name) FlyString name;
+ENUMERATE_HTML_TAGS
+#undef __ENUMERATE_HTML_TAG
+
+void initialize()
+{
+ static bool s_initialized = false;
+ if (s_initialized)
+ return;
+
+#define __ENUMERATE_HTML_TAG(name) \
+ name = #name;
+ ENUMERATE_HTML_TAGS
+#undef __ENUMERATE_HTML_TAG
+
+ s_initialized = true;
+}
+
+}
+}
+}
diff --git a/Libraries/LibWeb/DOM/TagNames.h b/Libraries/LibWeb/DOM/TagNames.h
new file mode 100644
index 0000000000..415636b286
--- /dev/null
+++ b/Libraries/LibWeb/DOM/TagNames.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <AK/FlyString.h>
+
+namespace Web {
+namespace HTML {
+namespace TagNames {
+
+void initialize();
+
+#define ENUMERATE_HTML_TAGS \
+ __ENUMERATE_HTML_TAG(a) \
+ __ENUMERATE_HTML_TAG(article) \
+ __ENUMERATE_HTML_TAG(b) \
+ __ENUMERATE_HTML_TAG(blink) \
+ __ENUMERATE_HTML_TAG(body) \
+ __ENUMERATE_HTML_TAG(br) \
+ __ENUMERATE_HTML_TAG(button) \
+ __ENUMERATE_HTML_TAG(canvas) \
+ __ENUMERATE_HTML_TAG(div) \
+ __ENUMERATE_HTML_TAG(em) \
+ __ENUMERATE_HTML_TAG(font) \
+ __ENUMERATE_HTML_TAG(form) \
+ __ENUMERATE_HTML_TAG(h1) \
+ __ENUMERATE_HTML_TAG(h2) \
+ __ENUMERATE_HTML_TAG(h3) \
+ __ENUMERATE_HTML_TAG(h4) \
+ __ENUMERATE_HTML_TAG(h5) \
+ __ENUMERATE_HTML_TAG(h6) \
+ __ENUMERATE_HTML_TAG(head) \
+ __ENUMERATE_HTML_TAG(hr) \
+ __ENUMERATE_HTML_TAG(html) \
+ __ENUMERATE_HTML_TAG(i) \
+ __ENUMERATE_HTML_TAG(iframe) \
+ __ENUMERATE_HTML_TAG(img) \
+ __ENUMERATE_HTML_TAG(input) \
+ __ENUMERATE_HTML_TAG(li) \
+ __ENUMERATE_HTML_TAG(link) \
+ __ENUMERATE_HTML_TAG(main) \
+ __ENUMERATE_HTML_TAG(marquee) \
+ __ENUMERATE_HTML_TAG(meta) \
+ __ENUMERATE_HTML_TAG(nav) \
+ __ENUMERATE_HTML_TAG(ol) \
+ __ENUMERATE_HTML_TAG(pre) \
+ __ENUMERATE_HTML_TAG(s) \
+ __ENUMERATE_HTML_TAG(script) \
+ __ENUMERATE_HTML_TAG(section) \
+ __ENUMERATE_HTML_TAG(span) \
+ __ENUMERATE_HTML_TAG(strong) \
+ __ENUMERATE_HTML_TAG(style) \
+ __ENUMERATE_HTML_TAG(table) \
+ __ENUMERATE_HTML_TAG(tbody) \
+ __ENUMERATE_HTML_TAG(td) \
+ __ENUMERATE_HTML_TAG(textarea) \
+ __ENUMERATE_HTML_TAG(tfoot) \
+ __ENUMERATE_HTML_TAG(th) \
+ __ENUMERATE_HTML_TAG(thead) \
+ __ENUMERATE_HTML_TAG(title) \
+ __ENUMERATE_HTML_TAG(tr) \
+ __ENUMERATE_HTML_TAG(u) \
+ __ENUMERATE_HTML_TAG(ul)
+
+#define __ENUMERATE_HTML_TAG(name) extern FlyString name;
+ENUMERATE_HTML_TAGS
+#undef __ENUMERATE_HTML_TAG
+
+}
+}
+}