private HtmlTagFlags GetTagFlagsByName(string tagNameInLowercase)
{
HtmlTagFlags tagFlags;
if (_xmlTagStack.Count == 0)
{
if (_htmlTagFlagsCache.ContainsKey(tagNameInLowercase))
{
tagFlags = _htmlTagFlagsCache[tagNameInLowercase];
}
else if (_customHtmlTagFlagsCache.ContainsKey(tagNameInLowercase))
{
tagFlags = _customHtmlTagFlagsCache[tagNameInLowercase];
}
else
{
tagFlags = HtmlTagFlags.None;
bool isXml = false;
var isHtml = HtmlTagFlagsHelpers.IsHtmlTag(tagNameInLowercase);
if (!isHtml)
{
isXml = HtmlTagFlagsHelpers.IsXmlBasedTag(tagNameInLowercase);
}
if (isHtml || isXml)
{
if (HtmlTagFlagsHelpers.IsInvisibleTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.Invisible;
}
if (HtmlTagFlagsHelpers.IsEmptyTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.Empty;
}
if (HtmlTagFlagsHelpers.IsBlockTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.Block;
}
if (HtmlTagFlagsHelpers.IsInlineTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.Inline;
}
if (HtmlTagFlagsHelpers.IsInlineBlockTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.InlineBlock;
}
if (HtmlTagFlagsHelpers.IsNonIndependentTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.NonIndependent;
}
if (HtmlTagFlagsHelpers.IsOptionalTag(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.Optional;
}
if (HtmlTagFlagsHelpers.IsTagWithEmbeddedCode(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.EmbeddedCode;
}
if (isXml)
{
tagFlags |= HtmlTagFlags.Xml;
}
_htmlTagFlagsCache[tagNameInLowercase] = tagFlags;
}
else
{
tagFlags = HtmlTagFlags.Custom;
}
}
}
else
{
tagFlags = HtmlTagFlags.Xml | HtmlTagFlags.NonIndependent;
if (HtmlTagFlagsHelpers.IsTagWithEmbeddedCode(tagNameInLowercase))
{
tagFlags |= HtmlTagFlags.EmbeddedCode;
}
}
return tagFlags;
}