HtmlElementFactory
Provides string to HTMLElement instance creation mappings.
using AngleSharp.Dom;
using AngleSharp.Dom.Html;
using AngleSharp.Html;
using System;
using System.Collections.Generic;
namespace AngleSharp.Services.Default
{
internal sealed class HtmlElementFactory : IElementFactory<HtmlElement>
{
private delegate HtmlElement Creator (Document owner, string prefix);
private readonly Dictionary<string, Creator> creators = new Dictionary<string, Creator>(StringComparer.OrdinalIgnoreCase) {
{
TagNames.Div,
(Document document, string prefix) => new HtmlDivElement(document, prefix)
},
{
TagNames.A,
(Document document, string prefix) => new HtmlAnchorElement(document, prefix)
},
{
TagNames.Img,
(Document document, string prefix) => new HtmlImageElement(document, prefix)
},
{
TagNames.P,
(Document document, string prefix) => new HtmlParagraphElement(document, prefix)
},
{
TagNames.Br,
(Document document, string prefix) => new HtmlBreakRowElement(document, prefix)
},
{
TagNames.Input,
(Document document, string prefix) => new HtmlInputElement(document, prefix)
},
{
TagNames.Button,
(Document document, string prefix) => new HtmlButtonElement(document, prefix)
},
{
TagNames.Textarea,
(Document document, string prefix) => new HtmlTextAreaElement(document, prefix)
},
{
TagNames.Li,
(Document document, string prefix) => new HtmlListItemElement(document, TagNames.Li, prefix)
},
{
TagNames.H1,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H1, prefix)
},
{
TagNames.H2,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H2, prefix)
},
{
TagNames.H3,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H3, prefix)
},
{
TagNames.H4,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H4, prefix)
},
{
TagNames.H5,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H5, prefix)
},
{
TagNames.H6,
(Document document, string prefix) => new HtmlHeadingElement(document, TagNames.H6, prefix)
},
{
TagNames.Ul,
(Document document, string prefix) => new HtmlUnorderedListElement(document, prefix)
},
{
TagNames.Ol,
(Document document, string prefix) => new HtmlOrderedListElement(document, prefix)
},
{
TagNames.Dl,
(Document document, string prefix) => new HtmlDefinitionListElement(document, prefix)
},
{
TagNames.Link,
(Document document, string prefix) => new HtmlLinkElement(document, prefix)
},
{
TagNames.Meta,
(Document document, string prefix) => new HtmlMetaElement(document, prefix)
},
{
TagNames.Label,
(Document document, string prefix) => new HtmlLabelElement(document, prefix)
},
{
TagNames.Fieldset,
(Document document, string prefix) => new HtmlFieldSetElement(document, prefix)
},
{
TagNames.Legend,
(Document document, string prefix) => new HtmlLegendElement(document, prefix)
},
{
TagNames.Form,
(Document document, string prefix) => new HtmlFormElement(document, prefix)
},
{
TagNames.Select,
(Document document, string prefix) => new HtmlSelectElement(document, prefix)
},
{
TagNames.Pre,
(Document document, string prefix) => new HtmlPreElement(document, prefix)
},
{
TagNames.Hr,
(Document document, string prefix) => new HtmlHrElement(document, prefix)
},
{
TagNames.Dir,
(Document document, string prefix) => new HtmlDirectoryElement(document, prefix)
},
{
TagNames.Font,
(Document document, string prefix) => new HtmlFontElement(document, prefix)
},
{
TagNames.Param,
(Document document, string prefix) => new HtmlParamElement(document, prefix)
},
{
TagNames.BlockQuote,
(Document document, string prefix) => new HtmlQuoteElement(document, TagNames.BlockQuote, prefix)
},
{
TagNames.Quote,
(Document document, string prefix) => new HtmlQuoteElement(document, TagNames.Quote, prefix)
},
{
TagNames.Q,
(Document document, string prefix) => new HtmlQuoteElement(document, TagNames.Q, prefix)
},
{
TagNames.Canvas,
(Document document, string prefix) => new HtmlCanvasElement(document, prefix)
},
{
TagNames.Caption,
(Document document, string prefix) => new HtmlTableCaptionElement(document, prefix)
},
{
TagNames.Td,
(Document document, string prefix) => new HtmlTableDataCellElement(document, prefix)
},
{
TagNames.Tr,
(Document document, string prefix) => new HtmlTableRowElement(document, prefix)
},
{
TagNames.Table,
(Document document, string prefix) => new HtmlTableElement(document, prefix)
},
{
TagNames.Tbody,
(Document document, string prefix) => new HtmlTableSectionElement(document, TagNames.Tbody, prefix)
},
{
TagNames.Th,
(Document document, string prefix) => new HtmlTableHeaderCellElement(document, prefix)
},
{
TagNames.Tfoot,
(Document document, string prefix) => new HtmlTableSectionElement(document, TagNames.Tfoot, prefix)
},
{
TagNames.Thead,
(Document document, string prefix) => new HtmlTableSectionElement(document, TagNames.Thead, prefix)
},
{
TagNames.Colgroup,
(Document document, string prefix) => new HtmlTableColgroupElement(document, prefix)
},
{
TagNames.Col,
(Document document, string prefix) => new HtmlTableColElement(document, prefix)
},
{
TagNames.Del,
(Document document, string prefix) => new HtmlModElement(document, TagNames.Del, prefix)
},
{
TagNames.Ins,
(Document document, string prefix) => new HtmlModElement(document, TagNames.Ins, prefix)
},
{
TagNames.Applet,
(Document document, string prefix) => new HtmlAppletElement(document, prefix)
},
{
TagNames.Object,
(Document document, string prefix) => new HtmlObjectElement(document, prefix)
},
{
TagNames.Optgroup,
(Document document, string prefix) => new HtmlOptionsGroupElement(document, prefix)
},
{
TagNames.Option,
(Document document, string prefix) => new HtmlOptionElement(document, prefix)
},
{
TagNames.Style,
(Document document, string prefix) => new HtmlStyleElement(document, prefix)
},
{
TagNames.Script,
(Document document, string prefix) => new HtmlScriptElement(document, prefix, false, false)
},
{
TagNames.Iframe,
(Document document, string prefix) => new HtmlIFrameElement(document, prefix)
},
{
TagNames.Dd,
(Document document, string prefix) => new HtmlListItemElement(document, TagNames.Dd, prefix)
},
{
TagNames.Dt,
(Document document, string prefix) => new HtmlListItemElement(document, TagNames.Dt, prefix)
},
{
TagNames.Frameset,
(Document document, string prefix) => new HtmlFrameSetElement(document, prefix)
},
{
TagNames.Frame,
(Document document, string prefix) => new HtmlFrameElement(document, prefix)
},
{
TagNames.Audio,
(Document document, string prefix) => new HtmlAudioElement(document, prefix)
},
{
TagNames.Video,
(Document document, string prefix) => new HtmlVideoElement(document, prefix)
},
{
TagNames.Span,
(Document document, string prefix) => new HtmlSpanElement(document, prefix)
},
{
TagNames.Dialog,
(Document document, string prefix) => new HtmlDialogElement(document, prefix)
},
{
TagNames.Details,
(Document document, string prefix) => new HtmlDetailsElement(document, prefix)
},
{
TagNames.Source,
(Document document, string prefix) => new HtmlSourceElement(document, prefix)
},
{
TagNames.Track,
(Document document, string prefix) => new HtmlTrackElement(document, prefix)
},
{
TagNames.Wbr,
(Document document, string prefix) => new HtmlWbrElement(document, prefix)
},
{
TagNames.B,
(Document document, string prefix) => new HtmlBoldElement(document, prefix)
},
{
TagNames.Big,
(Document document, string prefix) => new HtmlBigElement(document, prefix)
},
{
TagNames.Strike,
(Document document, string prefix) => new HtmlStrikeElement(document, prefix)
},
{
TagNames.Code,
(Document document, string prefix) => new HtmlCodeElement(document, prefix)
},
{
TagNames.Em,
(Document document, string prefix) => new HtmlEmphasizeElement(document, prefix)
},
{
TagNames.I,
(Document document, string prefix) => new HtmlItalicElement(document, prefix)
},
{
TagNames.S,
(Document document, string prefix) => new HtmlStruckElement(document, prefix)
},
{
TagNames.Small,
(Document document, string prefix) => new HtmlSmallElement(document, prefix)
},
{
TagNames.Strong,
(Document document, string prefix) => new HtmlStrongElement(document, prefix)
},
{
TagNames.U,
(Document document, string prefix) => new HtmlUnderlineElement(document, prefix)
},
{
TagNames.Tt,
(Document document, string prefix) => new HtmlTeletypeTextElement(document, prefix)
},
{
TagNames.Address,
(Document document, string prefix) => new HtmlAddressElement(document, prefix)
},
{
TagNames.Main,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Main, prefix)
},
{
TagNames.Summary,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Summary, prefix)
},
{
TagNames.Center,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Center, prefix)
},
{
TagNames.Listing,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Listing, prefix)
},
{
TagNames.Nav,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Nav, prefix)
},
{
TagNames.Article,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Article, prefix)
},
{
TagNames.Aside,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Aside, prefix)
},
{
TagNames.Figcaption,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Figcaption, prefix)
},
{
TagNames.Figure,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Figure, prefix)
},
{
TagNames.Section,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Section, prefix)
},
{
TagNames.Footer,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Footer, prefix)
},
{
TagNames.Header,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Header, prefix)
},
{
TagNames.Hgroup,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Hgroup, prefix)
},
{
TagNames.Cite,
(Document document, string prefix) => new HtmlElement(document, TagNames.Cite, prefix, NodeFlags.None)
},
{
TagNames.Ruby,
(Document document, string prefix) => new HtmlRubyElement(document, prefix)
},
{
TagNames.Rt,
(Document document, string prefix) => new HtmlRtElement(document, prefix)
},
{
TagNames.Rp,
(Document document, string prefix) => new HtmlRpElement(document, prefix)
},
{
TagNames.Rtc,
(Document document, string prefix) => new HtmlRtcElement(document, prefix)
},
{
TagNames.Rb,
(Document document, string prefix) => new HtmlRbElement(document, prefix)
},
{
TagNames.Map,
(Document document, string prefix) => new HtmlMapElement(document, prefix)
},
{
TagNames.Datalist,
(Document document, string prefix) => new HtmlDataListElement(document, prefix)
},
{
TagNames.Xmp,
(Document document, string prefix) => new HtmlXmpElement(document, prefix)
},
{
TagNames.Picture,
(Document document, string prefix) => new HtmlPictureElement(document, prefix)
},
{
TagNames.Template,
(Document document, string prefix) => new HtmlTemplateElement(document, prefix)
},
{
TagNames.Time,
(Document document, string prefix) => new HtmlTimeElement(document, prefix)
},
{
TagNames.Progress,
(Document document, string prefix) => new HtmlProgressElement(document, prefix)
},
{
TagNames.Meter,
(Document document, string prefix) => new HtmlMeterElement(document, prefix)
},
{
TagNames.Output,
(Document document, string prefix) => new HtmlOutputElement(document, prefix)
},
{
TagNames.Keygen,
(Document document, string prefix) => new HtmlKeygenElement(document, prefix)
},
{
TagNames.Title,
(Document document, string prefix) => new HtmlTitleElement(document, prefix)
},
{
TagNames.Head,
(Document document, string prefix) => new HtmlHeadElement(document, prefix)
},
{
TagNames.Body,
(Document document, string prefix) => new HtmlBodyElement(document, prefix)
},
{
TagNames.Html,
(Document document, string prefix) => new HtmlHtmlElement(document, prefix)
},
{
TagNames.Area,
(Document document, string prefix) => new HtmlAreaElement(document, prefix)
},
{
TagNames.Embed,
(Document document, string prefix) => new HtmlEmbedElement(document, prefix)
},
{
TagNames.MenuItem,
(Document document, string prefix) => new HtmlMenuItemElement(document, prefix)
},
{
TagNames.Slot,
(Document document, string prefix) => new HtmlSlotElement(document, prefix)
},
{
TagNames.NoScript,
(Document document, string prefix) => new HtmlNoScriptElement(document, prefix)
},
{
TagNames.NoEmbed,
(Document document, string prefix) => new HtmlNoEmbedElement(document, prefix)
},
{
TagNames.NoFrames,
(Document document, string prefix) => new HtmlNoFramesElement(document, prefix)
},
{
TagNames.NoBr,
(Document document, string prefix) => new HtmlNoNewlineElement(document, prefix)
},
{
TagNames.Menu,
(Document document, string prefix) => new HtmlMenuElement(document, prefix)
},
{
TagNames.Base,
(Document document, string prefix) => new HtmlBaseElement(document, prefix)
},
{
TagNames.BaseFont,
(Document document, string prefix) => new HtmlBaseFontElement(document, prefix)
},
{
TagNames.Bgsound,
(Document document, string prefix) => new HtmlBgsoundElement(document, prefix)
},
{
TagNames.Marquee,
(Document document, string prefix) => new HtmlMarqueeElement(document, prefix)
},
{
TagNames.Data,
(Document document, string prefix) => new HtmlDataElement(document, prefix)
},
{
TagNames.Plaintext,
(Document document, string prefix) => new HtmlSemanticElement(document, TagNames.Plaintext, prefix)
},
{
TagNames.IsIndex,
(Document document, string prefix) => new HtmlIsIndexElement(document, prefix)
}
};
public HtmlElement Create(Document document, string localName, string prefix = null)
{
Creator value = null;
if (creators.TryGetValue(localName, out value))
return value(document, prefix);
return new HtmlUnknownElement(document, localName.ToLowerInvariant(), prefix);
}
}
}