# Self-closing tag ==> Document(Element(SelfClosingTag(StartTag,TagName,SelfCloseEndTag))) # Regular tag bar ==> Document(Element(OpenTag(StartTag,TagName,EndTag),Text,CloseTag(StartCloseTag,TagName,EndTag))) # Nested tag c ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag),Text,CloseTag(StartCloseTag,TagName,EndTag)), Element(SelfClosingTag(StartTag,TagName,SelfCloseEndTag)), CloseTag(StartCloseTag,TagName,EndTag))) # Attribute ==> Document(Element(SelfClosingTag(StartTag,TagName,Attribute(AttributeName,Is,AttributeValue),SelfCloseEndTag))) # Multiple attributes ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName,Is,AttributeValue), Attribute(AttributeName,Is,AttributeValue), Attribute(AttributeName,Is,AttributeValue),EndTag), CloseTag(StartCloseTag,TagName,EndTag))) # Entities &C ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName,Is,AttributeValue(EntityReference)),EndTag), EntityReference, CharacterReference, CloseTag(StartCloseTag,TagName,EndTag))) # Invalid Entities &&; ==> Document(⚠,Text,⚠,Text) # Doctype ==> Document(DoctypeDecl,Text,Element(SelfClosingTag(StartTag,TagName,SelfCloseEndTag))) # Processing instructions ==> Document(ProcessingInst,Element(OpenTag(StartTag,TagName,EndTag),ProcessingInst,CloseTag(StartCloseTag,TagName,EndTag))) # Comments text ==> Document(Comment,Text,Element(OpenTag(StartTag,TagName,EndTag),Comment,Text,CloseTag(StartCloseTag,TagName,EndTag)),Text,Comment) # Mismatched tag ==> Document(Element(OpenTag(StartTag,TagName,EndTag),MismatchedCloseTag(StartCloseTag,TagName,EndTag),⚠)) # Nested mismatched tag ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag),CloseTag(StartCloseTag,TagName,EndTag)), MismatchedCloseTag(StartCloseTag,TagName,EndTag), MissingCloseTag), CloseTag(StartCloseTag,TagName,EndTag))) # Mismatched tag with whitespace < foo bar="10"> blah ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Text, Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,AttributeValue),EndTag), Text, MismatchedCloseTag(StartCloseTag,TagName,EndTag), Text, MissingCloseTag), CloseTag(StartCloseTag,TagName,EndTag))) # Cdata ==> Document(Element(OpenTag(StartTag,TagName,EndTag),Cdata,CloseTag(StartCloseTag,TagName,EndTag)))