pax_global_header00006660000000000000000000000064145653511560014525gustar00rootroot0000000000000052 comment=f8ce3066451e51e3af7ab7bc4a89d2f8a230dbf9 html-1.3.9/000077500000000000000000000000001456535115600125035ustar00rootroot00000000000000html-1.3.9/.gitignore000066400000000000000000000000531456535115600144710ustar00rootroot00000000000000/node_modules/ /src/parser.* .tern-* /dist html-1.3.9/.npmignore000066400000000000000000000000161456535115600144770ustar00rootroot00000000000000/node_modules html-1.3.9/CHANGELOG.md000066400000000000000000000125201456535115600143140ustar00rootroot00000000000000## 1.3.9 (2024-02-21) ### Bug fixes When using the "selfClosing" dialect, fix parse errors for `
` (tags that implicitly self-close) and ` ==> Document(Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,AttributeValue),EndTag), ScriptText, CloseTag(StartCloseTag,TagName,EndTag))) # Does parse type-less script tags as JS ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Script(ExpressionStatement(RegExp)), CloseTag(StartCloseTag,TagName,EndTag))) # Still doesn't end script tags on closing tags ==> Document(Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag), ScriptText, CloseTag(StartCloseTag,TagName,EndTag))) # Missing end tag ==> Document(Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,AttributeValue),EndTag), Script(...), CloseTag(StartCloseTag,TagName,EndTag))) # JS with unquoted script type ==> Document(Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag), Script(...), CloseTag(StartCloseTag,TagName,EndTag))) # Error in JS ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Script(...), CloseTag(StartCloseTag,TagName,EndTag))) html-1.3.9/test/tags.txt000066400000000000000000000202221456535115600151570ustar00rootroot00000000000000# 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,EndTag)), CloseTag(StartCloseTag,TagName,EndTag))) # Attribute
==> Document(Element(SelfClosingTag(StartTag,TagName,Attribute(AttributeName,Is,AttributeValue),EndTag))) # Multiple attributes ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName,Is,AttributeValue), Attribute(AttributeName,Is,AttributeValue), Attribute(AttributeName,Is,AttributeValue),EndTag), CloseTag(StartCloseTag,TagName,EndTag))) # Value-less attributes ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName), Attribute(AttributeName,Is,AttributeValue), Attribute(AttributeName),EndTag), CloseTag(StartCloseTag,TagName,EndTag))) # Unquoted attributes ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName,Is,UnquotedAttributeValue), Attribute(AttributeName), Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag), CloseTag(StartCloseTag,TagName,EndTag))) # Unquoted attributes with slashes ==> Document(Element(SelfClosingTag(StartTag,TagName, Attribute(AttributeName,Is,UnquotedAttributeValue), Attribute(AttributeName,Is,UnquotedAttributeValue), Attribute(AttributeName,Is,UnquotedAttributeValue), Attribute(AttributeName,Is,UnquotedAttributeValue), EndTag))) # Single-quoted attributes ==> Document(Element(SelfClosingTag(StartTag, TagName, Attribute(AttributeName, Is, AttributeValue), Attribute(AttributeName, Is, AttributeValue(EntityReference)), EndTag))) # Entities &C ==> Document(Element(OpenTag(StartTag,TagName, Attribute(AttributeName,Is,AttributeValue(EntityReference)),EndTag), EntityReference,CharacterReference, CloseTag(StartCloseTag,TagName,EndTag))) # Doctype ==> Document(DoctypeDecl,Text,Element(OpenTag(StartTag,TagName,EndTag),CloseTag(StartCloseTag,TagName,EndTag))) # 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,Text,Comment) # Mismatched tag ==> Document(Element(OpenTag(StartTag,TagName,EndTag),MismatchedCloseTag(StartCloseTag,TagName,EndTag))) # Unclosed tag ==> Document(Element(OpenTag(StartTag,TagName,EndTag))) # Ignore pseudo-xml self-closers
==> Document(Element(SelfClosingTag(StartTag,TagName,EndTag))) # Unclosed implicitly closed tag

==> Document(Element(OpenTag(StartTag,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), ⚠), 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, ⚠), CloseTag(StartCloseTag,TagName,EndTag))) # Incomplete close tag ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag), IncompleteCloseTag, ⚠), CloseTag(StartCloseTag,TagName,EndTag))) # Re-synchronize close tags ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag), MismatchedCloseTag(StartCloseTag,TagName,EndTag), CloseTag(StartCloseTag,TagName,EndTag)), ⚠), CloseTag(StartCloseTag,TagName,EndTag))) # Top-level mismatched close tag ==> Document( Element(OpenTag(StartTag,TagName,EndTag),CloseTag(StartCloseTag,TagName,EndTag)), MismatchedCloseTag(StartCloseTag,TagName,EndTag)) # Self-closing tags ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(SelfClosingTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag)), CloseTag(StartCloseTag,TagName,EndTag))) # Implicitly closed

Hello
==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag),Text), CloseTag(StartCloseTag,TagName,EndTag))) # Closed by sibling

Foo

Bar

==> Document(Element(OpenTag(StartTag,TagName,EndTag), Text, Element(OpenTag(StartTag,TagName,EndTag),Text), Element(OpenTag(StartTag,TagName,EndTag),Text), CloseTag(StartCloseTag,TagName,EndTag))) # Closed by sibling at top

Foo

Bar ==> Document(Element(OpenTag(StartTag,TagName,EndTag),Text),Element(OpenTag(StartTag,TagName,EndTag),Text)) # Textarea

Enter something: ==> Document(Element(OpenTag(StartTag,TagName,EndTag), Text, Element(OpenTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag), TextareaText, CloseTag(StartCloseTag,TagName,EndTag)))) # Script ==> Document(Element(OpenTag(StartTag,TagName,EndTag),ScriptText,CloseTag(StartCloseTag,TagName,EndTag))) # Allows whitespace in tags < body foo=bar >hi ==> Document(Element( OpenTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),EndTag), Text, CloseTag(StartCloseTag,TagName,EndTag))) # Doesn't get confused by a stray ampersand a&b ==> Document(Element(OpenTag(StartTag,TagName,EndTag),Text,InvalidEntity,Text,CloseTag(StartCloseTag,TagName,EndTag))) # Can ignore mismatches {"dialect": "noMatch"}

foo

==> Document(Element(OpenTag(StartTag,TagName,EndTag),Text,CloseTag(StartCloseTag,TagName,EndTag))) # Can handle lone close tags {"dialect": "noMatch"} ==> Document(CloseTag(StartCloseTag,TagName,EndTag)) # Parses ampersands in attributes ==> Document(Element(SelfClosingTag(StartTag, TagName, Attribute(AttributeName, Is, AttributeValue(InvalidEntity)), EndTag))) # Supports self-closing dialect {"dialect": "selfClosing"}
==> Document(Element( OpenTag(StartTag,TagName,EndTag), Element(SelfClosingTag(StartTag,TagName,Attribute(AttributeName,Is,UnquotedAttributeValue),SelfClosingEndTag)), CloseTag(StartCloseTag,TagName,EndTag))) # Allows self-closing in foreign elements
==> Document(Element(OpenTag(StartTag,TagName,EndTag), Element(OpenTag(StartTag,TagName,EndTag), Element(SelfClosingTag(StartTag,TagName,SelfClosingEndTag)), CloseTag(StartCloseTag,TagName,EndTag)), CloseTag(StartCloseTag,TagName,EndTag))) # Parses multiple unfinished tags in a row
Document(Element(OpenTag(StartTag,TagName,⚠), Element(OpenTag(StartTag,TagName,⚠), Element(OpenTag(StartTag,TagName,⚠),⚠),⚠),⚠)) # Allows self-closing on special tags {"dialect": "selfClosing"}