static Tag() { // internal static initialisers: // prepped from http://www.w3.org/TR/REC-html40/sgml/dtd.html and other sources // script is not here as it is a data node, which always preserve whitespace // todo: I think we just need submit tags, and can scrub listed // creates foreach (string tagName in blockTags) { Supremes.Nodes.Tag tag = new Supremes.Nodes.Tag(tagName); Register(tag); } foreach (string tagName_1 in inlineTags) { Supremes.Nodes.Tag tag = new Supremes.Nodes.Tag(tagName_1); tag.isBlock = false; tag.canContainBlock = false; tag.isFormattedAsBlock = false; Register(tag); } // mods: foreach (string tagName_2 in emptyTags) { Supremes.Nodes.Tag tag = tags[tagName_2]; Validate.NotNull(tag); tag.canContainBlock = false; tag.canContainInline = false; tag.empty = true; } foreach (string tagName_3 in formatAsInlineTags) { Supremes.Nodes.Tag tag = tags[tagName_3]; Validate.NotNull(tag); tag.isFormattedAsBlock = false; } foreach (string tagName_4 in preserveWhitespaceTags) { Supremes.Nodes.Tag tag = tags[tagName_4]; Validate.NotNull(tag); tag.preservesWhitespace = true; } foreach (string tagName_5 in formListedTags) { Supremes.Nodes.Tag tag = tags[tagName_5]; Validate.NotNull(tag); tag.formList = true; } foreach (string tagName_6 in formSubmitTags) { Supremes.Nodes.Tag tag = tags[tagName_6]; Validate.NotNull(tag); tag.formSubmit = true; } }
/// <summary> /// Compares two <see cref="Tag"/> instances for equality. /// </summary> /// <param name="obj"></param> /// <returns></returns> public override bool Equals(object obj) { if (this == obj) { return(true); } Supremes.Nodes.Tag tag = obj as Supremes.Nodes.Tag; if (tag == null) { return(false); } if (canContainBlock != tag.canContainBlock) { return(false); } if (canContainInline != tag.canContainInline) { return(false); } if (empty != tag.empty) { return(false); } if (isFormattedAsBlock != tag.isFormattedAsBlock) { return(false); } if (isBlock != tag.isBlock) { return(false); } if (preservesWhitespace != tag.preservesWhitespace) { return(false); } if (selfClosing != tag.selfClosing) { return(false); } if (formList != tag.formList) { return(false); } if (formSubmit != tag.formSubmit) { return(false); } if (!tagName.Equals(tag.tagName)) { return(false); } return(true); }
/// <summary> /// Get a Tag by name. /// </summary> /// <remarks> /// If not previously defined (unknown), returns a new generic tag, that can do anything. /// <p/> /// Pre-defined tags (P, DIV etc) will be ==, but unknown tags are not registered and will only .equals(). /// </remarks> /// <param name="tagName">Name of tag, e.g. "p". Case insensitive.</param> /// <returns>The tag, either defined or new generic.</returns> public static Supremes.Nodes.Tag ValueOf(string tagName) { Validate.NotNull(tagName); Supremes.Nodes.Tag tag; if (!tags.TryGetValue(tagName, out tag)) { tagName = tagName.Trim().ToLower(); Validate.NotEmpty(tagName); if (!tags.TryGetValue(tagName, out tag)) { // not defined: create default; go anywhere, do anything! (incl be inside a <p>) tag = new Supremes.Nodes.Tag(tagName); tag.isBlock = false; tag.canContainBlock = true; } } return(tag); }
/// <summary> /// Get a Tag by name. /// </summary> /// <remarks> /// If not previously defined (unknown), returns a new generic tag, that can do anything. /// <p/> /// Pre-defined tags (P, DIV etc) will be ==, but unknown tags are not registered and will only .equals(). /// </remarks> /// <param name="tagName">Name of tag, e.g. "p". Case insensitive.</param> /// <returns>The tag, either defined or new generic.</returns> public static Supremes.Nodes.Tag ValueOf(string tagName) { Validate.NotNull(tagName); Supremes.Nodes.Tag tag; if (!tags.TryGetValue(tagName, out tag)) { tagName = tagName.Trim().ToLower(); Validate.NotEmpty(tagName); if (!tags.TryGetValue(tagName, out tag)) { // not defined: create default; go anywhere, do anything! (incl be inside a <p>) tag = new Supremes.Nodes.Tag(tagName); tag.isBlock = false; tag.canContainBlock = true; } } return tag; }
private static void Register(Supremes.Nodes.Tag tag) { tags[tag.tagName] = tag; }