HTMLFactory
class HTMLFactory
using System;
using System.Collections.Generic;
namespace AngleSharp.DOM.Html
{
internal class HTMLFactory
{
private static readonly Dictionary<string, Func<HTMLElement>> elements;
static HTMLFactory()
{
elements = new Dictionary<string, Func<HTMLElement>>(StringComparer.OrdinalIgnoreCase);
elements.Add("base", () => new HTMLBaseElement());
elements.Add("basefont", () => new HTMLBaseFontElement());
elements.Add("link", () => new HTMLLinkElement());
elements.Add("a", () => new HTMLAnchorElement());
elements.Add("button", () => new HTMLButtonElement());
elements.Add("input", () => new HTMLInputElement());
elements.Add("html", () => new HTMLHtmlElement());
elements.Add("isindex", () => new HTMLIsIndexElement());
elements.Add("br", () => new HTMLBRElement());
elements.Add("embed", () => new HTMLEmbedElement());
elements.Add("div", () => new HTMLDivElement());
elements.Add("area", () => new HTMLAreaElement());
elements.Add("img", () => new HTMLImageElement());
elements.Add("dl", () => new HTMLDListElement());
elements.Add("body", () => new HTMLBodyElement());
elements.Add("fieldset", () => new HTMLFieldSetElement());
elements.Add("head", () => new HTMLHeadElement());
elements.Add("menu", () => new HTMLMenuElement());
elements.Add("meta", () => new HTMLMetaElement());
elements.Add("ol", () => new HTMLOListElement());
elements.Add("p", () => new HTMLParagraphElement());
elements.Add("select", () => new HTMLSelectElement());
elements.Add("ul", () => new HTMLUListElement());
elements.Add("hr", () => new HTMLHRElement());
elements.Add("dir", () => new HTMLDirectoryElement());
elements.Add("font", () => new HTMLFontElement());
elements.Add("form", () => new HTMLFormElement());
elements.Add("param", () => new HTMLParamElement());
elements.Add("pre", () => new HTMLPreElement());
elements.Add("textarea", () => new HTMLTextAreaElement());
elements.Add("blockquote", () => new HTMLQuoteElement {
NodeName = "blockquote"
});
elements.Add("quote", () => new HTMLQuoteElement {
NodeName = "quote"
});
elements.Add("q", () => new HTMLQuoteElement {
NodeName = "q"
});
elements.Add("canvas", () => new HTMLCanvasElement());
elements.Add("caption", () => new HTMLTableCaptionElement());
elements.Add("th", () => new HTMLTableCellElement {
NodeName = "th"
});
elements.Add("td", () => new HTMLTableCellElement());
elements.Add("tr", () => new HTMLTableRowElement());
elements.Add("tbody", () => new HTMLTableSectionElement());
elements.Add("tfoot", () => new HTMLTableSectionElement {
NodeName = "tfoot"
});
elements.Add("thead", () => new HTMLTableSectionElement {
NodeName = "thead"
});
elements.Add("table", () => new HTMLTableElement());
elements.Add("colgroup", () => new HTMLTableColElement {
NodeName = "colgroup"
});
elements.Add("col", () => new HTMLTableColElement());
elements.Add("del", () => new HTMLModElement {
NodeName = "del"
});
elements.Add("ins", () => new HTMLModElement());
elements.Add("legend", () => new HTMLLegendElement());
elements.Add("label", () => new HTMLLabelElement());
elements.Add("applet", () => new HTMLAppletElement());
elements.Add("object", () => new HTMLObjectElement());
elements.Add("optgroup", () => new HTMLOptGroupElement());
elements.Add("option", () => new HTMLOptionElement());
elements.Add("style", () => new HTMLStyleElement());
elements.Add("script", () => new HTMLScriptElement());
elements.Add("iframe", () => new HTMLIFrameElement());
elements.Add("title", () => new HTMLTitleElement());
elements.Add("li", () => new HTMLLIElement {
NodeName = "li"
});
elements.Add("dd", () => new HTMLLIElement {
NodeName = "dd"
});
elements.Add("dt", () => new HTMLLIElement {
NodeName = "dt"
});
elements.Add("frameset", () => new HTMLFrameSetElement());
elements.Add("frame", () => new HTMLFrameElement());
elements.Add("h1", () => new HTMLHeadingElement {
NodeName = "h1"
});
elements.Add("h2", () => new HTMLHeadingElement {
NodeName = "h2"
});
elements.Add("h3", () => new HTMLHeadingElement {
NodeName = "h3"
});
elements.Add("h4", () => new HTMLHeadingElement {
NodeName = "h4"
});
elements.Add("h5", () => new HTMLHeadingElement {
NodeName = "h5"
});
elements.Add("h6", () => new HTMLHeadingElement {
NodeName = "h6"
});
elements.Add("audio", () => new HTMLAudioElement());
elements.Add("video", () => new HTMLVideoElement());
elements.Add("details", () => new HTMLDetailsElement());
elements.Add("span", () => new HTMLSpanElement());
elements.Add("dialog", () => new HTMLDialogElement());
elements.Add("source", () => new HTMLSourceElement());
elements.Add("track", () => new HTMLTrackElement());
elements.Add("wbr", () => new HTMLWbrElement());
elements.Add("b", () => new HTMLBoldElement());
elements.Add("big", () => new HTMLBigElement());
elements.Add("strike", () => new HTMLStrikeElement());
elements.Add("code", () => new HTMLCodeElement());
elements.Add("em", () => new HTMLEmphasizeElement());
elements.Add("i", () => new HTMLItalicElement());
elements.Add("s", () => new HTMLStruckElement());
elements.Add("small", () => new HTMLSmallElement());
elements.Add("strong", () => new HTMLStrongElement());
elements.Add("u", () => new HTMLUnderlineElement());
elements.Add("tt", () => new HTMLTeletypeTextElement());
elements.Add("nobr", () => new HTMLNoNewlineElement());
elements.Add("address", () => new HTMLAddressElement());
elements.Add("main", () => new HTMLSemanticElement {
NodeName = "main"
});
elements.Add("summary", () => new HTMLSemanticElement {
NodeName = "summary"
});
elements.Add("xmp", () => new HTMLSemanticElement {
NodeName = "xmp"
});
elements.Add("center", () => new HTMLSemanticElement {
NodeName = "center"
});
elements.Add("listing", () => new HTMLSemanticElement {
NodeName = "listing"
});
elements.Add("nav", () => new HTMLSemanticElement {
NodeName = "nav"
});
elements.Add("article", () => new HTMLSemanticElement {
NodeName = "article"
});
elements.Add("aside", () => new HTMLSemanticElement {
NodeName = "aside"
});
elements.Add("figcaption", () => new HTMLSemanticElement {
NodeName = "figcaption"
});
elements.Add("figure", () => new HTMLSemanticElement {
NodeName = "figure"
});
elements.Add("section", () => new HTMLSemanticElement {
NodeName = "section"
});
elements.Add("footer", () => new HTMLSemanticElement {
NodeName = "footer"
});
elements.Add("header", () => new HTMLSemanticElement {
NodeName = "header"
});
elements.Add("hgroup", () => new HTMLSemanticElement {
NodeName = "hgroup"
});
elements.Add("plaintext", () => new HTMLSemanticElement {
NodeName = "plaintext"
});
elements.Add("bgsound", () => new HTMLBgsoundElement());
elements.Add("marquee", () => new HTMLMarqueeElement());
elements.Add("noembed", () => new HTMLNoElement {
NodeName = "noembed"
});
elements.Add("noframes", () => new HTMLNoElement {
NodeName = "noframes"
});
elements.Add("noscript", () => new HTMLNoElement {
NodeName = "noscript"
});
elements.Add("menuitem", () => new HTMLMenuItemElement());
elements.Add("cite", () => new HTMLElement {
NodeName = "cite"
});
elements.Add("ruby", () => new HTMLRubyElement());
elements.Add("rt", () => new HTMLRTElement());
elements.Add("rp", () => new HTMLRPElement());
}
public static HTMLElement Create(string tag, Document document)
{
if (elements.TryGetValue(tag, out Func<HTMLElement> value)) {
HTMLElement hTMLElement = value();
hTMLElement.OwnerDocument = document;
return hTMLElement;
}
HTMLUnknownElement hTMLUnknownElement = new HTMLUnknownElement();
hTMLUnknownElement.NodeName = tag;
hTMLUnknownElement.OwnerDocument = document;
return hTMLUnknownElement;
}
}
}