aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Unterwaditzer <markus-honeypot@unterwaditzer.net>2021-11-24 20:44:08 +0100
committerMarkus Unterwaditzer <markus-honeypot@unterwaditzer.net>2021-11-24 20:51:21 +0100
commit9909fc4580855a58a10eb84f0d143d1b3b3f464a (patch)
tree36941a6a714a10b9ce554ba249975108e6a17274
hello world
-rw-r--r--.gitignore2
-rw-r--r--.gitmodules3
-rw-r--r--Cargo.toml20
-rw-r--r--LICENSE19
-rw-r--r--README.md81
-rw-r--r--generate_entities.py39
-rw-r--r--src/emitter.rs493
-rw-r--r--src/entities.rs15633
-rw-r--r--src/error.rs87
-rw-r--r--src/lib.rs2112
-rw-r--r--src/machine.rs164
-rw-r--r--src/reader.rs114
-rw-r--r--tests/html5lib-tests/.gitattributes2
-rw-r--r--tests/html5lib-tests/AUTHORS.rst34
-rw-r--r--tests/html5lib-tests/LICENSE21
-rw-r--r--tests/html5lib-tests/encoding/chardet/test_big5.txt51
-rw-r--r--tests/html5lib-tests/encoding/scripted/tests1.dat5
-rw-r--r--tests/html5lib-tests/encoding/test-yahoo-jp.dat10
-rw-r--r--tests/html5lib-tests/encoding/tests1.dat388
-rw-r--r--tests/html5lib-tests/encoding/tests2.dat115
-rw-r--r--tests/html5lib-tests/serializer/core.test125
-rw-r--r--tests/html5lib-tests/serializer/injectmeta.test66
-rw-r--r--tests/html5lib-tests/serializer/optionaltags.test965
-rw-r--r--tests/html5lib-tests/serializer/options.test60
-rw-r--r--tests/html5lib-tests/serializer/whitespace.test51
-rw-r--r--tests/html5lib-tests/tokenizer/README.md107
-rw-r--r--tests/html5lib-tests/tokenizer/contentModelFlags.test93
-rw-r--r--tests/html5lib-tests/tokenizer/domjs.test330
-rw-r--r--tests/html5lib-tests/tokenizer/entities.test542
-rw-r--r--tests/html5lib-tests/tokenizer/escapeFlag.test36
-rw-r--r--tests/html5lib-tests/tokenizer/namedEntities.test42422
-rw-r--r--tests/html5lib-tests/tokenizer/numericEntities.test1677
-rw-r--r--tests/html5lib-tests/tokenizer/pendingSpecChanges.test9
-rw-r--r--tests/html5lib-tests/tokenizer/test1.test349
-rw-r--r--tests/html5lib-tests/tokenizer/test2.test275
-rw-r--r--tests/html5lib-tests/tokenizer/test3.test11233
-rw-r--r--tests/html5lib-tests/tokenizer/test4.test532
-rw-r--r--tests/html5lib-tests/tokenizer/unicodeChars.test1577
-rw-r--r--tests/html5lib-tests/tokenizer/unicodeCharsProblematic.test41
-rw-r--r--tests/html5lib-tests/tokenizer/xmlViolation.test20
-rw-r--r--tests/html5lib-tests/tree-construction/README.md108
-rw-r--r--tests/html5lib-tests/tree-construction/adoption01.dat354
-rw-r--r--tests/html5lib-tests/tree-construction/adoption02.dat39
-rw-r--r--tests/html5lib-tests/tree-construction/blocks.dat695
-rw-r--r--tests/html5lib-tests/tree-construction/comments01.dat217
-rw-r--r--tests/html5lib-tests/tree-construction/doctype01.dat474
-rw-r--r--tests/html5lib-tests/tree-construction/domjs-unsafe.datbin0 -> 10356 bytes
-rw-r--r--tests/html5lib-tests/tree-construction/entities01.dat943
-rw-r--r--tests/html5lib-tests/tree-construction/entities02.dat309
-rw-r--r--tests/html5lib-tests/tree-construction/foreign-fragment.dat653
-rw-r--r--tests/html5lib-tests/tree-construction/html5test-com.dat301
-rw-r--r--tests/html5lib-tests/tree-construction/inbody01.dat54
-rw-r--r--tests/html5lib-tests/tree-construction/isindex.dat49
-rw-r--r--tests/html5lib-tests/tree-construction/main-element.dat46
-rw-r--r--tests/html5lib-tests/tree-construction/math.dat104
-rw-r--r--tests/html5lib-tests/tree-construction/menuitem-element.dat240
-rw-r--r--tests/html5lib-tests/tree-construction/namespace-sensitivity.dat22
-rw-r--r--tests/html5lib-tests/tree-construction/noscript01.dat237
-rw-r--r--tests/html5lib-tests/tree-construction/pending-spec-changes-plain-text-unsafe.datbin0 -> 927 bytes
-rw-r--r--tests/html5lib-tests/tree-construction/pending-spec-changes.dat46
-rw-r--r--tests/html5lib-tests/tree-construction/plain-text-unsafe.datbin0 -> 9486 bytes
-rw-r--r--tests/html5lib-tests/tree-construction/ruby.dat302
-rw-r--r--tests/html5lib-tests/tree-construction/scriptdata01.dat385
-rw-r--r--tests/html5lib-tests/tree-construction/scripted/adoption01.dat16
-rw-r--r--tests/html5lib-tests/tree-construction/scripted/ark.dat27
-rw-r--r--tests/html5lib-tests/tree-construction/scripted/webkit01.dat30
-rw-r--r--tests/html5lib-tests/tree-construction/svg.dat104
-rw-r--r--tests/html5lib-tests/tree-construction/tables01.dat286
-rw-r--r--tests/html5lib-tests/tree-construction/template.dat1613
-rw-r--r--tests/html5lib-tests/tree-construction/tests1.dat1987
-rw-r--r--tests/html5lib-tests/tree-construction/tests10.dat849
-rw-r--r--tests/html5lib-tests/tree-construction/tests11.dat523
-rw-r--r--tests/html5lib-tests/tree-construction/tests12.dat62
-rw-r--r--tests/html5lib-tests/tree-construction/tests14.dat75
-rw-r--r--tests/html5lib-tests/tree-construction/tests15.dat216
-rw-r--r--tests/html5lib-tests/tree-construction/tests16.dat2602
-rw-r--r--tests/html5lib-tests/tree-construction/tests17.dat179
-rw-r--r--tests/html5lib-tests/tree-construction/tests18.dat558
-rw-r--r--tests/html5lib-tests/tree-construction/tests19.dat1453
-rw-r--r--tests/html5lib-tests/tree-construction/tests2.dat821
-rw-r--r--tests/html5lib-tests/tree-construction/tests20.dat583
-rw-r--r--tests/html5lib-tests/tree-construction/tests21.dat333
-rw-r--r--tests/html5lib-tests/tree-construction/tests22.dat190
-rw-r--r--tests/html5lib-tests/tree-construction/tests23.dat168
-rw-r--r--tests/html5lib-tests/tree-construction/tests24.dat79
-rw-r--r--tests/html5lib-tests/tree-construction/tests25.dat288
-rw-r--r--tests/html5lib-tests/tree-construction/tests26.dat453
-rw-r--r--tests/html5lib-tests/tree-construction/tests3.dat305
-rw-r--r--tests/html5lib-tests/tree-construction/tests4.dat58
-rw-r--r--tests/html5lib-tests/tree-construction/tests5.dat210
-rw-r--r--tests/html5lib-tests/tree-construction/tests6.dat663
-rw-r--r--tests/html5lib-tests/tree-construction/tests7.dat417
-rw-r--r--tests/html5lib-tests/tree-construction/tests8.dat165
-rw-r--r--tests/html5lib-tests/tree-construction/tests9.dat472
-rw-r--r--tests/html5lib-tests/tree-construction/tests_innerHTML_1.dat887
-rw-r--r--tests/html5lib-tests/tree-construction/tricky01.dat336
-rw-r--r--tests/html5lib-tests/tree-construction/webkit01.dat759
-rw-r--r--tests/html5lib-tests/tree-construction/webkit02.dat336
-rw-r--r--tests/test_html5lib.rs316
99 files changed, 103900 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..96ef6c0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/target
+Cargo.lock
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..2411bd3
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "tests/html5lib-tests"]
+ path = tests/html5lib-tests
+ url = https://github.com/html5lib/html5lib-tests
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..fc3b542
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "html5gum"
+authors = ["Markus Unterwaditzer <markus-honeypot@unterwaditzer.net>"]
+description = "A WHATWG-compliant HTML5 tokenizer and tag soup parser."
+edition = "2018"
+readme = "README.md"
+keywords = ["html", "html5", "whatwg", "parser", "tokenizer", "lexer", "sax", "xml", "parsing"]
+license = "MIT"
+repository = "https://github.com/untitaker/html5gum"
+version = "0.1.0"
+
+[dev-dependencies]
+pretty_assertions = "1.0.0"
+serde = { version = "1.0.130", features = ["derive"] }
+serde_json = "1.0.71"
+test-generator = "0.3.0"
+
+[features]
+# Feature used by integration tests in tests/ to get access to library internals.
+integration-tests = []
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..12d72f1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2021 Markus Unterwaditzer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d7cbf50
--- /dev/null
+++ b/README.md
@@ -0,0 +1,81 @@
+# html5gum
+
+[![docs.rs](https://img.shields.io/docsrs/html5gum)](https://docs.rs/html5gum)
+[![crates.io](https://img.shields.io/crates/l/html5gum.svg)](https://crates.io/crates/html5gum)
+
+`html5gum` is a WHATWG-compliant HTML tokenizer.
+
+```rust
+use std::fmt::Write;
+use html5gum::{Tokenizer, Token};
+
+let html = "<title >hello world</title>";
+let mut new_html = String::new();
+
+for token in Tokenizer::new(html) {
+ match token {
+ Token::StartTag(tag) => {
+ write!(new_html, "<{}>", tag.name).unwrap();
+ }
+ Token::String(hello_world) => {
+ write!(new_html, "{}", hello_world).unwrap();
+ }
+ Token::EndTag(tag) => {
+ write!(new_html, "</{}>", tag.name).unwrap();
+ }
+ _ => panic!("unexpected input"),
+ }
+}
+
+assert_eq!(new_html, "<title>hello world</title>");
+```
+
+It fully implements [13.2 of the WHATWG HTML
+spec](https://html.spec.whatwg.org/#parsing) and passes [html5lib's tokenizer
+test suite](https://github.com/html5lib/html5lib-tests/tree/master/tokenizer),
+except that this implementation requires all input to be Rust strings and
+therefore valid UTF-8. There is no charset detection or handling of invalid
+surrogates, and the relevant html5lib tests are skipped in CI.
+
+A distinguishing feature of `html5gum` is that you can bring your own token
+datastructure and hook into token creation by implementing the `Emitter` trait.
+This allows you to:
+
+* Rewrite all per-HTML-tag allocations to use a custom allocator or datastructure.
+
+* Efficiently filter out uninteresting categories data without ever allocating
+ for it. For example if any plaintext between tokens is not of interest to
+ you, you can implement the respective trait methods as noop and therefore
+ avoid any overhead creating plaintext tokens.
+
+`html5gum` was created out of a need to parse HTML tag soup efficiently. Previous options were to:
+
+* use [quick-xml](https://github.com/tafia/quick-xml/) or
+ [xmlparser](https://github.com/RazrFalcon/xmlparser) with some hacks to make
+ either one not choke on bad HTML. For some (rather large) set of HTML input
+ this works well (particularly `quick-xml` can be configured to be very
+ lenient about parsing errors) and parsing speed is stellar. But neither can
+ parse all HTML.
+
+ For my own usecase `html5gum` is about 2x slower than `quick-xml`.
+
+* use [html5ever's own
+ tokenizer](https://docs.rs/html5ever/0.25.1/html5ever/tokenizer/index.html)
+ to avoid as much tree-building overhead as possible. This was functional but
+ had poor performance for my own usecase (10-15x slower than `quick-xml`).
+
+* use [lol-html](https://github.com/cloudflare/lol-html), which would probably
+ perform at least as well as `html5gum`, but comes with a closure-based API
+ that I didn't manage to get working for my usecase.
+
+## Etymology
+
+Why is this library called `html5gum`?
+
+* G.U.M: **G**iant **U**nreadable **M**atch-statement
+
+* \<insert "how it feels to <s>chew 5 gum</s> _parse HTML_" meme here\>
+
+## License
+
+Licensed under the MIT license, see [`./LICENSE`](./LICENSE).
diff --git a/generate_entities.py b/generate_entities.py
new file mode 100644
index 0000000..1a1407d
--- /dev/null
+++ b/generate_entities.py
@@ -0,0 +1,39 @@
+import json
+import sys
+
+key_and_value = list(json.load(sys.stdin).items())
+# Sort by descending length so we match the largest prefix first
+key_and_value.sort(key=lambda x: (-len(x[0]), x[0]))
+
+with open("src/entities.rs", "w") as f:
+ f.write("""
+// @generated
+// this file is autogenerated by
+// curl https://html.spec.whatwg.org/entities.json | python generate_entities.py
+
+pub struct CharRef {
+ /// Name as it appears escaped in HTML
+ pub name: &'static str,
+ /// Unescaped character codepoints
+ pub characters: &'static str,
+}
+
+pub fn try_read_character_reference(first_char: char, mut try_read: impl FnMut(&str) -> bool) -> Option<CharRef> {
+""")
+
+ for key, value in key_and_value:
+ assert key[0] == '&'
+ key = key[1:]
+ characters = ""
+ for c in value['codepoints']:
+ characters += r"\u{" + hex(c)[2:] + r"}"
+
+ first_char = key[0]
+ key = key[1:]
+ f.write("""
+ if first_char == '%(first_char)s' && try_read("%(key)s") {
+ return Some(CharRef { name: "%(key)s", characters: "%(characters)s" });
+ }
+ """ % {"key": key, "characters": characters, "first_char": first_char})
+
+ f.write(" None }");
diff --git a/src/emitter.rs b/src/emitter.rs
new file mode 100644
index 0000000..5bf1e0a
--- /dev/null
+++ b/src/emitter.rs
@@ -0,0 +1,493 @@
+use std::collections::BTreeMap;
+use std::collections::BTreeSet;
+use std::collections::VecDeque;
+use std::mem;
+
+use crate::Error;
+
+/// An emitter is an object providing methods to the tokenizer to produce tokens.
+///
+/// Domain-specific applications of the HTML tokenizer can manually implement this trait to
+/// customize per-token allocations, or avoid them altogether.
+///
+/// An emitter is assumed to have these internal states:
+///
+/// * _last start tag_: The most recently emitted start tag's name
+/// * _current token_: Can be a tag, doctype or comment token. There's only one current token.
+/// * _current attribute_: The currently processed HTML attribute, consisting of two strings for name and value.
+///
+/// The following methods are describing what kind of behavior the WHATWG spec expects, but that
+/// doesn't mean you need to follow it. For example:
+///
+/// * If your usage of the tokenizer will ignore all errors, none of the error handling and
+/// validation requirements apply to you. You can implement `emit_error` as noop and omit all
+/// checks that would emit errors.
+///
+/// * If you don't care about attributes at all, you can make all related methods a noop.
+///
+/// The state machine needs to have a functional implementation of
+/// `current_is_appropriate_end_tag_token` to do correct transitions, however.
+pub trait Emitter {
+ /// The token type emitted by this emitter. This controls what type of values the [`crate::Tokenizer`]
+ /// yields when used as an iterator.
+ type Token;
+
+ /// Set the name of the _last start tag_.
+ ///
+ /// This is primarily for testing purposes. This is *not* supposed to override the tag name of
+ /// the current tag.
+ fn set_last_start_tag(&mut self, last_start_tag: Option<&str>);
+
+ /// The state machine has reached the end of the file. It will soon call `pop_token` for the
+ /// last time.
+ fn emit_eof(&mut self);
+
+ /// A (probably recoverable) parsing error has occured.
+ fn emit_error(&mut self, error: Error);
+
+ /// After every state change, the tokenizer calls this method to retrieve a new token that can
+ /// be returned via the tokenizer's iterator interface.
+ fn pop_token(&mut self) -> Option<Self::Token>;
+
+ /// Emit a bunch of plain characters as character tokens.
+ fn emit_string(&mut self, c: &str);
+
+ /// Set the _current token_ to a start tag.
+ fn init_start_tag(&mut self);
+
+ /// Set the _current token_ to an end tag.
+ fn init_end_tag(&mut self);
+
+ /// Set the _current token_ to a comment.
+ fn init_comment(&mut self);
+
+ /// Emit the _current token_, assuming it is a tag.
+ ///
+ /// Also get the current attribute and append it to the to-be-emitted tag. See docstring for
+ /// [`Emitter::init_attribute`] for how duplicates should be handled.
+ ///
+ /// If a start tag is emitted, update the _last start tag_.
+ ///
+ /// If the current token is not a start/end tag, this method may panic.
+ fn emit_current_tag(&mut self);
+
+ /// Emit the _current token_, assuming it is a comment.
+ ///
+ /// If the current token is not a comment, this method may panic.
+ fn emit_current_comment(&mut self);
+
+ /// Emit the _current token_, assuming it is a doctype.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn emit_current_doctype(&mut self);
+
+ /// Assuming the _current token_ is a start tag, set the self-closing flag.
+ ///
+ /// If the current token is not a start or end tag, this method may panic.
+ ///
+ /// If the current token is an end tag, the emitter should emit the
+ /// [`crate::Error::EndTagWithTrailingSolidus`] error.
+ fn set_self_closing(&mut self);
+
+ /// Assuming the _current token_ is a doctype, set its "force quirks" flag to true.
+ ///
+ /// If the current token is not a doctype, this method pay panic.
+ fn set_force_quirks(&mut self);
+
+ /// Assuming the _current token_ is a start/end tag, append a string to the current tag's name.
+ ///
+ /// If the current token is not a start or end tag, this method may panic.
+ fn push_tag_name(&mut self, s: &str);
+
+ /// Assuming the _current token_ is a comment, append a string to the comment's contents.
+ ///
+ /// If the current token is not a comment, this method may panic.
+ fn push_comment(&mut self, s: &str);
+
+ /// Assuming the _current token_ is a doctype, append a string to the doctype's name.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn push_doctype_name(&mut self, s: &str);
+
+ /// Set the _current token_ to a new doctype token:
+ ///
+ /// * the name should be empty
+ /// * the "public identifier" should be null (different from empty)
+ /// * the "system identifier" should be null (different from empty)
+ /// * the "force quirks" flag should be `false`
+ fn init_doctype(&mut self);
+
+ /// Set the _current attribute_ to a new one, starting with empty name and value strings.
+ ///
+ /// The old attribute, if any, should be put on the _current token_. If an attribute with that
+ /// name already exists, WHATWG says the new one should be ignored and a
+ /// [`crate::Error::DuplicateAttribute`] error should be emitted.
+ ///
+ /// If the current token is an end tag token, a [`crate::Error::EndTagWithAttributes`] error should be
+ /// emitted.
+ ///
+ /// If the current token is no tag at all, this method may panic.
+ fn init_attribute(&mut self);
+
+ /// Append a string to the current attribute's name.
+ ///
+ /// If there is no current attribute, this method may panic.
+ fn push_attribute_name(&mut self, s: &str);
+
+ /// Append a string to the current attribute's value.
+ ///
+ /// If there is no current attribute, this method may panic.
+ fn push_attribute_value(&mut self, s: &str);
+
+ /// Assuming the _current token_ is a doctype, set its "public identifier" to the given string.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn set_doctype_public_identifier(&mut self, value: &str);
+
+ /// Assuming the _current token_ is a doctype, set its "system identifier" to the given string.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn set_doctype_system_identifier(&mut self, value: &str);
+
+ /// Assuming the _current token_ is a doctype, append a string to its "public identifier" to the given string.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn push_doctype_public_identifier(&mut self, s: &str);
+
+ /// Assuming the _current token_ is a doctype, append a string to its "system identifier" to the given string.
+ ///
+ /// If the current token is not a doctype, this method may panic.
+ fn push_doctype_system_identifier(&mut self, s: &str);
+
+ /// Return true if all of these hold. Return false otherwise.
+ ///
+ /// * the _current token_ is an end tag
+ /// * the _last start tag_ exists
+ /// * the current end tag token's name equals to the last start tag's name.
+ ///
+ /// See also [WHATWG's definition of "appropriate end tag
+ /// token"](https://html.spec.whatwg.org/#appropriate-end-tag-token).
+ fn current_is_appropriate_end_tag_token(&mut self) -> bool;
+}
+
+/// The default implementation of [`crate::Emitter`], used to produce ("emit") tokens.
+pub struct DefaultEmitter {
+ current_characters: String,
+ current_token: Option<Token>,
+ last_start_tag: String,
+ current_attribute: Option<(String, String)>,
+ seen_attributes: BTreeSet<String>,
+ emitted_tokens: VecDeque<Token>,
+}
+
+impl Default for DefaultEmitter {
+ fn default() -> Self {
+ DefaultEmitter {
+ current_characters: String::new(),
+ current_token: None,
+ last_start_tag: String::new(),
+ current_attribute: None,
+ seen_attributes: BTreeSet::new(),
+ emitted_tokens: VecDeque::new(),
+ }
+ }
+}
+
+impl DefaultEmitter {
+ fn emit_token(&mut self, token: Token) {
+ self.flush_current_characters();
+ self.emitted_tokens.push_front(token);
+ }
+
+ fn flush_current_attribute(&mut self) {
+ if let Some((k, v)) = self.current_attribute.take() {
+ match self.current_token {
+ Some(Token::StartTag(ref mut tag)) => {
+ let mut error = None;
+ tag.attributes
+ .entry(k)
+ .and_modify(|_| {
+ error = Some(Error::DuplicateAttribute);
+ })
+ .or_insert(v);
+
+ if let Some(e) = error {
+ self.emit_error(e);
+ }
+ }
+ Some(Token::EndTag(_)) => {
+ if !self.seen_attributes.insert(k) {
+ self.emit_error(Error::DuplicateAttribute);
+ }
+ }
+ _ => {
+ debug_assert!(false);
+ }
+ }
+ }
+ }
+
+ fn flush_current_characters(&mut self) {
+ if self.current_characters.is_empty() {
+ return;
+ }
+
+ let s = mem::take(&mut self.current_characters);
+ self.emit_token(Token::String(s));
+ }
+}
+
+impl Emitter for DefaultEmitter {
+ type Token = Token;
+
+ fn set_last_start_tag(&mut self, last_start_tag: Option<&str>) {
+ self.last_start_tag.clear();
+ self.last_start_tag
+ .push_str(last_start_tag.unwrap_or_default());
+ }
+
+ fn emit_eof(&mut self) {
+ self.flush_current_characters();
+ }
+
+ fn emit_error(&mut self, error: Error) {
+ // bypass character flushing in self.emit_token: we don't need the error location to be
+ // that exact
+ self.emitted_tokens.push_front(Token::Error(error));
+ }
+
+ fn pop_token(&mut self) -> Option<Self::Token> {
+ self.emitted_tokens.pop_back()
+ }
+
+ fn emit_string(&mut self, s: &str) {
+ self.current_characters.push_str(s);
+ }
+
+ fn init_start_tag(&mut self) {
+ self.current_token = Some(Token::StartTag(Default::default()));
+ }
+ fn init_end_tag(&mut self) {
+ self.current_token = Some(Token::EndTag(Default::default()));
+ self.seen_attributes.clear();
+ }
+
+ fn init_comment(&mut self) {
+ self.current_token = Some(Token::Comment(String::new()));
+ }
+ fn emit_current_tag(&mut self) {
+ self.flush_current_attribute();
+ let mut token = self.current_token.take().unwrap();
+ match token {
+ Token::EndTag(_) => {
+ if !self.seen_attributes.is_empty() {
+ self.emit_error(Error::EndTagWithAttributes);
+ }
+ self.seen_attributes.clear();
+ }
+ Token::StartTag(ref mut _tag) => {
+ self.set_last_start_tag(Some(&_tag.name));
+ }
+ _ => debug_assert!(false),
+ }
+ self.emit_token(token);
+ }
+ fn emit_current_comment(&mut self) {
+ let comment = self.current_token.take().unwrap();
+ debug_assert!(matches!(comment, Token::Comment(_)));
+ self.emit_token(comment);
+ }
+
+ fn emit_current_doctype(&mut self) {
+ let doctype = self.current_token.take().unwrap();
+ debug_assert!(matches!(doctype, Token::Doctype(_)));
+ self.emit_token(doctype);
+ }
+
+ fn set_self_closing(&mut self) {
+ let tag = self.current_token.as_mut().unwrap();
+ match tag {
+ Token::StartTag(StartTag {
+ ref mut self_closing,
+ ..
+ }) => {
+ *self_closing = true;
+ }
+ Token::EndTag(_) => {
+ self.emit_error(Error::EndTagWithTrailingSolidus);
+ }
+ _ => {
+ debug_assert!(false);
+ }
+ }
+ }
+ fn set_force_quirks(&mut self) {
+ match self.current_token {
+ Some(Token::Doctype(ref mut doctype)) => doctype.force_quirks = true,
+ _ => debug_assert!(false),
+ }
+ }
+ fn push_tag_name(&mut self, s: &str) {
+ match self.current_token {
+ Some(Token::StartTag(StartTag { ref mut name, .. })) => {
+ name.push_str(s);
+ }
+ Some(Token::EndTag(EndTag { ref mut name, .. })) => {
+ name.push_str(s);
+ }
+ _ => debug_assert!(false),
+ }
+ }
+
+ fn push_comment(&mut self, s: &str) {
+ match self.current_token {
+ Some(Token::Comment(ref mut data)) => data.push_str(s),
+ _ => debug_assert!(false),
+ }
+ }
+
+ fn push_doctype_name(&mut self, s: &str) {
+ match self.current_token {
+ Some(Token::Doctype(ref mut doctype)) => doctype.name.push_str(s),
+ _ => debug_assert!(false),
+ }
+ }
+ fn init_doctype(&mut self) {
+ self.current_token = Some(Token::Doctype(Doctype {
+ name: String::new(),
+ force_quirks: false,
+ public_identifier: None,
+ system_identifier: None,
+ }));
+ }
+
+ fn init_attribute(&mut self) {
+ self.flush_current_attribute();
+ self.current_attribute = Some((String::new(), String::new()));
+ }
+ fn push_attribute_name(&mut self, s: &str) {
+ self.current_attribute.as_mut().unwrap().0.push_str(s);
+ }
+ fn push_attribute_value(&mut self, s: &str) {
+ self.current_attribute.as_mut().unwrap().1.push_str(s);
+ }
+ fn set_doctype_public_identifier(&mut self, value: &str) {
+ if let Some(Token::Doctype(Doctype {
+ ref mut public_identifier,
+ ..
+ })) = self.current_token
+ {
+ *public_identifier = Some(value.to_owned());
+ } else {
+ debug_assert!(false);
+ }
+ }
+ fn set_doctype_system_identifier(&mut self, value: &str) {
+ if let Some(Token::Doctype(Doctype {
+ ref mut system_identifier,
+ ..
+ })) = self.current_token
+ {
+ *system_identifier = Some(value.to_owned());
+ } else {
+ debug_assert!(false);
+ }
+ }
+ fn push_doctype_public_identifier(&mut self, s: &str) {
+ if let Some(Token::Doctype(Doctype {
+ public_identifier: Some(ref mut id),
+ ..
+ })) = self.current_token
+ {
+ id.push_str(s);
+ } else {
+ debug_assert!(false);
+ }
+ }
+ fn push_doctype_system_identifier(&mut self, s: &str) {
+ if let Some(Token::Doctype(Doctype {
+ system_identifier: Some(ref mut id),
+ ..
+ })) = self.current_token
+ {
+ id.push_str(s);
+ } else {
+ debug_assert!(false);
+ }
+ }
+
+ fn current_is_appropriate_end_tag_token(&mut self) -> bool {
+ match self.current_token {
+ Some(Token::EndTag(ref tag)) => {
+ !self.last_start_tag.is_empty() && self.last_start_tag == tag.name
+ }
+ _ => false,
+ }
+ }
+}
+
+/// A HTML end/close tag, such as `<p>` or `<a>`.
+#[derive(Debug, Default, Eq, PartialEq)]
+pub struct StartTag {
+ /// Whether this tag is self-closing. If it is self-closing, no following [`EndTag`] should be
+ /// expected.
+ pub self_closing: bool,
+
+ /// The start tag's name, such as `"p"` or `"a"`.
+ pub name: String,
+
+ /// A mapping for any HTML attributes this start tag may have.
+ ///
+ /// Duplicate attributes are ignored after the first one as per WHATWG spec. Implement your own
+ /// [`Emitter`] to tweak this behavior.
+ pub attributes: BTreeMap<String, String>,
+}
+
+/// A HTML end/close tag, such as `</p>` or `</a>`.
+#[derive(Debug, Default, Eq, PartialEq)]
+pub struct EndTag {
+ /// The ending tag's name, such as `"p"` or `"a"`.
+ pub name: String,
+}
+
+/// A doctype. Some examples:
+///
+/// * `<!DOCTYPE {name}>`
+/// * `<!DOCTYPE {name} PUBLIC '{public_identifier}'>`
+/// * `<!DOCTYPE {name} SYSTEM '{system_identifier}'>`
+/// * `<!DOCTYPE {name} PUBLIC '{public_identifier}' '{system_identifier}'>`
+#[derive(Debug, Eq, PartialEq)]
+pub struct Doctype {
+ /// The ["force quirks"](https://html.spec.whatwg.org/#force-quirks-flag) flag.
+ pub force_quirks: bool,
+
+ /// The doctype's name. For HTML documents this is "html".
+ pub name: String,
+
+ /// The doctype's public identifier.
+ pub public_identifier: Option<String>,
+
+ /// The doctype's system identifier.
+ pub system_identifier: Option<String>,
+}
+
+/// The token type used by default. You can define your own token type by implementing the
+/// [`crate::Emitter`] trait and using [`crate::Tokenizer::new_with_emitter`].
+#[derive(Debug, Eq, PartialEq)]
+pub enum Token {
+ /// A HTML start tag.
+ StartTag(StartTag),
+ /// A HTML end tag.
+ EndTag(EndTag),
+ /// A literal string.
+ String(String),
+ /// A HTML comment.
+ Comment(String),
+ /// A HTML doctype declaration.
+ Doctype(Doctype),
+ /// A HTML parsing error.
+ ///
+ /// Can be skipped over, the tokenizer is supposed to recover from the error and continues with
+ /// more tokens afterward.
+ Error(Error),
+}
diff --git a/src/entities.rs b/src/entities.rs
new file mode 100644
index 0000000..1ab3ffb
--- /dev/null
+++ b/src/entities.rs
@@ -0,0 +1,15633 @@
+// @generated
+// this file is autogenerated by
+// curl https://html.spec.whatwg.org/entities.json | python generate_entities.py
+
+pub struct CharRef {
+ /// Name as it appears escaped in HTML
+ pub name: &'static str,
+ /// Unescaped character codepoints
+ pub characters: &'static str,
+}
+
+pub fn try_read_character_reference(
+ first_char: char,
+ mut try_read: impl FnMut(&str) -> bool,
+) -> Option<CharRef> {
+ if first_char == 'C' && try_read("ounterClockwiseContourIntegral;") {
+ return Some(CharRef {
+ name: "ounterClockwiseContourIntegral;",
+ characters: "\u{2233}",
+ });
+ }
+
+ if first_char == 'C' && try_read("lockwiseContourIntegral;") {
+ return Some(CharRef {
+ name: "lockwiseContourIntegral;",
+ characters: "\u{2232}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLongLeftRightArrow;") {
+ return Some(CharRef {
+ name: "oubleLongLeftRightArrow;",
+ characters: "\u{27fa}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otNestedGreaterGreater;") {
+ return Some(CharRef {
+ name: "otNestedGreaterGreater;",
+ characters: "\u{2aa2}\u{338}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iacriticalDoubleAcute;") {
+ return Some(CharRef {
+ name: "iacriticalDoubleAcute;",
+ characters: "\u{2dd}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSquareSupersetEqual;") {
+ return Some(CharRef {
+ name: "otSquareSupersetEqual;",
+ characters: "\u{22e3}",
+ });
+ }
+
+ if first_char == 'C' && try_read("loseCurlyDoubleQuote;") {
+ return Some(CharRef {
+ name: "loseCurlyDoubleQuote;",
+ characters: "\u{201d}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleContourIntegral;") {
+ return Some(CharRef {
+ name: "oubleContourIntegral;",
+ characters: "\u{222f}",
+ });
+ }
+
+ if first_char == 'F' && try_read("illedVerySmallSquare;") {
+ return Some(CharRef {
+ name: "illedVerySmallSquare;",
+ characters: "\u{25aa}",
+ });
+ }
+
+ if first_char == 'N' && try_read("egativeVeryThinSpace;") {
+ return Some(CharRef {
+ name: "egativeVeryThinSpace;",
+ characters: "\u{200b}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otPrecedesSlantEqual;") {
+ return Some(CharRef {
+ name: "otPrecedesSlantEqual;",
+ characters: "\u{22e0}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otRightTriangleEqual;") {
+ return Some(CharRef {
+ name: "otRightTriangleEqual;",
+ characters: "\u{22ed}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSucceedsSlantEqual;") {
+ return Some(CharRef {
+ name: "otSucceedsSlantEqual;",
+ characters: "\u{22e1}",
+ });
+ }
+
+ if first_char == 'C' && try_read("apitalDifferentialD;") {
+ return Some(CharRef {
+ name: "apitalDifferentialD;",
+ characters: "\u{2145}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLeftRightArrow;") {
+ return Some(CharRef {
+ name: "oubleLeftRightArrow;",
+ characters: "\u{21d4}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLongRightArrow;") {
+ return Some(CharRef {
+ name: "oubleLongRightArrow;",
+ characters: "\u{27f9}",
+ });
+ }
+
+ if first_char == 'E' && try_read("mptyVerySmallSquare;") {
+ return Some(CharRef {
+ name: "mptyVerySmallSquare;",
+ characters: "\u{25ab}",
+ });
+ }
+
+ if first_char == 'N' && try_read("estedGreaterGreater;") {
+ return Some(CharRef {
+ name: "estedGreaterGreater;",
+ characters: "\u{226b}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otDoubleVerticalBar;") {
+ return Some(CharRef {
+ name: "otDoubleVerticalBar;",
+ characters: "\u{2226}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterSlantEqual;") {
+ return Some(CharRef {
+ name: "otGreaterSlantEqual;",
+ characters: "\u{2a7e}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLeftTriangleEqual;") {
+ return Some(CharRef {
+ name: "otLeftTriangleEqual;",
+ characters: "\u{22ec}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSquareSubsetEqual;") {
+ return Some(CharRef {
+ name: "otSquareSubsetEqual;",
+ characters: "\u{22e2}",
+ });
+ }
+
+ if first_char == 'O' && try_read("penCurlyDoubleQuote;") {
+ return Some(CharRef {
+ name: "penCurlyDoubleQuote;",
+ characters: "\u{201c}",
+ });
+ }
+
+ if first_char == 'R' && try_read("everseUpEquilibrium;") {
+ return Some(CharRef {
+ name: "everseUpEquilibrium;",
+ characters: "\u{296f}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLongLeftArrow;") {
+ return Some(CharRef {
+ name: "oubleLongLeftArrow;",
+ characters: "\u{27f8}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownLeftRightVector;") {
+ return Some(CharRef {
+ name: "ownLeftRightVector;",
+ characters: "\u{2950}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftArrowRightArrow;") {
+ return Some(CharRef {
+ name: "eftArrowRightArrow;",
+ characters: "\u{21c6}",
+ });
+ }
+
+ if first_char == 'N' && try_read("egativeMediumSpace;") {
+ return Some(CharRef {
+ name: "egativeMediumSpace;",
+ characters: "\u{200b}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterFullEqual;") {
+ return Some(CharRef {
+ name: "otGreaterFullEqual;",
+ characters: "\u{2267}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otRightTriangleBar;") {
+ return Some(CharRef {
+ name: "otRightTriangleBar;",
+ characters: "\u{29d0}\u{338}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightArrowLeftArrow;") {
+ return Some(CharRef {
+ name: "ightArrowLeftArrow;",
+ characters: "\u{21c4}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareSupersetEqual;") {
+ return Some(CharRef {
+ name: "quareSupersetEqual;",
+ characters: "\u{2292}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftrightsquigarrow;") {
+ return Some(CharRef {
+ name: "eftrightsquigarrow;",
+ characters: "\u{21ad}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownRightTeeVector;") {
+ return Some(CharRef {
+ name: "ownRightTeeVector;",
+ characters: "\u{295f}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownRightVectorBar;") {
+ return Some(CharRef {
+ name: "ownRightVectorBar;",
+ characters: "\u{2957}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongLeftRightArrow;") {
+ return Some(CharRef {
+ name: "ongLeftRightArrow;",
+ characters: "\u{27f7}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongleftrightarrow;") {
+ return Some(CharRef {
+ name: "ongleftrightarrow;",
+ characters: "\u{27fa}",
+ });
+ }
+
+ if first_char == 'N' && try_read("egativeThickSpace;") {
+ return Some(CharRef {
+ name: "egativeThickSpace;",
+ characters: "\u{200b}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLeftTriangleBar;") {
+ return Some(CharRef {
+ name: "otLeftTriangleBar;",
+ characters: "\u{29cf}\u{338}",
+ });
+ }
+
+ if first_char == 'P' && try_read("recedesSlantEqual;") {
+ return Some(CharRef {
+ name: "recedesSlantEqual;",
+ characters: "\u{227c}",
+ });
+ }
+
+ if first_char == 'R' && try_read("everseEquilibrium;") {
+ return Some(CharRef {
+ name: "everseEquilibrium;",
+ characters: "\u{21cb}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightDoubleBracket;") {
+ return Some(CharRef {
+ name: "ightDoubleBracket;",
+ characters: "\u{27e7}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightDownTeeVector;") {
+ return Some(CharRef {
+ name: "ightDownTeeVector;",
+ characters: "\u{295d}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightDownVectorBar;") {
+ return Some(CharRef {
+ name: "ightDownVectorBar;",
+ characters: "\u{2955}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTriangleEqual;") {
+ return Some(CharRef {
+ name: "ightTriangleEqual;",
+ characters: "\u{22b5}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareIntersection;") {
+ return Some(CharRef {
+ name: "quareIntersection;",
+ characters: "\u{2293}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ucceedsSlantEqual;") {
+ return Some(CharRef {
+ name: "ucceedsSlantEqual;",
+ characters: "\u{227d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacktriangleright;") {
+ return Some(CharRef {
+ name: "lacktriangleright;",
+ characters: "\u{25b8}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ongleftrightarrow;") {
+ return Some(CharRef {
+ name: "ongleftrightarrow;",
+ characters: "\u{27f7}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleUpDownArrow;") {
+ return Some(CharRef {
+ name: "oubleUpDownArrow;",
+ characters: "\u{21d5}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleVerticalBar;") {
+ return Some(CharRef {
+ name: "oubleVerticalBar;",
+ characters: "\u{2225}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownLeftTeeVector;") {
+ return Some(CharRef {
+ name: "ownLeftTeeVector;",
+ characters: "\u{295e}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownLeftVectorBar;") {
+ return Some(CharRef {
+ name: "ownLeftVectorBar;",
+ characters: "\u{2956}",
+ });
+ }
+
+ if first_char == 'F' && try_read("illedSmallSquare;") {
+ return Some(CharRef {
+ name: "illedSmallSquare;",
+ characters: "\u{25fc}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterSlantEqual;") {
+ return Some(CharRef {
+ name: "reaterSlantEqual;",
+ characters: "\u{2a7e}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftDoubleBracket;") {
+ return Some(CharRef {
+ name: "eftDoubleBracket;",
+ characters: "\u{27e6}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftDownTeeVector;") {
+ return Some(CharRef {
+ name: "eftDownTeeVector;",
+ characters: "\u{2961}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftDownVectorBar;") {
+ return Some(CharRef {
+ name: "eftDownVectorBar;",
+ characters: "\u{2959}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTriangleEqual;") {
+ return Some(CharRef {
+ name: "eftTriangleEqual;",
+ characters: "\u{22b4}",
+ });
+ }
+
+ if first_char == 'N' && try_read("egativeThinSpace;") {
+ return Some(CharRef {
+ name: "egativeThinSpace;",
+ characters: "\u{200b}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterGreater;") {
+ return Some(CharRef {
+ name: "otGreaterGreater;",
+ characters: "\u{226b}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLessSlantEqual;") {
+ return Some(CharRef {
+ name: "otLessSlantEqual;",
+ characters: "\u{2a7d}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otNestedLessLess;") {
+ return Some(CharRef {
+ name: "otNestedLessLess;",
+ characters: "\u{2aa1}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otReverseElement;") {
+ return Some(CharRef {
+ name: "otReverseElement;",
+ characters: "\u{220c}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSquareSuperset;") {
+ return Some(CharRef {
+ name: "otSquareSuperset;",
+ characters: "\u{2290}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otTildeFullEqual;") {
+ return Some(CharRef {
+ name: "otTildeFullEqual;",
+ characters: "\u{2247}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightAngleBracket;") {
+ return Some(CharRef {
+ name: "ightAngleBracket;",
+ characters: "\u{27e9}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightUpDownVector;") {
+ return Some(CharRef {
+ name: "ightUpDownVector;",
+ characters: "\u{294f}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareSubsetEqual;") {
+ return Some(CharRef {
+ name: "quareSubsetEqual;",
+ characters: "\u{2291}",
+ });
+ }
+
+ if first_char == 'V' && try_read("erticalSeparator;") {
+ return Some(CharRef {
+ name: "erticalSeparator;",
+ characters: "\u{2758}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacktriangledown;") {
+ return Some(CharRef {
+ name: "lacktriangledown;",
+ characters: "\u{25be}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacktriangleleft;") {
+ return Some(CharRef {
+ name: "lacktriangleleft;",
+ characters: "\u{25c2}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftrightharpoons;") {
+ return Some(CharRef {
+ name: "eftrightharpoons;",
+ characters: "\u{21cb}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightleftharpoons;") {
+ return Some(CharRef {
+ name: "ightleftharpoons;",
+ characters: "\u{21cc}",
+ });
+ }
+
+ if first_char == 't' && try_read("woheadrightarrow;") {
+ return Some(CharRef {
+ name: "woheadrightarrow;",
+ characters: "\u{21a0}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iacriticalAcute;") {
+ return Some(CharRef {
+ name: "iacriticalAcute;",
+ characters: "\u{b4}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iacriticalGrave;") {
+ return Some(CharRef {
+ name: "iacriticalGrave;",
+ characters: "\u{60}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iacriticalTilde;") {
+ return Some(CharRef {
+ name: "iacriticalTilde;",
+ characters: "\u{2dc}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleRightArrow;") {
+ return Some(CharRef {
+ name: "oubleRightArrow;",
+ characters: "\u{21d2}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownArrowUpArrow;") {
+ return Some(CharRef {
+ name: "ownArrowUpArrow;",
+ characters: "\u{21f5}",
+ });
+ }
+
+ if first_char == 'E' && try_read("mptySmallSquare;") {
+ return Some(CharRef {
+ name: "mptySmallSquare;",
+ characters: "\u{25fb}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterEqualLess;") {
+ return Some(CharRef {
+ name: "reaterEqualLess;",
+ characters: "\u{22db}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterFullEqual;") {
+ return Some(CharRef {
+ name: "reaterFullEqual;",
+ characters: "\u{2267}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftAngleBracket;") {
+ return Some(CharRef {
+ name: "eftAngleBracket;",
+ characters: "\u{27e8}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftUpDownVector;") {
+ return Some(CharRef {
+ name: "eftUpDownVector;",
+ characters: "\u{2951}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essEqualGreater;") {
+ return Some(CharRef {
+ name: "essEqualGreater;",
+ characters: "\u{22da}",
+ });
+ }
+
+ if first_char == 'N' && try_read("onBreakingSpace;") {
+ return Some(CharRef {
+ name: "onBreakingSpace;",
+ characters: "\u{a0}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otPrecedesEqual;") {
+ return Some(CharRef {
+ name: "otPrecedesEqual;",
+ characters: "\u{2aaf}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otRightTriangle;") {
+ return Some(CharRef {
+ name: "otRightTriangle;",
+ characters: "\u{22eb}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSucceedsEqual;") {
+ return Some(CharRef {
+ name: "otSucceedsEqual;",
+ characters: "\u{2ab0}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSucceedsTilde;") {
+ return Some(CharRef {
+ name: "otSucceedsTilde;",
+ characters: "\u{227f}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSupersetEqual;") {
+ return Some(CharRef {
+ name: "otSupersetEqual;",
+ characters: "\u{2289}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTriangleBar;") {
+ return Some(CharRef {
+ name: "ightTriangleBar;",
+ characters: "\u{29d0}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightUpTeeVector;") {
+ return Some(CharRef {
+ name: "ightUpTeeVector;",
+ characters: "\u{295c}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightUpVectorBar;") {
+ return Some(CharRef {
+ name: "ightUpVectorBar;",
+ characters: "\u{2954}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nderParenthesis;") {
+ return Some(CharRef {
+ name: "nderParenthesis;",
+ characters: "\u{23dd}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pArrowDownArrow;") {
+ return Some(CharRef {
+ name: "pArrowDownArrow;",
+ characters: "\u{21c5}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irclearrowright;") {
+ return Some(CharRef {
+ name: "irclearrowright;",
+ characters: "\u{21bb}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ownharpoonright;") {
+ return Some(CharRef {
+ name: "ownharpoonright;",
+ characters: "\u{21c2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("trianglerighteq;") {
+ return Some(CharRef {
+ name: "trianglerighteq;",
+ characters: "\u{22ed}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightharpoondown;") {
+ return Some(CharRef {
+ name: "ightharpoondown;",
+ characters: "\u{21c1}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightrightarrows;") {
+ return Some(CharRef {
+ name: "ightrightarrows;",
+ characters: "\u{21c9}",
+ });
+ }
+
+ if first_char == 't' && try_read("woheadleftarrow;") {
+ return Some(CharRef {
+ name: "woheadleftarrow;",
+ characters: "\u{219e}",
+ });
+ }
+
+ if first_char == 'v' && try_read("artriangleright;") {
+ return Some(CharRef {
+ name: "artriangleright;",
+ characters: "\u{22b3}",
+ });
+ }
+
+ if first_char == 'C' && try_read("loseCurlyQuote;") {
+ return Some(CharRef {
+ name: "loseCurlyQuote;",
+ characters: "\u{2019}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ontourIntegral;") {
+ return Some(CharRef {
+ name: "ontourIntegral;",
+ characters: "\u{222e}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleDownArrow;") {
+ return Some(CharRef {
+ name: "oubleDownArrow;",
+ characters: "\u{21d3}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLeftArrow;") {
+ return Some(CharRef {
+ name: "oubleLeftArrow;",
+ characters: "\u{21d0}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownRightVector;") {
+ return Some(CharRef {
+ name: "ownRightVector;",
+ characters: "\u{21c1}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftRightVector;") {
+ return Some(CharRef {
+ name: "eftRightVector;",
+ characters: "\u{294e}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTriangleBar;") {
+ return Some(CharRef {
+ name: "eftTriangleBar;",
+ characters: "\u{29cf}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftUpTeeVector;") {
+ return Some(CharRef {
+ name: "eftUpTeeVector;",
+ characters: "\u{2960}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftUpVectorBar;") {
+ return Some(CharRef {
+ name: "eftUpVectorBar;",
+ characters: "\u{2958}",
+ });
+ }
+
+ if first_char == 'L' && try_read("owerRightArrow;") {
+ return Some(CharRef {
+ name: "owerRightArrow;",
+ characters: "\u{2198}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterEqual;") {
+ return Some(CharRef {
+ name: "otGreaterEqual;",
+ characters: "\u{2271}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterTilde;") {
+ return Some(CharRef {
+ name: "otGreaterTilde;",
+ characters: "\u{2275}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otHumpDownHump;") {
+ return Some(CharRef {
+ name: "otHumpDownHump;",
+ characters: "\u{224e}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLeftTriangle;") {
+ return Some(CharRef {
+ name: "otLeftTriangle;",
+ characters: "\u{22ea}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSquareSubset;") {
+ return Some(CharRef {
+ name: "otSquareSubset;",
+ characters: "\u{228f}\u{338}",
+ });
+ }
+
+ if first_char == 'O' && try_read("verParenthesis;") {
+ return Some(CharRef {
+ name: "verParenthesis;",
+ characters: "\u{23dc}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightDownVector;") {
+ return Some(CharRef {
+ name: "ightDownVector;",
+ characters: "\u{21c2}",
+ });
+ }
+
+ if first_char == 'S' && try_read("hortRightArrow;") {
+ return Some(CharRef {
+ name: "hortRightArrow;",
+ characters: "\u{2192}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pperRightArrow;") {
+ return Some(CharRef {
+ name: "pperRightArrow;",
+ characters: "\u{2197}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igtriangledown;") {
+ return Some(CharRef {
+ name: "igtriangledown;",
+ characters: "\u{25bd}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irclearrowleft;") {
+ return Some(CharRef {
+ name: "irclearrowleft;",
+ characters: "\u{21ba}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urvearrowright;") {
+ return Some(CharRef {
+ name: "urvearrowright;",
+ characters: "\u{21b7}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ownharpoonleft;") {
+ return Some(CharRef {
+ name: "ownharpoonleft;",
+ characters: "\u{21c3}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftharpoondown;") {
+ return Some(CharRef {
+ name: "eftharpoondown;",
+ characters: "\u{21bd}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftrightarrows;") {
+ return Some(CharRef {
+ name: "eftrightarrows;",
+ characters: "\u{21c6}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Leftrightarrow;") {
+ return Some(CharRef {
+ name: "Leftrightarrow;",
+ characters: "\u{21ce}",
+ });
+ }
+
+ if first_char == 'n' && try_read("leftrightarrow;") {
+ return Some(CharRef {
+ name: "leftrightarrow;",
+ characters: "\u{21ae}",
+ });
+ }
+
+ if first_char == 'n' && try_read("trianglelefteq;") {
+ return Some(CharRef {
+ name: "trianglelefteq;",
+ characters: "\u{22ec}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightleftarrows;") {
+ return Some(CharRef {
+ name: "ightleftarrows;",
+ characters: "\u{21c4}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightsquigarrow;") {
+ return Some(CharRef {
+ name: "ightsquigarrow;",
+ characters: "\u{219d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightthreetimes;") {
+ return Some(CharRef {
+ name: "ightthreetimes;",
+ characters: "\u{22cc}",
+ });
+ }
+
+ if first_char == 's' && try_read("traightepsilon;") {
+ return Some(CharRef {
+ name: "traightepsilon;",
+ characters: "\u{3f5}",
+ });
+ }
+
+ if first_char == 't' && try_read("rianglerighteq;") {
+ return Some(CharRef {
+ name: "rianglerighteq;",
+ characters: "\u{22b5}",
+ });
+ }
+
+ if first_char == 'v' && try_read("artriangleleft;") {
+ return Some(CharRef {
+ name: "artriangleleft;",
+ characters: "\u{22b2}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iacriticalDot;") {
+ return Some(CharRef {
+ name: "iacriticalDot;",
+ characters: "\u{2d9}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleRightTee;") {
+ return Some(CharRef {
+ name: "oubleRightTee;",
+ characters: "\u{22a8}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownLeftVector;") {
+ return Some(CharRef {
+ name: "ownLeftVector;",
+ characters: "\u{21bd}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterGreater;") {
+ return Some(CharRef {
+ name: "reaterGreater;",
+ characters: "\u{2aa2}",
+ });
+ }
+
+ if first_char == 'H' && try_read("orizontalLine;") {
+ return Some(CharRef {
+ name: "orizontalLine;",
+ characters: "\u{2500}",
+ });
+ }
+
+ if first_char == 'I' && try_read("nvisibleComma;") {
+ return Some(CharRef {
+ name: "nvisibleComma;",
+ characters: "\u{2063}",
+ });
+ }
+
+ if first_char == 'I' && try_read("nvisibleTimes;") {
+ return Some(CharRef {
+ name: "nvisibleTimes;",
+ characters: "\u{2062}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftDownVector;") {
+ return Some(CharRef {
+ name: "eftDownVector;",
+ characters: "\u{21c3}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftRightArrow;") {
+ return Some(CharRef {
+ name: "eftRightArrow;",
+ characters: "\u{2194}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftrightarrow;") {
+ return Some(CharRef {
+ name: "eftrightarrow;",
+ characters: "\u{21d4}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essSlantEqual;") {
+ return Some(CharRef {
+ name: "essSlantEqual;",
+ characters: "\u{2a7d}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongRightArrow;") {
+ return Some(CharRef {
+ name: "ongRightArrow;",
+ characters: "\u{27f6}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongrightarrow;") {
+ return Some(CharRef {
+ name: "ongrightarrow;",
+ characters: "\u{27f9}",
+ });
+ }
+
+ if first_char == 'L' && try_read("owerLeftArrow;") {
+ return Some(CharRef {
+ name: "owerLeftArrow;",
+ characters: "\u{2199}",
+ });
+ }
+
+ if first_char == 'N' && try_read("estedLessLess;") {
+ return Some(CharRef {
+ name: "estedLessLess;",
+ characters: "\u{226a}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreaterLess;") {
+ return Some(CharRef {
+ name: "otGreaterLess;",
+ characters: "\u{2279}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLessGreater;") {
+ return Some(CharRef {
+ name: "otLessGreater;",
+ characters: "\u{2278}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSubsetEqual;") {
+ return Some(CharRef {
+ name: "otSubsetEqual;",
+ characters: "\u{2288}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otVerticalBar;") {
+ return Some(CharRef {
+ name: "otVerticalBar;",
+ characters: "\u{2224}",
+ });
+ }
+
+ if first_char == 'O' && try_read("penCurlyQuote;") {
+ return Some(CharRef {
+ name: "penCurlyQuote;",
+ characters: "\u{2018}",
+ });
+ }
+
+ if first_char == 'R' && try_read("everseElement;") {
+ return Some(CharRef {
+ name: "everseElement;",
+ characters: "\u{220b}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTeeVector;") {
+ return Some(CharRef {
+ name: "ightTeeVector;",
+ characters: "\u{295b}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightVectorBar;") {
+ return Some(CharRef {
+ name: "ightVectorBar;",
+ characters: "\u{2953}",
+ });
+ }
+
+ if first_char == 'S' && try_read("hortDownArrow;") {
+ return Some(CharRef {
+ name: "hortDownArrow;",
+ characters: "\u{2193}",
+ });
+ }
+
+ if first_char == 'S' && try_read("hortLeftArrow;") {
+ return Some(CharRef {
+ name: "hortLeftArrow;",
+ characters: "\u{2190}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareSuperset;") {
+ return Some(CharRef {
+ name: "quareSuperset;",
+ characters: "\u{2290}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ildeFullEqual;") {
+ return Some(CharRef {
+ name: "ildeFullEqual;",
+ characters: "\u{2245}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pperLeftArrow;") {
+ return Some(CharRef {
+ name: "pperLeftArrow;",
+ characters: "\u{2196}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("eroWidthSpace;") {
+ return Some(CharRef {
+ name: "eroWidthSpace;",
+ characters: "\u{200b}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urvearrowleft;") {
+ return Some(CharRef {
+ name: "urvearrowleft;",
+ characters: "\u{21b6}",
+ });
+ }
+
+ if first_char == 'd' && try_read("oublebarwedge;") {
+ return Some(CharRef {
+ name: "oublebarwedge;",
+ characters: "\u{2306}",
+ });
+ }
+
+ if first_char == 'd' && try_read("owndownarrows;") {
+ return Some(CharRef {
+ name: "owndownarrows;",
+ characters: "\u{21ca}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ookrightarrow;") {
+ return Some(CharRef {
+ name: "ookrightarrow;",
+ characters: "\u{21aa}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftleftarrows;") {
+ return Some(CharRef {
+ name: "eftleftarrows;",
+ characters: "\u{21c7}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftrightarrow;") {
+ return Some(CharRef {
+ name: "eftrightarrow;",
+ characters: "\u{2194}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftthreetimes;") {
+ return Some(CharRef {
+ name: "eftthreetimes;",
+ characters: "\u{22cb}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ongrightarrow;") {
+ return Some(CharRef {
+ name: "ongrightarrow;",
+ characters: "\u{27f6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ooparrowright;") {
+ return Some(CharRef {
+ name: "ooparrowright;",
+ characters: "\u{21ac}",
+ });
+ }
+
+ if first_char == 'n' && try_read("shortparallel;") {
+ return Some(CharRef {
+ name: "shortparallel;",
+ characters: "\u{2226}",
+ });
+ }
+
+ if first_char == 'n' && try_read("triangleright;") {
+ return Some(CharRef {
+ name: "triangleright;",
+ characters: "\u{22eb}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightarrowtail;") {
+ return Some(CharRef {
+ name: "ightarrowtail;",
+ characters: "\u{21a3}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightharpoonup;") {
+ return Some(CharRef {
+ name: "ightharpoonup;",
+ characters: "\u{21c0}",
+ });
+ }
+
+ if first_char == 't' && try_read("rianglelefteq;") {
+ return Some(CharRef {
+ name: "rianglelefteq;",
+ characters: "\u{22b4}",
+ });
+ }
+
+ if first_char == 'u' && try_read("pharpoonright;") {
+ return Some(CharRef {
+ name: "pharpoonright;",
+ characters: "\u{21be}",
+ });
+ }
+
+ if first_char == 'A' && try_read("pplyFunction;") {
+ return Some(CharRef {
+ name: "pplyFunction;",
+ characters: "\u{2061}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ifferentialD;") {
+ return Some(CharRef {
+ name: "ifferentialD;",
+ characters: "\u{2146}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleLeftTee;") {
+ return Some(CharRef {
+ name: "oubleLeftTee;",
+ characters: "\u{2ae4}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleUpArrow;") {
+ return Some(CharRef {
+ name: "oubleUpArrow;",
+ characters: "\u{21d1}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTeeVector;") {
+ return Some(CharRef {
+ name: "eftTeeVector;",
+ characters: "\u{295a}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftVectorBar;") {
+ return Some(CharRef {
+ name: "eftVectorBar;",
+ characters: "\u{2952}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essFullEqual;") {
+ return Some(CharRef {
+ name: "essFullEqual;",
+ characters: "\u{2266}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongLeftArrow;") {
+ return Some(CharRef {
+ name: "ongLeftArrow;",
+ characters: "\u{27f5}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ongleftarrow;") {
+ return Some(CharRef {
+ name: "ongleftarrow;",
+ characters: "\u{27f8}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otEqualTilde;") {
+ return Some(CharRef {
+ name: "otEqualTilde;",
+ characters: "\u{2242}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otTildeEqual;") {
+ return Some(CharRef {
+ name: "otTildeEqual;",
+ characters: "\u{2244}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otTildeTilde;") {
+ return Some(CharRef {
+ name: "otTildeTilde;",
+ characters: "\u{2249}",
+ });
+ }
+
+ if first_char == 'P' && try_read("oincareplane;") {
+ return Some(CharRef {
+ name: "oincareplane;",
+ characters: "\u{210c}",
+ });
+ }
+
+ if first_char == 'P' && try_read("recedesEqual;") {
+ return Some(CharRef {
+ name: "recedesEqual;",
+ characters: "\u{2aaf}",
+ });
+ }
+
+ if first_char == 'P' && try_read("recedesTilde;") {
+ return Some(CharRef {
+ name: "recedesTilde;",
+ characters: "\u{227e}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightArrowBar;") {
+ return Some(CharRef {
+ name: "ightArrowBar;",
+ characters: "\u{21e5}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTeeArrow;") {
+ return Some(CharRef {
+ name: "ightTeeArrow;",
+ characters: "\u{21a6}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTriangle;") {
+ return Some(CharRef {
+ name: "ightTriangle;",
+ characters: "\u{22b3}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightUpVector;") {
+ return Some(CharRef {
+ name: "ightUpVector;",
+ characters: "\u{21be}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ucceedsEqual;") {
+ return Some(CharRef {
+ name: "ucceedsEqual;",
+ characters: "\u{2ab0}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ucceedsTilde;") {
+ return Some(CharRef {
+ name: "ucceedsTilde;",
+ characters: "\u{227f}",
+ });
+ }
+
+ if first_char == 'S' && try_read("upersetEqual;") {
+ return Some(CharRef {
+ name: "upersetEqual;",
+ characters: "\u{2287}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pEquilibrium;") {
+ return Some(CharRef {
+ name: "pEquilibrium;",
+ characters: "\u{296e}",
+ });
+ }
+
+ if first_char == 'V' && try_read("erticalTilde;") {
+ return Some(CharRef {
+ name: "erticalTilde;",
+ characters: "\u{2240}",
+ });
+ }
+
+ if first_char == 'V' && try_read("eryThinSpace;") {
+ return Some(CharRef {
+ name: "eryThinSpace;",
+ characters: "\u{200a}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igtriangleup;") {
+ return Some(CharRef {
+ name: "igtriangleup;",
+ characters: "\u{25b3}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacktriangle;") {
+ return Some(CharRef {
+ name: "lacktriangle;",
+ characters: "\u{25b4}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ivideontimes;") {
+ return Some(CharRef {
+ name: "ivideontimes;",
+ characters: "\u{22c7}",
+ });
+ }
+
+ if first_char == 'f' && try_read("allingdotseq;") {
+ return Some(CharRef {
+ name: "allingdotseq;",
+ characters: "\u{2252}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ookleftarrow;") {
+ return Some(CharRef {
+ name: "ookleftarrow;",
+ characters: "\u{21a9}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftarrowtail;") {
+ return Some(CharRef {
+ name: "eftarrowtail;",
+ characters: "\u{21a2}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftharpoonup;") {
+ return Some(CharRef {
+ name: "eftharpoonup;",
+ characters: "\u{21bc}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ongleftarrow;") {
+ return Some(CharRef {
+ name: "ongleftarrow;",
+ characters: "\u{27f5}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ooparrowleft;") {
+ return Some(CharRef {
+ name: "ooparrowleft;",
+ characters: "\u{21ab}",
+ });
+ }
+
+ if first_char == 'm' && try_read("easuredangle;") {
+ return Some(CharRef {
+ name: "easuredangle;",
+ characters: "\u{2221}",
+ });
+ }
+
+ if first_char == 'n' && try_read("triangleleft;") {
+ return Some(CharRef {
+ name: "triangleleft;",
+ characters: "\u{22ea}",
+ });
+ }
+
+ if first_char == 's' && try_read("hortparallel;") {
+ return Some(CharRef {
+ name: "hortparallel;",
+ characters: "\u{2225}",
+ });
+ }
+
+ if first_char == 's' && try_read("mallsetminus;") {
+ return Some(CharRef {
+ name: "mallsetminus;",
+ characters: "\u{2216}",
+ });
+ }
+
+ if first_char == 't' && try_read("riangleright;") {
+ return Some(CharRef {
+ name: "riangleright;",
+ characters: "\u{25b9}",
+ });
+ }
+
+ if first_char == 'u' && try_read("pharpoonleft;") {
+ return Some(CharRef {
+ name: "pharpoonleft;",
+ characters: "\u{21bf}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arsubsetneqq;") {
+ return Some(CharRef {
+ name: "arsubsetneqq;",
+ characters: "\u{2acb}\u{fe00}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arsupsetneqq;") {
+ return Some(CharRef {
+ name: "arsupsetneqq;",
+ characters: "\u{2acc}\u{fe00}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownArrowBar;") {
+ return Some(CharRef {
+ name: "ownArrowBar;",
+ characters: "\u{2913}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownTeeArrow;") {
+ return Some(CharRef {
+ name: "ownTeeArrow;",
+ characters: "\u{21a7}",
+ });
+ }
+
+ if first_char == 'E' && try_read("xponentialE;") {
+ return Some(CharRef {
+ name: "xponentialE;",
+ characters: "\u{2147}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterEqual;") {
+ return Some(CharRef {
+ name: "reaterEqual;",
+ characters: "\u{2265}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterTilde;") {
+ return Some(CharRef {
+ name: "reaterTilde;",
+ characters: "\u{2273}",
+ });
+ }
+
+ if first_char == 'H' && try_read("ilbertSpace;") {
+ return Some(CharRef {
+ name: "ilbertSpace;",
+ characters: "\u{210b}",
+ });
+ }
+
+ if first_char == 'H' && try_read("umpDownHump;") {
+ return Some(CharRef {
+ name: "umpDownHump;",
+ characters: "\u{224e}",
+ });
+ }
+
+ if first_char == 'I' && try_read("ntersection;") {
+ return Some(CharRef {
+ name: "ntersection;",
+ characters: "\u{22c2}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftArrowBar;") {
+ return Some(CharRef {
+ name: "eftArrowBar;",
+ characters: "\u{21e4}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTeeArrow;") {
+ return Some(CharRef {
+ name: "eftTeeArrow;",
+ characters: "\u{21a4}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTriangle;") {
+ return Some(CharRef {
+ name: "eftTriangle;",
+ characters: "\u{22b2}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftUpVector;") {
+ return Some(CharRef {
+ name: "eftUpVector;",
+ characters: "\u{21bf}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otCongruent;") {
+ return Some(CharRef {
+ name: "otCongruent;",
+ characters: "\u{2262}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otHumpEqual;") {
+ return Some(CharRef {
+ name: "otHumpEqual;",
+ characters: "\u{224f}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLessEqual;") {
+ return Some(CharRef {
+ name: "otLessEqual;",
+ characters: "\u{2270}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLessTilde;") {
+ return Some(CharRef {
+ name: "otLessTilde;",
+ characters: "\u{2274}",
+ });
+ }
+
+ if first_char == 'P' && try_read("roportional;") {
+ return Some(CharRef {
+ name: "roportional;",
+ characters: "\u{221d}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightCeiling;") {
+ return Some(CharRef {
+ name: "ightCeiling;",
+ characters: "\u{2309}",
+ });
+ }
+
+ if first_char == 'R' && try_read("oundImplies;") {
+ return Some(CharRef {
+ name: "oundImplies;",
+ characters: "\u{2970}",
+ });
+ }
+
+ if first_char == 'S' && try_read("hortUpArrow;") {
+ return Some(CharRef {
+ name: "hortUpArrow;",
+ characters: "\u{2191}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareSubset;") {
+ return Some(CharRef {
+ name: "quareSubset;",
+ characters: "\u{228f}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nderBracket;") {
+ return Some(CharRef {
+ name: "nderBracket;",
+ characters: "\u{23b5}",
+ });
+ }
+
+ if first_char == 'V' && try_read("erticalLine;") {
+ return Some(CharRef {
+ name: "erticalLine;",
+ characters: "\u{7c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacklozenge;") {
+ return Some(CharRef {
+ name: "lacklozenge;",
+ characters: "\u{29eb}",
+ });
+ }
+
+ if first_char == 'e' && try_read("xponentiale;") {
+ return Some(CharRef {
+ name: "xponentiale;",
+ characters: "\u{2147}",
+ });
+ }
+
+ if first_char == 'r' && try_read("isingdotseq;") {
+ return Some(CharRef {
+ name: "isingdotseq;",
+ characters: "\u{2253}",
+ });
+ }
+
+ if first_char == 't' && try_read("riangledown;") {
+ return Some(CharRef {
+ name: "riangledown;",
+ characters: "\u{25bf}",
+ });
+ }
+
+ if first_char == 't' && try_read("riangleleft;") {
+ return Some(CharRef {
+ name: "riangleleft;",
+ characters: "\u{25c3}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arsubsetneq;") {
+ return Some(CharRef {
+ name: "arsubsetneq;",
+ characters: "\u{228a}\u{fe00}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arsupsetneq;") {
+ return Some(CharRef {
+ name: "arsupsetneq;",
+ characters: "\u{228b}\u{fe00}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ircleMinus;") {
+ return Some(CharRef {
+ name: "ircleMinus;",
+ characters: "\u{2296}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ircleTimes;") {
+ return Some(CharRef {
+ name: "ircleTimes;",
+ characters: "\u{2297}",
+ });
+ }
+
+ if first_char == 'E' && try_read("quilibrium;") {
+ return Some(CharRef {
+ name: "quilibrium;",
+ characters: "\u{21cc}",
+ });
+ }
+
+ if first_char == 'G' && try_read("reaterLess;") {
+ return Some(CharRef {
+ name: "reaterLess;",
+ characters: "\u{2277}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftCeiling;") {
+ return Some(CharRef {
+ name: "eftCeiling;",
+ characters: "\u{2308}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essGreater;") {
+ return Some(CharRef {
+ name: "essGreater;",
+ characters: "\u{2276}",
+ });
+ }
+
+ if first_char == 'M' && try_read("ediumSpace;") {
+ return Some(CharRef {
+ name: "ediumSpace;",
+ characters: "\u{205f}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLessLess;") {
+ return Some(CharRef {
+ name: "otLessLess;",
+ characters: "\u{226a}\u{338}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otPrecedes;") {
+ return Some(CharRef {
+ name: "otPrecedes;",
+ characters: "\u{2280}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSucceeds;") {
+ return Some(CharRef {
+ name: "otSucceeds;",
+ characters: "\u{2281}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSuperset;") {
+ return Some(CharRef {
+ name: "otSuperset;",
+ characters: "\u{2283}\u{20d2}",
+ });
+ }
+
+ if first_char == 'O' && try_read("verBracket;") {
+ return Some(CharRef {
+ name: "verBracket;",
+ characters: "\u{23b4}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightVector;") {
+ return Some(CharRef {
+ name: "ightVector;",
+ characters: "\u{21c0}",
+ });
+ }
+
+ if first_char == 'R' && try_read("rightarrow;") {
+ return Some(CharRef {
+ name: "rightarrow;",
+ characters: "\u{21db}",
+ });
+ }
+
+ if first_char == 'R' && try_read("uleDelayed;") {
+ return Some(CharRef {
+ name: "uleDelayed;",
+ characters: "\u{29f4}",
+ });
+ }
+
+ if first_char == 'S' && try_read("mallCircle;") {
+ return Some(CharRef {
+ name: "mallCircle;",
+ characters: "\u{2218}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quareUnion;") {
+ return Some(CharRef {
+ name: "quareUnion;",
+ characters: "\u{2294}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ubsetEqual;") {
+ return Some(CharRef {
+ name: "ubsetEqual;",
+ characters: "\u{2286}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pDownArrow;") {
+ return Some(CharRef {
+ name: "pDownArrow;",
+ characters: "\u{2195}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pdownarrow;") {
+ return Some(CharRef {
+ name: "pdownarrow;",
+ characters: "\u{21d5}",
+ });
+ }
+
+ if first_char == 'V' && try_read("erticalBar;") {
+ return Some(CharRef {
+ name: "erticalBar;",
+ characters: "\u{2223}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ackepsilon;") {
+ return Some(CharRef {
+ name: "ackepsilon;",
+ characters: "\u{3f6}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lacksquare;") {
+ return Some(CharRef {
+ name: "lacksquare;",
+ characters: "\u{25aa}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ircledcirc;") {
+ return Some(CharRef {
+ name: "ircledcirc;",
+ characters: "\u{229a}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ircleddash;") {
+ return Some(CharRef {
+ name: "ircleddash;",
+ characters: "\u{229d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urlyeqprec;") {
+ return Some(CharRef {
+ name: "urlyeqprec;",
+ characters: "\u{22de}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urlyeqsucc;") {
+ return Some(CharRef {
+ name: "urlyeqsucc;",
+ characters: "\u{22df}",
+ });
+ }
+
+ if first_char == 'd' && try_read("iamondsuit;") {
+ return Some(CharRef {
+ name: "iamondsuit;",
+ characters: "\u{2666}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qslantless;") {
+ return Some(CharRef {
+ name: "qslantless;",
+ characters: "\u{2a95}",
+ });
+ }
+
+ if first_char == 'e' && try_read("xpectation;") {
+ return Some(CharRef {
+ name: "xpectation;",
+ characters: "\u{2130}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Rightarrow;") {
+ return Some(CharRef {
+ name: "Rightarrow;",
+ characters: "\u{21cf}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rightarrow;") {
+ return Some(CharRef {
+ name: "rightarrow;",
+ characters: "\u{219b}",
+ });
+ }
+
+ if first_char == 'p' && try_read("reccurlyeq;") {
+ return Some(CharRef {
+ name: "reccurlyeq;",
+ characters: "\u{227c}",
+ });
+ }
+
+ if first_char == 'p' && try_read("recnapprox;") {
+ return Some(CharRef {
+ name: "recnapprox;",
+ characters: "\u{2ab9}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uaternions;") {
+ return Some(CharRef {
+ name: "uaternions;",
+ characters: "\u{210d}",
+ });
+ }
+
+ if first_char == 's' && try_read("traightphi;") {
+ return Some(CharRef {
+ name: "traightphi;",
+ characters: "\u{3d5}",
+ });
+ }
+
+ if first_char == 's' && try_read("ucccurlyeq;") {
+ return Some(CharRef {
+ name: "ucccurlyeq;",
+ characters: "\u{227d}",
+ });
+ }
+
+ if first_char == 's' && try_read("uccnapprox;") {
+ return Some(CharRef {
+ name: "uccnapprox;",
+ characters: "\u{2aba}",
+ });
+ }
+
+ if first_char == 't' && try_read("hickapprox;") {
+ return Some(CharRef {
+ name: "hickapprox;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 'u' && try_read("pdownarrow;") {
+ return Some(CharRef {
+ name: "pdownarrow;",
+ characters: "\u{2195}",
+ });
+ }
+
+ if first_char == 'B' && try_read("ernoullis;") {
+ return Some(CharRef {
+ name: "ernoullis;",
+ characters: "\u{212c}",
+ });
+ }
+
+ if first_char == 'C' && try_read("irclePlus;") {
+ return Some(CharRef {
+ name: "irclePlus;",
+ characters: "\u{2295}",
+ });
+ }
+
+ if first_char == 'E' && try_read("qualTilde;") {
+ return Some(CharRef {
+ name: "qualTilde;",
+ characters: "\u{2242}",
+ });
+ }
+
+ if first_char == 'F' && try_read("ouriertrf;") {
+ return Some(CharRef {
+ name: "ouriertrf;",
+ characters: "\u{2131}",
+ });
+ }
+
+ if first_char == 'I' && try_read("maginaryI;") {
+ return Some(CharRef {
+ name: "maginaryI;",
+ characters: "\u{2148}",
+ });
+ }
+
+ if first_char == 'L' && try_read("aplacetrf;") {
+ return Some(CharRef {
+ name: "aplacetrf;",
+ characters: "\u{2112}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftVector;") {
+ return Some(CharRef {
+ name: "eftVector;",
+ characters: "\u{21bc}",
+ });
+ }
+
+ if first_char == 'L' && try_read("leftarrow;") {
+ return Some(CharRef {
+ name: "leftarrow;",
+ characters: "\u{21da}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otElement;") {
+ return Some(CharRef {
+ name: "otElement;",
+ characters: "\u{2209}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otGreater;") {
+ return Some(CharRef {
+ name: "otGreater;",
+ characters: "\u{226f}",
+ });
+ }
+
+ if first_char == 'P' && try_read("roportion;") {
+ return Some(CharRef {
+ name: "roportion;",
+ characters: "\u{2237}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightArrow;") {
+ return Some(CharRef {
+ name: "ightArrow;",
+ characters: "\u{2192}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightFloor;") {
+ return Some(CharRef {
+ name: "ightFloor;",
+ characters: "\u{230b}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightarrow;") {
+ return Some(CharRef {
+ name: "ightarrow;",
+ characters: "\u{21d2}",
+ });
+ }
+
+ if first_char == 'T' && try_read("hickSpace;") {
+ return Some(CharRef {
+ name: "hickSpace;",
+ characters: "\u{205f}\u{200a}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ildeEqual;") {
+ return Some(CharRef {
+ name: "ildeEqual;",
+ characters: "\u{2243}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ildeTilde;") {
+ return Some(CharRef {
+ name: "ildeTilde;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nderBrace;") {
+ return Some(CharRef {
+ name: "nderBrace;",
+ characters: "\u{23df}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pArrowBar;") {
+ return Some(CharRef {
+ name: "pArrowBar;",
+ characters: "\u{2912}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pTeeArrow;") {
+ return Some(CharRef {
+ name: "pTeeArrow;",
+ characters: "\u{21a5}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ircledast;") {
+ return Some(CharRef {
+ name: "ircledast;",
+ characters: "\u{229b}",
+ });
+ }
+
+ if first_char == 'c' && try_read("omplement;") {
+ return Some(CharRef {
+ name: "omplement;",
+ characters: "\u{2201}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urlywedge;") {
+ return Some(CharRef {
+ name: "urlywedge;",
+ characters: "\u{22cf}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qslantgtr;") {
+ return Some(CharRef {
+ name: "qslantgtr;",
+ characters: "\u{2a96}",
+ });
+ }
+
+ if first_char == 'g' && try_read("treqqless;") {
+ return Some(CharRef {
+ name: "treqqless;",
+ characters: "\u{2a8c}",
+ });
+ }
+
+ if first_char == 'l' && try_read("essapprox;") {
+ return Some(CharRef {
+ name: "essapprox;",
+ characters: "\u{2a85}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esseqqgtr;") {
+ return Some(CharRef {
+ name: "esseqqgtr;",
+ characters: "\u{2a8b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("moustache;") {
+ return Some(CharRef {
+ name: "moustache;",
+ characters: "\u{23b0}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ongmapsto;") {
+ return Some(CharRef {
+ name: "ongmapsto;",
+ characters: "\u{27fc}",
+ });
+ }
+
+ if first_char == 'm' && try_read("apstodown;") {
+ return Some(CharRef {
+ name: "apstodown;",
+ characters: "\u{21a7}",
+ });
+ }
+
+ if first_char == 'm' && try_read("apstoleft;") {
+ return Some(CharRef {
+ name: "apstoleft;",
+ characters: "\u{21a4}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Leftarrow;") {
+ return Some(CharRef {
+ name: "Leftarrow;",
+ characters: "\u{21cd}",
+ });
+ }
+
+ if first_char == 'n' && try_read("leftarrow;") {
+ return Some(CharRef {
+ name: "leftarrow;",
+ characters: "\u{219a}",
+ });
+ }
+
+ if first_char == 'n' && try_read("subseteqq;") {
+ return Some(CharRef {
+ name: "subseteqq;",
+ characters: "\u{2ac5}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("supseteqq;") {
+ return Some(CharRef {
+ name: "supseteqq;",
+ characters: "\u{2ac6}\u{338}",
+ });
+ }
+
+ if first_char == 'p' && try_read("recapprox;") {
+ return Some(CharRef {
+ name: "recapprox;",
+ characters: "\u{2ab7}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ightarrow;") {
+ return Some(CharRef {
+ name: "ightarrow;",
+ characters: "\u{2192}",
+ });
+ }
+
+ if first_char == 'r' && try_read("moustache;") {
+ return Some(CharRef {
+ name: "moustache;",
+ characters: "\u{23b1}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsubseteq;") {
+ return Some(CharRef {
+ name: "qsubseteq;",
+ characters: "\u{2291}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsupseteq;") {
+ return Some(CharRef {
+ name: "qsupseteq;",
+ characters: "\u{2292}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubsetneqq;") {
+ return Some(CharRef {
+ name: "ubsetneqq;",
+ characters: "\u{2acb}",
+ });
+ }
+
+ if first_char == 's' && try_read("uccapprox;") {
+ return Some(CharRef {
+ name: "uccapprox;",
+ characters: "\u{2ab8}",
+ });
+ }
+
+ if first_char == 's' && try_read("upsetneqq;") {
+ return Some(CharRef {
+ name: "upsetneqq;",
+ characters: "\u{2acc}",
+ });
+ }
+
+ if first_char == 'u' && try_read("puparrows;") {
+ return Some(CharRef {
+ name: "puparrows;",
+ characters: "\u{21c8}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arepsilon;") {
+ return Some(CharRef {
+ name: "arepsilon;",
+ characters: "\u{3f5}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arnothing;") {
+ return Some(CharRef {
+ name: "arnothing;",
+ characters: "\u{2205}",
+ });
+ }
+
+ if first_char == 'B' && try_read("ackslash;") {
+ return Some(CharRef {
+ name: "ackslash;",
+ characters: "\u{2216}",
+ });
+ }
+
+ if first_char == 'C' && try_read("enterDot;") {
+ return Some(CharRef {
+ name: "enterDot;",
+ characters: "\u{b7}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ircleDot;") {
+ return Some(CharRef {
+ name: "ircleDot;",
+ characters: "\u{2299}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ongruent;") {
+ return Some(CharRef {
+ name: "ongruent;",
+ characters: "\u{2261}",
+ });
+ }
+
+ if first_char == 'C' && try_read("oproduct;") {
+ return Some(CharRef {
+ name: "oproduct;",
+ characters: "\u{2210}",
+ });
+ }
+
+ if first_char == 'D' && try_read("oubleDot;") {
+ return Some(CharRef {
+ name: "oubleDot;",
+ characters: "\u{a8}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownArrow;") {
+ return Some(CharRef {
+ name: "ownArrow;",
+ characters: "\u{2193}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownBreve;") {
+ return Some(CharRef {
+ name: "ownBreve;",
+ characters: "\u{311}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownarrow;") {
+ return Some(CharRef {
+ name: "ownarrow;",
+ characters: "\u{21d3}",
+ });
+ }
+
+ if first_char == 'H' && try_read("umpEqual;") {
+ return Some(CharRef {
+ name: "umpEqual;",
+ characters: "\u{224f}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftArrow;") {
+ return Some(CharRef {
+ name: "eftArrow;",
+ characters: "\u{2190}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftFloor;") {
+ return Some(CharRef {
+ name: "eftFloor;",
+ characters: "\u{230a}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftarrow;") {
+ return Some(CharRef {
+ name: "eftarrow;",
+ characters: "\u{21d0}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essTilde;") {
+ return Some(CharRef {
+ name: "essTilde;",
+ characters: "\u{2272}",
+ });
+ }
+
+ if first_char == 'M' && try_read("ellintrf;") {
+ return Some(CharRef {
+ name: "ellintrf;",
+ characters: "\u{2133}",
+ });
+ }
+
+ if first_char == 'M' && try_read("inusPlus;") {
+ return Some(CharRef {
+ name: "inusPlus;",
+ characters: "\u{2213}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otCupCap;") {
+ return Some(CharRef {
+ name: "otCupCap;",
+ characters: "\u{226d}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otExists;") {
+ return Some(CharRef {
+ name: "otExists;",
+ characters: "\u{2204}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otSubset;") {
+ return Some(CharRef {
+ name: "otSubset;",
+ characters: "\u{2282}\u{20d2}",
+ });
+ }
+
+ if first_char == 'O' && try_read("verBrace;") {
+ return Some(CharRef {
+ name: "verBrace;",
+ characters: "\u{23de}",
+ });
+ }
+
+ if first_char == 'P' && try_read("lusMinus;") {
+ return Some(CharRef {
+ name: "lusMinus;",
+ characters: "\u{b1}",
+ });
+ }
+
+ if first_char == 'T' && try_read("herefore;") {
+ return Some(CharRef {
+ name: "herefore;",
+ characters: "\u{2234}",
+ });
+ }
+
+ if first_char == 'T' && try_read("hinSpace;") {
+ return Some(CharRef {
+ name: "hinSpace;",
+ characters: "\u{2009}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ripleDot;") {
+ return Some(CharRef {
+ name: "ripleDot;",
+ characters: "\u{20db}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nionPlus;") {
+ return Some(CharRef {
+ name: "nionPlus;",
+ characters: "\u{228e}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ackprime;") {
+ return Some(CharRef {
+ name: "ackprime;",
+ characters: "\u{2035}",
+ });
+ }
+
+ if first_char == 'b' && try_read("acksimeq;") {
+ return Some(CharRef {
+ name: "acksimeq;",
+ characters: "\u{22cd}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igotimes;") {
+ return Some(CharRef {
+ name: "igotimes;",
+ characters: "\u{2a02}",
+ });
+ }
+
+ if first_char == 'c' && try_read("enterdot;") {
+ return Some(CharRef {
+ name: "enterdot;",
+ characters: "\u{b7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("heckmark;") {
+ return Some(CharRef {
+ name: "heckmark;",
+ characters: "\u{2713}",
+ });
+ }
+
+ if first_char == 'c' && try_read("omplexes;") {
+ return Some(CharRef {
+ name: "omplexes;",
+ characters: "\u{2102}",
+ });
+ }
+
+ if first_char == 'd' && try_read("otsquare;") {
+ return Some(CharRef {
+ name: "otsquare;",
+ characters: "\u{22a1}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ownarrow;") {
+ return Some(CharRef {
+ name: "ownarrow;",
+ characters: "\u{2193}",
+ });
+ }
+
+ if first_char == 'g' && try_read("trapprox;") {
+ return Some(CharRef {
+ name: "trapprox;",
+ characters: "\u{2a86}",
+ });
+ }
+
+ if first_char == 'g' && try_read("treqless;") {
+ return Some(CharRef {
+ name: "treqless;",
+ characters: "\u{22db}",
+ });
+ }
+
+ if first_char == 'g' && try_read("vertneqq;") {
+ return Some(CharRef {
+ name: "vertneqq;",
+ characters: "\u{2269}\u{fe00}",
+ });
+ }
+
+ if first_char == 'h' && try_read("eartsuit;") {
+ return Some(CharRef {
+ name: "eartsuit;",
+ characters: "\u{2665}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eftarrow;") {
+ return Some(CharRef {
+ name: "eftarrow;",
+ characters: "\u{2190}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esseqgtr;") {
+ return Some(CharRef {
+ name: "esseqgtr;",
+ characters: "\u{22da}",
+ });
+ }
+
+ if first_char == 'l' && try_read("vertneqq;") {
+ return Some(CharRef {
+ name: "vertneqq;",
+ characters: "\u{2268}\u{fe00}",
+ });
+ }
+
+ if first_char == 'n' && try_read("geqslant;") {
+ return Some(CharRef {
+ name: "geqslant;",
+ characters: "\u{2a7e}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("leqslant;") {
+ return Some(CharRef {
+ name: "leqslant;",
+ characters: "\u{2a7d}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("parallel;") {
+ return Some(CharRef {
+ name: "parallel;",
+ characters: "\u{2226}",
+ });
+ }
+
+ if first_char == 'n' && try_read("shortmid;") {
+ return Some(CharRef {
+ name: "shortmid;",
+ characters: "\u{2224}",
+ });
+ }
+
+ if first_char == 'n' && try_read("subseteq;") {
+ return Some(CharRef {
+ name: "subseteq;",
+ characters: "\u{2288}",
+ });
+ }
+
+ if first_char == 'n' && try_read("supseteq;") {
+ return Some(CharRef {
+ name: "supseteq;",
+ characters: "\u{2289}",
+ });
+ }
+
+ if first_char == 'p' && try_read("itchfork;") {
+ return Some(CharRef {
+ name: "itchfork;",
+ characters: "\u{22d4}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ationals;") {
+ return Some(CharRef {
+ name: "ationals;",
+ characters: "\u{211a}",
+ });
+ }
+
+ if first_char == 's' && try_read("padesuit;") {
+ return Some(CharRef {
+ name: "padesuit;",
+ characters: "\u{2660}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubseteqq;") {
+ return Some(CharRef {
+ name: "ubseteqq;",
+ characters: "\u{2ac5}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubsetneq;") {
+ return Some(CharRef {
+ name: "ubsetneq;",
+ characters: "\u{228a}",
+ });
+ }
+
+ if first_char == 's' && try_read("upseteqq;") {
+ return Some(CharRef {
+ name: "upseteqq;",
+ characters: "\u{2ac6}",
+ });
+ }
+
+ if first_char == 's' && try_read("upsetneq;") {
+ return Some(CharRef {
+ name: "upsetneq;",
+ characters: "\u{228b}",
+ });
+ }
+
+ if first_char == 't' && try_read("herefore;") {
+ return Some(CharRef {
+ name: "herefore;",
+ characters: "\u{2234}",
+ });
+ }
+
+ if first_char == 't' && try_read("riangleq;") {
+ return Some(CharRef {
+ name: "riangleq;",
+ characters: "\u{225c}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arpropto;") {
+ return Some(CharRef {
+ name: "arpropto;",
+ characters: "\u{221d}",
+ });
+ }
+
+ if first_char == 'D' && try_read("Dotrahd;") {
+ return Some(CharRef {
+ name: "Dotrahd;",
+ characters: "\u{2911}",
+ });
+ }
+
+ if first_char == 'D' && try_read("otEqual;") {
+ return Some(CharRef {
+ name: "otEqual;",
+ characters: "\u{2250}",
+ });
+ }
+
+ if first_char == 'I' && try_read("ntegral;") {
+ return Some(CharRef {
+ name: "ntegral;",
+ characters: "\u{222b}",
+ });
+ }
+
+ if first_char == 'L' && try_read("essLess;") {
+ return Some(CharRef {
+ name: "essLess;",
+ characters: "\u{2aa1}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otEqual;") {
+ return Some(CharRef {
+ name: "otEqual;",
+ characters: "\u{2260}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otTilde;") {
+ return Some(CharRef {
+ name: "otTilde;",
+ characters: "\u{2241}",
+ });
+ }
+
+ if first_char == 'P' && try_read("artialD;") {
+ return Some(CharRef {
+ name: "artialD;",
+ characters: "\u{2202}",
+ });
+ }
+
+ if first_char == 'P' && try_read("recedes;") {
+ return Some(CharRef {
+ name: "recedes;",
+ characters: "\u{227a}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ightTee;") {
+ return Some(CharRef {
+ name: "ightTee;",
+ characters: "\u{22a2}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ucceeds;") {
+ return Some(CharRef {
+ name: "ucceeds;",
+ characters: "\u{227b}",
+ });
+ }
+
+ if first_char == 'S' && try_read("uchThat;") {
+ return Some(CharRef {
+ name: "uchThat;",
+ characters: "\u{220b}",
+ });
+ }
+
+ if first_char == 'S' && try_read("uperset;") {
+ return Some(CharRef {
+ name: "uperset;",
+ characters: "\u{2283}",
+ });
+ }
+
+ if first_char == 'U' && try_read("arrocir;") {
+ return Some(CharRef {
+ name: "arrocir;",
+ characters: "\u{2949}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nderBar;") {
+ return Some(CharRef {
+ name: "nderBar;",
+ characters: "\u{5f}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ndslope;") {
+ return Some(CharRef {
+ name: "ndslope;",
+ characters: "\u{2a58}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdaa;") {
+ return Some(CharRef {
+ name: "ngmsdaa;",
+ characters: "\u{29a8}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdab;") {
+ return Some(CharRef {
+ name: "ngmsdab;",
+ characters: "\u{29a9}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdac;") {
+ return Some(CharRef {
+ name: "ngmsdac;",
+ characters: "\u{29aa}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdad;") {
+ return Some(CharRef {
+ name: "ngmsdad;",
+ characters: "\u{29ab}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdae;") {
+ return Some(CharRef {
+ name: "ngmsdae;",
+ characters: "\u{29ac}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdaf;") {
+ return Some(CharRef {
+ name: "ngmsdaf;",
+ characters: "\u{29ad}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdag;") {
+ return Some(CharRef {
+ name: "ngmsdag;",
+ characters: "\u{29ae}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsdah;") {
+ return Some(CharRef {
+ name: "ngmsdah;",
+ characters: "\u{29af}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngrtvbd;") {
+ return Some(CharRef {
+ name: "ngrtvbd;",
+ characters: "\u{299d}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pproxeq;") {
+ return Some(CharRef {
+ name: "pproxeq;",
+ characters: "\u{224a}",
+ });
+ }
+
+ if first_char == 'a' && try_read("wconint;") {
+ return Some(CharRef {
+ name: "wconint;",
+ characters: "\u{2233}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ackcong;") {
+ return Some(CharRef {
+ name: "ackcong;",
+ characters: "\u{224c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("arwedge;") {
+ return Some(CharRef {
+ name: "arwedge;",
+ characters: "\u{2305}",
+ });
+ }
+
+ if first_char == 'b' && try_read("brktbrk;") {
+ return Some(CharRef {
+ name: "brktbrk;",
+ characters: "\u{23b6}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igoplus;") {
+ return Some(CharRef {
+ name: "igoplus;",
+ characters: "\u{2a01}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igsqcup;") {
+ return Some(CharRef {
+ name: "igsqcup;",
+ characters: "\u{2a06}",
+ });
+ }
+
+ if first_char == 'b' && try_read("iguplus;") {
+ return Some(CharRef {
+ name: "iguplus;",
+ characters: "\u{2a04}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igwedge;") {
+ return Some(CharRef {
+ name: "igwedge;",
+ characters: "\u{22c0}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxminus;") {
+ return Some(CharRef {
+ name: "oxminus;",
+ characters: "\u{229f}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxtimes;") {
+ return Some(CharRef {
+ name: "oxtimes;",
+ characters: "\u{22a0}",
+ });
+ }
+
+ if first_char == 'b' && try_read("solhsub;") {
+ return Some(CharRef {
+ name: "solhsub;",
+ characters: "\u{27c8}",
+ });
+ }
+
+ if first_char == 'c' && try_read("apbrcup;") {
+ return Some(CharRef {
+ name: "apbrcup;",
+ characters: "\u{2a49}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ircledR;") {
+ return Some(CharRef {
+ name: "ircledR;",
+ characters: "\u{ae}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ircledS;") {
+ return Some(CharRef {
+ name: "ircledS;",
+ characters: "\u{24c8}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irfnint;") {
+ return Some(CharRef {
+ name: "irfnint;",
+ characters: "\u{2a10}",
+ });
+ }
+
+ if first_char == 'c' && try_read("lubsuit;") {
+ return Some(CharRef {
+ name: "lubsuit;",
+ characters: "\u{2663}",
+ });
+ }
+
+ if first_char == 'c' && try_read("upbrcap;") {
+ return Some(CharRef {
+ name: "upbrcap;",
+ characters: "\u{2a48}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urlyvee;") {
+ return Some(CharRef {
+ name: "urlyvee;",
+ characters: "\u{22ce}",
+ });
+ }
+
+ if first_char == 'c' && try_read("wconint;") {
+ return Some(CharRef {
+ name: "wconint;",
+ characters: "\u{2232}",
+ });
+ }
+
+ if first_char == 'd' && try_read("oteqdot;") {
+ return Some(CharRef {
+ name: "oteqdot;",
+ characters: "\u{2251}",
+ });
+ }
+
+ if first_char == 'd' && try_read("otminus;") {
+ return Some(CharRef {
+ name: "otminus;",
+ characters: "\u{2238}",
+ });
+ }
+
+ if first_char == 'd' && try_read("rbkarow;") {
+ return Some(CharRef {
+ name: "rbkarow;",
+ characters: "\u{2910}",
+ });
+ }
+
+ if first_char == 'd' && try_read("zigrarr;") {
+ return Some(CharRef {
+ name: "zigrarr;",
+ characters: "\u{27ff}",
+ });
+ }
+
+ if first_char == 'e' && try_read("linters;") {
+ return Some(CharRef {
+ name: "linters;",
+ characters: "\u{23e7}",
+ });
+ }
+
+ if first_char == 'e' && try_read("mptyset;") {
+ return Some(CharRef {
+ name: "mptyset;",
+ characters: "\u{2205}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qvparsl;") {
+ return Some(CharRef {
+ name: "qvparsl;",
+ characters: "\u{29e5}",
+ });
+ }
+
+ if first_char == 'f' && try_read("partint;") {
+ return Some(CharRef {
+ name: "partint;",
+ characters: "\u{2a0d}",
+ });
+ }
+
+ if first_char == 'g' && try_read("eqslant;") {
+ return Some(CharRef {
+ name: "eqslant;",
+ characters: "\u{2a7e}",
+ });
+ }
+
+ if first_char == 'g' && try_read("esdotol;") {
+ return Some(CharRef {
+ name: "esdotol;",
+ characters: "\u{2a84}",
+ });
+ }
+
+ if first_char == 'g' && try_read("napprox;") {
+ return Some(CharRef {
+ name: "napprox;",
+ characters: "\u{2a8a}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ksearow;") {
+ return Some(CharRef {
+ name: "ksearow;",
+ characters: "\u{2925}",
+ });
+ }
+
+ if first_char == 'h' && try_read("kswarow;") {
+ return Some(CharRef {
+ name: "kswarow;",
+ characters: "\u{2926}",
+ });
+ }
+
+ if first_char == 'i' && try_read("magline;") {
+ return Some(CharRef {
+ name: "magline;",
+ characters: "\u{2110}",
+ });
+ }
+
+ if first_char == 'i' && try_read("magpart;") {
+ return Some(CharRef {
+ name: "magpart;",
+ characters: "\u{2111}",
+ });
+ }
+
+ if first_char == 'i' && try_read("nfintie;") {
+ return Some(CharRef {
+ name: "nfintie;",
+ characters: "\u{29dd}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ntegers;") {
+ return Some(CharRef {
+ name: "ntegers;",
+ characters: "\u{2124}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ntercal;") {
+ return Some(CharRef {
+ name: "ntercal;",
+ characters: "\u{22ba}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ntlarhk;") {
+ return Some(CharRef {
+ name: "ntlarhk;",
+ characters: "\u{2a17}",
+ });
+ }
+
+ if first_char == 'l' && try_read("aemptyv;") {
+ return Some(CharRef {
+ name: "aemptyv;",
+ characters: "\u{29b4}",
+ });
+ }
+
+ if first_char == 'l' && try_read("drushar;") {
+ return Some(CharRef {
+ name: "drushar;",
+ characters: "\u{294b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eqslant;") {
+ return Some(CharRef {
+ name: "eqslant;",
+ characters: "\u{2a7d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esdotor;") {
+ return Some(CharRef {
+ name: "esdotor;",
+ characters: "\u{2a83}",
+ });
+ }
+
+ if first_char == 'l' && try_read("lcorner;") {
+ return Some(CharRef {
+ name: "lcorner;",
+ characters: "\u{231e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("napprox;") {
+ return Some(CharRef {
+ name: "napprox;",
+ characters: "\u{2a89}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rcorner;") {
+ return Some(CharRef {
+ name: "rcorner;",
+ characters: "\u{231f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("urdshar;") {
+ return Some(CharRef {
+ name: "urdshar;",
+ characters: "\u{294a}",
+ });
+ }
+
+ if first_char == 'm' && try_read("apstoup;") {
+ return Some(CharRef {
+ name: "apstoup;",
+ characters: "\u{21a5}",
+ });
+ }
+
+ if first_char == 'm' && try_read("ultimap;") {
+ return Some(CharRef {
+ name: "ultimap;",
+ characters: "\u{22b8}",
+ });
+ }
+
+ if first_char == 'n' && try_read("aturals;") {
+ return Some(CharRef {
+ name: "aturals;",
+ characters: "\u{2115}",
+ });
+ }
+
+ if first_char == 'n' && try_read("congdot;") {
+ return Some(CharRef {
+ name: "congdot;",
+ characters: "\u{2a6d}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otindot;") {
+ return Some(CharRef {
+ name: "otindot;",
+ characters: "\u{22f5}\u{338}",
+ });
+ }
+
+ if first_char == 'o' && try_read("timesas;") {
+ return Some(CharRef {
+ name: "timesas;",
+ characters: "\u{2a36}",
+ });
+ }
+
+ if first_char == 'p' && try_read("arallel;") {
+ return Some(CharRef {
+ name: "arallel;",
+ characters: "\u{2225}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusacir;") {
+ return Some(CharRef {
+ name: "lusacir;",
+ characters: "\u{2a23}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ointint;") {
+ return Some(CharRef {
+ name: "ointint;",
+ characters: "\u{2a15}",
+ });
+ }
+
+ if first_char == 'p' && try_read("recneqq;") {
+ return Some(CharRef {
+ name: "recneqq;",
+ characters: "\u{2ab5}",
+ });
+ }
+
+ if first_char == 'p' && try_read("recnsim;") {
+ return Some(CharRef {
+ name: "recnsim;",
+ characters: "\u{22e8}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rofalar;") {
+ return Some(CharRef {
+ name: "rofalar;",
+ characters: "\u{232e}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rofline;") {
+ return Some(CharRef {
+ name: "rofline;",
+ characters: "\u{2312}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rofsurf;") {
+ return Some(CharRef {
+ name: "rofsurf;",
+ characters: "\u{2313}",
+ });
+ }
+
+ if first_char == 'r' && try_read("aemptyv;") {
+ return Some(CharRef {
+ name: "aemptyv;",
+ characters: "\u{29b3}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ealpart;") {
+ return Some(CharRef {
+ name: "ealpart;",
+ characters: "\u{211c}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ppolint;") {
+ return Some(CharRef {
+ name: "ppolint;",
+ characters: "\u{2a12}",
+ });
+ }
+
+ if first_char == 'r' && try_read("triltri;") {
+ return Some(CharRef {
+ name: "triltri;",
+ characters: "\u{29ce}",
+ });
+ }
+
+ if first_char == 's' && try_read("cpolint;") {
+ return Some(CharRef {
+ name: "cpolint;",
+ characters: "\u{2a13}",
+ });
+ }
+
+ if first_char == 's' && try_read("etminus;") {
+ return Some(CharRef {
+ name: "etminus;",
+ characters: "\u{2216}",
+ });
+ }
+
+ if first_char == 's' && try_read("hortmid;") {
+ return Some(CharRef {
+ name: "hortmid;",
+ characters: "\u{2223}",
+ });
+ }
+
+ if first_char == 's' && try_read("meparsl;") {
+ return Some(CharRef {
+ name: "meparsl;",
+ characters: "\u{29e4}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsubset;") {
+ return Some(CharRef {
+ name: "qsubset;",
+ characters: "\u{228f}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsupset;") {
+ return Some(CharRef {
+ name: "qsupset;",
+ characters: "\u{2290}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubseteq;") {
+ return Some(CharRef {
+ name: "ubseteq;",
+ characters: "\u{2286}",
+ });
+ }
+
+ if first_char == 's' && try_read("uccneqq;") {
+ return Some(CharRef {
+ name: "uccneqq;",
+ characters: "\u{2ab6}",
+ });
+ }
+
+ if first_char == 's' && try_read("uccnsim;") {
+ return Some(CharRef {
+ name: "uccnsim;",
+ characters: "\u{22e9}",
+ });
+ }
+
+ if first_char == 's' && try_read("upseteq;") {
+ return Some(CharRef {
+ name: "upseteq;",
+ characters: "\u{2287}",
+ });
+ }
+
+ if first_char == 't' && try_read("hetasym;") {
+ return Some(CharRef {
+ name: "hetasym;",
+ characters: "\u{3d1}",
+ });
+ }
+
+ if first_char == 't' && try_read("hicksim;") {
+ return Some(CharRef {
+ name: "hicksim;",
+ characters: "\u{223c}",
+ });
+ }
+
+ if first_char == 't' && try_read("imesbar;") {
+ return Some(CharRef {
+ name: "imesbar;",
+ characters: "\u{2a31}",
+ });
+ }
+
+ if first_char == 't' && try_read("riangle;") {
+ return Some(CharRef {
+ name: "riangle;",
+ characters: "\u{25b5}",
+ });
+ }
+
+ if first_char == 't' && try_read("riminus;") {
+ return Some(CharRef {
+ name: "riminus;",
+ characters: "\u{2a3a}",
+ });
+ }
+
+ if first_char == 't' && try_read("rpezium;") {
+ return Some(CharRef {
+ name: "rpezium;",
+ characters: "\u{23e2}",
+ });
+ }
+
+ if first_char == 'u' && try_read("lcorner;") {
+ return Some(CharRef {
+ name: "lcorner;",
+ characters: "\u{231c}",
+ });
+ }
+
+ if first_char == 'u' && try_read("rcorner;") {
+ return Some(CharRef {
+ name: "rcorner;",
+ characters: "\u{231d}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arkappa;") {
+ return Some(CharRef {
+ name: "arkappa;",
+ characters: "\u{3f0}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arsigma;") {
+ return Some(CharRef {
+ name: "arsigma;",
+ characters: "\u{3c2}",
+ });
+ }
+
+ if first_char == 'v' && try_read("artheta;") {
+ return Some(CharRef {
+ name: "artheta;",
+ characters: "\u{3d1}",
+ });
+ }
+
+ if first_char == 'B' && try_read("ecause;") {
+ return Some(CharRef {
+ name: "ecause;",
+ characters: "\u{2235}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ayleys;") {
+ return Some(CharRef {
+ name: "ayleys;",
+ characters: "\u{212d}",
+ });
+ }
+
+ if first_char == 'C' && try_read("conint;") {
+ return Some(CharRef {
+ name: "conint;",
+ characters: "\u{2230}",
+ });
+ }
+
+ if first_char == 'C' && try_read("edilla;") {
+ return Some(CharRef {
+ name: "edilla;",
+ characters: "\u{b8}",
+ });
+ }
+
+ if first_char == 'D' && try_read("iamond;") {
+ return Some(CharRef {
+ name: "iamond;",
+ characters: "\u{22c4}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ownTee;") {
+ return Some(CharRef {
+ name: "ownTee;",
+ characters: "\u{22a4}",
+ });
+ }
+
+ if first_char == 'E' && try_read("lement;") {
+ return Some(CharRef {
+ name: "lement;",
+ characters: "\u{2208}",
+ });
+ }
+
+ if first_char == 'E' && try_read("psilon;") {
+ return Some(CharRef {
+ name: "psilon;",
+ characters: "\u{395}",
+ });
+ }
+
+ if first_char == 'I' && try_read("mplies;") {
+ return Some(CharRef {
+ name: "mplies;",
+ characters: "\u{21d2}",
+ });
+ }
+
+ if first_char == 'L' && try_read("eftTee;") {
+ return Some(CharRef {
+ name: "eftTee;",
+ characters: "\u{22a3}",
+ });
+ }
+
+ if first_char == 'N' && try_read("ewLine;") {
+ return Some(CharRef {
+ name: "ewLine;",
+ characters: "\u{a}",
+ });
+ }
+
+ if first_char == 'N' && try_read("oBreak;") {
+ return Some(CharRef {
+ name: "oBreak;",
+ characters: "\u{2060}",
+ });
+ }
+
+ if first_char == 'N' && try_read("otLess;") {
+ return Some(CharRef {
+ name: "otLess;",
+ characters: "\u{226e}",
+ });
+ }
+
+ if first_char == 'O' && try_read("micron;") {
+ return Some(CharRef {
+ name: "micron;",
+ characters: "\u{39f}",
+ });
+ }
+
+ if first_char == 'O' && try_read("verBar;") {
+ return Some(CharRef {
+ name: "verBar;",
+ characters: "\u{203e}",
+ });
+ }
+
+ if first_char == 'P' && try_read("roduct;") {
+ return Some(CharRef {
+ name: "roduct;",
+ characters: "\u{220f}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pArrow;") {
+ return Some(CharRef {
+ name: "pArrow;",
+ characters: "\u{2191}",
+ });
+ }
+
+ if first_char == 'U' && try_read("parrow;") {
+ return Some(CharRef {
+ name: "parrow;",
+ characters: "\u{21d1}",
+ });
+ }
+
+ if first_char == 'U' && try_read("psilon;") {
+ return Some(CharRef {
+ name: "psilon;",
+ characters: "\u{3a5}",
+ });
+ }
+
+ if first_char == 'a' && try_read("lefsym;") {
+ return Some(CharRef {
+ name: "lefsym;",
+ characters: "\u{2135}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngrtvb;") {
+ return Some(CharRef {
+ name: "ngrtvb;",
+ characters: "\u{22be}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngzarr;") {
+ return Some(CharRef {
+ name: "ngzarr;",
+ characters: "\u{237c}",
+ });
+ }
+
+ if first_char == 'a' && try_read("sympeq;") {
+ return Some(CharRef {
+ name: "sympeq;",
+ characters: "\u{224d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("acksim;") {
+ return Some(CharRef {
+ name: "acksim;",
+ characters: "\u{223d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ecause;") {
+ return Some(CharRef {
+ name: "ecause;",
+ characters: "\u{2235}",
+ });
+ }
+
+ if first_char == 'b' && try_read("emptyv;") {
+ return Some(CharRef {
+ name: "emptyv;",
+ characters: "\u{29b0}",
+ });
+ }
+
+ if first_char == 'b' && try_read("etween;") {
+ return Some(CharRef {
+ name: "etween;",
+ characters: "\u{226c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igcirc;") {
+ return Some(CharRef {
+ name: "igcirc;",
+ characters: "\u{25ef}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igodot;") {
+ return Some(CharRef {
+ name: "igodot;",
+ characters: "\u{2a00}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igstar;") {
+ return Some(CharRef {
+ name: "igstar;",
+ characters: "\u{2605}",
+ });
+ }
+
+ if first_char == 'b' && try_read("nequiv;") {
+ return Some(CharRef {
+ name: "nequiv;",
+ characters: "\u{2261}\u{20e5}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxplus;") {
+ return Some(CharRef {
+ name: "oxplus;",
+ characters: "\u{229e}",
+ });
+ }
+
+ if first_char == 'c' && try_read("cupssm;") {
+ return Some(CharRef {
+ name: "cupssm;",
+ characters: "\u{2a50}",
+ });
+ }
+
+ if first_char == 'c' && try_read("emptyv;") {
+ return Some(CharRef {
+ name: "emptyv;",
+ characters: "\u{29b2}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irscir;") {
+ return Some(CharRef {
+ name: "irscir;",
+ characters: "\u{29c2}",
+ });
+ }
+
+ if first_char == 'c' && try_read("oloneq;") {
+ return Some(CharRef {
+ name: "oloneq;",
+ characters: "\u{2254}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ongdot;") {
+ return Some(CharRef {
+ name: "ongdot;",
+ characters: "\u{2a6d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("udarrl;") {
+ return Some(CharRef {
+ name: "udarrl;",
+ characters: "\u{2938}",
+ });
+ }
+
+ if first_char == 'c' && try_read("udarrr;") {
+ return Some(CharRef {
+ name: "udarrr;",
+ characters: "\u{2935}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ularrp;") {
+ return Some(CharRef {
+ name: "ularrp;",
+ characters: "\u{293d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urarrm;") {
+ return Some(CharRef {
+ name: "urarrm;",
+ characters: "\u{293c}",
+ });
+ }
+
+ if first_char == 'd' && try_read("bkarow;") {
+ return Some(CharRef {
+ name: "bkarow;",
+ characters: "\u{290f}",
+ });
+ }
+
+ if first_char == 'd' && try_read("dagger;") {
+ return Some(CharRef {
+ name: "dagger;",
+ characters: "\u{2021}",
+ });
+ }
+
+ if first_char == 'd' && try_read("dotseq;") {
+ return Some(CharRef {
+ name: "dotseq;",
+ characters: "\u{2a77}",
+ });
+ }
+
+ if first_char == 'd' && try_read("emptyv;") {
+ return Some(CharRef {
+ name: "emptyv;",
+ characters: "\u{29b1}",
+ });
+ }
+
+ if first_char == 'd' && try_read("iamond;") {
+ return Some(CharRef {
+ name: "iamond;",
+ characters: "\u{22c4}",
+ });
+ }
+
+ if first_char == 'd' && try_read("igamma;") {
+ return Some(CharRef {
+ name: "igamma;",
+ characters: "\u{3dd}",
+ });
+ }
+
+ if first_char == 'd' && try_read("otplus;") {
+ return Some(CharRef {
+ name: "otplus;",
+ characters: "\u{2214}",
+ });
+ }
+
+ if first_char == 'd' && try_read("wangle;") {
+ return Some(CharRef {
+ name: "wangle;",
+ characters: "\u{29a6}",
+ });
+ }
+
+ if first_char == 'e' && try_read("psilon;") {
+ return Some(CharRef {
+ name: "psilon;",
+ characters: "\u{3b5}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qcolon;") {
+ return Some(CharRef {
+ name: "qcolon;",
+ characters: "\u{2255}",
+ });
+ }
+
+ if first_char == 'e' && try_read("quivDD;") {
+ return Some(CharRef {
+ name: "quivDD;",
+ characters: "\u{2a78}",
+ });
+ }
+
+ if first_char == 'g' && try_read("esdoto;") {
+ return Some(CharRef {
+ name: "esdoto;",
+ characters: "\u{2a82}",
+ });
+ }
+
+ if first_char == 'g' && try_read("tquest;") {
+ return Some(CharRef {
+ name: "tquest;",
+ characters: "\u{2a7c}",
+ });
+ }
+
+ if first_char == 'g' && try_read("trless;") {
+ return Some(CharRef {
+ name: "trless;",
+ characters: "\u{2277}",
+ });
+ }
+
+ if first_char == 'h' && try_read("arrcir;") {
+ return Some(CharRef {
+ name: "arrcir;",
+ characters: "\u{2948}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ntprod;") {
+ return Some(CharRef {
+ name: "ntprod;",
+ characters: "\u{2a3c}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sindot;") {
+ return Some(CharRef {
+ name: "sindot;",
+ characters: "\u{22f5}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrbfs;") {
+ return Some(CharRef {
+ name: "arrbfs;",
+ characters: "\u{291f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrsim;") {
+ return Some(CharRef {
+ name: "arrsim;",
+ characters: "\u{2973}",
+ });
+ }
+
+ if first_char == 'l' && try_read("brksld;") {
+ return Some(CharRef {
+ name: "brksld;",
+ characters: "\u{298f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("brkslu;") {
+ return Some(CharRef {
+ name: "brkslu;",
+ characters: "\u{298d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("drdhar;") {
+ return Some(CharRef {
+ name: "drdhar;",
+ characters: "\u{2967}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esdoto;") {
+ return Some(CharRef {
+ name: "esdoto;",
+ characters: "\u{2a81}",
+ });
+ }
+
+ if first_char == 'l' && try_read("essdot;") {
+ return Some(CharRef {
+ name: "essdot;",
+ characters: "\u{22d6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("essgtr;") {
+ return Some(CharRef {
+ name: "essgtr;",
+ characters: "\u{2276}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esssim;") {
+ return Some(CharRef {
+ name: "esssim;",
+ characters: "\u{2272}",
+ });
+ }
+
+ if first_char == 'l' && try_read("otimes;") {
+ return Some(CharRef {
+ name: "otimes;",
+ characters: "\u{2a34}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ozenge;") {
+ return Some(CharRef {
+ name: "ozenge;",
+ characters: "\u{25ca}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tquest;") {
+ return Some(CharRef {
+ name: "tquest;",
+ characters: "\u{2a7b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("uruhar;") {
+ return Some(CharRef {
+ name: "uruhar;",
+ characters: "\u{2966}",
+ });
+ }
+
+ if first_char == 'm' && try_read("altese;") {
+ return Some(CharRef {
+ name: "altese;",
+ characters: "\u{2720}",
+ });
+ }
+
+ if first_char == 'm' && try_read("inusdu;") {
+ return Some(CharRef {
+ name: "inusdu;",
+ characters: "\u{2a2a}",
+ });
+ }
+
+ if first_char == 'n' && try_read("approx;") {
+ return Some(CharRef {
+ name: "approx;",
+ characters: "\u{2249}",
+ });
+ }
+
+ if first_char == 'n' && try_read("atural;") {
+ return Some(CharRef {
+ name: "atural;",
+ characters: "\u{266e}",
+ });
+ }
+
+ if first_char == 'n' && try_read("earrow;") {
+ return Some(CharRef {
+ name: "earrow;",
+ characters: "\u{2197}",
+ });
+ }
+
+ if first_char == 'n' && try_read("exists;") {
+ return Some(CharRef {
+ name: "exists;",
+ characters: "\u{2204}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otinva;") {
+ return Some(CharRef {
+ name: "otinva;",
+ characters: "\u{2209}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otinvb;") {
+ return Some(CharRef {
+ name: "otinvb;",
+ characters: "\u{22f7}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otinvc;") {
+ return Some(CharRef {
+ name: "otinvc;",
+ characters: "\u{22f6}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otniva;") {
+ return Some(CharRef {
+ name: "otniva;",
+ characters: "\u{220c}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otnivb;") {
+ return Some(CharRef {
+ name: "otnivb;",
+ characters: "\u{22fe}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otnivc;") {
+ return Some(CharRef {
+ name: "otnivc;",
+ characters: "\u{22fd}",
+ });
+ }
+
+ if first_char == 'n' && try_read("polint;") {
+ return Some(CharRef {
+ name: "polint;",
+ characters: "\u{2a14}",
+ });
+ }
+
+ if first_char == 'n' && try_read("preceq;") {
+ return Some(CharRef {
+ name: "preceq;",
+ characters: "\u{2aaf}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sqsube;") {
+ return Some(CharRef {
+ name: "sqsube;",
+ characters: "\u{22e2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sqsupe;") {
+ return Some(CharRef {
+ name: "sqsupe;",
+ characters: "\u{22e3}",
+ });
+ }
+
+ if first_char == 'n' && try_read("subset;") {
+ return Some(CharRef {
+ name: "subset;",
+ characters: "\u{2282}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("succeq;") {
+ return Some(CharRef {
+ name: "succeq;",
+ characters: "\u{2ab0}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("supset;") {
+ return Some(CharRef {
+ name: "supset;",
+ characters: "\u{2283}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vinfin;") {
+ return Some(CharRef {
+ name: "vinfin;",
+ characters: "\u{29de}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vltrie;") {
+ return Some(CharRef {
+ name: "vltrie;",
+ characters: "\u{22b4}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vrtrie;") {
+ return Some(CharRef {
+ name: "vrtrie;",
+ characters: "\u{22b5}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("warrow;") {
+ return Some(CharRef {
+ name: "warrow;",
+ characters: "\u{2196}",
+ });
+ }
+
+ if first_char == 'o' && try_read("lcross;") {
+ return Some(CharRef {
+ name: "lcross;",
+ characters: "\u{29bb}",
+ });
+ }
+
+ if first_char == 'o' && try_read("micron;") {
+ return Some(CharRef {
+ name: "micron;",
+ characters: "\u{3bf}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rderof;") {
+ return Some(CharRef {
+ name: "rderof;",
+ characters: "\u{2134}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rslope;") {
+ return Some(CharRef {
+ name: "rslope;",
+ characters: "\u{2a57}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ertenk;") {
+ return Some(CharRef {
+ name: "ertenk;",
+ characters: "\u{2031}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lanckh;") {
+ return Some(CharRef {
+ name: "lanckh;",
+ characters: "\u{210e}",
+ });
+ }
+
+ if first_char == 'p' && try_read("luscir;") {
+ return Some(CharRef {
+ name: "luscir;",
+ characters: "\u{2a22}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lussim;") {
+ return Some(CharRef {
+ name: "lussim;",
+ characters: "\u{2a26}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lustwo;") {
+ return Some(CharRef {
+ name: "lustwo;",
+ characters: "\u{2a27}",
+ });
+ }
+
+ if first_char == 'p' && try_read("recsim;") {
+ return Some(CharRef {
+ name: "recsim;",
+ characters: "\u{227e}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uatint;") {
+ return Some(CharRef {
+ name: "uatint;",
+ characters: "\u{2a16}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uesteq;") {
+ return Some(CharRef {
+ name: "uesteq;",
+ characters: "\u{225f}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrbfs;") {
+ return Some(CharRef {
+ name: "arrbfs;",
+ characters: "\u{2920}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrsim;") {
+ return Some(CharRef {
+ name: "arrsim;",
+ characters: "\u{2974}",
+ });
+ }
+
+ if first_char == 'r' && try_read("brksld;") {
+ return Some(CharRef {
+ name: "brksld;",
+ characters: "\u{298e}",
+ });
+ }
+
+ if first_char == 'r' && try_read("brkslu;") {
+ return Some(CharRef {
+ name: "brkslu;",
+ characters: "\u{2990}",
+ });
+ }
+
+ if first_char == 'r' && try_read("dldhar;") {
+ return Some(CharRef {
+ name: "dldhar;",
+ characters: "\u{2969}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ealine;") {
+ return Some(CharRef {
+ name: "ealine;",
+ characters: "\u{211b}",
+ });
+ }
+
+ if first_char == 'r' && try_read("otimes;") {
+ return Some(CharRef {
+ name: "otimes;",
+ characters: "\u{2a35}",
+ });
+ }
+
+ if first_char == 'r' && try_read("uluhar;") {
+ return Some(CharRef {
+ name: "uluhar;",
+ characters: "\u{2968}",
+ });
+ }
+
+ if first_char == 's' && try_read("earrow;") {
+ return Some(CharRef {
+ name: "earrow;",
+ characters: "\u{2198}",
+ });
+ }
+
+ if first_char == 's' && try_read("implus;") {
+ return Some(CharRef {
+ name: "implus;",
+ characters: "\u{2a24}",
+ });
+ }
+
+ if first_char == 's' && try_read("imrarr;") {
+ return Some(CharRef {
+ name: "imrarr;",
+ characters: "\u{2972}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubedot;") {
+ return Some(CharRef {
+ name: "ubedot;",
+ characters: "\u{2ac3}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubmult;") {
+ return Some(CharRef {
+ name: "ubmult;",
+ characters: "\u{2ac1}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubplus;") {
+ return Some(CharRef {
+ name: "ubplus;",
+ characters: "\u{2abf}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubrarr;") {
+ return Some(CharRef {
+ name: "ubrarr;",
+ characters: "\u{2979}",
+ });
+ }
+
+ if first_char == 's' && try_read("uccsim;") {
+ return Some(CharRef {
+ name: "uccsim;",
+ characters: "\u{227f}",
+ });
+ }
+
+ if first_char == 's' && try_read("updsub;") {
+ return Some(CharRef {
+ name: "updsub;",
+ characters: "\u{2ad8}",
+ });
+ }
+
+ if first_char == 's' && try_read("upedot;") {
+ return Some(CharRef {
+ name: "upedot;",
+ characters: "\u{2ac4}",
+ });
+ }
+
+ if first_char == 's' && try_read("uphsol;") {
+ return Some(CharRef {
+ name: "uphsol;",
+ characters: "\u{27c9}",
+ });
+ }
+
+ if first_char == 's' && try_read("uphsub;") {
+ return Some(CharRef {
+ name: "uphsub;",
+ characters: "\u{2ad7}",
+ });
+ }
+
+ if first_char == 's' && try_read("uplarr;") {
+ return Some(CharRef {
+ name: "uplarr;",
+ characters: "\u{297b}",
+ });
+ }
+
+ if first_char == 's' && try_read("upmult;") {
+ return Some(CharRef {
+ name: "upmult;",
+ characters: "\u{2ac2}",
+ });
+ }
+
+ if first_char == 's' && try_read("upplus;") {
+ return Some(CharRef {
+ name: "upplus;",
+ characters: "\u{2ac0}",
+ });
+ }
+
+ if first_char == 's' && try_read("warrow;") {
+ return Some(CharRef {
+ name: "warrow;",
+ characters: "\u{2199}",
+ });
+ }
+
+ if first_char == 't' && try_read("opfork;") {
+ return Some(CharRef {
+ name: "opfork;",
+ characters: "\u{2ada}",
+ });
+ }
+
+ if first_char == 't' && try_read("riplus;") {
+ return Some(CharRef {
+ name: "riplus;",
+ characters: "\u{2a39}",
+ });
+ }
+
+ if first_char == 't' && try_read("ritime;") {
+ return Some(CharRef {
+ name: "ritime;",
+ characters: "\u{2a3b}",
+ });
+ }
+
+ if first_char == 'u' && try_read("parrow;") {
+ return Some(CharRef {
+ name: "parrow;",
+ characters: "\u{2191}",
+ });
+ }
+
+ if first_char == 'u' && try_read("psilon;") {
+ return Some(CharRef {
+ name: "psilon;",
+ characters: "\u{3c5}",
+ });
+ }
+
+ if first_char == 'u' && try_read("wangle;") {
+ return Some(CharRef {
+ name: "wangle;",
+ characters: "\u{29a7}",
+ });
+ }
+
+ if first_char == 'v' && try_read("zigzag;") {
+ return Some(CharRef {
+ name: "zigzag;",
+ characters: "\u{299a}",
+ });
+ }
+
+ if first_char == 'z' && try_read("igrarr;") {
+ return Some(CharRef {
+ name: "igrarr;",
+ characters: "\u{21dd}",
+ });
+ }
+
+ if first_char == 'A' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{c1}",
+ });
+ }
+
+ if first_char == 'A' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{102}",
+ });
+ }
+
+ if first_char == 'A' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{c0}",
+ });
+ }
+
+ if first_char == 'A' && try_read("ssign;") {
+ return Some(CharRef {
+ name: "ssign;",
+ characters: "\u{2254}",
+ });
+ }
+
+ if first_char == 'A' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{c3}",
+ });
+ }
+
+ if first_char == 'B' && try_read("arwed;") {
+ return Some(CharRef {
+ name: "arwed;",
+ characters: "\u{2306}",
+ });
+ }
+
+ if first_char == 'B' && try_read("umpeq;") {
+ return Some(CharRef {
+ name: "umpeq;",
+ characters: "\u{224e}",
+ });
+ }
+
+ if first_char == 'C' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{106}",
+ });
+ }
+
+ if first_char == 'C' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{10c}",
+ });
+ }
+
+ if first_char == 'C' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{c7}",
+ });
+ }
+
+ if first_char == 'C' && try_read("olone;") {
+ return Some(CharRef {
+ name: "olone;",
+ characters: "\u{2a74}",
+ });
+ }
+
+ if first_char == 'C' && try_read("onint;") {
+ return Some(CharRef {
+ name: "onint;",
+ characters: "\u{222f}",
+ });
+ }
+
+ if first_char == 'C' && try_read("upCap;") {
+ return Some(CharRef {
+ name: "upCap;",
+ characters: "\u{224d}",
+ });
+ }
+
+ if first_char == 'D' && try_read("agger;") {
+ return Some(CharRef {
+ name: "agger;",
+ characters: "\u{2021}",
+ });
+ }
+
+ if first_char == 'D' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{10e}",
+ });
+ }
+
+ if first_char == 'D' && try_read("otDot;") {
+ return Some(CharRef {
+ name: "otDot;",
+ characters: "\u{20dc}",
+ });
+ }
+
+ if first_char == 'D' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{110}",
+ });
+ }
+
+ if first_char == 'E' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{c9}",
+ });
+ }
+
+ if first_char == 'E' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{11a}",
+ });
+ }
+
+ if first_char == 'E' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{c8}",
+ });
+ }
+
+ if first_char == 'E' && try_read("xists;") {
+ return Some(CharRef {
+ name: "xists;",
+ characters: "\u{2203}",
+ });
+ }
+
+ if first_char == 'F' && try_read("orAll;") {
+ return Some(CharRef {
+ name: "orAll;",
+ characters: "\u{2200}",
+ });
+ }
+
+ if first_char == 'G' && try_read("ammad;") {
+ return Some(CharRef {
+ name: "ammad;",
+ characters: "\u{3dc}",
+ });
+ }
+
+ if first_char == 'G' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{11e}",
+ });
+ }
+
+ if first_char == 'G' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{122}",
+ });
+ }
+
+ if first_char == 'H' && try_read("ARDcy;") {
+ return Some(CharRef {
+ name: "ARDcy;",
+ characters: "\u{42a}",
+ });
+ }
+
+ if first_char == 'H' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{126}",
+ });
+ }
+
+ if first_char == 'I' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{cd}",
+ });
+ }
+
+ if first_char == 'I' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{cc}",
+ });
+ }
+
+ if first_char == 'I' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{128}",
+ });
+ }
+
+ if first_char == 'J' && try_read("sercy;") {
+ return Some(CharRef {
+ name: "sercy;",
+ characters: "\u{408}",
+ });
+ }
+
+ if first_char == 'K' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{136}",
+ });
+ }
+
+ if first_char == 'L' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{139}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ambda;") {
+ return Some(CharRef {
+ name: "ambda;",
+ characters: "\u{39b}",
+ });
+ }
+
+ if first_char == 'L' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{13d}",
+ });
+ }
+
+ if first_char == 'L' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{13b}",
+ });
+ }
+
+ if first_char == 'L' && try_read("midot;") {
+ return Some(CharRef {
+ name: "midot;",
+ characters: "\u{13f}",
+ });
+ }
+
+ if first_char == 'L' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{141}",
+ });
+ }
+
+ if first_char == 'N' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{143}",
+ });
+ }
+
+ if first_char == 'N' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{147}",
+ });
+ }
+
+ if first_char == 'N' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{145}",
+ });
+ }
+
+ if first_char == 'N' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{d1}",
+ });
+ }
+
+ if first_char == 'O' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{d3}",
+ });
+ }
+
+ if first_char == 'O' && try_read("dblac;") {
+ return Some(CharRef {
+ name: "dblac;",
+ characters: "\u{150}",
+ });
+ }
+
+ if first_char == 'O' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{d2}",
+ });
+ }
+
+ if first_char == 'O' && try_read("slash;") {
+ return Some(CharRef {
+ name: "slash;",
+ characters: "\u{d8}",
+ });
+ }
+
+ if first_char == 'O' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{d5}",
+ });
+ }
+
+ if first_char == 'O' && try_read("times;") {
+ return Some(CharRef {
+ name: "times;",
+ characters: "\u{2a37}",
+ });
+ }
+
+ if first_char == 'R' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{154}",
+ });
+ }
+
+ if first_char == 'R' && try_read("arrtl;") {
+ return Some(CharRef {
+ name: "arrtl;",
+ characters: "\u{2916}",
+ });
+ }
+
+ if first_char == 'R' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{158}",
+ });
+ }
+
+ if first_char == 'R' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{156}",
+ });
+ }
+
+ if first_char == 'S' && try_read("HCHcy;") {
+ return Some(CharRef {
+ name: "HCHcy;",
+ characters: "\u{429}",
+ });
+ }
+
+ if first_char == 'S' && try_read("OFTcy;") {
+ return Some(CharRef {
+ name: "OFTcy;",
+ characters: "\u{42c}",
+ });
+ }
+
+ if first_char == 'S' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{15a}",
+ });
+ }
+
+ if first_char == 'S' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{160}",
+ });
+ }
+
+ if first_char == 'S' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{15e}",
+ });
+ }
+
+ if first_char == 'S' && try_read("quare;") {
+ return Some(CharRef {
+ name: "quare;",
+ characters: "\u{25a1}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ubset;") {
+ return Some(CharRef {
+ name: "ubset;",
+ characters: "\u{22d0}",
+ });
+ }
+
+ if first_char == 'S' && try_read("upset;") {
+ return Some(CharRef {
+ name: "upset;",
+ characters: "\u{22d1}",
+ });
+ }
+
+ if first_char == 'T' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{164}",
+ });
+ }
+
+ if first_char == 'T' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{162}",
+ });
+ }
+
+ if first_char == 'T' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{166}",
+ });
+ }
+
+ if first_char == 'U' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{da}",
+ });
+ }
+
+ if first_char == 'U' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{16c}",
+ });
+ }
+
+ if first_char == 'U' && try_read("dblac;") {
+ return Some(CharRef {
+ name: "dblac;",
+ characters: "\u{170}",
+ });
+ }
+
+ if first_char == 'U' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{d9}",
+ });
+ }
+
+ if first_char == 'U' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{168}",
+ });
+ }
+
+ if first_char == 'V' && try_read("dashl;") {
+ return Some(CharRef {
+ name: "dashl;",
+ characters: "\u{2ae6}",
+ });
+ }
+
+ if first_char == 'V' && try_read("erbar;") {
+ return Some(CharRef {
+ name: "erbar;",
+ characters: "\u{2016}",
+ });
+ }
+
+ if first_char == 'V' && try_read("vdash;") {
+ return Some(CharRef {
+ name: "vdash;",
+ characters: "\u{22aa}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{dd}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{179}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{17d}",
+ });
+ }
+
+ if first_char == 'a' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{e1}",
+ });
+ }
+
+ if first_char == 'a' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{103}",
+ });
+ }
+
+ if first_char == 'a' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{e0}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ndand;") {
+ return Some(CharRef {
+ name: "ndand;",
+ characters: "\u{2a55}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngmsd;") {
+ return Some(CharRef {
+ name: "ngmsd;",
+ characters: "\u{2221}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngsph;") {
+ return Some(CharRef {
+ name: "ngsph;",
+ characters: "\u{2222}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pacir;") {
+ return Some(CharRef {
+ name: "pacir;",
+ characters: "\u{2a6f}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pprox;") {
+ return Some(CharRef {
+ name: "pprox;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 'a' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{e3}",
+ });
+ }
+
+ if first_char == 'b' && try_read("arvee;") {
+ return Some(CharRef {
+ name: "arvee;",
+ characters: "\u{22bd}",
+ });
+ }
+
+ if first_char == 'b' && try_read("arwed;") {
+ return Some(CharRef {
+ name: "arwed;",
+ characters: "\u{2305}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ecaus;") {
+ return Some(CharRef {
+ name: "ecaus;",
+ characters: "\u{2235}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ernou;") {
+ return Some(CharRef {
+ name: "ernou;",
+ characters: "\u{212c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igcap;") {
+ return Some(CharRef {
+ name: "igcap;",
+ characters: "\u{22c2}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igcup;") {
+ return Some(CharRef {
+ name: "igcup;",
+ characters: "\u{22c3}",
+ });
+ }
+
+ if first_char == 'b' && try_read("igvee;") {
+ return Some(CharRef {
+ name: "igvee;",
+ characters: "\u{22c1}",
+ });
+ }
+
+ if first_char == 'b' && try_read("karow;") {
+ return Some(CharRef {
+ name: "karow;",
+ characters: "\u{290d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ottom;") {
+ return Some(CharRef {
+ name: "ottom;",
+ characters: "\u{22a5}",
+ });
+ }
+
+ if first_char == 'b' && try_read("owtie;") {
+ return Some(CharRef {
+ name: "owtie;",
+ characters: "\u{22c8}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxbox;") {
+ return Some(CharRef {
+ name: "oxbox;",
+ characters: "\u{29c9}",
+ });
+ }
+
+ if first_char == 'b' && try_read("prime;") {
+ return Some(CharRef {
+ name: "prime;",
+ characters: "\u{2035}",
+ });
+ }
+
+ if first_char == 'b' && try_read("rvbar;") {
+ return Some(CharRef {
+ name: "rvbar;",
+ characters: "\u{a6}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ullet;") {
+ return Some(CharRef {
+ name: "ullet;",
+ characters: "\u{2022}",
+ });
+ }
+
+ if first_char == 'b' && try_read("umpeq;") {
+ return Some(CharRef {
+ name: "umpeq;",
+ characters: "\u{224f}",
+ });
+ }
+
+ if first_char == 'c' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{107}",
+ });
+ }
+
+ if first_char == 'c' && try_read("apand;") {
+ return Some(CharRef {
+ name: "apand;",
+ characters: "\u{2a44}",
+ });
+ }
+
+ if first_char == 'c' && try_read("apcap;") {
+ return Some(CharRef {
+ name: "apcap;",
+ characters: "\u{2a4b}",
+ });
+ }
+
+ if first_char == 'c' && try_read("apcup;") {
+ return Some(CharRef {
+ name: "apcup;",
+ characters: "\u{2a47}",
+ });
+ }
+
+ if first_char == 'c' && try_read("apdot;") {
+ return Some(CharRef {
+ name: "apdot;",
+ characters: "\u{2a40}",
+ });
+ }
+
+ if first_char == 'c' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{10d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{e7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irceq;") {
+ return Some(CharRef {
+ name: "irceq;",
+ characters: "\u{2257}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irmid;") {
+ return Some(CharRef {
+ name: "irmid;",
+ characters: "\u{2aef}",
+ });
+ }
+
+ if first_char == 'c' && try_read("olone;") {
+ return Some(CharRef {
+ name: "olone;",
+ characters: "\u{2254}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ommat;") {
+ return Some(CharRef {
+ name: "ommat;",
+ characters: "\u{40}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ompfn;") {
+ return Some(CharRef {
+ name: "ompfn;",
+ characters: "\u{2218}",
+ });
+ }
+
+ if first_char == 'c' && try_read("onint;") {
+ return Some(CharRef {
+ name: "onint;",
+ characters: "\u{222e}",
+ });
+ }
+
+ if first_char == 'c' && try_read("oprod;") {
+ return Some(CharRef {
+ name: "oprod;",
+ characters: "\u{2210}",
+ });
+ }
+
+ if first_char == 'c' && try_read("opysr;") {
+ return Some(CharRef {
+ name: "opysr;",
+ characters: "\u{2117}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ularr;") {
+ return Some(CharRef {
+ name: "ularr;",
+ characters: "\u{21b6}",
+ });
+ }
+
+ if first_char == 'c' && try_read("upcap;") {
+ return Some(CharRef {
+ name: "upcap;",
+ characters: "\u{2a46}",
+ });
+ }
+
+ if first_char == 'c' && try_read("upcup;") {
+ return Some(CharRef {
+ name: "upcup;",
+ characters: "\u{2a4a}",
+ });
+ }
+
+ if first_char == 'c' && try_read("updot;") {
+ return Some(CharRef {
+ name: "updot;",
+ characters: "\u{228d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urarr;") {
+ return Some(CharRef {
+ name: "urarr;",
+ characters: "\u{21b7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urren;") {
+ return Some(CharRef {
+ name: "urren;",
+ characters: "\u{a4}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ylcty;") {
+ return Some(CharRef {
+ name: "ylcty;",
+ characters: "\u{232d}",
+ });
+ }
+
+ if first_char == 'd' && try_read("agger;") {
+ return Some(CharRef {
+ name: "agger;",
+ characters: "\u{2020}",
+ });
+ }
+
+ if first_char == 'd' && try_read("aleth;") {
+ return Some(CharRef {
+ name: "aleth;",
+ characters: "\u{2138}",
+ });
+ }
+
+ if first_char == 'd' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{10f}",
+ });
+ }
+
+ if first_char == 'd' && try_read("fisht;") {
+ return Some(CharRef {
+ name: "fisht;",
+ characters: "\u{297f}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ivide;") {
+ return Some(CharRef {
+ name: "ivide;",
+ characters: "\u{f7}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ivonx;") {
+ return Some(CharRef {
+ name: "ivonx;",
+ characters: "\u{22c7}",
+ });
+ }
+
+ if first_char == 'd' && try_read("lcorn;") {
+ return Some(CharRef {
+ name: "lcorn;",
+ characters: "\u{231e}",
+ });
+ }
+
+ if first_char == 'd' && try_read("lcrop;") {
+ return Some(CharRef {
+ name: "lcrop;",
+ characters: "\u{230d}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ollar;") {
+ return Some(CharRef {
+ name: "ollar;",
+ characters: "\u{24}",
+ });
+ }
+
+ if first_char == 'd' && try_read("rcorn;") {
+ return Some(CharRef {
+ name: "rcorn;",
+ characters: "\u{231f}",
+ });
+ }
+
+ if first_char == 'd' && try_read("rcrop;") {
+ return Some(CharRef {
+ name: "rcrop;",
+ characters: "\u{230c}",
+ });
+ }
+
+ if first_char == 'd' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{111}",
+ });
+ }
+
+ if first_char == 'e' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{e9}",
+ });
+ }
+
+ if first_char == 'e' && try_read("aster;") {
+ return Some(CharRef {
+ name: "aster;",
+ characters: "\u{2a6e}",
+ });
+ }
+
+ if first_char == 'e' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{11b}",
+ });
+ }
+
+ if first_char == 'e' && try_read("colon;") {
+ return Some(CharRef {
+ name: "colon;",
+ characters: "\u{2255}",
+ });
+ }
+
+ if first_char == 'e' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{e8}",
+ });
+ }
+
+ if first_char == 'e' && try_read("gsdot;") {
+ return Some(CharRef {
+ name: "gsdot;",
+ characters: "\u{2a98}",
+ });
+ }
+
+ if first_char == 'e' && try_read("lsdot;") {
+ return Some(CharRef {
+ name: "lsdot;",
+ characters: "\u{2a97}",
+ });
+ }
+
+ if first_char == 'e' && try_read("mptyv;") {
+ return Some(CharRef {
+ name: "mptyv;",
+ characters: "\u{2205}",
+ });
+ }
+
+ if first_char == 'e' && try_read("msp13;") {
+ return Some(CharRef {
+ name: "msp13;",
+ characters: "\u{2004}",
+ });
+ }
+
+ if first_char == 'e' && try_read("msp14;") {
+ return Some(CharRef {
+ name: "msp14;",
+ characters: "\u{2005}",
+ });
+ }
+
+ if first_char == 'e' && try_read("parsl;") {
+ return Some(CharRef {
+ name: "parsl;",
+ characters: "\u{29e3}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qcirc;") {
+ return Some(CharRef {
+ name: "qcirc;",
+ characters: "\u{2256}",
+ });
+ }
+
+ if first_char == 'e' && try_read("quals;") {
+ return Some(CharRef {
+ name: "quals;",
+ characters: "\u{3d}",
+ });
+ }
+
+ if first_char == 'e' && try_read("quest;") {
+ return Some(CharRef {
+ name: "quest;",
+ characters: "\u{225f}",
+ });
+ }
+
+ if first_char == 'f' && try_read("emale;") {
+ return Some(CharRef {
+ name: "emale;",
+ characters: "\u{2640}",
+ });
+ }
+
+ if first_char == 'f' && try_read("filig;") {
+ return Some(CharRef {
+ name: "filig;",
+ characters: "\u{fb03}",
+ });
+ }
+
+ if first_char == 'f' && try_read("fllig;") {
+ return Some(CharRef {
+ name: "fllig;",
+ characters: "\u{fb04}",
+ });
+ }
+
+ if first_char == 'f' && try_read("orall;") {
+ return Some(CharRef {
+ name: "orall;",
+ characters: "\u{2200}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac12;") {
+ return Some(CharRef {
+ name: "rac12;",
+ characters: "\u{bd}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac13;") {
+ return Some(CharRef {
+ name: "rac13;",
+ characters: "\u{2153}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac14;") {
+ return Some(CharRef {
+ name: "rac14;",
+ characters: "\u{bc}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac15;") {
+ return Some(CharRef {
+ name: "rac15;",
+ characters: "\u{2155}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac16;") {
+ return Some(CharRef {
+ name: "rac16;",
+ characters: "\u{2159}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac18;") {
+ return Some(CharRef {
+ name: "rac18;",
+ characters: "\u{215b}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac23;") {
+ return Some(CharRef {
+ name: "rac23;",
+ characters: "\u{2154}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac25;") {
+ return Some(CharRef {
+ name: "rac25;",
+ characters: "\u{2156}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac34;") {
+ return Some(CharRef {
+ name: "rac34;",
+ characters: "\u{be}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac35;") {
+ return Some(CharRef {
+ name: "rac35;",
+ characters: "\u{2157}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac38;") {
+ return Some(CharRef {
+ name: "rac38;",
+ characters: "\u{215c}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac45;") {
+ return Some(CharRef {
+ name: "rac45;",
+ characters: "\u{2158}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac56;") {
+ return Some(CharRef {
+ name: "rac56;",
+ characters: "\u{215a}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac58;") {
+ return Some(CharRef {
+ name: "rac58;",
+ characters: "\u{215d}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac78;") {
+ return Some(CharRef {
+ name: "rac78;",
+ characters: "\u{215e}",
+ });
+ }
+
+ if first_char == 'g' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{1f5}",
+ });
+ }
+
+ if first_char == 'g' && try_read("ammad;") {
+ return Some(CharRef {
+ name: "ammad;",
+ characters: "\u{3dd}",
+ });
+ }
+
+ if first_char == 'g' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{11f}",
+ });
+ }
+
+ if first_char == 'g' && try_read("esdot;") {
+ return Some(CharRef {
+ name: "esdot;",
+ characters: "\u{2a80}",
+ });
+ }
+
+ if first_char == 'g' && try_read("esles;") {
+ return Some(CharRef {
+ name: "esles;",
+ characters: "\u{2a94}",
+ });
+ }
+
+ if first_char == 'g' && try_read("tlPar;") {
+ return Some(CharRef {
+ name: "tlPar;",
+ characters: "\u{2995}",
+ });
+ }
+
+ if first_char == 'g' && try_read("trarr;") {
+ return Some(CharRef {
+ name: "trarr;",
+ characters: "\u{2978}",
+ });
+ }
+
+ if first_char == 'g' && try_read("trdot;") {
+ return Some(CharRef {
+ name: "trdot;",
+ characters: "\u{22d7}",
+ });
+ }
+
+ if first_char == 'g' && try_read("trsim;") {
+ return Some(CharRef {
+ name: "trsim;",
+ characters: "\u{2273}",
+ });
+ }
+
+ if first_char == 'h' && try_read("airsp;") {
+ return Some(CharRef {
+ name: "airsp;",
+ characters: "\u{200a}",
+ });
+ }
+
+ if first_char == 'h' && try_read("amilt;") {
+ return Some(CharRef {
+ name: "amilt;",
+ characters: "\u{210b}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ardcy;") {
+ return Some(CharRef {
+ name: "ardcy;",
+ characters: "\u{44a}",
+ });
+ }
+
+ if first_char == 'h' && try_read("earts;") {
+ return Some(CharRef {
+ name: "earts;",
+ characters: "\u{2665}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ellip;") {
+ return Some(CharRef {
+ name: "ellip;",
+ characters: "\u{2026}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ercon;") {
+ return Some(CharRef {
+ name: "ercon;",
+ characters: "\u{22b9}",
+ });
+ }
+
+ if first_char == 'h' && try_read("omtht;") {
+ return Some(CharRef {
+ name: "omtht;",
+ characters: "\u{223b}",
+ });
+ }
+
+ if first_char == 'h' && try_read("orbar;") {
+ return Some(CharRef {
+ name: "orbar;",
+ characters: "\u{2015}",
+ });
+ }
+
+ if first_char == 'h' && try_read("slash;") {
+ return Some(CharRef {
+ name: "slash;",
+ characters: "\u{210f}",
+ });
+ }
+
+ if first_char == 'h' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{127}",
+ });
+ }
+
+ if first_char == 'h' && try_read("ybull;") {
+ return Some(CharRef {
+ name: "ybull;",
+ characters: "\u{2043}",
+ });
+ }
+
+ if first_char == 'h' && try_read("yphen;") {
+ return Some(CharRef {
+ name: "yphen;",
+ characters: "\u{2010}",
+ });
+ }
+
+ if first_char == 'i' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{ed}",
+ });
+ }
+
+ if first_char == 'i' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{ec}",
+ });
+ }
+
+ if first_char == 'i' && try_read("iiint;") {
+ return Some(CharRef {
+ name: "iiint;",
+ characters: "\u{2a0c}",
+ });
+ }
+
+ if first_char == 'i' && try_read("infin;") {
+ return Some(CharRef {
+ name: "infin;",
+ characters: "\u{29dc}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ncare;") {
+ return Some(CharRef {
+ name: "ncare;",
+ characters: "\u{2105}",
+ });
+ }
+
+ if first_char == 'i' && try_read("nodot;") {
+ return Some(CharRef {
+ name: "nodot;",
+ characters: "\u{131}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ntcal;") {
+ return Some(CharRef {
+ name: "ntcal;",
+ characters: "\u{22ba}",
+ });
+ }
+
+ if first_char == 'i' && try_read("quest;") {
+ return Some(CharRef {
+ name: "quest;",
+ characters: "\u{bf}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sinsv;") {
+ return Some(CharRef {
+ name: "sinsv;",
+ characters: "\u{22f3}",
+ });
+ }
+
+ if first_char == 'i' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{129}",
+ });
+ }
+
+ if first_char == 'j' && try_read("sercy;") {
+ return Some(CharRef {
+ name: "sercy;",
+ characters: "\u{458}",
+ });
+ }
+
+ if first_char == 'k' && try_read("appav;") {
+ return Some(CharRef {
+ name: "appav;",
+ characters: "\u{3f0}",
+ });
+ }
+
+ if first_char == 'k' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{137}",
+ });
+ }
+
+ if first_char == 'k' && try_read("green;") {
+ return Some(CharRef {
+ name: "green;",
+ characters: "\u{138}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Atail;") {
+ return Some(CharRef {
+ name: "Atail;",
+ characters: "\u{291b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{13a}",
+ });
+ }
+
+ if first_char == 'l' && try_read("agran;") {
+ return Some(CharRef {
+ name: "agran;",
+ characters: "\u{2112}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ambda;") {
+ return Some(CharRef {
+ name: "ambda;",
+ characters: "\u{3bb}",
+ });
+ }
+
+ if first_char == 'l' && try_read("angle;") {
+ return Some(CharRef {
+ name: "angle;",
+ characters: "\u{27e8}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrfs;") {
+ return Some(CharRef {
+ name: "arrfs;",
+ characters: "\u{291d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrhk;") {
+ return Some(CharRef {
+ name: "arrhk;",
+ characters: "\u{21a9}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrlp;") {
+ return Some(CharRef {
+ name: "arrlp;",
+ characters: "\u{21ab}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrpl;") {
+ return Some(CharRef {
+ name: "arrpl;",
+ characters: "\u{2939}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrtl;") {
+ return Some(CharRef {
+ name: "arrtl;",
+ characters: "\u{21a2}",
+ });
+ }
+
+ if first_char == 'l' && try_read("atail;") {
+ return Some(CharRef {
+ name: "atail;",
+ characters: "\u{2919}",
+ });
+ }
+
+ if first_char == 'l' && try_read("brace;") {
+ return Some(CharRef {
+ name: "brace;",
+ characters: "\u{7b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("brack;") {
+ return Some(CharRef {
+ name: "brack;",
+ characters: "\u{5b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{13e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{13c}",
+ });
+ }
+
+ if first_char == 'l' && try_read("dquor;") {
+ return Some(CharRef {
+ name: "dquor;",
+ characters: "\u{201e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esdot;") {
+ return Some(CharRef {
+ name: "esdot;",
+ characters: "\u{2a7f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esges;") {
+ return Some(CharRef {
+ name: "esges;",
+ characters: "\u{2a93}",
+ });
+ }
+
+ if first_char == 'l' && try_read("fisht;") {
+ return Some(CharRef {
+ name: "fisht;",
+ characters: "\u{297c}",
+ });
+ }
+
+ if first_char == 'l' && try_read("floor;") {
+ return Some(CharRef {
+ name: "floor;",
+ characters: "\u{230a}",
+ });
+ }
+
+ if first_char == 'l' && try_read("harul;") {
+ return Some(CharRef {
+ name: "harul;",
+ characters: "\u{296a}",
+ });
+ }
+
+ if first_char == 'l' && try_read("lhard;") {
+ return Some(CharRef {
+ name: "lhard;",
+ characters: "\u{296b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("midot;") {
+ return Some(CharRef {
+ name: "midot;",
+ characters: "\u{140}",
+ });
+ }
+
+ if first_char == 'l' && try_read("moust;") {
+ return Some(CharRef {
+ name: "moust;",
+ characters: "\u{23b0}",
+ });
+ }
+
+ if first_char == 'l' && try_read("oplus;") {
+ return Some(CharRef {
+ name: "oplus;",
+ characters: "\u{2a2d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("owast;") {
+ return Some(CharRef {
+ name: "owast;",
+ characters: "\u{2217}",
+ });
+ }
+
+ if first_char == 'l' && try_read("owbar;") {
+ return Some(CharRef {
+ name: "owbar;",
+ characters: "\u{5f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("parlt;") {
+ return Some(CharRef {
+ name: "parlt;",
+ characters: "\u{2993}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rhard;") {
+ return Some(CharRef {
+ name: "rhard;",
+ characters: "\u{296d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("saquo;") {
+ return Some(CharRef {
+ name: "saquo;",
+ characters: "\u{2039}",
+ });
+ }
+
+ if first_char == 'l' && try_read("squor;") {
+ return Some(CharRef {
+ name: "squor;",
+ characters: "\u{201a}",
+ });
+ }
+
+ if first_char == 'l' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{142}",
+ });
+ }
+
+ if first_char == 'l' && try_read("three;") {
+ return Some(CharRef {
+ name: "three;",
+ characters: "\u{22cb}",
+ });
+ }
+
+ if first_char == 'l' && try_read("times;") {
+ return Some(CharRef {
+ name: "times;",
+ characters: "\u{22c9}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tlarr;") {
+ return Some(CharRef {
+ name: "tlarr;",
+ characters: "\u{2976}",
+ });
+ }
+
+ if first_char == 'l' && try_read("trPar;") {
+ return Some(CharRef {
+ name: "trPar;",
+ characters: "\u{2996}",
+ });
+ }
+
+ if first_char == 'm' && try_read("apsto;") {
+ return Some(CharRef {
+ name: "apsto;",
+ characters: "\u{21a6}",
+ });
+ }
+
+ if first_char == 'm' && try_read("arker;") {
+ return Some(CharRef {
+ name: "arker;",
+ characters: "\u{25ae}",
+ });
+ }
+
+ if first_char == 'm' && try_read("comma;") {
+ return Some(CharRef {
+ name: "comma;",
+ characters: "\u{2a29}",
+ });
+ }
+
+ if first_char == 'm' && try_read("idast;") {
+ return Some(CharRef {
+ name: "idast;",
+ characters: "\u{2a}",
+ });
+ }
+
+ if first_char == 'm' && try_read("idcir;") {
+ return Some(CharRef {
+ name: "idcir;",
+ characters: "\u{2af0}",
+ });
+ }
+
+ if first_char == 'm' && try_read("iddot;") {
+ return Some(CharRef {
+ name: "iddot;",
+ characters: "\u{b7}",
+ });
+ }
+
+ if first_char == 'm' && try_read("inusb;") {
+ return Some(CharRef {
+ name: "inusb;",
+ characters: "\u{229f}",
+ });
+ }
+
+ if first_char == 'm' && try_read("inusd;") {
+ return Some(CharRef {
+ name: "inusd;",
+ characters: "\u{2238}",
+ });
+ }
+
+ if first_char == 'm' && try_read("nplus;") {
+ return Some(CharRef {
+ name: "nplus;",
+ characters: "\u{2213}",
+ });
+ }
+
+ if first_char == 'm' && try_read("odels;") {
+ return Some(CharRef {
+ name: "odels;",
+ characters: "\u{22a7}",
+ });
+ }
+
+ if first_char == 'm' && try_read("stpos;") {
+ return Some(CharRef {
+ name: "stpos;",
+ characters: "\u{223e}",
+ });
+ }
+
+ if first_char == 'n' && try_read("VDash;") {
+ return Some(CharRef {
+ name: "VDash;",
+ characters: "\u{22af}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Vdash;") {
+ return Some(CharRef {
+ name: "Vdash;",
+ characters: "\u{22ae}",
+ });
+ }
+
+ if first_char == 'n' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{144}",
+ });
+ }
+
+ if first_char == 'n' && try_read("bumpe;") {
+ return Some(CharRef {
+ name: "bumpe;",
+ characters: "\u{224f}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{148}",
+ });
+ }
+
+ if first_char == 'n' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{146}",
+ });
+ }
+
+ if first_char == 'n' && try_read("earhk;") {
+ return Some(CharRef {
+ name: "earhk;",
+ characters: "\u{2924}",
+ });
+ }
+
+ if first_char == 'n' && try_read("equiv;") {
+ return Some(CharRef {
+ name: "equiv;",
+ characters: "\u{2262}",
+ });
+ }
+
+ if first_char == 'n' && try_read("esear;") {
+ return Some(CharRef {
+ name: "esear;",
+ characters: "\u{2928}",
+ });
+ }
+
+ if first_char == 'n' && try_read("exist;") {
+ return Some(CharRef {
+ name: "exist;",
+ characters: "\u{2204}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ltrie;") {
+ return Some(CharRef {
+ name: "ltrie;",
+ characters: "\u{22ec}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otinE;") {
+ return Some(CharRef {
+ name: "otinE;",
+ characters: "\u{22f9}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("parsl;") {
+ return Some(CharRef {
+ name: "parsl;",
+ characters: "\u{2afd}\u{20e5}",
+ });
+ }
+
+ if first_char == 'n' && try_read("prcue;") {
+ return Some(CharRef {
+ name: "prcue;",
+ characters: "\u{22e0}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rarrc;") {
+ return Some(CharRef {
+ name: "rarrc;",
+ characters: "\u{2933}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rarrw;") {
+ return Some(CharRef {
+ name: "rarrw;",
+ characters: "\u{219d}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rtrie;") {
+ return Some(CharRef {
+ name: "rtrie;",
+ characters: "\u{22ed}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sccue;") {
+ return Some(CharRef {
+ name: "sccue;",
+ characters: "\u{22e1}",
+ });
+ }
+
+ if first_char == 'n' && try_read("simeq;") {
+ return Some(CharRef {
+ name: "simeq;",
+ characters: "\u{2244}",
+ });
+ }
+
+ if first_char == 'n' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{f1}",
+ });
+ }
+
+ if first_char == 'n' && try_read("umero;") {
+ return Some(CharRef {
+ name: "umero;",
+ characters: "\u{2116}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vDash;") {
+ return Some(CharRef {
+ name: "vDash;",
+ characters: "\u{22ad}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vHarr;") {
+ return Some(CharRef {
+ name: "vHarr;",
+ characters: "\u{2904}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vdash;") {
+ return Some(CharRef {
+ name: "vdash;",
+ characters: "\u{22ac}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vlArr;") {
+ return Some(CharRef {
+ name: "vlArr;",
+ characters: "\u{2902}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vrArr;") {
+ return Some(CharRef {
+ name: "vrArr;",
+ characters: "\u{2903}",
+ });
+ }
+
+ if first_char == 'n' && try_read("warhk;") {
+ return Some(CharRef {
+ name: "warhk;",
+ characters: "\u{2923}",
+ });
+ }
+
+ if first_char == 'n' && try_read("wnear;") {
+ return Some(CharRef {
+ name: "wnear;",
+ characters: "\u{2927}",
+ });
+ }
+
+ if first_char == 'o' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{f3}",
+ });
+ }
+
+ if first_char == 'o' && try_read("dblac;") {
+ return Some(CharRef {
+ name: "dblac;",
+ characters: "\u{151}",
+ });
+ }
+
+ if first_char == 'o' && try_read("dsold;") {
+ return Some(CharRef {
+ name: "dsold;",
+ characters: "\u{29bc}",
+ });
+ }
+
+ if first_char == 'o' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{f2}",
+ });
+ }
+
+ if first_char == 'o' && try_read("minus;") {
+ return Some(CharRef {
+ name: "minus;",
+ characters: "\u{2296}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rigof;") {
+ return Some(CharRef {
+ name: "rigof;",
+ characters: "\u{22b6}",
+ });
+ }
+
+ if first_char == 'o' && try_read("slash;") {
+ return Some(CharRef {
+ name: "slash;",
+ characters: "\u{f8}",
+ });
+ }
+
+ if first_char == 'o' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{f5}",
+ });
+ }
+
+ if first_char == 'o' && try_read("times;") {
+ return Some(CharRef {
+ name: "times;",
+ characters: "\u{2297}",
+ });
+ }
+
+ if first_char == 'p' && try_read("arsim;") {
+ return Some(CharRef {
+ name: "arsim;",
+ characters: "\u{2af3}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ercnt;") {
+ return Some(CharRef {
+ name: "ercnt;",
+ characters: "\u{25}",
+ });
+ }
+
+ if first_char == 'p' && try_read("eriod;") {
+ return Some(CharRef {
+ name: "eriod;",
+ characters: "\u{2e}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ermil;") {
+ return Some(CharRef {
+ name: "ermil;",
+ characters: "\u{2030}",
+ });
+ }
+
+ if first_char == 'p' && try_read("hmmat;") {
+ return Some(CharRef {
+ name: "hmmat;",
+ characters: "\u{2133}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lanck;") {
+ return Some(CharRef {
+ name: "lanck;",
+ characters: "\u{210f}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lankv;") {
+ return Some(CharRef {
+ name: "lankv;",
+ characters: "\u{210f}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusdo;") {
+ return Some(CharRef {
+ name: "lusdo;",
+ characters: "\u{2214}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusdu;") {
+ return Some(CharRef {
+ name: "lusdu;",
+ characters: "\u{2a25}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusmn;") {
+ return Some(CharRef {
+ name: "lusmn;",
+ characters: "\u{b1}",
+ });
+ }
+
+ if first_char == 'p' && try_read("receq;") {
+ return Some(CharRef {
+ name: "receq;",
+ characters: "\u{2aaf}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rimes;") {
+ return Some(CharRef {
+ name: "rimes;",
+ characters: "\u{2119}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rnsim;") {
+ return Some(CharRef {
+ name: "rnsim;",
+ characters: "\u{22e8}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ropto;") {
+ return Some(CharRef {
+ name: "ropto;",
+ characters: "\u{221d}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rurel;") {
+ return Some(CharRef {
+ name: "rurel;",
+ characters: "\u{22b0}",
+ });
+ }
+
+ if first_char == 'p' && try_read("uncsp;") {
+ return Some(CharRef {
+ name: "uncsp;",
+ characters: "\u{2008}",
+ });
+ }
+
+ if first_char == 'q' && try_read("prime;") {
+ return Some(CharRef {
+ name: "prime;",
+ characters: "\u{2057}",
+ });
+ }
+
+ if first_char == 'r' && try_read("Atail;") {
+ return Some(CharRef {
+ name: "Atail;",
+ characters: "\u{291c}",
+ });
+ }
+
+ if first_char == 'r' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{155}",
+ });
+ }
+
+ if first_char == 'r' && try_read("angle;") {
+ return Some(CharRef {
+ name: "angle;",
+ characters: "\u{27e9}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrap;") {
+ return Some(CharRef {
+ name: "arrap;",
+ characters: "\u{2975}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrfs;") {
+ return Some(CharRef {
+ name: "arrfs;",
+ characters: "\u{291e}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrhk;") {
+ return Some(CharRef {
+ name: "arrhk;",
+ characters: "\u{21aa}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrlp;") {
+ return Some(CharRef {
+ name: "arrlp;",
+ characters: "\u{21ac}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrpl;") {
+ return Some(CharRef {
+ name: "arrpl;",
+ characters: "\u{2945}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrtl;") {
+ return Some(CharRef {
+ name: "arrtl;",
+ characters: "\u{21a3}",
+ });
+ }
+
+ if first_char == 'r' && try_read("atail;") {
+ return Some(CharRef {
+ name: "atail;",
+ characters: "\u{291a}",
+ });
+ }
+
+ if first_char == 'r' && try_read("brace;") {
+ return Some(CharRef {
+ name: "brace;",
+ characters: "\u{7d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("brack;") {
+ return Some(CharRef {
+ name: "brack;",
+ characters: "\u{5d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{159}",
+ });
+ }
+
+ if first_char == 'r' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{157}",
+ });
+ }
+
+ if first_char == 'r' && try_read("dquor;") {
+ return Some(CharRef {
+ name: "dquor;",
+ characters: "\u{201d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("fisht;") {
+ return Some(CharRef {
+ name: "fisht;",
+ characters: "\u{297d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("floor;") {
+ return Some(CharRef {
+ name: "floor;",
+ characters: "\u{230b}",
+ });
+ }
+
+ if first_char == 'r' && try_read("harul;") {
+ return Some(CharRef {
+ name: "harul;",
+ characters: "\u{296c}",
+ });
+ }
+
+ if first_char == 'r' && try_read("moust;") {
+ return Some(CharRef {
+ name: "moust;",
+ characters: "\u{23b1}",
+ });
+ }
+
+ if first_char == 'r' && try_read("oplus;") {
+ return Some(CharRef {
+ name: "oplus;",
+ characters: "\u{2a2e}",
+ });
+ }
+
+ if first_char == 'r' && try_read("pargt;") {
+ return Some(CharRef {
+ name: "pargt;",
+ characters: "\u{2994}",
+ });
+ }
+
+ if first_char == 'r' && try_read("saquo;") {
+ return Some(CharRef {
+ name: "saquo;",
+ characters: "\u{203a}",
+ });
+ }
+
+ if first_char == 'r' && try_read("squor;") {
+ return Some(CharRef {
+ name: "squor;",
+ characters: "\u{2019}",
+ });
+ }
+
+ if first_char == 'r' && try_read("three;") {
+ return Some(CharRef {
+ name: "three;",
+ characters: "\u{22cc}",
+ });
+ }
+
+ if first_char == 'r' && try_read("times;") {
+ return Some(CharRef {
+ name: "times;",
+ characters: "\u{22ca}",
+ });
+ }
+
+ if first_char == 's' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{15b}",
+ });
+ }
+
+ if first_char == 's' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{161}",
+ });
+ }
+
+ if first_char == 's' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{15f}",
+ });
+ }
+
+ if first_char == 's' && try_read("cnsim;") {
+ return Some(CharRef {
+ name: "cnsim;",
+ characters: "\u{22e9}",
+ });
+ }
+
+ if first_char == 's' && try_read("earhk;") {
+ return Some(CharRef {
+ name: "earhk;",
+ characters: "\u{2925}",
+ });
+ }
+
+ if first_char == 's' && try_read("eswar;") {
+ return Some(CharRef {
+ name: "eswar;",
+ characters: "\u{2929}",
+ });
+ }
+
+ if first_char == 's' && try_read("frown;") {
+ return Some(CharRef {
+ name: "frown;",
+ characters: "\u{2322}",
+ });
+ }
+
+ if first_char == 's' && try_read("hchcy;") {
+ return Some(CharRef {
+ name: "hchcy;",
+ characters: "\u{449}",
+ });
+ }
+
+ if first_char == 's' && try_read("igmaf;") {
+ return Some(CharRef {
+ name: "igmaf;",
+ characters: "\u{3c2}",
+ });
+ }
+
+ if first_char == 's' && try_read("igmav;") {
+ return Some(CharRef {
+ name: "igmav;",
+ characters: "\u{3c2}",
+ });
+ }
+
+ if first_char == 's' && try_read("imdot;") {
+ return Some(CharRef {
+ name: "imdot;",
+ characters: "\u{2a6a}",
+ });
+ }
+
+ if first_char == 's' && try_read("mashp;") {
+ return Some(CharRef {
+ name: "mashp;",
+ characters: "\u{2a33}",
+ });
+ }
+
+ if first_char == 's' && try_read("oftcy;") {
+ return Some(CharRef {
+ name: "oftcy;",
+ characters: "\u{44c}",
+ });
+ }
+
+ if first_char == 's' && try_read("olbar;") {
+ return Some(CharRef {
+ name: "olbar;",
+ characters: "\u{233f}",
+ });
+ }
+
+ if first_char == 's' && try_read("pades;") {
+ return Some(CharRef {
+ name: "pades;",
+ characters: "\u{2660}",
+ });
+ }
+
+ if first_char == 's' && try_read("qcaps;") {
+ return Some(CharRef {
+ name: "qcaps;",
+ characters: "\u{2293}\u{fe00}",
+ });
+ }
+
+ if first_char == 's' && try_read("qcups;") {
+ return Some(CharRef {
+ name: "qcups;",
+ characters: "\u{2294}\u{fe00}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsube;") {
+ return Some(CharRef {
+ name: "qsube;",
+ characters: "\u{2291}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsupe;") {
+ return Some(CharRef {
+ name: "qsupe;",
+ characters: "\u{2292}",
+ });
+ }
+
+ if first_char == 's' && try_read("quare;") {
+ return Some(CharRef {
+ name: "quare;",
+ characters: "\u{25a1}",
+ });
+ }
+
+ if first_char == 's' && try_read("quarf;") {
+ return Some(CharRef {
+ name: "quarf;",
+ characters: "\u{25aa}",
+ });
+ }
+
+ if first_char == 's' && try_read("setmn;") {
+ return Some(CharRef {
+ name: "setmn;",
+ characters: "\u{2216}",
+ });
+ }
+
+ if first_char == 's' && try_read("smile;") {
+ return Some(CharRef {
+ name: "smile;",
+ characters: "\u{2323}",
+ });
+ }
+
+ if first_char == 's' && try_read("starf;") {
+ return Some(CharRef {
+ name: "starf;",
+ characters: "\u{22c6}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubdot;") {
+ return Some(CharRef {
+ name: "ubdot;",
+ characters: "\u{2abd}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubset;") {
+ return Some(CharRef {
+ name: "ubset;",
+ characters: "\u{2282}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubsim;") {
+ return Some(CharRef {
+ name: "ubsim;",
+ characters: "\u{2ac7}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubsub;") {
+ return Some(CharRef {
+ name: "ubsub;",
+ characters: "\u{2ad5}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubsup;") {
+ return Some(CharRef {
+ name: "ubsup;",
+ characters: "\u{2ad3}",
+ });
+ }
+
+ if first_char == 's' && try_read("ucceq;") {
+ return Some(CharRef {
+ name: "ucceq;",
+ characters: "\u{2ab0}",
+ });
+ }
+
+ if first_char == 's' && try_read("updot;") {
+ return Some(CharRef {
+ name: "updot;",
+ characters: "\u{2abe}",
+ });
+ }
+
+ if first_char == 's' && try_read("upset;") {
+ return Some(CharRef {
+ name: "upset;",
+ characters: "\u{2283}",
+ });
+ }
+
+ if first_char == 's' && try_read("upsim;") {
+ return Some(CharRef {
+ name: "upsim;",
+ characters: "\u{2ac8}",
+ });
+ }
+
+ if first_char == 's' && try_read("upsub;") {
+ return Some(CharRef {
+ name: "upsub;",
+ characters: "\u{2ad4}",
+ });
+ }
+
+ if first_char == 's' && try_read("upsup;") {
+ return Some(CharRef {
+ name: "upsup;",
+ characters: "\u{2ad6}",
+ });
+ }
+
+ if first_char == 's' && try_read("warhk;") {
+ return Some(CharRef {
+ name: "warhk;",
+ characters: "\u{2926}",
+ });
+ }
+
+ if first_char == 's' && try_read("wnwar;") {
+ return Some(CharRef {
+ name: "wnwar;",
+ characters: "\u{292a}",
+ });
+ }
+
+ if first_char == 't' && try_read("arget;") {
+ return Some(CharRef {
+ name: "arget;",
+ characters: "\u{2316}",
+ });
+ }
+
+ if first_char == 't' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{165}",
+ });
+ }
+
+ if first_char == 't' && try_read("cedil;") {
+ return Some(CharRef {
+ name: "cedil;",
+ characters: "\u{163}",
+ });
+ }
+
+ if first_char == 't' && try_read("elrec;") {
+ return Some(CharRef {
+ name: "elrec;",
+ characters: "\u{2315}",
+ });
+ }
+
+ if first_char == 't' && try_read("here4;") {
+ return Some(CharRef {
+ name: "here4;",
+ characters: "\u{2234}",
+ });
+ }
+
+ if first_char == 't' && try_read("hetav;") {
+ return Some(CharRef {
+ name: "hetav;",
+ characters: "\u{3d1}",
+ });
+ }
+
+ if first_char == 't' && try_read("hinsp;") {
+ return Some(CharRef {
+ name: "hinsp;",
+ characters: "\u{2009}",
+ });
+ }
+
+ if first_char == 't' && try_read("hksim;") {
+ return Some(CharRef {
+ name: "hksim;",
+ characters: "\u{223c}",
+ });
+ }
+
+ if first_char == 't' && try_read("imesb;") {
+ return Some(CharRef {
+ name: "imesb;",
+ characters: "\u{22a0}",
+ });
+ }
+
+ if first_char == 't' && try_read("imesd;") {
+ return Some(CharRef {
+ name: "imesd;",
+ characters: "\u{2a30}",
+ });
+ }
+
+ if first_char == 't' && try_read("opbot;") {
+ return Some(CharRef {
+ name: "opbot;",
+ characters: "\u{2336}",
+ });
+ }
+
+ if first_char == 't' && try_read("opcir;") {
+ return Some(CharRef {
+ name: "opcir;",
+ characters: "\u{2af1}",
+ });
+ }
+
+ if first_char == 't' && try_read("prime;") {
+ return Some(CharRef {
+ name: "prime;",
+ characters: "\u{2034}",
+ });
+ }
+
+ if first_char == 't' && try_read("ridot;") {
+ return Some(CharRef {
+ name: "ridot;",
+ characters: "\u{25ec}",
+ });
+ }
+
+ if first_char == 't' && try_read("strok;") {
+ return Some(CharRef {
+ name: "strok;",
+ characters: "\u{167}",
+ });
+ }
+
+ if first_char == 'u' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{fa}",
+ });
+ }
+
+ if first_char == 'u' && try_read("breve;") {
+ return Some(CharRef {
+ name: "breve;",
+ characters: "\u{16d}",
+ });
+ }
+
+ if first_char == 'u' && try_read("dblac;") {
+ return Some(CharRef {
+ name: "dblac;",
+ characters: "\u{171}",
+ });
+ }
+
+ if first_char == 'u' && try_read("fisht;") {
+ return Some(CharRef {
+ name: "fisht;",
+ characters: "\u{297e}",
+ });
+ }
+
+ if first_char == 'u' && try_read("grave;") {
+ return Some(CharRef {
+ name: "grave;",
+ characters: "\u{f9}",
+ });
+ }
+
+ if first_char == 'u' && try_read("lcorn;") {
+ return Some(CharRef {
+ name: "lcorn;",
+ characters: "\u{231c}",
+ });
+ }
+
+ if first_char == 'u' && try_read("lcrop;") {
+ return Some(CharRef {
+ name: "lcrop;",
+ characters: "\u{230f}",
+ });
+ }
+
+ if first_char == 'u' && try_read("rcorn;") {
+ return Some(CharRef {
+ name: "rcorn;",
+ characters: "\u{231d}",
+ });
+ }
+
+ if first_char == 'u' && try_read("rcrop;") {
+ return Some(CharRef {
+ name: "rcrop;",
+ characters: "\u{230e}",
+ });
+ }
+
+ if first_char == 'u' && try_read("tilde;") {
+ return Some(CharRef {
+ name: "tilde;",
+ characters: "\u{169}",
+ });
+ }
+
+ if first_char == 'v' && try_read("angrt;") {
+ return Some(CharRef {
+ name: "angrt;",
+ characters: "\u{299c}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arphi;") {
+ return Some(CharRef {
+ name: "arphi;",
+ characters: "\u{3d5}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arrho;") {
+ return Some(CharRef {
+ name: "arrho;",
+ characters: "\u{3f1}",
+ });
+ }
+
+ if first_char == 'v' && try_read("eebar;") {
+ return Some(CharRef {
+ name: "eebar;",
+ characters: "\u{22bb}",
+ });
+ }
+
+ if first_char == 'v' && try_read("ellip;") {
+ return Some(CharRef {
+ name: "ellip;",
+ characters: "\u{22ee}",
+ });
+ }
+
+ if first_char == 'v' && try_read("erbar;") {
+ return Some(CharRef {
+ name: "erbar;",
+ characters: "\u{7c}",
+ });
+ }
+
+ if first_char == 'v' && try_read("subnE;") {
+ return Some(CharRef {
+ name: "subnE;",
+ characters: "\u{2acb}\u{fe00}",
+ });
+ }
+
+ if first_char == 'v' && try_read("subne;") {
+ return Some(CharRef {
+ name: "subne;",
+ characters: "\u{228a}\u{fe00}",
+ });
+ }
+
+ if first_char == 'v' && try_read("supnE;") {
+ return Some(CharRef {
+ name: "supnE;",
+ characters: "\u{2acc}\u{fe00}",
+ });
+ }
+
+ if first_char == 'v' && try_read("supne;") {
+ return Some(CharRef {
+ name: "supne;",
+ characters: "\u{228b}\u{fe00}",
+ });
+ }
+
+ if first_char == 'w' && try_read("edbar;") {
+ return Some(CharRef {
+ name: "edbar;",
+ characters: "\u{2a5f}",
+ });
+ }
+
+ if first_char == 'w' && try_read("edgeq;") {
+ return Some(CharRef {
+ name: "edgeq;",
+ characters: "\u{2259}",
+ });
+ }
+
+ if first_char == 'w' && try_read("eierp;") {
+ return Some(CharRef {
+ name: "eierp;",
+ characters: "\u{2118}",
+ });
+ }
+
+ if first_char == 'w' && try_read("reath;") {
+ return Some(CharRef {
+ name: "reath;",
+ characters: "\u{2240}",
+ });
+ }
+
+ if first_char == 'x' && try_read("oplus;") {
+ return Some(CharRef {
+ name: "oplus;",
+ characters: "\u{2a01}",
+ });
+ }
+
+ if first_char == 'x' && try_read("otime;") {
+ return Some(CharRef {
+ name: "otime;",
+ characters: "\u{2a02}",
+ });
+ }
+
+ if first_char == 'x' && try_read("sqcup;") {
+ return Some(CharRef {
+ name: "sqcup;",
+ characters: "\u{2a06}",
+ });
+ }
+
+ if first_char == 'x' && try_read("uplus;") {
+ return Some(CharRef {
+ name: "uplus;",
+ characters: "\u{2a04}",
+ });
+ }
+
+ if first_char == 'x' && try_read("wedge;") {
+ return Some(CharRef {
+ name: "wedge;",
+ characters: "\u{22c0}",
+ });
+ }
+
+ if first_char == 'y' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{fd}",
+ });
+ }
+
+ if first_char == 'z' && try_read("acute;") {
+ return Some(CharRef {
+ name: "acute;",
+ characters: "\u{17a}",
+ });
+ }
+
+ if first_char == 'z' && try_read("caron;") {
+ return Some(CharRef {
+ name: "caron;",
+ characters: "\u{17e}",
+ });
+ }
+
+ if first_char == 'z' && try_read("eetrf;") {
+ return Some(CharRef {
+ name: "eetrf;",
+ characters: "\u{2128}",
+ });
+ }
+
+ if first_char == 'A' && try_read("Elig;") {
+ return Some(CharRef {
+ name: "Elig;",
+ characters: "\u{c6}",
+ });
+ }
+
+ if first_char == 'A' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{c1}",
+ });
+ }
+
+ if first_char == 'A' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{c2}",
+ });
+ }
+
+ if first_char == 'A' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{c0}",
+ });
+ }
+
+ if first_char == 'A' && try_read("lpha;") {
+ return Some(CharRef {
+ name: "lpha;",
+ characters: "\u{391}",
+ });
+ }
+
+ if first_char == 'A' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{100}",
+ });
+ }
+
+ if first_char == 'A' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{104}",
+ });
+ }
+
+ if first_char == 'A' && try_read("ring;") {
+ return Some(CharRef {
+ name: "ring;",
+ characters: "\u{c5}",
+ });
+ }
+
+ if first_char == 'A' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{c3}",
+ });
+ }
+
+ if first_char == 'B' && try_read("reve;") {
+ return Some(CharRef {
+ name: "reve;",
+ characters: "\u{2d8}",
+ });
+ }
+
+ if first_char == 'C' && try_read("cedil") {
+ return Some(CharRef {
+ name: "cedil",
+ characters: "\u{c7}",
+ });
+ }
+
+ if first_char == 'C' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{108}",
+ });
+ }
+
+ if first_char == 'C' && try_read("olon;") {
+ return Some(CharRef {
+ name: "olon;",
+ characters: "\u{2237}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ross;") {
+ return Some(CharRef {
+ name: "ross;",
+ characters: "\u{2a2f}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ashv;") {
+ return Some(CharRef {
+ name: "ashv;",
+ characters: "\u{2ae4}",
+ });
+ }
+
+ if first_char == 'D' && try_read("elta;") {
+ return Some(CharRef {
+ name: "elta;",
+ characters: "\u{394}",
+ });
+ }
+
+ if first_char == 'E' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{c9}",
+ });
+ }
+
+ if first_char == 'E' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{ca}",
+ });
+ }
+
+ if first_char == 'E' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{c8}",
+ });
+ }
+
+ if first_char == 'E' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{112}",
+ });
+ }
+
+ if first_char == 'E' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{118}",
+ });
+ }
+
+ if first_char == 'E' && try_read("qual;") {
+ return Some(CharRef {
+ name: "qual;",
+ characters: "\u{2a75}",
+ });
+ }
+
+ if first_char == 'G' && try_read("amma;") {
+ return Some(CharRef {
+ name: "amma;",
+ characters: "\u{393}",
+ });
+ }
+
+ if first_char == 'G' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{11c}",
+ });
+ }
+
+ if first_char == 'H' && try_read("acek;") {
+ return Some(CharRef {
+ name: "acek;",
+ characters: "\u{2c7}",
+ });
+ }
+
+ if first_char == 'H' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{124}",
+ });
+ }
+
+ if first_char == 'I' && try_read("Jlig;") {
+ return Some(CharRef {
+ name: "Jlig;",
+ characters: "\u{132}",
+ });
+ }
+
+ if first_char == 'I' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{cd}",
+ });
+ }
+
+ if first_char == 'I' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{ce}",
+ });
+ }
+
+ if first_char == 'I' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{cc}",
+ });
+ }
+
+ if first_char == 'I' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{12a}",
+ });
+ }
+
+ if first_char == 'I' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{12e}",
+ });
+ }
+
+ if first_char == 'I' && try_read("ukcy;") {
+ return Some(CharRef {
+ name: "ukcy;",
+ characters: "\u{406}",
+ });
+ }
+
+ if first_char == 'J' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{134}",
+ });
+ }
+
+ if first_char == 'J' && try_read("ukcy;") {
+ return Some(CharRef {
+ name: "ukcy;",
+ characters: "\u{404}",
+ });
+ }
+
+ if first_char == 'K' && try_read("appa;") {
+ return Some(CharRef {
+ name: "appa;",
+ characters: "\u{39a}",
+ });
+ }
+
+ if first_char == 'N' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{d1}",
+ });
+ }
+
+ if first_char == 'O' && try_read("Elig;") {
+ return Some(CharRef {
+ name: "Elig;",
+ characters: "\u{152}",
+ });
+ }
+
+ if first_char == 'O' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{d3}",
+ });
+ }
+
+ if first_char == 'O' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{d4}",
+ });
+ }
+
+ if first_char == 'O' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{d2}",
+ });
+ }
+
+ if first_char == 'O' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{14c}",
+ });
+ }
+
+ if first_char == 'O' && try_read("mega;") {
+ return Some(CharRef {
+ name: "mega;",
+ characters: "\u{3a9}",
+ });
+ }
+
+ if first_char == 'O' && try_read("slash") {
+ return Some(CharRef {
+ name: "slash",
+ characters: "\u{d8}",
+ });
+ }
+
+ if first_char == 'O' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{d5}",
+ });
+ }
+
+ if first_char == 'P' && try_read("rime;") {
+ return Some(CharRef {
+ name: "rime;",
+ characters: "\u{2033}",
+ });
+ }
+
+ if first_char == 'R' && try_read("Barr;") {
+ return Some(CharRef {
+ name: "Barr;",
+ characters: "\u{2910}",
+ });
+ }
+
+ if first_char == 'S' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{15c}",
+ });
+ }
+
+ if first_char == 'S' && try_read("igma;") {
+ return Some(CharRef {
+ name: "igma;",
+ characters: "\u{3a3}",
+ });
+ }
+
+ if first_char == 'T' && try_read("HORN;") {
+ return Some(CharRef {
+ name: "HORN;",
+ characters: "\u{de}",
+ });
+ }
+
+ if first_char == 'T' && try_read("RADE;") {
+ return Some(CharRef {
+ name: "RADE;",
+ characters: "\u{2122}",
+ });
+ }
+
+ if first_char == 'T' && try_read("SHcy;") {
+ return Some(CharRef {
+ name: "SHcy;",
+ characters: "\u{40b}",
+ });
+ }
+
+ if first_char == 'T' && try_read("heta;") {
+ return Some(CharRef {
+ name: "heta;",
+ characters: "\u{398}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ilde;") {
+ return Some(CharRef {
+ name: "ilde;",
+ characters: "\u{223c}",
+ });
+ }
+
+ if first_char == 'U' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{da}",
+ });
+ }
+
+ if first_char == 'U' && try_read("brcy;") {
+ return Some(CharRef {
+ name: "brcy;",
+ characters: "\u{40e}",
+ });
+ }
+
+ if first_char == 'U' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{db}",
+ });
+ }
+
+ if first_char == 'U' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{d9}",
+ });
+ }
+
+ if first_char == 'U' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{16a}",
+ });
+ }
+
+ if first_char == 'U' && try_read("nion;") {
+ return Some(CharRef {
+ name: "nion;",
+ characters: "\u{22c3}",
+ });
+ }
+
+ if first_char == 'U' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{172}",
+ });
+ }
+
+ if first_char == 'U' && try_read("pTee;") {
+ return Some(CharRef {
+ name: "pTee;",
+ characters: "\u{22a5}",
+ });
+ }
+
+ if first_char == 'U' && try_read("ring;") {
+ return Some(CharRef {
+ name: "ring;",
+ characters: "\u{16e}",
+ });
+ }
+
+ if first_char == 'V' && try_read("Dash;") {
+ return Some(CharRef {
+ name: "Dash;",
+ characters: "\u{22ab}",
+ });
+ }
+
+ if first_char == 'V' && try_read("dash;") {
+ return Some(CharRef {
+ name: "dash;",
+ characters: "\u{22a9}",
+ });
+ }
+
+ if first_char == 'W' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{174}",
+ });
+ }
+
+ if first_char == 'W' && try_read("edge;") {
+ return Some(CharRef {
+ name: "edge;",
+ characters: "\u{22c0}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{dd}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{176}",
+ });
+ }
+
+ if first_char == 'a' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{e1}",
+ });
+ }
+
+ if first_char == 'a' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{e2}",
+ });
+ }
+
+ if first_char == 'a' && try_read("cute;") {
+ return Some(CharRef {
+ name: "cute;",
+ characters: "\u{b4}",
+ });
+ }
+
+ if first_char == 'a' && try_read("elig;") {
+ return Some(CharRef {
+ name: "elig;",
+ characters: "\u{e6}",
+ });
+ }
+
+ if first_char == 'a' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{e0}",
+ });
+ }
+
+ if first_char == 'a' && try_read("leph;") {
+ return Some(CharRef {
+ name: "leph;",
+ characters: "\u{2135}",
+ });
+ }
+
+ if first_char == 'a' && try_read("lpha;") {
+ return Some(CharRef {
+ name: "lpha;",
+ characters: "\u{3b1}",
+ });
+ }
+
+ if first_char == 'a' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{101}",
+ });
+ }
+
+ if first_char == 'a' && try_read("malg;") {
+ return Some(CharRef {
+ name: "malg;",
+ characters: "\u{2a3f}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngle;") {
+ return Some(CharRef {
+ name: "ngle;",
+ characters: "\u{2220}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngrt;") {
+ return Some(CharRef {
+ name: "ngrt;",
+ characters: "\u{221f}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ngst;") {
+ return Some(CharRef {
+ name: "ngst;",
+ characters: "\u{c5}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{105}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ring;") {
+ return Some(CharRef {
+ name: "ring;",
+ characters: "\u{e5}",
+ });
+ }
+
+ if first_char == 'a' && try_read("symp;") {
+ return Some(CharRef {
+ name: "symp;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 'a' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{e3}",
+ });
+ }
+
+ if first_char == 'a' && try_read("wint;") {
+ return Some(CharRef {
+ name: "wint;",
+ characters: "\u{2a11}",
+ });
+ }
+
+ if first_char == 'b' && try_read("cong;") {
+ return Some(CharRef {
+ name: "cong;",
+ characters: "\u{224c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("dquo;") {
+ return Some(CharRef {
+ name: "dquo;",
+ characters: "\u{201e}",
+ });
+ }
+
+ if first_char == 'b' && try_read("epsi;") {
+ return Some(CharRef {
+ name: "epsi;",
+ characters: "\u{3f6}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lank;") {
+ return Some(CharRef {
+ name: "lank;",
+ characters: "\u{2423}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lk12;") {
+ return Some(CharRef {
+ name: "lk12;",
+ characters: "\u{2592}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lk14;") {
+ return Some(CharRef {
+ name: "lk14;",
+ characters: "\u{2591}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lk34;") {
+ return Some(CharRef {
+ name: "lk34;",
+ characters: "\u{2593}",
+ });
+ }
+
+ if first_char == 'b' && try_read("lock;") {
+ return Some(CharRef {
+ name: "lock;",
+ characters: "\u{2588}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxDL;") {
+ return Some(CharRef {
+ name: "oxDL;",
+ characters: "\u{2557}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxDR;") {
+ return Some(CharRef {
+ name: "oxDR;",
+ characters: "\u{2554}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxDl;") {
+ return Some(CharRef {
+ name: "oxDl;",
+ characters: "\u{2556}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxDr;") {
+ return Some(CharRef {
+ name: "oxDr;",
+ characters: "\u{2553}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxHD;") {
+ return Some(CharRef {
+ name: "oxHD;",
+ characters: "\u{2566}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxHU;") {
+ return Some(CharRef {
+ name: "oxHU;",
+ characters: "\u{2569}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxHd;") {
+ return Some(CharRef {
+ name: "oxHd;",
+ characters: "\u{2564}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxHu;") {
+ return Some(CharRef {
+ name: "oxHu;",
+ characters: "\u{2567}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxUL;") {
+ return Some(CharRef {
+ name: "oxUL;",
+ characters: "\u{255d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxUR;") {
+ return Some(CharRef {
+ name: "oxUR;",
+ characters: "\u{255a}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxUl;") {
+ return Some(CharRef {
+ name: "oxUl;",
+ characters: "\u{255c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxUr;") {
+ return Some(CharRef {
+ name: "oxUr;",
+ characters: "\u{2559}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVH;") {
+ return Some(CharRef {
+ name: "oxVH;",
+ characters: "\u{256c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVL;") {
+ return Some(CharRef {
+ name: "oxVL;",
+ characters: "\u{2563}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVR;") {
+ return Some(CharRef {
+ name: "oxVR;",
+ characters: "\u{2560}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVh;") {
+ return Some(CharRef {
+ name: "oxVh;",
+ characters: "\u{256b}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVl;") {
+ return Some(CharRef {
+ name: "oxVl;",
+ characters: "\u{2562}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxVr;") {
+ return Some(CharRef {
+ name: "oxVr;",
+ characters: "\u{255f}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxdL;") {
+ return Some(CharRef {
+ name: "oxdL;",
+ characters: "\u{2555}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxdR;") {
+ return Some(CharRef {
+ name: "oxdR;",
+ characters: "\u{2552}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxdl;") {
+ return Some(CharRef {
+ name: "oxdl;",
+ characters: "\u{2510}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxdr;") {
+ return Some(CharRef {
+ name: "oxdr;",
+ characters: "\u{250c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxhD;") {
+ return Some(CharRef {
+ name: "oxhD;",
+ characters: "\u{2565}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxhU;") {
+ return Some(CharRef {
+ name: "oxhU;",
+ characters: "\u{2568}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxhd;") {
+ return Some(CharRef {
+ name: "oxhd;",
+ characters: "\u{252c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxhu;") {
+ return Some(CharRef {
+ name: "oxhu;",
+ characters: "\u{2534}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxuL;") {
+ return Some(CharRef {
+ name: "oxuL;",
+ characters: "\u{255b}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxuR;") {
+ return Some(CharRef {
+ name: "oxuR;",
+ characters: "\u{2558}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxul;") {
+ return Some(CharRef {
+ name: "oxul;",
+ characters: "\u{2518}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxur;") {
+ return Some(CharRef {
+ name: "oxur;",
+ characters: "\u{2514}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvH;") {
+ return Some(CharRef {
+ name: "oxvH;",
+ characters: "\u{256a}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvL;") {
+ return Some(CharRef {
+ name: "oxvL;",
+ characters: "\u{2561}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvR;") {
+ return Some(CharRef {
+ name: "oxvR;",
+ characters: "\u{255e}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvh;") {
+ return Some(CharRef {
+ name: "oxvh;",
+ characters: "\u{253c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvl;") {
+ return Some(CharRef {
+ name: "oxvl;",
+ characters: "\u{2524}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxvr;") {
+ return Some(CharRef {
+ name: "oxvr;",
+ characters: "\u{251c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("reve;") {
+ return Some(CharRef {
+ name: "reve;",
+ characters: "\u{2d8}",
+ });
+ }
+
+ if first_char == 'b' && try_read("rvbar") {
+ return Some(CharRef {
+ name: "rvbar",
+ characters: "\u{a6}",
+ });
+ }
+
+ if first_char == 'b' && try_read("semi;") {
+ return Some(CharRef {
+ name: "semi;",
+ characters: "\u{204f}",
+ });
+ }
+
+ if first_char == 'b' && try_read("sime;") {
+ return Some(CharRef {
+ name: "sime;",
+ characters: "\u{22cd}",
+ });
+ }
+
+ if first_char == 'b' && try_read("solb;") {
+ return Some(CharRef {
+ name: "solb;",
+ characters: "\u{29c5}",
+ });
+ }
+
+ if first_char == 'b' && try_read("umpE;") {
+ return Some(CharRef {
+ name: "umpE;",
+ characters: "\u{2aae}",
+ });
+ }
+
+ if first_char == 'b' && try_read("umpe;") {
+ return Some(CharRef {
+ name: "umpe;",
+ characters: "\u{224f}",
+ });
+ }
+
+ if first_char == 'c' && try_read("aret;") {
+ return Some(CharRef {
+ name: "aret;",
+ characters: "\u{2041}",
+ });
+ }
+
+ if first_char == 'c' && try_read("aron;") {
+ return Some(CharRef {
+ name: "aron;",
+ characters: "\u{2c7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("caps;") {
+ return Some(CharRef {
+ name: "caps;",
+ characters: "\u{2a4d}",
+ });
+ }
+
+ if first_char == 'c' && try_read("cedil") {
+ return Some(CharRef {
+ name: "cedil",
+ characters: "\u{e7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{109}",
+ });
+ }
+
+ if first_char == 'c' && try_read("cups;") {
+ return Some(CharRef {
+ name: "cups;",
+ characters: "\u{2a4c}",
+ });
+ }
+
+ if first_char == 'c' && try_read("edil;") {
+ return Some(CharRef {
+ name: "edil;",
+ characters: "\u{b8}",
+ });
+ }
+
+ if first_char == 'c' && try_read("heck;") {
+ return Some(CharRef {
+ name: "heck;",
+ characters: "\u{2713}",
+ });
+ }
+
+ if first_char == 'c' && try_read("lubs;") {
+ return Some(CharRef {
+ name: "lubs;",
+ characters: "\u{2663}",
+ });
+ }
+
+ if first_char == 'c' && try_read("olon;") {
+ return Some(CharRef {
+ name: "olon;",
+ characters: "\u{3a}",
+ });
+ }
+
+ if first_char == 'c' && try_read("omma;") {
+ return Some(CharRef {
+ name: "omma;",
+ characters: "\u{2c}",
+ });
+ }
+
+ if first_char == 'c' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{21b5}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ross;") {
+ return Some(CharRef {
+ name: "ross;",
+ characters: "\u{2717}",
+ });
+ }
+
+ if first_char == 'c' && try_read("sube;") {
+ return Some(CharRef {
+ name: "sube;",
+ characters: "\u{2ad1}",
+ });
+ }
+
+ if first_char == 'c' && try_read("supe;") {
+ return Some(CharRef {
+ name: "supe;",
+ characters: "\u{2ad2}",
+ });
+ }
+
+ if first_char == 'c' && try_read("tdot;") {
+ return Some(CharRef {
+ name: "tdot;",
+ characters: "\u{22ef}",
+ });
+ }
+
+ if first_char == 'c' && try_read("uepr;") {
+ return Some(CharRef {
+ name: "uepr;",
+ characters: "\u{22de}",
+ });
+ }
+
+ if first_char == 'c' && try_read("uesc;") {
+ return Some(CharRef {
+ name: "uesc;",
+ characters: "\u{22df}",
+ });
+ }
+
+ if first_char == 'c' && try_read("upor;") {
+ return Some(CharRef {
+ name: "upor;",
+ characters: "\u{2a45}",
+ });
+ }
+
+ if first_char == 'c' && try_read("urren") {
+ return Some(CharRef {
+ name: "urren",
+ characters: "\u{a4}",
+ });
+ }
+
+ if first_char == 'c' && try_read("uvee;") {
+ return Some(CharRef {
+ name: "uvee;",
+ characters: "\u{22ce}",
+ });
+ }
+
+ if first_char == 'c' && try_read("uwed;") {
+ return Some(CharRef {
+ name: "uwed;",
+ characters: "\u{22cf}",
+ });
+ }
+
+ if first_char == 'c' && try_read("wint;") {
+ return Some(CharRef {
+ name: "wint;",
+ characters: "\u{2231}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ashv;") {
+ return Some(CharRef {
+ name: "ashv;",
+ characters: "\u{22a3}",
+ });
+ }
+
+ if first_char == 'd' && try_read("blac;") {
+ return Some(CharRef {
+ name: "blac;",
+ characters: "\u{2dd}",
+ });
+ }
+
+ if first_char == 'd' && try_read("darr;") {
+ return Some(CharRef {
+ name: "darr;",
+ characters: "\u{21ca}",
+ });
+ }
+
+ if first_char == 'd' && try_read("elta;") {
+ return Some(CharRef {
+ name: "elta;",
+ characters: "\u{3b4}",
+ });
+ }
+
+ if first_char == 'd' && try_read("harl;") {
+ return Some(CharRef {
+ name: "harl;",
+ characters: "\u{21c3}",
+ });
+ }
+
+ if first_char == 'd' && try_read("harr;") {
+ return Some(CharRef {
+ name: "harr;",
+ characters: "\u{21c2}",
+ });
+ }
+
+ if first_char == 'd' && try_read("iams;") {
+ return Some(CharRef {
+ name: "iams;",
+ characters: "\u{2666}",
+ });
+ }
+
+ if first_char == 'd' && try_read("isin;") {
+ return Some(CharRef {
+ name: "isin;",
+ characters: "\u{22f2}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ivide") {
+ return Some(CharRef {
+ name: "ivide",
+ characters: "\u{f7}",
+ });
+ }
+
+ if first_char == 'd' && try_read("oteq;") {
+ return Some(CharRef {
+ name: "oteq;",
+ characters: "\u{2250}",
+ });
+ }
+
+ if first_char == 'd' && try_read("tdot;") {
+ return Some(CharRef {
+ name: "tdot;",
+ characters: "\u{22f1}",
+ });
+ }
+
+ if first_char == 'd' && try_read("trif;") {
+ return Some(CharRef {
+ name: "trif;",
+ characters: "\u{25be}",
+ });
+ }
+
+ if first_char == 'd' && try_read("uarr;") {
+ return Some(CharRef {
+ name: "uarr;",
+ characters: "\u{21f5}",
+ });
+ }
+
+ if first_char == 'd' && try_read("uhar;") {
+ return Some(CharRef {
+ name: "uhar;",
+ characters: "\u{296f}",
+ });
+ }
+
+ if first_char == 'e' && try_read("DDot;") {
+ return Some(CharRef {
+ name: "DDot;",
+ characters: "\u{2a77}",
+ });
+ }
+
+ if first_char == 'e' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{e9}",
+ });
+ }
+
+ if first_char == 'e' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{ea}",
+ });
+ }
+
+ if first_char == 'e' && try_read("fDot;") {
+ return Some(CharRef {
+ name: "fDot;",
+ characters: "\u{2252}",
+ });
+ }
+
+ if first_char == 'e' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{e8}",
+ });
+ }
+
+ if first_char == 'e' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{113}",
+ });
+ }
+
+ if first_char == 'e' && try_read("mpty;") {
+ return Some(CharRef {
+ name: "mpty;",
+ characters: "\u{2205}",
+ });
+ }
+
+ if first_char == 'e' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{119}",
+ });
+ }
+
+ if first_char == 'e' && try_read("plus;") {
+ return Some(CharRef {
+ name: "plus;",
+ characters: "\u{2a71}",
+ });
+ }
+
+ if first_char == 'e' && try_read("psiv;") {
+ return Some(CharRef {
+ name: "psiv;",
+ characters: "\u{3f5}",
+ });
+ }
+
+ if first_char == 'e' && try_read("qsim;") {
+ return Some(CharRef {
+ name: "qsim;",
+ characters: "\u{2242}",
+ });
+ }
+
+ if first_char == 'e' && try_read("quiv;") {
+ return Some(CharRef {
+ name: "quiv;",
+ characters: "\u{2261}",
+ });
+ }
+
+ if first_char == 'e' && try_read("rDot;") {
+ return Some(CharRef {
+ name: "rDot;",
+ characters: "\u{2253}",
+ });
+ }
+
+ if first_char == 'e' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{2971}",
+ });
+ }
+
+ if first_char == 'e' && try_read("sdot;") {
+ return Some(CharRef {
+ name: "sdot;",
+ characters: "\u{2250}",
+ });
+ }
+
+ if first_char == 'e' && try_read("xist;") {
+ return Some(CharRef {
+ name: "xist;",
+ characters: "\u{2203}",
+ });
+ }
+
+ if first_char == 'f' && try_read("flig;") {
+ return Some(CharRef {
+ name: "flig;",
+ characters: "\u{fb00}",
+ });
+ }
+
+ if first_char == 'f' && try_read("ilig;") {
+ return Some(CharRef {
+ name: "ilig;",
+ characters: "\u{fb01}",
+ });
+ }
+
+ if first_char == 'f' && try_read("jlig;") {
+ return Some(CharRef {
+ name: "jlig;",
+ characters: "\u{66}\u{6a}",
+ });
+ }
+
+ if first_char == 'f' && try_read("llig;") {
+ return Some(CharRef {
+ name: "llig;",
+ characters: "\u{fb02}",
+ });
+ }
+
+ if first_char == 'f' && try_read("ltns;") {
+ return Some(CharRef {
+ name: "ltns;",
+ characters: "\u{25b1}",
+ });
+ }
+
+ if first_char == 'f' && try_read("orkv;") {
+ return Some(CharRef {
+ name: "orkv;",
+ characters: "\u{2ad9}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac12") {
+ return Some(CharRef {
+ name: "rac12",
+ characters: "\u{bd}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac14") {
+ return Some(CharRef {
+ name: "rac14",
+ characters: "\u{bc}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rac34") {
+ return Some(CharRef {
+ name: "rac34",
+ characters: "\u{be}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rasl;") {
+ return Some(CharRef {
+ name: "rasl;",
+ characters: "\u{2044}",
+ });
+ }
+
+ if first_char == 'f' && try_read("rown;") {
+ return Some(CharRef {
+ name: "rown;",
+ characters: "\u{2322}",
+ });
+ }
+
+ if first_char == 'g' && try_read("amma;") {
+ return Some(CharRef {
+ name: "amma;",
+ characters: "\u{3b3}",
+ });
+ }
+
+ if first_char == 'g' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{11d}",
+ });
+ }
+
+ if first_char == 'g' && try_read("escc;") {
+ return Some(CharRef {
+ name: "escc;",
+ characters: "\u{2aa9}",
+ });
+ }
+
+ if first_char == 'g' && try_read("imel;") {
+ return Some(CharRef {
+ name: "imel;",
+ characters: "\u{2137}",
+ });
+ }
+
+ if first_char == 'g' && try_read("neqq;") {
+ return Some(CharRef {
+ name: "neqq;",
+ characters: "\u{2269}",
+ });
+ }
+
+ if first_char == 'g' && try_read("nsim;") {
+ return Some(CharRef {
+ name: "nsim;",
+ characters: "\u{22e7}",
+ });
+ }
+
+ if first_char == 'g' && try_read("rave;") {
+ return Some(CharRef {
+ name: "rave;",
+ characters: "\u{60}",
+ });
+ }
+
+ if first_char == 'g' && try_read("sime;") {
+ return Some(CharRef {
+ name: "sime;",
+ characters: "\u{2a8e}",
+ });
+ }
+
+ if first_char == 'g' && try_read("siml;") {
+ return Some(CharRef {
+ name: "siml;",
+ characters: "\u{2a90}",
+ });
+ }
+
+ if first_char == 'g' && try_read("tcir;") {
+ return Some(CharRef {
+ name: "tcir;",
+ characters: "\u{2a7a}",
+ });
+ }
+
+ if first_char == 'g' && try_read("tdot;") {
+ return Some(CharRef {
+ name: "tdot;",
+ characters: "\u{22d7}",
+ });
+ }
+
+ if first_char == 'h' && try_read("arrw;") {
+ return Some(CharRef {
+ name: "arrw;",
+ characters: "\u{21ad}",
+ });
+ }
+
+ if first_char == 'h' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{125}",
+ });
+ }
+
+ if first_char == 'h' && try_read("oarr;") {
+ return Some(CharRef {
+ name: "oarr;",
+ characters: "\u{21ff}",
+ });
+ }
+
+ if first_char == 'i' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{ed}",
+ });
+ }
+
+ if first_char == 'i' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{ee}",
+ });
+ }
+
+ if first_char == 'i' && try_read("excl;") {
+ return Some(CharRef {
+ name: "excl;",
+ characters: "\u{a1}",
+ });
+ }
+
+ if first_char == 'i' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{ec}",
+ });
+ }
+
+ if first_char == 'i' && try_read("iint;") {
+ return Some(CharRef {
+ name: "iint;",
+ characters: "\u{222d}",
+ });
+ }
+
+ if first_char == 'i' && try_read("iota;") {
+ return Some(CharRef {
+ name: "iota;",
+ characters: "\u{2129}",
+ });
+ }
+
+ if first_char == 'i' && try_read("jlig;") {
+ return Some(CharRef {
+ name: "jlig;",
+ characters: "\u{133}",
+ });
+ }
+
+ if first_char == 'i' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{12b}",
+ });
+ }
+
+ if first_char == 'i' && try_read("mage;") {
+ return Some(CharRef {
+ name: "mage;",
+ characters: "\u{2111}",
+ });
+ }
+
+ if first_char == 'i' && try_read("math;") {
+ return Some(CharRef {
+ name: "math;",
+ characters: "\u{131}",
+ });
+ }
+
+ if first_char == 'i' && try_read("mped;") {
+ return Some(CharRef {
+ name: "mped;",
+ characters: "\u{1b5}",
+ });
+ }
+
+ if first_char == 'i' && try_read("nfin;") {
+ return Some(CharRef {
+ name: "nfin;",
+ characters: "\u{221e}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{12f}",
+ });
+ }
+
+ if first_char == 'i' && try_read("prod;") {
+ return Some(CharRef {
+ name: "prod;",
+ characters: "\u{2a3c}",
+ });
+ }
+
+ if first_char == 'i' && try_read("quest") {
+ return Some(CharRef {
+ name: "quest",
+ characters: "\u{bf}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sinE;") {
+ return Some(CharRef {
+ name: "sinE;",
+ characters: "\u{22f9}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sins;") {
+ return Some(CharRef {
+ name: "sins;",
+ characters: "\u{22f4}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sinv;") {
+ return Some(CharRef {
+ name: "sinv;",
+ characters: "\u{2208}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ukcy;") {
+ return Some(CharRef {
+ name: "ukcy;",
+ characters: "\u{456}",
+ });
+ }
+
+ if first_char == 'j' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{135}",
+ });
+ }
+
+ if first_char == 'j' && try_read("math;") {
+ return Some(CharRef {
+ name: "math;",
+ characters: "\u{237}",
+ });
+ }
+
+ if first_char == 'j' && try_read("ukcy;") {
+ return Some(CharRef {
+ name: "ukcy;",
+ characters: "\u{454}",
+ });
+ }
+
+ if first_char == 'k' && try_read("appa;") {
+ return Some(CharRef {
+ name: "appa;",
+ characters: "\u{3ba}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Aarr;") {
+ return Some(CharRef {
+ name: "Aarr;",
+ characters: "\u{21da}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Barr;") {
+ return Some(CharRef {
+ name: "Barr;",
+ characters: "\u{290e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("angd;") {
+ return Some(CharRef {
+ name: "angd;",
+ characters: "\u{2991}",
+ });
+ }
+
+ if first_char == 'l' && try_read("aquo;") {
+ return Some(CharRef {
+ name: "aquo;",
+ characters: "\u{ab}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arrb;") {
+ return Some(CharRef {
+ name: "arrb;",
+ characters: "\u{21e4}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ates;") {
+ return Some(CharRef {
+ name: "ates;",
+ characters: "\u{2aad}\u{fe00}",
+ });
+ }
+
+ if first_char == 'l' && try_read("barr;") {
+ return Some(CharRef {
+ name: "barr;",
+ characters: "\u{290c}",
+ });
+ }
+
+ if first_char == 'l' && try_read("bbrk;") {
+ return Some(CharRef {
+ name: "bbrk;",
+ characters: "\u{2772}",
+ });
+ }
+
+ if first_char == 'l' && try_read("brke;") {
+ return Some(CharRef {
+ name: "brke;",
+ characters: "\u{298b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ceil;") {
+ return Some(CharRef {
+ name: "ceil;",
+ characters: "\u{2308}",
+ });
+ }
+
+ if first_char == 'l' && try_read("dquo;") {
+ return Some(CharRef {
+ name: "dquo;",
+ characters: "\u{201c}",
+ });
+ }
+
+ if first_char == 'l' && try_read("escc;") {
+ return Some(CharRef {
+ name: "escc;",
+ characters: "\u{2aa8}",
+ });
+ }
+
+ if first_char == 'l' && try_read("hard;") {
+ return Some(CharRef {
+ name: "hard;",
+ characters: "\u{21bd}",
+ });
+ }
+
+ if first_char == 'l' && try_read("haru;") {
+ return Some(CharRef {
+ name: "haru;",
+ characters: "\u{21bc}",
+ });
+ }
+
+ if first_char == 'l' && try_read("hblk;") {
+ return Some(CharRef {
+ name: "hblk;",
+ characters: "\u{2584}",
+ });
+ }
+
+ if first_char == 'l' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{21c7}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ltri;") {
+ return Some(CharRef {
+ name: "ltri;",
+ characters: "\u{25fa}",
+ });
+ }
+
+ if first_char == 'l' && try_read("neqq;") {
+ return Some(CharRef {
+ name: "neqq;",
+ characters: "\u{2268}",
+ });
+ }
+
+ if first_char == 'l' && try_read("nsim;") {
+ return Some(CharRef {
+ name: "nsim;",
+ characters: "\u{22e6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("oang;") {
+ return Some(CharRef {
+ name: "oang;",
+ characters: "\u{27ec}",
+ });
+ }
+
+ if first_char == 'l' && try_read("oarr;") {
+ return Some(CharRef {
+ name: "oarr;",
+ characters: "\u{21fd}",
+ });
+ }
+
+ if first_char == 'l' && try_read("obrk;") {
+ return Some(CharRef {
+ name: "obrk;",
+ characters: "\u{27e6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("opar;") {
+ return Some(CharRef {
+ name: "opar;",
+ characters: "\u{2985}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{21c6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rhar;") {
+ return Some(CharRef {
+ name: "rhar;",
+ characters: "\u{21cb}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rtri;") {
+ return Some(CharRef {
+ name: "rtri;",
+ characters: "\u{22bf}",
+ });
+ }
+
+ if first_char == 'l' && try_read("sime;") {
+ return Some(CharRef {
+ name: "sime;",
+ characters: "\u{2a8d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("simg;") {
+ return Some(CharRef {
+ name: "simg;",
+ characters: "\u{2a8f}",
+ });
+ }
+
+ if first_char == 'l' && try_read("squo;") {
+ return Some(CharRef {
+ name: "squo;",
+ characters: "\u{2018}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tcir;") {
+ return Some(CharRef {
+ name: "tcir;",
+ characters: "\u{2a79}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tdot;") {
+ return Some(CharRef {
+ name: "tdot;",
+ characters: "\u{22d6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("trie;") {
+ return Some(CharRef {
+ name: "trie;",
+ characters: "\u{22b4}",
+ });
+ }
+
+ if first_char == 'l' && try_read("trif;") {
+ return Some(CharRef {
+ name: "trif;",
+ characters: "\u{25c2}",
+ });
+ }
+
+ if first_char == 'm' && try_read("DDot;") {
+ return Some(CharRef {
+ name: "DDot;",
+ characters: "\u{223a}",
+ });
+ }
+
+ if first_char == 'm' && try_read("dash;") {
+ return Some(CharRef {
+ name: "dash;",
+ characters: "\u{2014}",
+ });
+ }
+
+ if first_char == 'm' && try_read("icro;") {
+ return Some(CharRef {
+ name: "icro;",
+ characters: "\u{b5}",
+ });
+ }
+
+ if first_char == 'm' && try_read("iddot") {
+ return Some(CharRef {
+ name: "iddot",
+ characters: "\u{b7}",
+ });
+ }
+
+ if first_char == 'm' && try_read("inus;") {
+ return Some(CharRef {
+ name: "inus;",
+ characters: "\u{2212}",
+ });
+ }
+
+ if first_char == 'm' && try_read("umap;") {
+ return Some(CharRef {
+ name: "umap;",
+ characters: "\u{22b8}",
+ });
+ }
+
+ if first_char == 'n' && try_read("abla;") {
+ return Some(CharRef {
+ name: "abla;",
+ characters: "\u{2207}",
+ });
+ }
+
+ if first_char == 'n' && try_read("apid;") {
+ return Some(CharRef {
+ name: "apid;",
+ characters: "\u{224b}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("apos;") {
+ return Some(CharRef {
+ name: "apos;",
+ characters: "\u{149}",
+ });
+ }
+
+ if first_char == 'n' && try_read("atur;") {
+ return Some(CharRef {
+ name: "atur;",
+ characters: "\u{266e}",
+ });
+ }
+
+ if first_char == 'n' && try_read("bump;") {
+ return Some(CharRef {
+ name: "bump;",
+ characters: "\u{224e}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("cong;") {
+ return Some(CharRef {
+ name: "cong;",
+ characters: "\u{2247}",
+ });
+ }
+
+ if first_char == 'n' && try_read("dash;") {
+ return Some(CharRef {
+ name: "dash;",
+ characters: "\u{2013}",
+ });
+ }
+
+ if first_char == 'n' && try_read("eArr;") {
+ return Some(CharRef {
+ name: "eArr;",
+ characters: "\u{21d7}",
+ });
+ }
+
+ if first_char == 'n' && try_read("earr;") {
+ return Some(CharRef {
+ name: "earr;",
+ characters: "\u{2197}",
+ });
+ }
+
+ if first_char == 'n' && try_read("edot;") {
+ return Some(CharRef {
+ name: "edot;",
+ characters: "\u{2250}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("esim;") {
+ return Some(CharRef {
+ name: "esim;",
+ characters: "\u{2242}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("geqq;") {
+ return Some(CharRef {
+ name: "geqq;",
+ characters: "\u{2267}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("gsim;") {
+ return Some(CharRef {
+ name: "gsim;",
+ characters: "\u{2275}",
+ });
+ }
+
+ if first_char == 'n' && try_read("hArr;") {
+ return Some(CharRef {
+ name: "hArr;",
+ characters: "\u{21ce}",
+ });
+ }
+
+ if first_char == 'n' && try_read("harr;") {
+ return Some(CharRef {
+ name: "harr;",
+ characters: "\u{21ae}",
+ });
+ }
+
+ if first_char == 'n' && try_read("hpar;") {
+ return Some(CharRef {
+ name: "hpar;",
+ characters: "\u{2af2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("lArr;") {
+ return Some(CharRef {
+ name: "lArr;",
+ characters: "\u{21cd}",
+ });
+ }
+
+ if first_char == 'n' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{219a}",
+ });
+ }
+
+ if first_char == 'n' && try_read("leqq;") {
+ return Some(CharRef {
+ name: "leqq;",
+ characters: "\u{2266}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("less;") {
+ return Some(CharRef {
+ name: "less;",
+ characters: "\u{226e}",
+ });
+ }
+
+ if first_char == 'n' && try_read("lsim;") {
+ return Some(CharRef {
+ name: "lsim;",
+ characters: "\u{2274}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ltri;") {
+ return Some(CharRef {
+ name: "ltri;",
+ characters: "\u{22ea}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otin;") {
+ return Some(CharRef {
+ name: "otin;",
+ characters: "\u{2209}",
+ });
+ }
+
+ if first_char == 'n' && try_read("otni;") {
+ return Some(CharRef {
+ name: "otni;",
+ characters: "\u{220c}",
+ });
+ }
+
+ if first_char == 'n' && try_read("part;") {
+ return Some(CharRef {
+ name: "part;",
+ characters: "\u{2202}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("prec;") {
+ return Some(CharRef {
+ name: "prec;",
+ characters: "\u{2280}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rArr;") {
+ return Some(CharRef {
+ name: "rArr;",
+ characters: "\u{21cf}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{219b}",
+ });
+ }
+
+ if first_char == 'n' && try_read("rtri;") {
+ return Some(CharRef {
+ name: "rtri;",
+ characters: "\u{22eb}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sime;") {
+ return Some(CharRef {
+ name: "sime;",
+ characters: "\u{2244}",
+ });
+ }
+
+ if first_char == 'n' && try_read("smid;") {
+ return Some(CharRef {
+ name: "smid;",
+ characters: "\u{2224}",
+ });
+ }
+
+ if first_char == 'n' && try_read("spar;") {
+ return Some(CharRef {
+ name: "spar;",
+ characters: "\u{2226}",
+ });
+ }
+
+ if first_char == 'n' && try_read("subE;") {
+ return Some(CharRef {
+ name: "subE;",
+ characters: "\u{2ac5}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sube;") {
+ return Some(CharRef {
+ name: "sube;",
+ characters: "\u{2288}",
+ });
+ }
+
+ if first_char == 'n' && try_read("succ;") {
+ return Some(CharRef {
+ name: "succ;",
+ characters: "\u{2281}",
+ });
+ }
+
+ if first_char == 'n' && try_read("supE;") {
+ return Some(CharRef {
+ name: "supE;",
+ characters: "\u{2ac6}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("supe;") {
+ return Some(CharRef {
+ name: "supe;",
+ characters: "\u{2289}",
+ });
+ }
+
+ if first_char == 'n' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{f1}",
+ });
+ }
+
+ if first_char == 'n' && try_read("umsp;") {
+ return Some(CharRef {
+ name: "umsp;",
+ characters: "\u{2007}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vsim;") {
+ return Some(CharRef {
+ name: "vsim;",
+ characters: "\u{223c}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("wArr;") {
+ return Some(CharRef {
+ name: "wArr;",
+ characters: "\u{21d6}",
+ });
+ }
+
+ if first_char == 'n' && try_read("warr;") {
+ return Some(CharRef {
+ name: "warr;",
+ characters: "\u{2196}",
+ });
+ }
+
+ if first_char == 'o' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{f3}",
+ });
+ }
+
+ if first_char == 'o' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{f4}",
+ });
+ }
+
+ if first_char == 'o' && try_read("dash;") {
+ return Some(CharRef {
+ name: "dash;",
+ characters: "\u{229d}",
+ });
+ }
+
+ if first_char == 'o' && try_read("elig;") {
+ return Some(CharRef {
+ name: "elig;",
+ characters: "\u{153}",
+ });
+ }
+
+ if first_char == 'o' && try_read("fcir;") {
+ return Some(CharRef {
+ name: "fcir;",
+ characters: "\u{29bf}",
+ });
+ }
+
+ if first_char == 'o' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{f2}",
+ });
+ }
+
+ if first_char == 'o' && try_read("hbar;") {
+ return Some(CharRef {
+ name: "hbar;",
+ characters: "\u{29b5}",
+ });
+ }
+
+ if first_char == 'o' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{21ba}",
+ });
+ }
+
+ if first_char == 'o' && try_read("lcir;") {
+ return Some(CharRef {
+ name: "lcir;",
+ characters: "\u{29be}",
+ });
+ }
+
+ if first_char == 'o' && try_read("line;") {
+ return Some(CharRef {
+ name: "line;",
+ characters: "\u{203e}",
+ });
+ }
+
+ if first_char == 'o' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{14d}",
+ });
+ }
+
+ if first_char == 'o' && try_read("mega;") {
+ return Some(CharRef {
+ name: "mega;",
+ characters: "\u{3c9}",
+ });
+ }
+
+ if first_char == 'o' && try_read("perp;") {
+ return Some(CharRef {
+ name: "perp;",
+ characters: "\u{29b9}",
+ });
+ }
+
+ if first_char == 'o' && try_read("plus;") {
+ return Some(CharRef {
+ name: "plus;",
+ characters: "\u{2295}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{21bb}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rder;") {
+ return Some(CharRef {
+ name: "rder;",
+ characters: "\u{2134}",
+ });
+ }
+
+ if first_char == 'o' && try_read("slash") {
+ return Some(CharRef {
+ name: "slash",
+ characters: "\u{f8}",
+ });
+ }
+
+ if first_char == 'o' && try_read("tilde") {
+ return Some(CharRef {
+ name: "tilde",
+ characters: "\u{f5}",
+ });
+ }
+
+ if first_char == 'o' && try_read("vbar;") {
+ return Some(CharRef {
+ name: "vbar;",
+ characters: "\u{233d}",
+ });
+ }
+
+ if first_char == 'p' && try_read("arsl;") {
+ return Some(CharRef {
+ name: "arsl;",
+ characters: "\u{2afd}",
+ });
+ }
+
+ if first_char == 'p' && try_read("hone;") {
+ return Some(CharRef {
+ name: "hone;",
+ characters: "\u{260e}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusb;") {
+ return Some(CharRef {
+ name: "lusb;",
+ characters: "\u{229e}",
+ });
+ }
+
+ if first_char == 'p' && try_read("luse;") {
+ return Some(CharRef {
+ name: "luse;",
+ characters: "\u{2a72}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lusmn") {
+ return Some(CharRef {
+ name: "lusmn",
+ characters: "\u{b1}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ound;") {
+ return Some(CharRef {
+ name: "ound;",
+ characters: "\u{a3}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rcue;") {
+ return Some(CharRef {
+ name: "rcue;",
+ characters: "\u{227c}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rime;") {
+ return Some(CharRef {
+ name: "rime;",
+ characters: "\u{2032}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rnap;") {
+ return Some(CharRef {
+ name: "rnap;",
+ characters: "\u{2ab9}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rsim;") {
+ return Some(CharRef {
+ name: "rsim;",
+ characters: "\u{227e}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uest;") {
+ return Some(CharRef {
+ name: "uest;",
+ characters: "\u{3f}",
+ });
+ }
+
+ if first_char == 'r' && try_read("Aarr;") {
+ return Some(CharRef {
+ name: "Aarr;",
+ characters: "\u{21db}",
+ });
+ }
+
+ if first_char == 'r' && try_read("Barr;") {
+ return Some(CharRef {
+ name: "Barr;",
+ characters: "\u{290f}",
+ });
+ }
+
+ if first_char == 'r' && try_read("adic;") {
+ return Some(CharRef {
+ name: "adic;",
+ characters: "\u{221a}",
+ });
+ }
+
+ if first_char == 'r' && try_read("angd;") {
+ return Some(CharRef {
+ name: "angd;",
+ characters: "\u{2992}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ange;") {
+ return Some(CharRef {
+ name: "ange;",
+ characters: "\u{29a5}",
+ });
+ }
+
+ if first_char == 'r' && try_read("aquo;") {
+ return Some(CharRef {
+ name: "aquo;",
+ characters: "\u{bb}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrb;") {
+ return Some(CharRef {
+ name: "arrb;",
+ characters: "\u{21e5}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrc;") {
+ return Some(CharRef {
+ name: "arrc;",
+ characters: "\u{2933}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arrw;") {
+ return Some(CharRef {
+ name: "arrw;",
+ characters: "\u{219d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("atio;") {
+ return Some(CharRef {
+ name: "atio;",
+ characters: "\u{2236}",
+ });
+ }
+
+ if first_char == 'r' && try_read("barr;") {
+ return Some(CharRef {
+ name: "barr;",
+ characters: "\u{290d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("bbrk;") {
+ return Some(CharRef {
+ name: "bbrk;",
+ characters: "\u{2773}",
+ });
+ }
+
+ if first_char == 'r' && try_read("brke;") {
+ return Some(CharRef {
+ name: "brke;",
+ characters: "\u{298c}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ceil;") {
+ return Some(CharRef {
+ name: "ceil;",
+ characters: "\u{2309}",
+ });
+ }
+
+ if first_char == 'r' && try_read("dquo;") {
+ return Some(CharRef {
+ name: "dquo;",
+ characters: "\u{201d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("eals;") {
+ return Some(CharRef {
+ name: "eals;",
+ characters: "\u{211d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("hard;") {
+ return Some(CharRef {
+ name: "hard;",
+ characters: "\u{21c1}",
+ });
+ }
+
+ if first_char == 'r' && try_read("haru;") {
+ return Some(CharRef {
+ name: "haru;",
+ characters: "\u{21c0}",
+ });
+ }
+
+ if first_char == 'r' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{21c4}",
+ });
+ }
+
+ if first_char == 'r' && try_read("lhar;") {
+ return Some(CharRef {
+ name: "lhar;",
+ characters: "\u{21cc}",
+ });
+ }
+
+ if first_char == 'r' && try_read("nmid;") {
+ return Some(CharRef {
+ name: "nmid;",
+ characters: "\u{2aee}",
+ });
+ }
+
+ if first_char == 'r' && try_read("oang;") {
+ return Some(CharRef {
+ name: "oang;",
+ characters: "\u{27ed}",
+ });
+ }
+
+ if first_char == 'r' && try_read("oarr;") {
+ return Some(CharRef {
+ name: "oarr;",
+ characters: "\u{21fe}",
+ });
+ }
+
+ if first_char == 'r' && try_read("obrk;") {
+ return Some(CharRef {
+ name: "obrk;",
+ characters: "\u{27e7}",
+ });
+ }
+
+ if first_char == 'r' && try_read("opar;") {
+ return Some(CharRef {
+ name: "opar;",
+ characters: "\u{2986}",
+ });
+ }
+
+ if first_char == 'r' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{21c9}",
+ });
+ }
+
+ if first_char == 'r' && try_read("squo;") {
+ return Some(CharRef {
+ name: "squo;",
+ characters: "\u{2019}",
+ });
+ }
+
+ if first_char == 'r' && try_read("trie;") {
+ return Some(CharRef {
+ name: "trie;",
+ characters: "\u{22b5}",
+ });
+ }
+
+ if first_char == 'r' && try_read("trif;") {
+ return Some(CharRef {
+ name: "trif;",
+ characters: "\u{25b8}",
+ });
+ }
+
+ if first_char == 's' && try_read("bquo;") {
+ return Some(CharRef {
+ name: "bquo;",
+ characters: "\u{201a}",
+ });
+ }
+
+ if first_char == 's' && try_read("ccue;") {
+ return Some(CharRef {
+ name: "ccue;",
+ characters: "\u{227d}",
+ });
+ }
+
+ if first_char == 's' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{15d}",
+ });
+ }
+
+ if first_char == 's' && try_read("cnap;") {
+ return Some(CharRef {
+ name: "cnap;",
+ characters: "\u{2aba}",
+ });
+ }
+
+ if first_char == 's' && try_read("csim;") {
+ return Some(CharRef {
+ name: "csim;",
+ characters: "\u{227f}",
+ });
+ }
+
+ if first_char == 's' && try_read("dotb;") {
+ return Some(CharRef {
+ name: "dotb;",
+ characters: "\u{22a1}",
+ });
+ }
+
+ if first_char == 's' && try_read("dote;") {
+ return Some(CharRef {
+ name: "dote;",
+ characters: "\u{2a66}",
+ });
+ }
+
+ if first_char == 's' && try_read("eArr;") {
+ return Some(CharRef {
+ name: "eArr;",
+ characters: "\u{21d8}",
+ });
+ }
+
+ if first_char == 's' && try_read("earr;") {
+ return Some(CharRef {
+ name: "earr;",
+ characters: "\u{2198}",
+ });
+ }
+
+ if first_char == 's' && try_read("etmn;") {
+ return Some(CharRef {
+ name: "etmn;",
+ characters: "\u{2216}",
+ });
+ }
+
+ if first_char == 's' && try_read("harp;") {
+ return Some(CharRef {
+ name: "harp;",
+ characters: "\u{266f}",
+ });
+ }
+
+ if first_char == 's' && try_read("igma;") {
+ return Some(CharRef {
+ name: "igma;",
+ characters: "\u{3c3}",
+ });
+ }
+
+ if first_char == 's' && try_read("imeq;") {
+ return Some(CharRef {
+ name: "imeq;",
+ characters: "\u{2243}",
+ });
+ }
+
+ if first_char == 's' && try_read("imgE;") {
+ return Some(CharRef {
+ name: "imgE;",
+ characters: "\u{2aa0}",
+ });
+ }
+
+ if first_char == 's' && try_read("imlE;") {
+ return Some(CharRef {
+ name: "imlE;",
+ characters: "\u{2a9f}",
+ });
+ }
+
+ if first_char == 's' && try_read("imne;") {
+ return Some(CharRef {
+ name: "imne;",
+ characters: "\u{2246}",
+ });
+ }
+
+ if first_char == 's' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{2190}",
+ });
+ }
+
+ if first_char == 's' && try_read("mile;") {
+ return Some(CharRef {
+ name: "mile;",
+ characters: "\u{2323}",
+ });
+ }
+
+ if first_char == 's' && try_read("mtes;") {
+ return Some(CharRef {
+ name: "mtes;",
+ characters: "\u{2aac}\u{fe00}",
+ });
+ }
+
+ if first_char == 's' && try_read("qcap;") {
+ return Some(CharRef {
+ name: "qcap;",
+ characters: "\u{2293}",
+ });
+ }
+
+ if first_char == 's' && try_read("qcup;") {
+ return Some(CharRef {
+ name: "qcup;",
+ characters: "\u{2294}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsub;") {
+ return Some(CharRef {
+ name: "qsub;",
+ characters: "\u{228f}",
+ });
+ }
+
+ if first_char == 's' && try_read("qsup;") {
+ return Some(CharRef {
+ name: "qsup;",
+ characters: "\u{2290}",
+ });
+ }
+
+ if first_char == 's' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{2192}",
+ });
+ }
+
+ if first_char == 's' && try_read("tarf;") {
+ return Some(CharRef {
+ name: "tarf;",
+ characters: "\u{2605}",
+ });
+ }
+
+ if first_char == 's' && try_read("trns;") {
+ return Some(CharRef {
+ name: "trns;",
+ characters: "\u{af}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubnE;") {
+ return Some(CharRef {
+ name: "ubnE;",
+ characters: "\u{2acb}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubne;") {
+ return Some(CharRef {
+ name: "ubne;",
+ characters: "\u{228a}",
+ });
+ }
+
+ if first_char == 's' && try_read("upnE;") {
+ return Some(CharRef {
+ name: "upnE;",
+ characters: "\u{2acc}",
+ });
+ }
+
+ if first_char == 's' && try_read("upne;") {
+ return Some(CharRef {
+ name: "upne;",
+ characters: "\u{228b}",
+ });
+ }
+
+ if first_char == 's' && try_read("wArr;") {
+ return Some(CharRef {
+ name: "wArr;",
+ characters: "\u{21d9}",
+ });
+ }
+
+ if first_char == 's' && try_read("warr;") {
+ return Some(CharRef {
+ name: "warr;",
+ characters: "\u{2199}",
+ });
+ }
+
+ if first_char == 's' && try_read("zlig;") {
+ return Some(CharRef {
+ name: "zlig;",
+ characters: "\u{df}",
+ });
+ }
+
+ if first_char == 't' && try_read("heta;") {
+ return Some(CharRef {
+ name: "heta;",
+ characters: "\u{3b8}",
+ });
+ }
+
+ if first_char == 't' && try_read("hkap;") {
+ return Some(CharRef {
+ name: "hkap;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 't' && try_read("horn;") {
+ return Some(CharRef {
+ name: "horn;",
+ characters: "\u{fe}",
+ });
+ }
+
+ if first_char == 't' && try_read("ilde;") {
+ return Some(CharRef {
+ name: "ilde;",
+ characters: "\u{2dc}",
+ });
+ }
+
+ if first_char == 't' && try_read("imes;") {
+ return Some(CharRef {
+ name: "imes;",
+ characters: "\u{d7}",
+ });
+ }
+
+ if first_char == 't' && try_read("rade;") {
+ return Some(CharRef {
+ name: "rade;",
+ characters: "\u{2122}",
+ });
+ }
+
+ if first_char == 't' && try_read("risb;") {
+ return Some(CharRef {
+ name: "risb;",
+ characters: "\u{29cd}",
+ });
+ }
+
+ if first_char == 't' && try_read("shcy;") {
+ return Some(CharRef {
+ name: "shcy;",
+ characters: "\u{45b}",
+ });
+ }
+
+ if first_char == 't' && try_read("wixt;") {
+ return Some(CharRef {
+ name: "wixt;",
+ characters: "\u{226c}",
+ });
+ }
+
+ if first_char == 'u' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{fa}",
+ });
+ }
+
+ if first_char == 'u' && try_read("brcy;") {
+ return Some(CharRef {
+ name: "brcy;",
+ characters: "\u{45e}",
+ });
+ }
+
+ if first_char == 'u' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{fb}",
+ });
+ }
+
+ if first_char == 'u' && try_read("darr;") {
+ return Some(CharRef {
+ name: "darr;",
+ characters: "\u{21c5}",
+ });
+ }
+
+ if first_char == 'u' && try_read("dhar;") {
+ return Some(CharRef {
+ name: "dhar;",
+ characters: "\u{296e}",
+ });
+ }
+
+ if first_char == 'u' && try_read("grave") {
+ return Some(CharRef {
+ name: "grave",
+ characters: "\u{f9}",
+ });
+ }
+
+ if first_char == 'u' && try_read("harl;") {
+ return Some(CharRef {
+ name: "harl;",
+ characters: "\u{21bf}",
+ });
+ }
+
+ if first_char == 'u' && try_read("harr;") {
+ return Some(CharRef {
+ name: "harr;",
+ characters: "\u{21be}",
+ });
+ }
+
+ if first_char == 'u' && try_read("hblk;") {
+ return Some(CharRef {
+ name: "hblk;",
+ characters: "\u{2580}",
+ });
+ }
+
+ if first_char == 'u' && try_read("ltri;") {
+ return Some(CharRef {
+ name: "ltri;",
+ characters: "\u{25f8}",
+ });
+ }
+
+ if first_char == 'u' && try_read("macr;") {
+ return Some(CharRef {
+ name: "macr;",
+ characters: "\u{16b}",
+ });
+ }
+
+ if first_char == 'u' && try_read("ogon;") {
+ return Some(CharRef {
+ name: "ogon;",
+ characters: "\u{173}",
+ });
+ }
+
+ if first_char == 'u' && try_read("plus;") {
+ return Some(CharRef {
+ name: "plus;",
+ characters: "\u{228e}",
+ });
+ }
+
+ if first_char == 'u' && try_read("psih;") {
+ return Some(CharRef {
+ name: "psih;",
+ characters: "\u{3d2}",
+ });
+ }
+
+ if first_char == 'u' && try_read("ring;") {
+ return Some(CharRef {
+ name: "ring;",
+ characters: "\u{16f}",
+ });
+ }
+
+ if first_char == 'u' && try_read("rtri;") {
+ return Some(CharRef {
+ name: "rtri;",
+ characters: "\u{25f9}",
+ });
+ }
+
+ if first_char == 'u' && try_read("tdot;") {
+ return Some(CharRef {
+ name: "tdot;",
+ characters: "\u{22f0}",
+ });
+ }
+
+ if first_char == 'u' && try_read("trif;") {
+ return Some(CharRef {
+ name: "trif;",
+ characters: "\u{25b4}",
+ });
+ }
+
+ if first_char == 'u' && try_read("uarr;") {
+ return Some(CharRef {
+ name: "uarr;",
+ characters: "\u{21c8}",
+ });
+ }
+
+ if first_char == 'v' && try_read("Barv;") {
+ return Some(CharRef {
+ name: "Barv;",
+ characters: "\u{2ae9}",
+ });
+ }
+
+ if first_char == 'v' && try_read("Dash;") {
+ return Some(CharRef {
+ name: "Dash;",
+ characters: "\u{22a8}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arpi;") {
+ return Some(CharRef {
+ name: "arpi;",
+ characters: "\u{3d6}",
+ });
+ }
+
+ if first_char == 'v' && try_read("dash;") {
+ return Some(CharRef {
+ name: "dash;",
+ characters: "\u{22a2}",
+ });
+ }
+
+ if first_char == 'v' && try_read("eeeq;") {
+ return Some(CharRef {
+ name: "eeeq;",
+ characters: "\u{225a}",
+ });
+ }
+
+ if first_char == 'v' && try_read("ltri;") {
+ return Some(CharRef {
+ name: "ltri;",
+ characters: "\u{22b2}",
+ });
+ }
+
+ if first_char == 'v' && try_read("nsub;") {
+ return Some(CharRef {
+ name: "nsub;",
+ characters: "\u{2282}\u{20d2}",
+ });
+ }
+
+ if first_char == 'v' && try_read("nsup;") {
+ return Some(CharRef {
+ name: "nsup;",
+ characters: "\u{2283}\u{20d2}",
+ });
+ }
+
+ if first_char == 'v' && try_read("prop;") {
+ return Some(CharRef {
+ name: "prop;",
+ characters: "\u{221d}",
+ });
+ }
+
+ if first_char == 'v' && try_read("rtri;") {
+ return Some(CharRef {
+ name: "rtri;",
+ characters: "\u{22b3}",
+ });
+ }
+
+ if first_char == 'w' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{175}",
+ });
+ }
+
+ if first_char == 'w' && try_read("edge;") {
+ return Some(CharRef {
+ name: "edge;",
+ characters: "\u{2227}",
+ });
+ }
+
+ if first_char == 'x' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{25ef}",
+ });
+ }
+
+ if first_char == 'x' && try_read("dtri;") {
+ return Some(CharRef {
+ name: "dtri;",
+ characters: "\u{25bd}",
+ });
+ }
+
+ if first_char == 'x' && try_read("hArr;") {
+ return Some(CharRef {
+ name: "hArr;",
+ characters: "\u{27fa}",
+ });
+ }
+
+ if first_char == 'x' && try_read("harr;") {
+ return Some(CharRef {
+ name: "harr;",
+ characters: "\u{27f7}",
+ });
+ }
+
+ if first_char == 'x' && try_read("lArr;") {
+ return Some(CharRef {
+ name: "lArr;",
+ characters: "\u{27f8}",
+ });
+ }
+
+ if first_char == 'x' && try_read("larr;") {
+ return Some(CharRef {
+ name: "larr;",
+ characters: "\u{27f5}",
+ });
+ }
+
+ if first_char == 'x' && try_read("odot;") {
+ return Some(CharRef {
+ name: "odot;",
+ characters: "\u{2a00}",
+ });
+ }
+
+ if first_char == 'x' && try_read("rArr;") {
+ return Some(CharRef {
+ name: "rArr;",
+ characters: "\u{27f9}",
+ });
+ }
+
+ if first_char == 'x' && try_read("rarr;") {
+ return Some(CharRef {
+ name: "rarr;",
+ characters: "\u{27f6}",
+ });
+ }
+
+ if first_char == 'x' && try_read("utri;") {
+ return Some(CharRef {
+ name: "utri;",
+ characters: "\u{25b3}",
+ });
+ }
+
+ if first_char == 'y' && try_read("acute") {
+ return Some(CharRef {
+ name: "acute",
+ characters: "\u{fd}",
+ });
+ }
+
+ if first_char == 'y' && try_read("circ;") {
+ return Some(CharRef {
+ name: "circ;",
+ characters: "\u{177}",
+ });
+ }
+
+ if first_char == 'A' && try_read("Elig") {
+ return Some(CharRef {
+ name: "Elig",
+ characters: "\u{c6}",
+ });
+ }
+
+ if first_char == 'A' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{c2}",
+ });
+ }
+
+ if first_char == 'A' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d538}",
+ });
+ }
+
+ if first_char == 'A' && try_read("ring") {
+ return Some(CharRef {
+ name: "ring",
+ characters: "\u{c5}",
+ });
+ }
+
+ if first_char == 'A' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d49c}",
+ });
+ }
+
+ if first_char == 'A' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{c4}",
+ });
+ }
+
+ if first_char == 'B' && try_read("arv;") {
+ return Some(CharRef {
+ name: "arv;",
+ characters: "\u{2ae7}",
+ });
+ }
+
+ if first_char == 'B' && try_read("eta;") {
+ return Some(CharRef {
+ name: "eta;",
+ characters: "\u{392}",
+ });
+ }
+
+ if first_char == 'B' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d539}",
+ });
+ }
+
+ if first_char == 'B' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{212c}",
+ });
+ }
+
+ if first_char == 'C' && try_read("Hcy;") {
+ return Some(CharRef {
+ name: "Hcy;",
+ characters: "\u{427}",
+ });
+ }
+
+ if first_char == 'C' && try_read("OPY;") {
+ return Some(CharRef {
+ name: "OPY;",
+ characters: "\u{a9}",
+ });
+ }
+
+ if first_char == 'C' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{10a}",
+ });
+ }
+
+ if first_char == 'C' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{2102}",
+ });
+ }
+
+ if first_char == 'C' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d49e}",
+ });
+ }
+
+ if first_char == 'D' && try_read("Jcy;") {
+ return Some(CharRef {
+ name: "Jcy;",
+ characters: "\u{402}",
+ });
+ }
+
+ if first_char == 'D' && try_read("Scy;") {
+ return Some(CharRef {
+ name: "Scy;",
+ characters: "\u{405}",
+ });
+ }
+
+ if first_char == 'D' && try_read("Zcy;") {
+ return Some(CharRef {
+ name: "Zcy;",
+ characters: "\u{40f}",
+ });
+ }
+
+ if first_char == 'D' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{21a1}",
+ });
+ }
+
+ if first_char == 'D' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d53b}",
+ });
+ }
+
+ if first_char == 'D' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d49f}",
+ });
+ }
+
+ if first_char == 'E' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{ca}",
+ });
+ }
+
+ if first_char == 'E' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{116}",
+ });
+ }
+
+ if first_char == 'E' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d53c}",
+ });
+ }
+
+ if first_char == 'E' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2130}",
+ });
+ }
+
+ if first_char == 'E' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{2a73}",
+ });
+ }
+
+ if first_char == 'E' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{cb}",
+ });
+ }
+
+ if first_char == 'F' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d53d}",
+ });
+ }
+
+ if first_char == 'F' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2131}",
+ });
+ }
+
+ if first_char == 'G' && try_read("Jcy;") {
+ return Some(CharRef {
+ name: "Jcy;",
+ characters: "\u{403}",
+ });
+ }
+
+ if first_char == 'G' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{120}",
+ });
+ }
+
+ if first_char == 'G' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d53e}",
+ });
+ }
+
+ if first_char == 'G' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4a2}",
+ });
+ }
+
+ if first_char == 'H' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{210d}",
+ });
+ }
+
+ if first_char == 'H' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{210b}",
+ });
+ }
+
+ if first_char == 'I' && try_read("Ecy;") {
+ return Some(CharRef {
+ name: "Ecy;",
+ characters: "\u{415}",
+ });
+ }
+
+ if first_char == 'I' && try_read("Ocy;") {
+ return Some(CharRef {
+ name: "Ocy;",
+ characters: "\u{401}",
+ });
+ }
+
+ if first_char == 'I' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{ce}",
+ });
+ }
+
+ if first_char == 'I' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{130}",
+ });
+ }
+
+ if first_char == 'I' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d540}",
+ });
+ }
+
+ if first_char == 'I' && try_read("ota;") {
+ return Some(CharRef {
+ name: "ota;",
+ characters: "\u{399}",
+ });
+ }
+
+ if first_char == 'I' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2110}",
+ });
+ }
+
+ if first_char == 'I' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{cf}",
+ });
+ }
+
+ if first_char == 'J' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d541}",
+ });
+ }
+
+ if first_char == 'J' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4a5}",
+ });
+ }
+
+ if first_char == 'K' && try_read("Hcy;") {
+ return Some(CharRef {
+ name: "Hcy;",
+ characters: "\u{425}",
+ });
+ }
+
+ if first_char == 'K' && try_read("Jcy;") {
+ return Some(CharRef {
+ name: "Jcy;",
+ characters: "\u{40c}",
+ });
+ }
+
+ if first_char == 'K' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d542}",
+ });
+ }
+
+ if first_char == 'K' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4a6}",
+ });
+ }
+
+ if first_char == 'L' && try_read("Jcy;") {
+ return Some(CharRef {
+ name: "Jcy;",
+ characters: "\u{409}",
+ });
+ }
+
+ if first_char == 'L' && try_read("ang;") {
+ return Some(CharRef {
+ name: "ang;",
+ characters: "\u{27ea}",
+ });
+ }
+
+ if first_char == 'L' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{219e}",
+ });
+ }
+
+ if first_char == 'L' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d543}",
+ });
+ }
+
+ if first_char == 'L' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2112}",
+ });
+ }
+
+ if first_char == 'M' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d544}",
+ });
+ }
+
+ if first_char == 'M' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2133}",
+ });
+ }
+
+ if first_char == 'N' && try_read("Jcy;") {
+ return Some(CharRef {
+ name: "Jcy;",
+ characters: "\u{40a}",
+ });
+ }
+
+ if first_char == 'N' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{2115}",
+ });
+ }
+
+ if first_char == 'N' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4a9}",
+ });
+ }
+
+ if first_char == 'O' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{d4}",
+ });
+ }
+
+ if first_char == 'O' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d546}",
+ });
+ }
+
+ if first_char == 'O' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4aa}",
+ });
+ }
+
+ if first_char == 'O' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{d6}",
+ });
+ }
+
+ if first_char == 'P' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{2119}",
+ });
+ }
+
+ if first_char == 'P' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4ab}",
+ });
+ }
+
+ if first_char == 'Q' && try_read("UOT;") {
+ return Some(CharRef {
+ name: "UOT;",
+ characters: "\u{22}",
+ });
+ }
+
+ if first_char == 'Q' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{211a}",
+ });
+ }
+
+ if first_char == 'Q' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4ac}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ang;") {
+ return Some(CharRef {
+ name: "ang;",
+ characters: "\u{27eb}",
+ });
+ }
+
+ if first_char == 'R' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{21a0}",
+ });
+ }
+
+ if first_char == 'R' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{211d}",
+ });
+ }
+
+ if first_char == 'R' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{211b}",
+ });
+ }
+
+ if first_char == 'S' && try_read("Hcy;") {
+ return Some(CharRef {
+ name: "Hcy;",
+ characters: "\u{428}",
+ });
+ }
+
+ if first_char == 'S' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54a}",
+ });
+ }
+
+ if first_char == 'S' && try_read("qrt;") {
+ return Some(CharRef {
+ name: "qrt;",
+ characters: "\u{221a}",
+ });
+ }
+
+ if first_char == 'S' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4ae}",
+ });
+ }
+
+ if first_char == 'S' && try_read("tar;") {
+ return Some(CharRef {
+ name: "tar;",
+ characters: "\u{22c6}",
+ });
+ }
+
+ if first_char == 'T' && try_read("HORN") {
+ return Some(CharRef {
+ name: "HORN",
+ characters: "\u{de}",
+ });
+ }
+
+ if first_char == 'T' && try_read("Scy;") {
+ return Some(CharRef {
+ name: "Scy;",
+ characters: "\u{426}",
+ });
+ }
+
+ if first_char == 'T' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54b}",
+ });
+ }
+
+ if first_char == 'T' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4af}",
+ });
+ }
+
+ if first_char == 'U' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{219f}",
+ });
+ }
+
+ if first_char == 'U' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{db}",
+ });
+ }
+
+ if first_char == 'U' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54c}",
+ });
+ }
+
+ if first_char == 'U' && try_read("psi;") {
+ return Some(CharRef {
+ name: "psi;",
+ characters: "\u{3d2}",
+ });
+ }
+
+ if first_char == 'U' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b0}",
+ });
+ }
+
+ if first_char == 'U' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{dc}",
+ });
+ }
+
+ if first_char == 'V' && try_read("bar;") {
+ return Some(CharRef {
+ name: "bar;",
+ characters: "\u{2aeb}",
+ });
+ }
+
+ if first_char == 'V' && try_read("ert;") {
+ return Some(CharRef {
+ name: "ert;",
+ characters: "\u{2016}",
+ });
+ }
+
+ if first_char == 'V' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54d}",
+ });
+ }
+
+ if first_char == 'V' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b1}",
+ });
+ }
+
+ if first_char == 'W' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54e}",
+ });
+ }
+
+ if first_char == 'W' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b2}",
+ });
+ }
+
+ if first_char == 'X' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d54f}",
+ });
+ }
+
+ if first_char == 'X' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b3}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("Acy;") {
+ return Some(CharRef {
+ name: "Acy;",
+ characters: "\u{42f}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("Icy;") {
+ return Some(CharRef {
+ name: "Icy;",
+ characters: "\u{407}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("Ucy;") {
+ return Some(CharRef {
+ name: "Ucy;",
+ characters: "\u{42e}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d550}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b4}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{178}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("Hcy;") {
+ return Some(CharRef {
+ name: "Hcy;",
+ characters: "\u{416}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{17b}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("eta;") {
+ return Some(CharRef {
+ name: "eta;",
+ characters: "\u{396}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{2124}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b5}",
+ });
+ }
+
+ if first_char == 'a' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{e2}",
+ });
+ }
+
+ if first_char == 'a' && try_read("cute") {
+ return Some(CharRef {
+ name: "cute",
+ characters: "\u{b4}",
+ });
+ }
+
+ if first_char == 'a' && try_read("elig") {
+ return Some(CharRef {
+ name: "elig",
+ characters: "\u{e6}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ndd;") {
+ return Some(CharRef {
+ name: "ndd;",
+ characters: "\u{2a5c}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ndv;") {
+ return Some(CharRef {
+ name: "ndv;",
+ characters: "\u{2a5a}",
+ });
+ }
+
+ if first_char == 'a' && try_read("nge;") {
+ return Some(CharRef {
+ name: "nge;",
+ characters: "\u{29a4}",
+ });
+ }
+
+ if first_char == 'a' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d552}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pid;") {
+ return Some(CharRef {
+ name: "pid;",
+ characters: "\u{224b}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pos;") {
+ return Some(CharRef {
+ name: "pos;",
+ characters: "\u{27}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ring") {
+ return Some(CharRef {
+ name: "ring",
+ characters: "\u{e5}",
+ });
+ }
+
+ if first_char == 'a' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b6}",
+ });
+ }
+
+ if first_char == 'a' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{e4}",
+ });
+ }
+
+ if first_char == 'b' && try_read("Not;") {
+ return Some(CharRef {
+ name: "Not;",
+ characters: "\u{2aed}",
+ });
+ }
+
+ if first_char == 'b' && try_read("brk;") {
+ return Some(CharRef {
+ name: "brk;",
+ characters: "\u{23b5}",
+ });
+ }
+
+ if first_char == 'b' && try_read("eta;") {
+ return Some(CharRef {
+ name: "eta;",
+ characters: "\u{3b2}",
+ });
+ }
+
+ if first_char == 'b' && try_read("eth;") {
+ return Some(CharRef {
+ name: "eth;",
+ characters: "\u{2136}",
+ });
+ }
+
+ if first_char == 'b' && try_read("not;") {
+ return Some(CharRef {
+ name: "not;",
+ characters: "\u{2310}",
+ });
+ }
+
+ if first_char == 'b' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d553}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxH;") {
+ return Some(CharRef {
+ name: "oxH;",
+ characters: "\u{2550}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxV;") {
+ return Some(CharRef {
+ name: "oxV;",
+ characters: "\u{2551}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxh;") {
+ return Some(CharRef {
+ name: "oxh;",
+ characters: "\u{2500}",
+ });
+ }
+
+ if first_char == 'b' && try_read("oxv;") {
+ return Some(CharRef {
+ name: "oxv;",
+ characters: "\u{2502}",
+ });
+ }
+
+ if first_char == 'b' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b7}",
+ });
+ }
+
+ if first_char == 'b' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{223d}",
+ });
+ }
+
+ if first_char == 'b' && try_read("sol;") {
+ return Some(CharRef {
+ name: "sol;",
+ characters: "\u{5c}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ull;") {
+ return Some(CharRef {
+ name: "ull;",
+ characters: "\u{2022}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ump;") {
+ return Some(CharRef {
+ name: "ump;",
+ characters: "\u{224e}",
+ });
+ }
+
+ if first_char == 'c' && try_read("aps;") {
+ return Some(CharRef {
+ name: "aps;",
+ characters: "\u{2229}\u{fe00}",
+ });
+ }
+
+ if first_char == 'c' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{10b}",
+ });
+ }
+
+ if first_char == 'c' && try_read("edil") {
+ return Some(CharRef {
+ name: "edil",
+ characters: "\u{b8}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ent;") {
+ return Some(CharRef {
+ name: "ent;",
+ characters: "\u{a2}",
+ });
+ }
+
+ if first_char == 'c' && try_read("hcy;") {
+ return Some(CharRef {
+ name: "hcy;",
+ characters: "\u{447}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irE;") {
+ return Some(CharRef {
+ name: "irE;",
+ characters: "\u{29c3}",
+ });
+ }
+
+ if first_char == 'c' && try_read("irc;") {
+ return Some(CharRef {
+ name: "irc;",
+ characters: "\u{2c6}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ire;") {
+ return Some(CharRef {
+ name: "ire;",
+ characters: "\u{2257}",
+ });
+ }
+
+ if first_char == 'c' && try_read("omp;") {
+ return Some(CharRef {
+ name: "omp;",
+ characters: "\u{2201}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ong;") {
+ return Some(CharRef {
+ name: "ong;",
+ characters: "\u{2245}",
+ });
+ }
+
+ if first_char == 'c' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d554}",
+ });
+ }
+
+ if first_char == 'c' && try_read("opy;") {
+ return Some(CharRef {
+ name: "opy;",
+ characters: "\u{a9}",
+ });
+ }
+
+ if first_char == 'c' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b8}",
+ });
+ }
+
+ if first_char == 'c' && try_read("sub;") {
+ return Some(CharRef {
+ name: "sub;",
+ characters: "\u{2acf}",
+ });
+ }
+
+ if first_char == 'c' && try_read("sup;") {
+ return Some(CharRef {
+ name: "sup;",
+ characters: "\u{2ad0}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ups;") {
+ return Some(CharRef {
+ name: "ups;",
+ characters: "\u{222a}\u{fe00}",
+ });
+ }
+
+ if first_char == 'd' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d3}",
+ });
+ }
+
+ if first_char == 'd' && try_read("Har;") {
+ return Some(CharRef {
+ name: "Har;",
+ characters: "\u{2965}",
+ });
+ }
+
+ if first_char == 'd' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2193}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ash;") {
+ return Some(CharRef {
+ name: "ash;",
+ characters: "\u{2010}",
+ });
+ }
+
+ if first_char == 'd' && try_read("iam;") {
+ return Some(CharRef {
+ name: "iam;",
+ characters: "\u{22c4}",
+ });
+ }
+
+ if first_char == 'd' && try_read("jcy;") {
+ return Some(CharRef {
+ name: "jcy;",
+ characters: "\u{452}",
+ });
+ }
+
+ if first_char == 'd' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d555}",
+ });
+ }
+
+ if first_char == 'd' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4b9}",
+ });
+ }
+
+ if first_char == 'd' && try_read("scy;") {
+ return Some(CharRef {
+ name: "scy;",
+ characters: "\u{455}",
+ });
+ }
+
+ if first_char == 'd' && try_read("sol;") {
+ return Some(CharRef {
+ name: "sol;",
+ characters: "\u{29f6}",
+ });
+ }
+
+ if first_char == 'd' && try_read("tri;") {
+ return Some(CharRef {
+ name: "tri;",
+ characters: "\u{25bf}",
+ });
+ }
+
+ if first_char == 'd' && try_read("zcy;") {
+ return Some(CharRef {
+ name: "zcy;",
+ characters: "\u{45f}",
+ });
+ }
+
+ if first_char == 'e' && try_read("Dot;") {
+ return Some(CharRef {
+ name: "Dot;",
+ characters: "\u{2251}",
+ });
+ }
+
+ if first_char == 'e' && try_read("cir;") {
+ return Some(CharRef {
+ name: "cir;",
+ characters: "\u{2256}",
+ });
+ }
+
+ if first_char == 'e' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{ea}",
+ });
+ }
+
+ if first_char == 'e' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{117}",
+ });
+ }
+
+ if first_char == 'e' && try_read("msp;") {
+ return Some(CharRef {
+ name: "msp;",
+ characters: "\u{2003}",
+ });
+ }
+
+ if first_char == 'e' && try_read("nsp;") {
+ return Some(CharRef {
+ name: "nsp;",
+ characters: "\u{2002}",
+ });
+ }
+
+ if first_char == 'e' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d556}",
+ });
+ }
+
+ if first_char == 'e' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{22d5}",
+ });
+ }
+
+ if first_char == 'e' && try_read("psi;") {
+ return Some(CharRef {
+ name: "psi;",
+ characters: "\u{3b5}",
+ });
+ }
+
+ if first_char == 'e' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{212f}",
+ });
+ }
+
+ if first_char == 'e' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{2242}",
+ });
+ }
+
+ if first_char == 'e' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{eb}",
+ });
+ }
+
+ if first_char == 'e' && try_read("uro;") {
+ return Some(CharRef {
+ name: "uro;",
+ characters: "\u{20ac}",
+ });
+ }
+
+ if first_char == 'e' && try_read("xcl;") {
+ return Some(CharRef {
+ name: "xcl;",
+ characters: "\u{21}",
+ });
+ }
+
+ if first_char == 'f' && try_read("lat;") {
+ return Some(CharRef {
+ name: "lat;",
+ characters: "\u{266d}",
+ });
+ }
+
+ if first_char == 'f' && try_read("nof;") {
+ return Some(CharRef {
+ name: "nof;",
+ characters: "\u{192}",
+ });
+ }
+
+ if first_char == 'f' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d557}",
+ });
+ }
+
+ if first_char == 'f' && try_read("ork;") {
+ return Some(CharRef {
+ name: "ork;",
+ characters: "\u{22d4}",
+ });
+ }
+
+ if first_char == 'f' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4bb}",
+ });
+ }
+
+ if first_char == 'g' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{121}",
+ });
+ }
+
+ if first_char == 'g' && try_read("eqq;") {
+ return Some(CharRef {
+ name: "eqq;",
+ characters: "\u{2267}",
+ });
+ }
+
+ if first_char == 'g' && try_read("esl;") {
+ return Some(CharRef {
+ name: "esl;",
+ characters: "\u{22db}\u{fe00}",
+ });
+ }
+
+ if first_char == 'g' && try_read("jcy;") {
+ return Some(CharRef {
+ name: "jcy;",
+ characters: "\u{453}",
+ });
+ }
+
+ if first_char == 'g' && try_read("nap;") {
+ return Some(CharRef {
+ name: "nap;",
+ characters: "\u{2a8a}",
+ });
+ }
+
+ if first_char == 'g' && try_read("neq;") {
+ return Some(CharRef {
+ name: "neq;",
+ characters: "\u{2a88}",
+ });
+ }
+
+ if first_char == 'g' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d558}",
+ });
+ }
+
+ if first_char == 'g' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{210a}",
+ });
+ }
+
+ if first_char == 'g' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{2273}",
+ });
+ }
+
+ if first_char == 'g' && try_read("tcc;") {
+ return Some(CharRef {
+ name: "tcc;",
+ characters: "\u{2aa7}",
+ });
+ }
+
+ if first_char == 'g' && try_read("vnE;") {
+ return Some(CharRef {
+ name: "vnE;",
+ characters: "\u{2269}\u{fe00}",
+ });
+ }
+
+ if first_char == 'h' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d4}",
+ });
+ }
+
+ if first_char == 'h' && try_read("alf;") {
+ return Some(CharRef {
+ name: "alf;",
+ characters: "\u{bd}",
+ });
+ }
+
+ if first_char == 'h' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2194}",
+ });
+ }
+
+ if first_char == 'h' && try_read("bar;") {
+ return Some(CharRef {
+ name: "bar;",
+ characters: "\u{210f}",
+ });
+ }
+
+ if first_char == 'h' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d559}",
+ });
+ }
+
+ if first_char == 'h' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4bd}",
+ });
+ }
+
+ if first_char == 'i' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{ee}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ecy;") {
+ return Some(CharRef {
+ name: "ecy;",
+ characters: "\u{435}",
+ });
+ }
+
+ if first_char == 'i' && try_read("excl") {
+ return Some(CharRef {
+ name: "excl",
+ characters: "\u{a1}",
+ });
+ }
+
+ if first_char == 'i' && try_read("mof;") {
+ return Some(CharRef {
+ name: "mof;",
+ characters: "\u{22b7}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ocy;") {
+ return Some(CharRef {
+ name: "ocy;",
+ characters: "\u{451}",
+ });
+ }
+
+ if first_char == 'i' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55a}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ota;") {
+ return Some(CharRef {
+ name: "ota;",
+ characters: "\u{3b9}",
+ });
+ }
+
+ if first_char == 'i' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4be}",
+ });
+ }
+
+ if first_char == 'i' && try_read("sin;") {
+ return Some(CharRef {
+ name: "sin;",
+ characters: "\u{2208}",
+ });
+ }
+
+ if first_char == 'i' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{ef}",
+ });
+ }
+
+ if first_char == 'j' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55b}",
+ });
+ }
+
+ if first_char == 'j' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4bf}",
+ });
+ }
+
+ if first_char == 'k' && try_read("hcy;") {
+ return Some(CharRef {
+ name: "hcy;",
+ characters: "\u{445}",
+ });
+ }
+
+ if first_char == 'k' && try_read("jcy;") {
+ return Some(CharRef {
+ name: "jcy;",
+ characters: "\u{45c}",
+ });
+ }
+
+ if first_char == 'k' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55c}",
+ });
+ }
+
+ if first_char == 'k' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c0}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d0}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Har;") {
+ return Some(CharRef {
+ name: "Har;",
+ characters: "\u{2962}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ang;") {
+ return Some(CharRef {
+ name: "ang;",
+ characters: "\u{27e8}",
+ });
+ }
+
+ if first_char == 'l' && try_read("aquo") {
+ return Some(CharRef {
+ name: "aquo",
+ characters: "\u{ab}",
+ });
+ }
+
+ if first_char == 'l' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2190}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ate;") {
+ return Some(CharRef {
+ name: "ate;",
+ characters: "\u{2aad}",
+ });
+ }
+
+ if first_char == 'l' && try_read("cub;") {
+ return Some(CharRef {
+ name: "cub;",
+ characters: "\u{7b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("dca;") {
+ return Some(CharRef {
+ name: "dca;",
+ characters: "\u{2936}",
+ });
+ }
+
+ if first_char == 'l' && try_read("dsh;") {
+ return Some(CharRef {
+ name: "dsh;",
+ characters: "\u{21b2}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eqq;") {
+ return Some(CharRef {
+ name: "eqq;",
+ characters: "\u{2266}",
+ });
+ }
+
+ if first_char == 'l' && try_read("esg;") {
+ return Some(CharRef {
+ name: "esg;",
+ characters: "\u{22da}\u{fe00}",
+ });
+ }
+
+ if first_char == 'l' && try_read("jcy;") {
+ return Some(CharRef {
+ name: "jcy;",
+ characters: "\u{459}",
+ });
+ }
+
+ if first_char == 'l' && try_read("nap;") {
+ return Some(CharRef {
+ name: "nap;",
+ characters: "\u{2a89}",
+ });
+ }
+
+ if first_char == 'l' && try_read("neq;") {
+ return Some(CharRef {
+ name: "neq;",
+ characters: "\u{2a87}",
+ });
+ }
+
+ if first_char == 'l' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ozf;") {
+ return Some(CharRef {
+ name: "ozf;",
+ characters: "\u{29eb}",
+ });
+ }
+
+ if first_char == 'l' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{28}",
+ });
+ }
+
+ if first_char == 'l' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c1}",
+ });
+ }
+
+ if first_char == 'l' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{2272}",
+ });
+ }
+
+ if first_char == 'l' && try_read("sqb;") {
+ return Some(CharRef {
+ name: "sqb;",
+ characters: "\u{5b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tcc;") {
+ return Some(CharRef {
+ name: "tcc;",
+ characters: "\u{2aa6}",
+ });
+ }
+
+ if first_char == 'l' && try_read("tri;") {
+ return Some(CharRef {
+ name: "tri;",
+ characters: "\u{25c3}",
+ });
+ }
+
+ if first_char == 'l' && try_read("vnE;") {
+ return Some(CharRef {
+ name: "vnE;",
+ characters: "\u{2268}\u{fe00}",
+ });
+ }
+
+ if first_char == 'm' && try_read("acr;") {
+ return Some(CharRef {
+ name: "acr;",
+ characters: "\u{af}",
+ });
+ }
+
+ if first_char == 'm' && try_read("ale;") {
+ return Some(CharRef {
+ name: "ale;",
+ characters: "\u{2642}",
+ });
+ }
+
+ if first_char == 'm' && try_read("alt;") {
+ return Some(CharRef {
+ name: "alt;",
+ characters: "\u{2720}",
+ });
+ }
+
+ if first_char == 'm' && try_read("icro") {
+ return Some(CharRef {
+ name: "icro",
+ characters: "\u{b5}",
+ });
+ }
+
+ if first_char == 'm' && try_read("lcp;") {
+ return Some(CharRef {
+ name: "lcp;",
+ characters: "\u{2adb}",
+ });
+ }
+
+ if first_char == 'm' && try_read("ldr;") {
+ return Some(CharRef {
+ name: "ldr;",
+ characters: "\u{2026}",
+ });
+ }
+
+ if first_char == 'm' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55e}",
+ });
+ }
+
+ if first_char == 'm' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Gtv;") {
+ return Some(CharRef {
+ name: "Gtv;",
+ characters: "\u{226b}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Ltv;") {
+ return Some(CharRef {
+ name: "Ltv;",
+ characters: "\u{226a}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ang;") {
+ return Some(CharRef {
+ name: "ang;",
+ characters: "\u{2220}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("apE;") {
+ return Some(CharRef {
+ name: "apE;",
+ characters: "\u{2a70}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("bsp;") {
+ return Some(CharRef {
+ name: "bsp;",
+ characters: "\u{a0}",
+ });
+ }
+
+ if first_char == 'n' && try_read("cap;") {
+ return Some(CharRef {
+ name: "cap;",
+ characters: "\u{2a43}",
+ });
+ }
+
+ if first_char == 'n' && try_read("cup;") {
+ return Some(CharRef {
+ name: "cup;",
+ characters: "\u{2a42}",
+ });
+ }
+
+ if first_char == 'n' && try_read("geq;") {
+ return Some(CharRef {
+ name: "geq;",
+ characters: "\u{2271}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ges;") {
+ return Some(CharRef {
+ name: "ges;",
+ characters: "\u{2a7e}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("gtr;") {
+ return Some(CharRef {
+ name: "gtr;",
+ characters: "\u{226f}",
+ });
+ }
+
+ if first_char == 'n' && try_read("isd;") {
+ return Some(CharRef {
+ name: "isd;",
+ characters: "\u{22fa}",
+ });
+ }
+
+ if first_char == 'n' && try_read("jcy;") {
+ return Some(CharRef {
+ name: "jcy;",
+ characters: "\u{45a}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ldr;") {
+ return Some(CharRef {
+ name: "ldr;",
+ characters: "\u{2025}",
+ });
+ }
+
+ if first_char == 'n' && try_read("leq;") {
+ return Some(CharRef {
+ name: "leq;",
+ characters: "\u{2270}",
+ });
+ }
+
+ if first_char == 'n' && try_read("les;") {
+ return Some(CharRef {
+ name: "les;",
+ characters: "\u{2a7d}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("mid;") {
+ return Some(CharRef {
+ name: "mid;",
+ characters: "\u{2224}",
+ });
+ }
+
+ if first_char == 'n' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d55f}",
+ });
+ }
+
+ if first_char == 'n' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{2226}",
+ });
+ }
+
+ if first_char == 'n' && try_read("pre;") {
+ return Some(CharRef {
+ name: "pre;",
+ characters: "\u{2aaf}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sce;") {
+ return Some(CharRef {
+ name: "sce;",
+ characters: "\u{2ab0}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c3}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sim;") {
+ return Some(CharRef {
+ name: "sim;",
+ characters: "\u{2241}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sub;") {
+ return Some(CharRef {
+ name: "sub;",
+ characters: "\u{2284}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sup;") {
+ return Some(CharRef {
+ name: "sup;",
+ characters: "\u{2285}",
+ });
+ }
+
+ if first_char == 'n' && try_read("tgl;") {
+ return Some(CharRef {
+ name: "tgl;",
+ characters: "\u{2279}",
+ });
+ }
+
+ if first_char == 'n' && try_read("tlg;") {
+ return Some(CharRef {
+ name: "tlg;",
+ characters: "\u{2278}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vap;") {
+ return Some(CharRef {
+ name: "vap;",
+ characters: "\u{224d}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vge;") {
+ return Some(CharRef {
+ name: "vge;",
+ characters: "\u{2265}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vgt;") {
+ return Some(CharRef {
+ name: "vgt;",
+ characters: "\u{3e}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vle;") {
+ return Some(CharRef {
+ name: "vle;",
+ characters: "\u{2264}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("vlt;") {
+ return Some(CharRef {
+ name: "vlt;",
+ characters: "\u{3c}\u{20d2}",
+ });
+ }
+
+ if first_char == 'o' && try_read("ast;") {
+ return Some(CharRef {
+ name: "ast;",
+ characters: "\u{229b}",
+ });
+ }
+
+ if first_char == 'o' && try_read("cir;") {
+ return Some(CharRef {
+ name: "cir;",
+ characters: "\u{229a}",
+ });
+ }
+
+ if first_char == 'o' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{f4}",
+ });
+ }
+
+ if first_char == 'o' && try_read("div;") {
+ return Some(CharRef {
+ name: "div;",
+ characters: "\u{2a38}",
+ });
+ }
+
+ if first_char == 'o' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{2299}",
+ });
+ }
+
+ if first_char == 'o' && try_read("gon;") {
+ return Some(CharRef {
+ name: "gon;",
+ characters: "\u{2db}",
+ });
+ }
+
+ if first_char == 'o' && try_read("int;") {
+ return Some(CharRef {
+ name: "int;",
+ characters: "\u{222e}",
+ });
+ }
+
+ if first_char == 'o' && try_read("mid;") {
+ return Some(CharRef {
+ name: "mid;",
+ characters: "\u{29b6}",
+ });
+ }
+
+ if first_char == 'o' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d560}",
+ });
+ }
+
+ if first_char == 'o' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{29b7}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rdf;") {
+ return Some(CharRef {
+ name: "rdf;",
+ characters: "\u{aa}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rdm;") {
+ return Some(CharRef {
+ name: "rdm;",
+ characters: "\u{ba}",
+ });
+ }
+
+ if first_char == 'o' && try_read("ror;") {
+ return Some(CharRef {
+ name: "ror;",
+ characters: "\u{2a56}",
+ });
+ }
+
+ if first_char == 'o' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{2134}",
+ });
+ }
+
+ if first_char == 'o' && try_read("sol;") {
+ return Some(CharRef {
+ name: "sol;",
+ characters: "\u{2298}",
+ });
+ }
+
+ if first_char == 'o' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{f6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ara;") {
+ return Some(CharRef {
+ name: "ara;",
+ characters: "\u{b6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("art;") {
+ return Some(CharRef {
+ name: "art;",
+ characters: "\u{2202}",
+ });
+ }
+
+ if first_char == 'p' && try_read("erp;") {
+ return Some(CharRef {
+ name: "erp;",
+ characters: "\u{22a5}",
+ });
+ }
+
+ if first_char == 'p' && try_read("hiv;") {
+ return Some(CharRef {
+ name: "hiv;",
+ characters: "\u{3d5}",
+ });
+ }
+
+ if first_char == 'p' && try_read("lus;") {
+ return Some(CharRef {
+ name: "lus;",
+ characters: "\u{2b}",
+ });
+ }
+
+ if first_char == 'p' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d561}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ound") {
+ return Some(CharRef {
+ name: "ound",
+ characters: "\u{a3}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rap;") {
+ return Some(CharRef {
+ name: "rap;",
+ characters: "\u{2ab7}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rec;") {
+ return Some(CharRef {
+ name: "rec;",
+ characters: "\u{227a}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rnE;") {
+ return Some(CharRef {
+ name: "rnE;",
+ characters: "\u{2ab5}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rod;") {
+ return Some(CharRef {
+ name: "rod;",
+ characters: "\u{220f}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rop;") {
+ return Some(CharRef {
+ name: "rop;",
+ characters: "\u{221d}",
+ });
+ }
+
+ if first_char == 'p' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c5}",
+ });
+ }
+
+ if first_char == 'q' && try_read("int;") {
+ return Some(CharRef {
+ name: "int;",
+ characters: "\u{2a0c}",
+ });
+ }
+
+ if first_char == 'q' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d562}",
+ });
+ }
+
+ if first_char == 'q' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c6}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uot;") {
+ return Some(CharRef {
+ name: "uot;",
+ characters: "\u{22}",
+ });
+ }
+
+ if first_char == 'r' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d2}",
+ });
+ }
+
+ if first_char == 'r' && try_read("Har;") {
+ return Some(CharRef {
+ name: "Har;",
+ characters: "\u{2964}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ace;") {
+ return Some(CharRef {
+ name: "ace;",
+ characters: "\u{223d}\u{331}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ang;") {
+ return Some(CharRef {
+ name: "ang;",
+ characters: "\u{27e9}",
+ });
+ }
+
+ if first_char == 'r' && try_read("aquo") {
+ return Some(CharRef {
+ name: "aquo",
+ characters: "\u{bb}",
+ });
+ }
+
+ if first_char == 'r' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2192}",
+ });
+ }
+
+ if first_char == 'r' && try_read("cub;") {
+ return Some(CharRef {
+ name: "cub;",
+ characters: "\u{7d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("dca;") {
+ return Some(CharRef {
+ name: "dca;",
+ characters: "\u{2937}",
+ });
+ }
+
+ if first_char == 'r' && try_read("dsh;") {
+ return Some(CharRef {
+ name: "dsh;",
+ characters: "\u{21b3}",
+ });
+ }
+
+ if first_char == 'r' && try_read("eal;") {
+ return Some(CharRef {
+ name: "eal;",
+ characters: "\u{211c}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ect;") {
+ return Some(CharRef {
+ name: "ect;",
+ characters: "\u{25ad}",
+ });
+ }
+
+ if first_char == 'r' && try_read("hov;") {
+ return Some(CharRef {
+ name: "hov;",
+ characters: "\u{3f1}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ing;") {
+ return Some(CharRef {
+ name: "ing;",
+ characters: "\u{2da}",
+ });
+ }
+
+ if first_char == 'r' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d563}",
+ });
+ }
+
+ if first_char == 'r' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{29}",
+ });
+ }
+
+ if first_char == 'r' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c7}",
+ });
+ }
+
+ if first_char == 'r' && try_read("sqb;") {
+ return Some(CharRef {
+ name: "sqb;",
+ characters: "\u{5d}",
+ });
+ }
+
+ if first_char == 'r' && try_read("tri;") {
+ return Some(CharRef {
+ name: "tri;",
+ characters: "\u{25b9}",
+ });
+ }
+
+ if first_char == 's' && try_read("cap;") {
+ return Some(CharRef {
+ name: "cap;",
+ characters: "\u{2ab8}",
+ });
+ }
+
+ if first_char == 's' && try_read("cnE;") {
+ return Some(CharRef {
+ name: "cnE;",
+ characters: "\u{2ab6}",
+ });
+ }
+
+ if first_char == 's' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{22c5}",
+ });
+ }
+
+ if first_char == 's' && try_read("ect;") {
+ return Some(CharRef {
+ name: "ect;",
+ characters: "\u{a7}",
+ });
+ }
+
+ if first_char == 's' && try_read("emi;") {
+ return Some(CharRef {
+ name: "emi;",
+ characters: "\u{3b}",
+ });
+ }
+
+ if first_char == 's' && try_read("ext;") {
+ return Some(CharRef {
+ name: "ext;",
+ characters: "\u{2736}",
+ });
+ }
+
+ if first_char == 's' && try_read("hcy;") {
+ return Some(CharRef {
+ name: "hcy;",
+ characters: "\u{448}",
+ });
+ }
+
+ if first_char == 's' && try_read("ime;") {
+ return Some(CharRef {
+ name: "ime;",
+ characters: "\u{2243}",
+ });
+ }
+
+ if first_char == 's' && try_read("img;") {
+ return Some(CharRef {
+ name: "img;",
+ characters: "\u{2a9e}",
+ });
+ }
+
+ if first_char == 's' && try_read("iml;") {
+ return Some(CharRef {
+ name: "iml;",
+ characters: "\u{2a9d}",
+ });
+ }
+
+ if first_char == 's' && try_read("mid;") {
+ return Some(CharRef {
+ name: "mid;",
+ characters: "\u{2223}",
+ });
+ }
+
+ if first_char == 's' && try_read("mte;") {
+ return Some(CharRef {
+ name: "mte;",
+ characters: "\u{2aac}",
+ });
+ }
+
+ if first_char == 's' && try_read("olb;") {
+ return Some(CharRef {
+ name: "olb;",
+ characters: "\u{29c4}",
+ });
+ }
+
+ if first_char == 's' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d564}",
+ });
+ }
+
+ if first_char == 's' && try_read("par;") {
+ return Some(CharRef {
+ name: "par;",
+ characters: "\u{2225}",
+ });
+ }
+
+ if first_char == 's' && try_read("quf;") {
+ return Some(CharRef {
+ name: "quf;",
+ characters: "\u{25aa}",
+ });
+ }
+
+ if first_char == 's' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c8}",
+ });
+ }
+
+ if first_char == 's' && try_read("tar;") {
+ return Some(CharRef {
+ name: "tar;",
+ characters: "\u{2606}",
+ });
+ }
+
+ if first_char == 's' && try_read("ubE;") {
+ return Some(CharRef {
+ name: "ubE;",
+ characters: "\u{2ac5}",
+ });
+ }
+
+ if first_char == 's' && try_read("ube;") {
+ return Some(CharRef {
+ name: "ube;",
+ characters: "\u{2286}",
+ });
+ }
+
+ if first_char == 's' && try_read("ucc;") {
+ return Some(CharRef {
+ name: "ucc;",
+ characters: "\u{227b}",
+ });
+ }
+
+ if first_char == 's' && try_read("ung;") {
+ return Some(CharRef {
+ name: "ung;",
+ characters: "\u{266a}",
+ });
+ }
+
+ if first_char == 's' && try_read("up1;") {
+ return Some(CharRef {
+ name: "up1;",
+ characters: "\u{b9}",
+ });
+ }
+
+ if first_char == 's' && try_read("up2;") {
+ return Some(CharRef {
+ name: "up2;",
+ characters: "\u{b2}",
+ });
+ }
+
+ if first_char == 's' && try_read("up3;") {
+ return Some(CharRef {
+ name: "up3;",
+ characters: "\u{b3}",
+ });
+ }
+
+ if first_char == 's' && try_read("upE;") {
+ return Some(CharRef {
+ name: "upE;",
+ characters: "\u{2ac6}",
+ });
+ }
+
+ if first_char == 's' && try_read("upe;") {
+ return Some(CharRef {
+ name: "upe;",
+ characters: "\u{2287}",
+ });
+ }
+
+ if first_char == 's' && try_read("zlig") {
+ return Some(CharRef {
+ name: "zlig",
+ characters: "\u{df}",
+ });
+ }
+
+ if first_char == 't' && try_read("brk;") {
+ return Some(CharRef {
+ name: "brk;",
+ characters: "\u{23b4}",
+ });
+ }
+
+ if first_char == 't' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{20db}",
+ });
+ }
+
+ if first_char == 't' && try_read("horn") {
+ return Some(CharRef {
+ name: "horn",
+ characters: "\u{fe}",
+ });
+ }
+
+ if first_char == 't' && try_read("imes") {
+ return Some(CharRef {
+ name: "imes",
+ characters: "\u{d7}",
+ });
+ }
+
+ if first_char == 't' && try_read("int;") {
+ return Some(CharRef {
+ name: "int;",
+ characters: "\u{222d}",
+ });
+ }
+
+ if first_char == 't' && try_read("oea;") {
+ return Some(CharRef {
+ name: "oea;",
+ characters: "\u{2928}",
+ });
+ }
+
+ if first_char == 't' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d565}",
+ });
+ }
+
+ if first_char == 't' && try_read("osa;") {
+ return Some(CharRef {
+ name: "osa;",
+ characters: "\u{2929}",
+ });
+ }
+
+ if first_char == 't' && try_read("rie;") {
+ return Some(CharRef {
+ name: "rie;",
+ characters: "\u{225c}",
+ });
+ }
+
+ if first_char == 't' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4c9}",
+ });
+ }
+
+ if first_char == 't' && try_read("scy;") {
+ return Some(CharRef {
+ name: "scy;",
+ characters: "\u{446}",
+ });
+ }
+
+ if first_char == 'u' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d1}",
+ });
+ }
+
+ if first_char == 'u' && try_read("Har;") {
+ return Some(CharRef {
+ name: "Har;",
+ characters: "\u{2963}",
+ });
+ }
+
+ if first_char == 'u' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2191}",
+ });
+ }
+
+ if first_char == 'u' && try_read("circ") {
+ return Some(CharRef {
+ name: "circ",
+ characters: "\u{fb}",
+ });
+ }
+
+ if first_char == 'u' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d566}",
+ });
+ }
+
+ if first_char == 'u' && try_read("psi;") {
+ return Some(CharRef {
+ name: "psi;",
+ characters: "\u{3c5}",
+ });
+ }
+
+ if first_char == 'u' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4ca}",
+ });
+ }
+
+ if first_char == 'u' && try_read("tri;") {
+ return Some(CharRef {
+ name: "tri;",
+ characters: "\u{25b5}",
+ });
+ }
+
+ if first_char == 'u' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{fc}",
+ });
+ }
+
+ if first_char == 'v' && try_read("Arr;") {
+ return Some(CharRef {
+ name: "Arr;",
+ characters: "\u{21d5}",
+ });
+ }
+
+ if first_char == 'v' && try_read("Bar;") {
+ return Some(CharRef {
+ name: "Bar;",
+ characters: "\u{2ae8}",
+ });
+ }
+
+ if first_char == 'v' && try_read("arr;") {
+ return Some(CharRef {
+ name: "arr;",
+ characters: "\u{2195}",
+ });
+ }
+
+ if first_char == 'v' && try_read("ert;") {
+ return Some(CharRef {
+ name: "ert;",
+ characters: "\u{7c}",
+ });
+ }
+
+ if first_char == 'v' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d567}",
+ });
+ }
+
+ if first_char == 'v' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4cb}",
+ });
+ }
+
+ if first_char == 'w' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d568}",
+ });
+ }
+
+ if first_char == 'w' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4cc}",
+ });
+ }
+
+ if first_char == 'x' && try_read("cap;") {
+ return Some(CharRef {
+ name: "cap;",
+ characters: "\u{22c2}",
+ });
+ }
+
+ if first_char == 'x' && try_read("cup;") {
+ return Some(CharRef {
+ name: "cup;",
+ characters: "\u{22c3}",
+ });
+ }
+
+ if first_char == 'x' && try_read("map;") {
+ return Some(CharRef {
+ name: "map;",
+ characters: "\u{27fc}",
+ });
+ }
+
+ if first_char == 'x' && try_read("nis;") {
+ return Some(CharRef {
+ name: "nis;",
+ characters: "\u{22fb}",
+ });
+ }
+
+ if first_char == 'x' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d569}",
+ });
+ }
+
+ if first_char == 'x' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4cd}",
+ });
+ }
+
+ if first_char == 'x' && try_read("vee;") {
+ return Some(CharRef {
+ name: "vee;",
+ characters: "\u{22c1}",
+ });
+ }
+
+ if first_char == 'y' && try_read("acy;") {
+ return Some(CharRef {
+ name: "acy;",
+ characters: "\u{44f}",
+ });
+ }
+
+ if first_char == 'y' && try_read("icy;") {
+ return Some(CharRef {
+ name: "icy;",
+ characters: "\u{457}",
+ });
+ }
+
+ if first_char == 'y' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d56a}",
+ });
+ }
+
+ if first_char == 'y' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4ce}",
+ });
+ }
+
+ if first_char == 'y' && try_read("ucy;") {
+ return Some(CharRef {
+ name: "ucy;",
+ characters: "\u{44e}",
+ });
+ }
+
+ if first_char == 'y' && try_read("uml;") {
+ return Some(CharRef {
+ name: "uml;",
+ characters: "\u{ff}",
+ });
+ }
+
+ if first_char == 'z' && try_read("dot;") {
+ return Some(CharRef {
+ name: "dot;",
+ characters: "\u{17c}",
+ });
+ }
+
+ if first_char == 'z' && try_read("eta;") {
+ return Some(CharRef {
+ name: "eta;",
+ characters: "\u{3b6}",
+ });
+ }
+
+ if first_char == 'z' && try_read("hcy;") {
+ return Some(CharRef {
+ name: "hcy;",
+ characters: "\u{436}",
+ });
+ }
+
+ if first_char == 'z' && try_read("opf;") {
+ return Some(CharRef {
+ name: "opf;",
+ characters: "\u{1d56b}",
+ });
+ }
+
+ if first_char == 'z' && try_read("scr;") {
+ return Some(CharRef {
+ name: "scr;",
+ characters: "\u{1d4cf}",
+ });
+ }
+
+ if first_char == 'z' && try_read("wnj;") {
+ return Some(CharRef {
+ name: "wnj;",
+ characters: "\u{200c}",
+ });
+ }
+
+ if first_char == 'A' && try_read("MP;") {
+ return Some(CharRef {
+ name: "MP;",
+ characters: "\u{26}",
+ });
+ }
+
+ if first_char == 'A' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{410}",
+ });
+ }
+
+ if first_char == 'A' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d504}",
+ });
+ }
+
+ if first_char == 'A' && try_read("nd;") {
+ return Some(CharRef {
+ name: "nd;",
+ characters: "\u{2a53}",
+ });
+ }
+
+ if first_char == 'A' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{c4}",
+ });
+ }
+
+ if first_char == 'B' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{411}",
+ });
+ }
+
+ if first_char == 'B' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d505}",
+ });
+ }
+
+ if first_char == 'C' && try_read("OPY") {
+ return Some(CharRef {
+ name: "OPY",
+ characters: "\u{a9}",
+ });
+ }
+
+ if first_char == 'C' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{22d2}",
+ });
+ }
+
+ if first_char == 'C' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{212d}",
+ });
+ }
+
+ if first_char == 'C' && try_read("hi;") {
+ return Some(CharRef {
+ name: "hi;",
+ characters: "\u{3a7}",
+ });
+ }
+
+ if first_char == 'C' && try_read("up;") {
+ return Some(CharRef {
+ name: "up;",
+ characters: "\u{22d3}",
+ });
+ }
+
+ if first_char == 'D' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{414}",
+ });
+ }
+
+ if first_char == 'D' && try_read("el;") {
+ return Some(CharRef {
+ name: "el;",
+ characters: "\u{2207}",
+ });
+ }
+
+ if first_char == 'D' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d507}",
+ });
+ }
+
+ if first_char == 'D' && try_read("ot;") {
+ return Some(CharRef {
+ name: "ot;",
+ characters: "\u{a8}",
+ });
+ }
+
+ if first_char == 'E' && try_read("NG;") {
+ return Some(CharRef {
+ name: "NG;",
+ characters: "\u{14a}",
+ });
+ }
+
+ if first_char == 'E' && try_read("TH;") {
+ return Some(CharRef {
+ name: "TH;",
+ characters: "\u{d0}",
+ });
+ }
+
+ if first_char == 'E' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{42d}",
+ });
+ }
+
+ if first_char == 'E' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d508}",
+ });
+ }
+
+ if first_char == 'E' && try_read("ta;") {
+ return Some(CharRef {
+ name: "ta;",
+ characters: "\u{397}",
+ });
+ }
+
+ if first_char == 'E' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{cb}",
+ });
+ }
+
+ if first_char == 'F' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{424}",
+ });
+ }
+
+ if first_char == 'F' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d509}",
+ });
+ }
+
+ if first_char == 'G' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{413}",
+ });
+ }
+
+ if first_char == 'G' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d50a}",
+ });
+ }
+
+ if first_char == 'H' && try_read("at;") {
+ return Some(CharRef {
+ name: "at;",
+ characters: "\u{5e}",
+ });
+ }
+
+ if first_char == 'H' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{210c}",
+ });
+ }
+
+ if first_char == 'I' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{418}",
+ });
+ }
+
+ if first_char == 'I' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{2111}",
+ });
+ }
+
+ if first_char == 'I' && try_read("nt;") {
+ return Some(CharRef {
+ name: "nt;",
+ characters: "\u{222c}",
+ });
+ }
+
+ if first_char == 'I' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{cf}",
+ });
+ }
+
+ if first_char == 'J' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{419}",
+ });
+ }
+
+ if first_char == 'J' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d50d}",
+ });
+ }
+
+ if first_char == 'K' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41a}",
+ });
+ }
+
+ if first_char == 'K' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d50e}",
+ });
+ }
+
+ if first_char == 'L' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41b}",
+ });
+ }
+
+ if first_char == 'L' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d50f}",
+ });
+ }
+
+ if first_char == 'L' && try_read("sh;") {
+ return Some(CharRef {
+ name: "sh;",
+ characters: "\u{21b0}",
+ });
+ }
+
+ if first_char == 'M' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{2905}",
+ });
+ }
+
+ if first_char == 'M' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41c}",
+ });
+ }
+
+ if first_char == 'M' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d510}",
+ });
+ }
+
+ if first_char == 'N' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41d}",
+ });
+ }
+
+ if first_char == 'N' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d511}",
+ });
+ }
+
+ if first_char == 'N' && try_read("ot;") {
+ return Some(CharRef {
+ name: "ot;",
+ characters: "\u{2aec}",
+ });
+ }
+
+ if first_char == 'O' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41e}",
+ });
+ }
+
+ if first_char == 'O' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d512}",
+ });
+ }
+
+ if first_char == 'O' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{d6}",
+ });
+ }
+
+ if first_char == 'P' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{41f}",
+ });
+ }
+
+ if first_char == 'P' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d513}",
+ });
+ }
+
+ if first_char == 'P' && try_read("hi;") {
+ return Some(CharRef {
+ name: "hi;",
+ characters: "\u{3a6}",
+ });
+ }
+
+ if first_char == 'P' && try_read("si;") {
+ return Some(CharRef {
+ name: "si;",
+ characters: "\u{3a8}",
+ });
+ }
+
+ if first_char == 'Q' && try_read("UOT") {
+ return Some(CharRef {
+ name: "UOT",
+ characters: "\u{22}",
+ });
+ }
+
+ if first_char == 'Q' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d514}",
+ });
+ }
+
+ if first_char == 'R' && try_read("EG;") {
+ return Some(CharRef {
+ name: "EG;",
+ characters: "\u{ae}",
+ });
+ }
+
+ if first_char == 'R' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{420}",
+ });
+ }
+
+ if first_char == 'R' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{211c}",
+ });
+ }
+
+ if first_char == 'R' && try_read("ho;") {
+ return Some(CharRef {
+ name: "ho;",
+ characters: "\u{3a1}",
+ });
+ }
+
+ if first_char == 'R' && try_read("sh;") {
+ return Some(CharRef {
+ name: "sh;",
+ characters: "\u{21b1}",
+ });
+ }
+
+ if first_char == 'S' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{421}",
+ });
+ }
+
+ if first_char == 'S' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d516}",
+ });
+ }
+
+ if first_char == 'S' && try_read("ub;") {
+ return Some(CharRef {
+ name: "ub;",
+ characters: "\u{22d0}",
+ });
+ }
+
+ if first_char == 'S' && try_read("um;") {
+ return Some(CharRef {
+ name: "um;",
+ characters: "\u{2211}",
+ });
+ }
+
+ if first_char == 'S' && try_read("up;") {
+ return Some(CharRef {
+ name: "up;",
+ characters: "\u{22d1}",
+ });
+ }
+
+ if first_char == 'T' && try_read("ab;") {
+ return Some(CharRef {
+ name: "ab;",
+ characters: "\u{9}",
+ });
+ }
+
+ if first_char == 'T' && try_read("au;") {
+ return Some(CharRef {
+ name: "au;",
+ characters: "\u{3a4}",
+ });
+ }
+
+ if first_char == 'T' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{422}",
+ });
+ }
+
+ if first_char == 'T' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d517}",
+ });
+ }
+
+ if first_char == 'U' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{423}",
+ });
+ }
+
+ if first_char == 'U' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d518}",
+ });
+ }
+
+ if first_char == 'U' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{dc}",
+ });
+ }
+
+ if first_char == 'V' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{412}",
+ });
+ }
+
+ if first_char == 'V' && try_read("ee;") {
+ return Some(CharRef {
+ name: "ee;",
+ characters: "\u{22c1}",
+ });
+ }
+
+ if first_char == 'V' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d519}",
+ });
+ }
+
+ if first_char == 'W' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d51a}",
+ });
+ }
+
+ if first_char == 'X' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d51b}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{42b}",
+ });
+ }
+
+ if first_char == 'Y' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d51c}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{417}",
+ });
+ }
+
+ if first_char == 'Z' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{2128}",
+ });
+ }
+
+ if first_char == 'a' && try_read("cE;") {
+ return Some(CharRef {
+ name: "cE;",
+ characters: "\u{223e}\u{333}",
+ });
+ }
+
+ if first_char == 'a' && try_read("cd;") {
+ return Some(CharRef {
+ name: "cd;",
+ characters: "\u{223f}",
+ });
+ }
+
+ if first_char == 'a' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{430}",
+ });
+ }
+
+ if first_char == 'a' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d51e}",
+ });
+ }
+
+ if first_char == 'a' && try_read("mp;") {
+ return Some(CharRef {
+ name: "mp;",
+ characters: "\u{26}",
+ });
+ }
+
+ if first_char == 'a' && try_read("nd;") {
+ return Some(CharRef {
+ name: "nd;",
+ characters: "\u{2227}",
+ });
+ }
+
+ if first_char == 'a' && try_read("ng;") {
+ return Some(CharRef {
+ name: "ng;",
+ characters: "\u{2220}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pE;") {
+ return Some(CharRef {
+ name: "pE;",
+ characters: "\u{2a70}",
+ });
+ }
+
+ if first_char == 'a' && try_read("pe;") {
+ return Some(CharRef {
+ name: "pe;",
+ characters: "\u{224a}",
+ });
+ }
+
+ if first_char == 'a' && try_read("st;") {
+ return Some(CharRef {
+ name: "st;",
+ characters: "\u{2a}",
+ });
+ }
+
+ if first_char == 'a' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{e4}",
+ });
+ }
+
+ if first_char == 'b' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{431}",
+ });
+ }
+
+ if first_char == 'b' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d51f}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ne;") {
+ return Some(CharRef {
+ name: "ne;",
+ characters: "\u{3d}\u{20e5}",
+ });
+ }
+
+ if first_char == 'b' && try_read("ot;") {
+ return Some(CharRef {
+ name: "ot;",
+ characters: "\u{22a5}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{2229}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ent") {
+ return Some(CharRef {
+ name: "ent",
+ characters: "\u{a2}",
+ });
+ }
+
+ if first_char == 'c' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d520}",
+ });
+ }
+
+ if first_char == 'c' && try_read("hi;") {
+ return Some(CharRef {
+ name: "hi;",
+ characters: "\u{3c7}",
+ });
+ }
+
+ if first_char == 'c' && try_read("ir;") {
+ return Some(CharRef {
+ name: "ir;",
+ characters: "\u{25cb}",
+ });
+ }
+
+ if first_char == 'c' && try_read("opy") {
+ return Some(CharRef {
+ name: "opy",
+ characters: "\u{a9}",
+ });
+ }
+
+ if first_char == 'c' && try_read("up;") {
+ return Some(CharRef {
+ name: "up;",
+ characters: "\u{222a}",
+ });
+ }
+
+ if first_char == 'd' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{434}",
+ });
+ }
+
+ if first_char == 'd' && try_read("eg;") {
+ return Some(CharRef {
+ name: "eg;",
+ characters: "\u{b0}",
+ });
+ }
+
+ if first_char == 'd' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d521}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ie;") {
+ return Some(CharRef {
+ name: "ie;",
+ characters: "\u{a8}",
+ });
+ }
+
+ if first_char == 'd' && try_read("iv;") {
+ return Some(CharRef {
+ name: "iv;",
+ characters: "\u{f7}",
+ });
+ }
+
+ if first_char == 'd' && try_read("ot;") {
+ return Some(CharRef {
+ name: "ot;",
+ characters: "\u{2d9}",
+ });
+ }
+
+ if first_char == 'e' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{44d}",
+ });
+ }
+
+ if first_char == 'e' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d522}",
+ });
+ }
+
+ if first_char == 'e' && try_read("gs;") {
+ return Some(CharRef {
+ name: "gs;",
+ characters: "\u{2a96}",
+ });
+ }
+
+ if first_char == 'e' && try_read("ll;") {
+ return Some(CharRef {
+ name: "ll;",
+ characters: "\u{2113}",
+ });
+ }
+
+ if first_char == 'e' && try_read("ls;") {
+ return Some(CharRef {
+ name: "ls;",
+ characters: "\u{2a95}",
+ });
+ }
+
+ if first_char == 'e' && try_read("ng;") {
+ return Some(CharRef {
+ name: "ng;",
+ characters: "\u{14b}",
+ });
+ }
+
+ if first_char == 'e' && try_read("ta;") {
+ return Some(CharRef {
+ name: "ta;",
+ characters: "\u{3b7}",
+ });
+ }
+
+ if first_char == 'e' && try_read("th;") {
+ return Some(CharRef {
+ name: "th;",
+ characters: "\u{f0}",
+ });
+ }
+
+ if first_char == 'e' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{eb}",
+ });
+ }
+
+ if first_char == 'f' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{444}",
+ });
+ }
+
+ if first_char == 'f' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d523}",
+ });
+ }
+
+ if first_char == 'g' && try_read("El;") {
+ return Some(CharRef {
+ name: "El;",
+ characters: "\u{2a8c}",
+ });
+ }
+
+ if first_char == 'g' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{2a86}",
+ });
+ }
+
+ if first_char == 'g' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{433}",
+ });
+ }
+
+ if first_char == 'g' && try_read("el;") {
+ return Some(CharRef {
+ name: "el;",
+ characters: "\u{22db}",
+ });
+ }
+
+ if first_char == 'g' && try_read("eq;") {
+ return Some(CharRef {
+ name: "eq;",
+ characters: "\u{2265}",
+ });
+ }
+
+ if first_char == 'g' && try_read("es;") {
+ return Some(CharRef {
+ name: "es;",
+ characters: "\u{2a7e}",
+ });
+ }
+
+ if first_char == 'g' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d524}",
+ });
+ }
+
+ if first_char == 'g' && try_read("gg;") {
+ return Some(CharRef {
+ name: "gg;",
+ characters: "\u{22d9}",
+ });
+ }
+
+ if first_char == 'g' && try_read("lE;") {
+ return Some(CharRef {
+ name: "lE;",
+ characters: "\u{2a92}",
+ });
+ }
+
+ if first_char == 'g' && try_read("la;") {
+ return Some(CharRef {
+ name: "la;",
+ characters: "\u{2aa5}",
+ });
+ }
+
+ if first_char == 'g' && try_read("lj;") {
+ return Some(CharRef {
+ name: "lj;",
+ characters: "\u{2aa4}",
+ });
+ }
+
+ if first_char == 'g' && try_read("nE;") {
+ return Some(CharRef {
+ name: "nE;",
+ characters: "\u{2269}",
+ });
+ }
+
+ if first_char == 'g' && try_read("ne;") {
+ return Some(CharRef {
+ name: "ne;",
+ characters: "\u{2a88}",
+ });
+ }
+
+ if first_char == 'h' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d525}",
+ });
+ }
+
+ if first_char == 'i' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{438}",
+ });
+ }
+
+ if first_char == 'i' && try_read("ff;") {
+ return Some(CharRef {
+ name: "ff;",
+ characters: "\u{21d4}",
+ });
+ }
+
+ if first_char == 'i' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d526}",
+ });
+ }
+
+ if first_char == 'i' && try_read("nt;") {
+ return Some(CharRef {
+ name: "nt;",
+ characters: "\u{222b}",
+ });
+ }
+
+ if first_char == 'i' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{ef}",
+ });
+ }
+
+ if first_char == 'j' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{439}",
+ });
+ }
+
+ if first_char == 'j' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d527}",
+ });
+ }
+
+ if first_char == 'k' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43a}",
+ });
+ }
+
+ if first_char == 'k' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d528}",
+ });
+ }
+
+ if first_char == 'l' && try_read("Eg;") {
+ return Some(CharRef {
+ name: "Eg;",
+ characters: "\u{2a8b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{2a85}",
+ });
+ }
+
+ if first_char == 'l' && try_read("at;") {
+ return Some(CharRef {
+ name: "at;",
+ characters: "\u{2aab}",
+ });
+ }
+
+ if first_char == 'l' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43b}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eg;") {
+ return Some(CharRef {
+ name: "eg;",
+ characters: "\u{22da}",
+ });
+ }
+
+ if first_char == 'l' && try_read("eq;") {
+ return Some(CharRef {
+ name: "eq;",
+ characters: "\u{2264}",
+ });
+ }
+
+ if first_char == 'l' && try_read("es;") {
+ return Some(CharRef {
+ name: "es;",
+ characters: "\u{2a7d}",
+ });
+ }
+
+ if first_char == 'l' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d529}",
+ });
+ }
+
+ if first_char == 'l' && try_read("gE;") {
+ return Some(CharRef {
+ name: "gE;",
+ characters: "\u{2a91}",
+ });
+ }
+
+ if first_char == 'l' && try_read("nE;") {
+ return Some(CharRef {
+ name: "nE;",
+ characters: "\u{2268}",
+ });
+ }
+
+ if first_char == 'l' && try_read("ne;") {
+ return Some(CharRef {
+ name: "ne;",
+ characters: "\u{2a87}",
+ });
+ }
+
+ if first_char == 'l' && try_read("oz;") {
+ return Some(CharRef {
+ name: "oz;",
+ characters: "\u{25ca}",
+ });
+ }
+
+ if first_char == 'l' && try_read("rm;") {
+ return Some(CharRef {
+ name: "rm;",
+ characters: "\u{200e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("sh;") {
+ return Some(CharRef {
+ name: "sh;",
+ characters: "\u{21b0}",
+ });
+ }
+
+ if first_char == 'm' && try_read("acr") {
+ return Some(CharRef {
+ name: "acr",
+ characters: "\u{af}",
+ });
+ }
+
+ if first_char == 'm' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{21a6}",
+ });
+ }
+
+ if first_char == 'm' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43c}",
+ });
+ }
+
+ if first_char == 'm' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52a}",
+ });
+ }
+
+ if first_char == 'm' && try_read("ho;") {
+ return Some(CharRef {
+ name: "ho;",
+ characters: "\u{2127}",
+ });
+ }
+
+ if first_char == 'm' && try_read("id;") {
+ return Some(CharRef {
+ name: "id;",
+ characters: "\u{2223}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Gg;") {
+ return Some(CharRef {
+ name: "Gg;",
+ characters: "\u{22d9}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Gt;") {
+ return Some(CharRef {
+ name: "Gt;",
+ characters: "\u{226b}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Ll;") {
+ return Some(CharRef {
+ name: "Ll;",
+ characters: "\u{22d8}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("Lt;") {
+ return Some(CharRef {
+ name: "Lt;",
+ characters: "\u{226a}\u{20d2}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ap;") {
+ return Some(CharRef {
+ name: "ap;",
+ characters: "\u{2249}",
+ });
+ }
+
+ if first_char == 'n' && try_read("bsp") {
+ return Some(CharRef {
+ name: "bsp",
+ characters: "\u{a0}",
+ });
+ }
+
+ if first_char == 'n' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43d}",
+ });
+ }
+
+ if first_char == 'n' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52b}",
+ });
+ }
+
+ if first_char == 'n' && try_read("gE;") {
+ return Some(CharRef {
+ name: "gE;",
+ characters: "\u{2267}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ge;") {
+ return Some(CharRef {
+ name: "ge;",
+ characters: "\u{2271}",
+ });
+ }
+
+ if first_char == 'n' && try_read("gt;") {
+ return Some(CharRef {
+ name: "gt;",
+ characters: "\u{226f}",
+ });
+ }
+
+ if first_char == 'n' && try_read("is;") {
+ return Some(CharRef {
+ name: "is;",
+ characters: "\u{22fc}",
+ });
+ }
+
+ if first_char == 'n' && try_read("iv;") {
+ return Some(CharRef {
+ name: "iv;",
+ characters: "\u{220b}",
+ });
+ }
+
+ if first_char == 'n' && try_read("lE;") {
+ return Some(CharRef {
+ name: "lE;",
+ characters: "\u{2266}\u{338}",
+ });
+ }
+
+ if first_char == 'n' && try_read("le;") {
+ return Some(CharRef {
+ name: "le;",
+ characters: "\u{2270}",
+ });
+ }
+
+ if first_char == 'n' && try_read("lt;") {
+ return Some(CharRef {
+ name: "lt;",
+ characters: "\u{226e}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ot;") {
+ return Some(CharRef {
+ name: "ot;",
+ characters: "\u{ac}",
+ });
+ }
+
+ if first_char == 'n' && try_read("pr;") {
+ return Some(CharRef {
+ name: "pr;",
+ characters: "\u{2280}",
+ });
+ }
+
+ if first_char == 'n' && try_read("sc;") {
+ return Some(CharRef {
+ name: "sc;",
+ characters: "\u{2281}",
+ });
+ }
+
+ if first_char == 'n' && try_read("um;") {
+ return Some(CharRef {
+ name: "um;",
+ characters: "\u{23}",
+ });
+ }
+
+ if first_char == 'o' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43e}",
+ });
+ }
+
+ if first_char == 'o' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52c}",
+ });
+ }
+
+ if first_char == 'o' && try_read("gt;") {
+ return Some(CharRef {
+ name: "gt;",
+ characters: "\u{29c1}",
+ });
+ }
+
+ if first_char == 'o' && try_read("hm;") {
+ return Some(CharRef {
+ name: "hm;",
+ characters: "\u{3a9}",
+ });
+ }
+
+ if first_char == 'o' && try_read("lt;") {
+ return Some(CharRef {
+ name: "lt;",
+ characters: "\u{29c0}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rd;") {
+ return Some(CharRef {
+ name: "rd;",
+ characters: "\u{2a5d}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rdf") {
+ return Some(CharRef {
+ name: "rdf",
+ characters: "\u{aa}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rdm") {
+ return Some(CharRef {
+ name: "rdm",
+ characters: "\u{ba}",
+ });
+ }
+
+ if first_char == 'o' && try_read("rv;") {
+ return Some(CharRef {
+ name: "rv;",
+ characters: "\u{2a5b}",
+ });
+ }
+
+ if first_char == 'o' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{f6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ar;") {
+ return Some(CharRef {
+ name: "ar;",
+ characters: "\u{2225}",
+ });
+ }
+
+ if first_char == 'p' && try_read("ara") {
+ return Some(CharRef {
+ name: "ara",
+ characters: "\u{b6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{43f}",
+ });
+ }
+
+ if first_char == 'p' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52d}",
+ });
+ }
+
+ if first_char == 'p' && try_read("hi;") {
+ return Some(CharRef {
+ name: "hi;",
+ characters: "\u{3c6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("iv;") {
+ return Some(CharRef {
+ name: "iv;",
+ characters: "\u{3d6}",
+ });
+ }
+
+ if first_char == 'p' && try_read("rE;") {
+ return Some(CharRef {
+ name: "rE;",
+ characters: "\u{2ab3}",
+ });
+ }
+
+ if first_char == 'p' && try_read("re;") {
+ return Some(CharRef {
+ name: "re;",
+ characters: "\u{2aaf}",
+ });
+ }
+
+ if first_char == 'p' && try_read("si;") {
+ return Some(CharRef {
+ name: "si;",
+ characters: "\u{3c8}",
+ });
+ }
+
+ if first_char == 'q' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52e}",
+ });
+ }
+
+ if first_char == 'q' && try_read("uot") {
+ return Some(CharRef {
+ name: "uot",
+ characters: "\u{22}",
+ });
+ }
+
+ if first_char == 'r' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{440}",
+ });
+ }
+
+ if first_char == 'r' && try_read("eg;") {
+ return Some(CharRef {
+ name: "eg;",
+ characters: "\u{ae}",
+ });
+ }
+
+ if first_char == 'r' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d52f}",
+ });
+ }
+
+ if first_char == 'r' && try_read("ho;") {
+ return Some(CharRef {
+ name: "ho;",
+ characters: "\u{3c1}",
+ });
+ }
+
+ if first_char == 'r' && try_read("lm;") {
+ return Some(CharRef {
+ name: "lm;",
+ characters: "\u{200f}",
+ });
+ }
+
+ if first_char == 'r' && try_read("sh;") {
+ return Some(CharRef {
+ name: "sh;",
+ characters: "\u{21b1}",
+ });
+ }
+
+ if first_char == 's' && try_read("cE;") {
+ return Some(CharRef {
+ name: "cE;",
+ characters: "\u{2ab4}",
+ });
+ }
+
+ if first_char == 's' && try_read("ce;") {
+ return Some(CharRef {
+ name: "ce;",
+ characters: "\u{2ab0}",
+ });
+ }
+
+ if first_char == 's' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{441}",
+ });
+ }
+
+ if first_char == 's' && try_read("ect") {
+ return Some(CharRef {
+ name: "ect",
+ characters: "\u{a7}",
+ });
+ }
+
+ if first_char == 's' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d530}",
+ });
+ }
+
+ if first_char == 's' && try_read("hy;") {
+ return Some(CharRef {
+ name: "hy;",
+ characters: "\u{ad}",
+ });
+ }
+
+ if first_char == 's' && try_read("im;") {
+ return Some(CharRef {
+ name: "im;",
+ characters: "\u{223c}",
+ });
+ }
+
+ if first_char == 's' && try_read("mt;") {
+ return Some(CharRef {
+ name: "mt;",
+ characters: "\u{2aaa}",
+ });
+ }
+
+ if first_char == 's' && try_read("ol;") {
+ return Some(CharRef {
+ name: "ol;",
+ characters: "\u{2f}",
+ });
+ }
+
+ if first_char == 's' && try_read("qu;") {
+ return Some(CharRef {
+ name: "qu;",
+ characters: "\u{25a1}",
+ });
+ }
+
+ if first_char == 's' && try_read("ub;") {
+ return Some(CharRef {
+ name: "ub;",
+ characters: "\u{2282}",
+ });
+ }
+
+ if first_char == 's' && try_read("um;") {
+ return Some(CharRef {
+ name: "um;",
+ characters: "\u{2211}",
+ });
+ }
+
+ if first_char == 's' && try_read("up1") {
+ return Some(CharRef {
+ name: "up1",
+ characters: "\u{b9}",
+ });
+ }
+
+ if first_char == 's' && try_read("up2") {
+ return Some(CharRef {
+ name: "up2",
+ characters: "\u{b2}",
+ });
+ }
+
+ if first_char == 's' && try_read("up3") {
+ return Some(CharRef {
+ name: "up3",
+ characters: "\u{b3}",
+ });
+ }
+
+ if first_char == 's' && try_read("up;") {
+ return Some(CharRef {
+ name: "up;",
+ characters: "\u{2283}",
+ });
+ }
+
+ if first_char == 't' && try_read("au;") {
+ return Some(CharRef {
+ name: "au;",
+ characters: "\u{3c4}",
+ });
+ }
+
+ if first_char == 't' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{442}",
+ });
+ }
+
+ if first_char == 't' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d531}",
+ });
+ }
+
+ if first_char == 't' && try_read("op;") {
+ return Some(CharRef {
+ name: "op;",
+ characters: "\u{22a4}",
+ });
+ }
+
+ if first_char == 'u' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{443}",
+ });
+ }
+
+ if first_char == 'u' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d532}",
+ });
+ }
+
+ if first_char == 'u' && try_read("ml;") {
+ return Some(CharRef {
+ name: "ml;",
+ characters: "\u{a8}",
+ });
+ }
+
+ if first_char == 'u' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{fc}",
+ });
+ }
+
+ if first_char == 'v' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{432}",
+ });
+ }
+
+ if first_char == 'v' && try_read("ee;") {
+ return Some(CharRef {
+ name: "ee;",
+ characters: "\u{2228}",
+ });
+ }
+
+ if first_char == 'v' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d533}",
+ });
+ }
+
+ if first_char == 'w' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d534}",
+ });
+ }
+
+ if first_char == 'x' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d535}",
+ });
+ }
+
+ if first_char == 'y' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{44b}",
+ });
+ }
+
+ if first_char == 'y' && try_read("en;") {
+ return Some(CharRef {
+ name: "en;",
+ characters: "\u{a5}",
+ });
+ }
+
+ if first_char == 'y' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d536}",
+ });
+ }
+
+ if first_char == 'y' && try_read("uml") {
+ return Some(CharRef {
+ name: "uml",
+ characters: "\u{ff}",
+ });
+ }
+
+ if first_char == 'z' && try_read("cy;") {
+ return Some(CharRef {
+ name: "cy;",
+ characters: "\u{437}",
+ });
+ }
+
+ if first_char == 'z' && try_read("fr;") {
+ return Some(CharRef {
+ name: "fr;",
+ characters: "\u{1d537}",
+ });
+ }
+
+ if first_char == 'z' && try_read("wj;") {
+ return Some(CharRef {
+ name: "wj;",
+ characters: "\u{200d}",
+ });
+ }
+
+ if first_char == 'A' && try_read("MP") {
+ return Some(CharRef {
+ name: "MP",
+ characters: "\u{26}",
+ });
+ }
+
+ if first_char == 'D' && try_read("D;") {
+ return Some(CharRef {
+ name: "D;",
+ characters: "\u{2145}",
+ });
+ }
+
+ if first_char == 'E' && try_read("TH") {
+ return Some(CharRef {
+ name: "TH",
+ characters: "\u{d0}",
+ });
+ }
+
+ if first_char == 'G' && try_read("T;") {
+ return Some(CharRef {
+ name: "T;",
+ characters: "\u{3e}",
+ });
+ }
+
+ if first_char == 'G' && try_read("g;") {
+ return Some(CharRef {
+ name: "g;",
+ characters: "\u{22d9}",
+ });
+ }
+
+ if first_char == 'G' && try_read("t;") {
+ return Some(CharRef {
+ name: "t;",
+ characters: "\u{226b}",
+ });
+ }
+
+ if first_char == 'I' && try_read("m;") {
+ return Some(CharRef {
+ name: "m;",
+ characters: "\u{2111}",
+ });
+ }
+
+ if first_char == 'L' && try_read("T;") {
+ return Some(CharRef {
+ name: "T;",
+ characters: "\u{3c}",
+ });
+ }
+
+ if first_char == 'L' && try_read("l;") {
+ return Some(CharRef {
+ name: "l;",
+ characters: "\u{22d8}",
+ });
+ }
+
+ if first_char == 'L' && try_read("t;") {
+ return Some(CharRef {
+ name: "t;",
+ characters: "\u{226a}",
+ });
+ }
+
+ if first_char == 'M' && try_read("u;") {
+ return Some(CharRef {
+ name: "u;",
+ characters: "\u{39c}",
+ });
+ }
+
+ if first_char == 'N' && try_read("u;") {
+ return Some(CharRef {
+ name: "u;",
+ characters: "\u{39d}",
+ });
+ }
+
+ if first_char == 'O' && try_read("r;") {
+ return Some(CharRef {
+ name: "r;",
+ characters: "\u{2a54}",
+ });
+ }
+
+ if first_char == 'P' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{3a0}",
+ });
+ }
+
+ if first_char == 'P' && try_read("r;") {
+ return Some(CharRef {
+ name: "r;",
+ characters: "\u{2abb}",
+ });
+ }
+
+ if first_char == 'R' && try_read("EG") {
+ return Some(CharRef {
+ name: "EG",
+ characters: "\u{ae}",
+ });
+ }
+
+ if first_char == 'R' && try_read("e;") {
+ return Some(CharRef {
+ name: "e;",
+ characters: "\u{211c}",
+ });
+ }
+
+ if first_char == 'S' && try_read("c;") {
+ return Some(CharRef {
+ name: "c;",
+ characters: "\u{2abc}",
+ });
+ }
+
+ if first_char == 'X' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{39e}",
+ });
+ }
+
+ if first_char == 'a' && try_read("c;") {
+ return Some(CharRef {
+ name: "c;",
+ characters: "\u{223e}",
+ });
+ }
+
+ if first_char == 'a' && try_read("f;") {
+ return Some(CharRef {
+ name: "f;",
+ characters: "\u{2061}",
+ });
+ }
+
+ if first_char == 'a' && try_read("mp") {
+ return Some(CharRef {
+ name: "mp",
+ characters: "\u{26}",
+ });
+ }
+
+ if first_char == 'a' && try_read("p;") {
+ return Some(CharRef {
+ name: "p;",
+ characters: "\u{2248}",
+ });
+ }
+
+ if first_char == 'd' && try_read("d;") {
+ return Some(CharRef {
+ name: "d;",
+ characters: "\u{2146}",
+ });
+ }
+
+ if first_char == 'd' && try_read("eg") {
+ return Some(CharRef {
+ name: "eg",
+ characters: "\u{b0}",
+ });
+ }
+
+ if first_char == 'e' && try_read("e;") {
+ return Some(CharRef {
+ name: "e;",
+ characters: "\u{2147}",
+ });
+ }
+
+ if first_char == 'e' && try_read("g;") {
+ return Some(CharRef {
+ name: "g;",
+ characters: "\u{2a9a}",
+ });
+ }
+
+ if first_char == 'e' && try_read("l;") {
+ return Some(CharRef {
+ name: "l;",
+ characters: "\u{2a99}",
+ });
+ }
+
+ if first_char == 'e' && try_read("th") {
+ return Some(CharRef {
+ name: "th",
+ characters: "\u{f0}",
+ });
+ }
+
+ if first_char == 'g' && try_read("E;") {
+ return Some(CharRef {
+ name: "E;",
+ characters: "\u{2267}",
+ });
+ }
+
+ if first_char == 'g' && try_read("e;") {
+ return Some(CharRef {
+ name: "e;",
+ characters: "\u{2265}",
+ });
+ }
+
+ if first_char == 'g' && try_read("g;") {
+ return Some(CharRef {
+ name: "g;",
+ characters: "\u{226b}",
+ });
+ }
+
+ if first_char == 'g' && try_read("l;") {
+ return Some(CharRef {
+ name: "l;",
+ characters: "\u{2277}",
+ });
+ }
+
+ if first_char == 'g' && try_read("t;") {
+ return Some(CharRef {
+ name: "t;",
+ characters: "\u{3e}",
+ });
+ }
+
+ if first_char == 'i' && try_read("c;") {
+ return Some(CharRef {
+ name: "c;",
+ characters: "\u{2063}",
+ });
+ }
+
+ if first_char == 'i' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{2148}",
+ });
+ }
+
+ if first_char == 'i' && try_read("n;") {
+ return Some(CharRef {
+ name: "n;",
+ characters: "\u{2208}",
+ });
+ }
+
+ if first_char == 'i' && try_read("t;") {
+ return Some(CharRef {
+ name: "t;",
+ characters: "\u{2062}",
+ });
+ }
+
+ if first_char == 'l' && try_read("E;") {
+ return Some(CharRef {
+ name: "E;",
+ characters: "\u{2266}",
+ });
+ }
+
+ if first_char == 'l' && try_read("e;") {
+ return Some(CharRef {
+ name: "e;",
+ characters: "\u{2264}",
+ });
+ }
+
+ if first_char == 'l' && try_read("g;") {
+ return Some(CharRef {
+ name: "g;",
+ characters: "\u{2276}",
+ });
+ }
+
+ if first_char == 'l' && try_read("l;") {
+ return Some(CharRef {
+ name: "l;",
+ characters: "\u{226a}",
+ });
+ }
+
+ if first_char == 'l' && try_read("t;") {
+ return Some(CharRef {
+ name: "t;",
+ characters: "\u{3c}",
+ });
+ }
+
+ if first_char == 'm' && try_read("p;") {
+ return Some(CharRef {
+ name: "p;",
+ characters: "\u{2213}",
+ });
+ }
+
+ if first_char == 'm' && try_read("u;") {
+ return Some(CharRef {
+ name: "u;",
+ characters: "\u{3bc}",
+ });
+ }
+
+ if first_char == 'n' && try_read("e;") {
+ return Some(CharRef {
+ name: "e;",
+ characters: "\u{2260}",
+ });
+ }
+
+ if first_char == 'n' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{220b}",
+ });
+ }
+
+ if first_char == 'n' && try_read("ot") {
+ return Some(CharRef {
+ name: "ot",
+ characters: "\u{ac}",
+ });
+ }
+
+ if first_char == 'n' && try_read("u;") {
+ return Some(CharRef {
+ name: "u;",
+ characters: "\u{3bd}",
+ });
+ }
+
+ if first_char == 'o' && try_read("S;") {
+ return Some(CharRef {
+ name: "S;",
+ characters: "\u{24c8}",
+ });
+ }
+
+ if first_char == 'o' && try_read("r;") {
+ return Some(CharRef {
+ name: "r;",
+ characters: "\u{2228}",
+ });
+ }
+
+ if first_char == 'p' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{3c0}",
+ });
+ }
+
+ if first_char == 'p' && try_read("m;") {
+ return Some(CharRef {
+ name: "m;",
+ characters: "\u{b1}",
+ });
+ }
+
+ if first_char == 'p' && try_read("r;") {
+ return Some(CharRef {
+ name: "r;",
+ characters: "\u{227a}",
+ });
+ }
+
+ if first_char == 'r' && try_read("eg") {
+ return Some(CharRef {
+ name: "eg",
+ characters: "\u{ae}",
+ });
+ }
+
+ if first_char == 'r' && try_read("x;") {
+ return Some(CharRef {
+ name: "x;",
+ characters: "\u{211e}",
+ });
+ }
+
+ if first_char == 's' && try_read("c;") {
+ return Some(CharRef {
+ name: "c;",
+ characters: "\u{227b}",
+ });
+ }
+
+ if first_char == 's' && try_read("hy") {
+ return Some(CharRef {
+ name: "hy",
+ characters: "\u{ad}",
+ });
+ }
+
+ if first_char == 'u' && try_read("ml") {
+ return Some(CharRef {
+ name: "ml",
+ characters: "\u{a8}",
+ });
+ }
+
+ if first_char == 'w' && try_read("p;") {
+ return Some(CharRef {
+ name: "p;",
+ characters: "\u{2118}",
+ });
+ }
+
+ if first_char == 'w' && try_read("r;") {
+ return Some(CharRef {
+ name: "r;",
+ characters: "\u{2240}",
+ });
+ }
+
+ if first_char == 'x' && try_read("i;") {
+ return Some(CharRef {
+ name: "i;",
+ characters: "\u{3be}",
+ });
+ }
+
+ if first_char == 'y' && try_read("en") {
+ return Some(CharRef {
+ name: "en",
+ characters: "\u{a5}",
+ });
+ }
+
+ if first_char == 'G' && try_read("T") {
+ return Some(CharRef {
+ name: "T",
+ characters: "\u{3e}",
+ });
+ }
+
+ if first_char == 'L' && try_read("T") {
+ return Some(CharRef {
+ name: "T",
+ characters: "\u{3c}",
+ });
+ }
+
+ if first_char == 'g' && try_read("t") {
+ return Some(CharRef {
+ name: "t",
+ characters: "\u{3e}",
+ });
+ }
+
+ if first_char == 'l' && try_read("t") {
+ return Some(CharRef {
+ name: "t",
+ characters: "\u{3c}",
+ });
+ }
+ None
+}
diff --git a/src/error.rs b/src/error.rs
new file mode 100644
index 0000000..6090fdf
--- /dev/null
+++ b/src/error.rs
@@ -0,0 +1,87 @@
+macro_rules! impl_error {
+ ($(
+ $string:literal <=> $variant:ident,
+ )*) => {
+ /// All [parsing errors](https://html.spec.whatwg.org/#parse-errors) this tokenizer can emit.
+ #[derive(Debug, Eq, PartialEq)]
+ pub enum Error {
+ $(
+ #[doc = "This error corresponds to the `$literal` error found in the WHATWG spec."]
+ $variant
+ ),*
+ }
+ impl std::str::FromStr for Error {
+ type Err = ();
+
+ /// Parse a `kebap-case` error code as typically written in the WHATWG spec into an
+ /// enum variant.
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ match s {
+ $( $string => Ok(Self::$variant), )*
+ _ => Err(())
+ }
+ }
+ }
+
+ impl std::fmt::Display for Error {
+ /// Convert an enum variant back into the `kebap-case` error code as typically written
+ /// in the WHATWG spec.
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match *self {
+ $( Self::$variant => $string.fmt(f), )*
+ }
+ }
+ }
+ }
+}
+
+impl_error! {
+ "abrupt-closing-of-empty-comment" <=> AbruptClosingOfEmptyComment,
+ "abrupt-doctype-public-identifier" <=> AbruptDoctypePublicIdentifier,
+ "abrupt-doctype-system-identifier" <=> AbruptDoctypeSystemIdentifier,
+ "absence-of-digits-in-numeric-character-reference" <=> AbsenceOfDigitsInNumericCharacterReference,
+ "cdata-in-html-content" <=> CdataInHtmlContent,
+ "character-reference-outside-unicode-range" <=> CharacterReferenceOutsideUnicodeRange,
+ "control-character-reference" <=> ControlCharacterReference,
+ "end-tag-with-attributes" <=> EndTagWithAttributes,
+ "end-tag-with-trailing-solidus" <=> EndTagWithTrailingSolidus,
+ "eof-before-tag-name" <=> EofBeforeTagName,
+ "eof-in-cdata" <=> EofInCdata,
+ "eof-in-comment" <=> EofInComment,
+ "eof-in-doctype" <=> EofInDoctype,
+ "eof-in-script-html-comment-like-text" <=> EofInScriptHtmlCommentLikeText,
+ "eof-in-tag" <=> EofInTag,
+ "incorrectly-closed-comment" <=> IncorrectlyClosedComment,
+ "incorrectly-opened-comment" <=> IncorrectlyOpenedComment,
+ "invalid-character-sequence-after-doctype-name" <=> InvalidCharacterSequenceAfterDoctypeName,
+ "invalid-first-character-of-tag-name" <=> InvalidFirstCharacterOfTagName,
+ "missing-attribute-value" <=> MissingAttributeValue,
+ "missing-doctype-name" <=> MissingDoctypeName,
+ "missing-doctype-public-identifier" <=> MissingDoctypePublicIdentifier,
+ "missing-doctype-system-identifier" <=> MissingDoctypeSystemIdentifier,
+ "missing-end-tag-name" <=> MissingEndTagName,
+ "missing-quote-before-doctype-public-identifier" <=> MissingQuoteBeforeDoctypePublicIdentifier,
+ "missing-quote-before-doctype-system-identifier" <=> MissingQuoteBeforeDoctypeSystemIdentifier,
+ "missing-semicolon-after-character-reference" <=> MissingSemicolonAfterCharacterReference,
+ "missing-whitespace-after-doctype-public-keyword" <=> MissingWhitespaceAfterDoctypePublicKeyword,
+ "missing-whitespace-after-doctype-system-keyword" <=> MissingWhitespaceAfterDoctypeSystemKeyword,
+ "missing-whitespace-before-doctype-name" <=> MissingWhitespaceBeforeDoctypeName,
+ "missing-whitespace-between-attributes" <=> MissingWhitespaceBetweenAttributes,
+ "missing-whitespace-between-doctype-public-and-system-identifiers" <=> MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers,
+ "nested-comment" <=> NestedComment,
+ "noncharacter-character-reference" <=> NoncharacterCharacterReference,
+ "noncharacter-in-input-stream" <=> NoncharacterInInputStream,
+ "null-character-reference" <=> NullCharacterReference,
+ "surrogate-character-reference" <=> SurrogateCharacterReference,
+ "surrogate-in-input-stream" <=> SurrogateInInputStream,
+ "unexpected-character-after-doctype-system-identifier" <=> UnexpectedCharacterAfterDoctypeSystemIdentifier,
+ "unexpected-character-in-attribute-name" <=> UnexpectedCharacterInAttributeName,
+ "unexpected-character-in-unquoted-attribute-value" <=> UnexpectedCharacterInUnquotedAttributeValue,
+ "unexpected-equals-sign-before-attribute-name" <=> UnexpectedEqualsSignBeforeAttributeName,
+ "unexpected-null-character" <=> UnexpectedNullCharacter,
+ "unexpected-question-mark-instead-of-tag-name" <=> UnexpectedQuestionMarkInsteadOfTagName,
+ "unexpected-solidus-in-tag" <=> UnexpectedSolidusInTag,
+ "unknown-named-character-reference" <=> UnknownNamedCharacterReference,
+ "duplicate-attribute" <=> DuplicateAttribute,
+ "control-character-in-input-stream" <=> ControlCharacterInInputStream,
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..ef6c9a2
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,2112 @@
+#![deny(missing_docs)]
+// This is an HTML parser. HTML can be untrusted input from the internet.
+#![forbid(unsafe_code)]
+#![doc = include_str!("../README.md")]
+
+mod emitter;
+mod entities;
+mod error;
+mod machine;
+mod reader;
+
+#[cfg(feature = "integration-tests")]
+pub use machine::State;
+#[cfg(not(feature = "integration-tests"))]
+use machine::State;
+
+use machine::{
+ ascii_digit_pat, control_pat, noncharacter_pat, surrogate_pat, whitespace_pat, ControlToken,
+};
+
+pub use emitter::{DefaultEmitter, Doctype, Emitter, EndTag, StartTag, Token};
+pub use reader::{Readable, Reader, StringReader};
+
+pub use error::Error;
+
+macro_rules! ctostr {
+ ($c:expr) => {
+ &*$c.encode_utf8(&mut [0; 4])
+ };
+}
+
+/// A HTML tokenizer. See crate-level docs for basic usage.
+pub struct Tokenizer<R: Reader, E: Emitter = DefaultEmitter> {
+ eof: bool,
+ state: State,
+ emitter: E,
+ temporary_buffer: String,
+ reader: R,
+ to_reconsume: Option<Option<char>>,
+ character_reference_code: u32,
+ return_state: Option<State>,
+}
+
+impl<R: Reader> Tokenizer<R> {
+ /// Create a new tokenizer from some input.
+ ///
+ /// `input` can be `&String` or `&str` at the moment, as those are the types for which
+ /// [`crate::Readable`] is implemented, but you can implement that trait on your own types.
+ ///
+ /// Patches are welcome for providing an efficient implementation over async streams,
+ /// iterators, files, etc, as long as any dependencies come behind featureflags.
+ pub fn new<'a, S: Readable<'a, Reader = R>>(input: S) -> Self {
+ Tokenizer::<S::Reader>::new_with_emitter(input, DefaultEmitter::default())
+ }
+}
+
+impl<R: Reader, E: Emitter> Tokenizer<R, E> {
+ /// Construct a new tokenizer from some input and a custom emitter.
+ ///
+ /// Use this method over [`Tokenizer::new`] when you want to have more control over string allocation for
+ /// tokens.
+ pub fn new_with_emitter<'a, S: Readable<'a, Reader = R>>(input: S, emitter: E) -> Self {
+ Tokenizer {
+ eof: false,
+ state: State::Data,
+ emitter,
+ temporary_buffer: String::new(),
+ to_reconsume: None,
+ reader: input.to_reader(),
+ character_reference_code: 0,
+ return_state: None,
+ }
+ }
+
+ #[cfg(feature = "integration-tests")]
+ /// Test-internal function to override internal state.
+ ///
+ /// Only available with the `integration-tests` feature which is not public API.
+ pub fn set_state(&mut self, state: State) {
+ self.state = state;
+ }
+
+ /// Set the statemachine to start/continue in [plaintext
+ /// state](https://html.spec.whatwg.org/#plaintext-state).
+ ///
+ /// This tokenizer never gets into that state naturally.
+ pub fn set_plaintext_state(&mut self) {
+ self.state = State::PlainText;
+ }
+
+ #[cfg(feature = "integration-tests")]
+ /// Test-internal function to override internal state.
+ ///
+ /// Only available with the `integration-tests` feature which is not public API.
+ pub fn set_last_start_tag(&mut self, last_start_tag: Option<&str>) {
+ self.emitter.set_last_start_tag(last_start_tag);
+ }
+
+ #[inline]
+ fn unread_char(&mut self, c: Option<char>) {
+ self.to_reconsume = Some(c);
+ }
+
+ #[inline]
+ fn validate_char(&mut self, c: char) {
+ match c as u32 {
+ surrogate_pat!() => {
+ self.emitter.emit_error(Error::SurrogateInInputStream);
+ }
+ noncharacter_pat!() => {
+ self.emitter.emit_error(Error::NoncharacterInInputStream);
+ }
+ // control without whitespace or nul
+ x @ control_pat!()
+ if !matches!(x, 0x0000 | 0x0009 | 0x000a | 0x000c | 0x000d | 0x0020) =>
+ {
+ self.emitter
+ .emit_error(Error::ControlCharacterInInputStream);
+ }
+ _ => (),
+ }
+ }
+
+ fn read_char(&mut self) -> Option<char> {
+ if let Some(c) = self.to_reconsume.take() {
+ return c;
+ }
+
+ let c = self.reader.read_char()?;
+ self.validate_char(c);
+ Some(c)
+ }
+
+ #[inline]
+ fn try_read_string(&mut self, s: &str, case_sensitive: bool) -> bool {
+ debug_assert!(!s.is_empty());
+ debug_assert!(self.to_reconsume.is_none());
+ self.reader.try_read_string(s, case_sensitive)
+ }
+
+ fn is_consumed_as_part_of_an_attribute(&self) -> bool {
+ matches!(
+ self.return_state,
+ Some(
+ State::AttributeValueDoubleQuoted
+ | State::AttributeValueSingleQuoted
+ | State::AttributeValueUnquoted
+ )
+ )
+ }
+
+ fn flush_code_points_consumed_as_character_reference(&mut self) {
+ if self.is_consumed_as_part_of_an_attribute() {
+ self.emitter.push_attribute_value(&self.temporary_buffer);
+ self.temporary_buffer.clear();
+ } else {
+ self.flush_buffer_characters();
+ }
+ }
+
+ fn next_input_character(&mut self) -> Option<char> {
+ let rv = self.read_char();
+ self.unread_char(rv);
+ rv
+ }
+
+ fn flush_buffer_characters(&mut self) {
+ self.emitter.emit_string(&self.temporary_buffer);
+ self.temporary_buffer.clear();
+ }
+
+ fn consume(&mut self) -> ControlToken {
+ macro_rules! mutate_character_reference {
+ (* $mul:literal + $x:ident - $sub:literal) => {
+ match self
+ .character_reference_code
+ .checked_mul($mul)
+ .and_then(|cr| cr.checked_add($x as u32 - $sub))
+ {
+ Some(cr) => self.character_reference_code = cr,
+ None => {
+ // provoke err
+ self.character_reference_code = 0x110000;
+ }
+ };
+ };
+ }
+
+ match self.state {
+ State::Data => match self.read_char() {
+ Some('&') => {
+ self.return_state = Some(self.state);
+ self.state = State::CharacterReference;
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::TagOpen;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\0");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => ControlToken::Eof,
+ },
+ State::RcData => match self.read_char() {
+ Some('&') => {
+ self.return_state = Some(State::RcData);
+ self.state = State::CharacterReference;
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::RcDataLessThanSign;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => ControlToken::Eof,
+ },
+ State::RawText => match self.read_char() {
+ Some('<') => {
+ self.state = State::RawTextLessThanSign;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => ControlToken::Eof,
+ },
+ State::ScriptData => match self.read_char() {
+ Some('<') => {
+ self.state = State::ScriptDataLessThanSign;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => ControlToken::Eof,
+ },
+ State::PlainText => match self.read_char() {
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => ControlToken::Eof,
+ },
+ State::TagOpen => match self.read_char() {
+ Some('!') => {
+ self.state = State::MarkupDeclarationOpen;
+ ControlToken::Continue
+ }
+ Some('/') => {
+ self.state = State::EndTagOpen;
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_start_tag();
+ self.state = State::TagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c @ Some('?') => {
+ self.emitter
+ .emit_error(Error::UnexpectedQuestionMarkInsteadOfTagName);
+ self.emitter.init_comment();
+ self.state = State::BogusComment;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofBeforeTagName);
+ self.emitter.emit_string("<");
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::InvalidFirstCharacterOfTagName);
+ self.state = State::Data;
+ self.emitter.emit_string("<");
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::EndTagOpen => match self.read_char() {
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_end_tag();
+ self.state = State::TagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::MissingEndTagName);
+ self.state = State::Data;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofBeforeTagName);
+ self.emitter.emit_string("</");
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter
+ .emit_error(Error::InvalidFirstCharacterOfTagName);
+ self.emitter.init_comment();
+ self.state = State::BogusComment;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ },
+ State::TagName => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_tag_name("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.push_tag_name(ctostr!(x.to_ascii_lowercase()));
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ },
+ State::RcDataLessThanSign => match self.read_char() {
+ Some('/') => {
+ self.temporary_buffer.clear();
+ self.state = State::RcDataEndTagOpen;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("<");
+ self.state = State::RcData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::RcDataEndTagOpen => match self.read_char() {
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_end_tag();
+ self.state = State::RcDataEndTagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.state = State::RcData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::RcDataEndTagName => match self.read_char() {
+ Some(whitespace_pat!()) if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.push_tag_name(ctostr!(x.to_ascii_lowercase()));
+ self.temporary_buffer.push(x);
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.flush_buffer_characters();
+
+ self.state = State::RcData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::RawTextLessThanSign => match self.read_char() {
+ Some('/') => {
+ self.temporary_buffer.clear();
+ self.state = State::RawTextEndTagOpen;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("<");
+ self.state = State::RawText;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::RawTextEndTagOpen => match self.read_char() {
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_end_tag();
+ self.state = State::RawTextEndTagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.state = State::RawText;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::RawTextEndTagName => match self.read_char() {
+ Some(whitespace_pat!()) if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.push_tag_name(ctostr!(x.to_ascii_lowercase()));
+ self.temporary_buffer.push(x);
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.flush_buffer_characters();
+
+ self.state = State::RawText;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataLessThanSign => match self.read_char() {
+ Some('/') => {
+ self.temporary_buffer.clear();
+ self.state = State::ScriptDataEndTagOpen;
+ ControlToken::Continue
+ }
+ Some('!') => {
+ self.state = State::ScriptDataEscapeStart;
+ self.emitter.emit_string("<!");
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("<");
+ self.state = State::Data;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEndTagOpen => match self.read_char() {
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_end_tag();
+ self.state = State::ScriptDataEndTagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.state = State::ScriptData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEndTagName => match self.read_char() {
+ Some(whitespace_pat!()) if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.push_tag_name(ctostr!(x.to_ascii_lowercase()));
+ self.temporary_buffer.push(x.to_ascii_lowercase());
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.flush_buffer_characters();
+ self.state = State::Data;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapeStart => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataEscapeStartDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::ScriptData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapeStartDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataEscapedDashDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::ScriptData;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscaped => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataEscapedDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::ScriptDataEscapedLessThanSign;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapedDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataEscapedDashDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::ScriptDataEscapedLessThanSign;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.state = State::ScriptDataEscaped;
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.state = State::ScriptDataEscaped;
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapedDashDash => match self.read_char() {
+ Some('-') => {
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::ScriptDataEscapedLessThanSign;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::ScriptData;
+ self.emitter.emit_string(">");
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.state = State::ScriptDataEscaped;
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.state = State::ScriptDataEscaped;
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapedLessThanSign => match self.read_char() {
+ Some('/') => {
+ self.temporary_buffer.clear();
+ self.state = State::ScriptDataEscapedEndTagOpen;
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.temporary_buffer.clear();
+ self.emitter.emit_string("<");
+ self.state = State::ScriptDataDoubleEscapeStart;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("<");
+ self.state = State::ScriptDataEscaped;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapedEndTagOpen => match self.read_char() {
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.init_end_tag();
+ self.state = State::ScriptDataEscapedEndTagName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.unread_char(c);
+ self.state = State::ScriptDataEscaped;
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataEscapedEndTagName => match self.read_char() {
+ Some(whitespace_pat!()) if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') if self.emitter.current_is_appropriate_end_tag_token() => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.emitter.push_tag_name(ctostr!(x.to_ascii_lowercase()));
+ self.temporary_buffer.push(x);
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("</");
+ self.flush_buffer_characters();
+ self.state = State::ScriptDataEscaped;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscapeStart => match self.read_char() {
+ Some(x @ whitespace_pat!() | x @ '/' | x @ '>') => {
+ if self.temporary_buffer == "script" {
+ self.state = State::ScriptDataDoubleEscaped;
+ } else {
+ self.state = State::ScriptDataEscaped;
+ }
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.temporary_buffer.push(x.to_ascii_lowercase());
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::ScriptDataEscaped;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscaped => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataDoubleEscapedDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::ScriptDataDoubleEscapedLessThanSign;
+ self.emitter.emit_string("<");
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscapedDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::ScriptDataDoubleEscapedDashDash;
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.state = State::ScriptDataDoubleEscapedLessThanSign;
+ self.emitter.emit_string("<");
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.state = State::ScriptDataDoubleEscaped;
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.state = State::ScriptDataDoubleEscaped;
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscapedDashDash => match self.read_char() {
+ Some('-') => {
+ self.emitter.emit_string("-");
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.emitter.emit_string("<");
+ self.state = State::ScriptDataDoubleEscapedLessThanSign;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_string(">");
+ self.state = State::ScriptData;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.state = State::ScriptDataDoubleEscaped;
+ self.emitter.emit_string("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter
+ .emit_error(Error::EofInScriptHtmlCommentLikeText);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.state = State::ScriptDataDoubleEscaped;
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscapedLessThanSign => match self.read_char() {
+ Some('/') => {
+ self.temporary_buffer.clear();
+ self.state = State::ScriptDataDoubleEscapeEnd;
+ self.emitter.emit_string("/");
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::ScriptDataDoubleEscaped;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::ScriptDataDoubleEscapeEnd => match self.read_char() {
+ Some(x @ whitespace_pat!() | x @ '/' | x @ '>') => {
+ if self.temporary_buffer == "script" {
+ self.state = State::ScriptDataEscaped;
+ } else {
+ self.state = State::ScriptDataDoubleEscaped;
+ }
+
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ Some(x) if x.is_ascii_alphabetic() => {
+ self.temporary_buffer.push(x.to_ascii_lowercase());
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::ScriptDataDoubleEscaped;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::BeforeAttributeName => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ c @ Some('/' | '>') | c @ None => {
+ self.state = State::AfterAttributeName;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ Some('=') => {
+ self.emitter
+ .emit_error(Error::UnexpectedEqualsSignBeforeAttributeName);
+ self.emitter.init_attribute();
+ self.emitter.push_attribute_name("=");
+ self.state = State::AttributeName;
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.init_attribute();
+ self.state = State::AttributeName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ },
+ State::AttributeName => match self.read_char() {
+ c @ Some(whitespace_pat!() | '/' | '>') | c @ None => {
+ self.state = State::AfterAttributeName;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ Some('=') => {
+ self.state = State::BeforeAttributeValue;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_attribute_name("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x @ '"' | x @ '\'' | x @ '<') => {
+ self.emitter
+ .emit_error(Error::UnexpectedCharacterInAttributeName);
+ self.emitter
+ .push_attribute_name(ctostr!(x.to_ascii_lowercase()));
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter
+ .push_attribute_name(ctostr!(x.to_ascii_lowercase()));
+ ControlToken::Continue
+ }
+ },
+ State::AfterAttributeName => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('/') => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('=') => {
+ self.state = State::BeforeAttributeValue;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.init_attribute();
+ self.state = State::AttributeName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ },
+ State::BeforeAttributeValue => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('"') => {
+ self.state = State::AttributeValueDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.state = State::AttributeValueSingleQuoted;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::MissingAttributeValue);
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ c => {
+ self.state = State::AttributeValueUnquoted;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::AttributeValueDoubleQuoted => match self.read_char() {
+ Some('"') => {
+ self.state = State::AfterAttributeValueQuoted;
+ ControlToken::Continue
+ }
+ Some('&') => {
+ self.return_state = Some(State::AttributeValueDoubleQuoted);
+ self.state = State::CharacterReference;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_attribute_value("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_attribute_value(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::AttributeValueSingleQuoted => match self.read_char() {
+ Some('\'') => {
+ self.state = State::AfterAttributeValueQuoted;
+ ControlToken::Continue
+ }
+ Some('&') => {
+ self.return_state = Some(State::AttributeValueSingleQuoted);
+ self.state = State::CharacterReference;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_attribute_value("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_attribute_value(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::AttributeValueUnquoted => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('&') => {
+ self.return_state = Some(State::AttributeValueUnquoted);
+ self.state = State::CharacterReference;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_attribute_value("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x @ '"' | x @ '\'' | x @ '<' | x @ '=' | x @ '\u{60}') => {
+ self.emitter
+ .emit_error(Error::UnexpectedCharacterInUnquotedAttributeValue);
+ self.emitter.push_attribute_value(ctostr!(x));
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_attribute_value(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::AfterAttributeValueQuoted => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeAttributeName;
+ ControlToken::Continue
+ }
+ Some('/') => {
+ self.state = State::SelfClosingStartTag;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceBetweenAttributes);
+ self.state = State::BeforeAttributeName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ },
+ State::SelfClosingStartTag => match self.read_char() {
+ Some('>') => {
+ self.emitter.set_self_closing();
+ self.state = State::Data;
+ self.emitter.emit_current_tag();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInTag);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.emit_error(Error::UnexpectedSolidusInTag);
+ self.state = State::BeforeAttributeName;
+ self.unread_char(Some(x));
+ ControlToken::Continue
+ }
+ },
+ State::BogusComment => match self.read_char() {
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_comment();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_comment("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some(x) => {
+ self.emitter.push_comment(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::MarkupDeclarationOpen => match self.read_char() {
+ Some('-') if self.try_read_string("-", true) => {
+ self.emitter.init_comment();
+ self.state = State::CommentStart;
+ ControlToken::Continue
+ }
+ Some('d' | 'D') if self.try_read_string("octype", false) => {
+ self.state = State::Doctype;
+ ControlToken::Continue
+ }
+ Some('[') if self.try_read_string("CDATA[", true) => {
+ // missing: check for adjusted current element: we don't have an element stack
+ // at all
+ //
+ // missing: cdata transition
+ //
+ // let's hope that bogus comment can just sort of skip over cdata
+ self.emitter.emit_error(Error::CdataInHtmlContent);
+
+ self.emitter.init_comment();
+ self.emitter.push_comment("[CDATA[");
+ self.state = State::BogusComment;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_error(Error::IncorrectlyOpenedComment);
+ self.emitter.init_comment();
+ self.state = State::BogusComment;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::CommentStart => match self.read_char() {
+ Some('-') => {
+ self.state = State::CommentStartDash;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::AbruptClosingOfEmptyComment);
+ self.state = State::Data;
+ self.emitter.emit_current_comment();
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::CommentStartDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::CommentEnd;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::AbruptClosingOfEmptyComment);
+ self.state = State::Data;
+ self.emitter.emit_current_comment();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInComment);
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter.push_comment("-");
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::Comment => match self.read_char() {
+ Some('<') => {
+ self.emitter.push_comment("<");
+ self.state = State::CommentLessThanSign;
+ ControlToken::Continue
+ }
+ Some('-') => {
+ self.state = State::CommentEndDash;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_comment("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInComment);
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_comment(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::CommentLessThanSign => match self.read_char() {
+ Some('!') => {
+ self.emitter.push_comment("!");
+ self.state = State::CommentLessThanSignBang;
+ ControlToken::Continue
+ }
+ Some('<') => {
+ self.emitter.push_comment("<");
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::CommentLessThanSignBang => match self.read_char() {
+ Some('-') => {
+ self.state = State::CommentLessThanSignBangDash;
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::CommentLessThanSignBangDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::CommentLessThanSignBangDashDash;
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = State::CommentEndDash;
+ ControlToken::Continue
+ }
+ },
+ State::CommentLessThanSignBangDashDash => match self.read_char() {
+ c @ Some('>') | c @ None => {
+ self.unread_char(c);
+ self.state = State::CommentEnd;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_error(Error::NestedComment);
+ self.unread_char(c);
+ self.state = State::CommentEnd;
+ ControlToken::Continue
+ }
+ },
+ State::CommentEndDash => match self.read_char() {
+ Some('-') => {
+ self.state = State::CommentEnd;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInComment);
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ c => {
+ self.emitter.push_comment("-");
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::CommentEnd => match self.read_char() {
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_comment();
+ ControlToken::Continue
+ }
+ Some('!') => {
+ self.state = State::CommentEndBang;
+ ControlToken::Continue
+ }
+ Some('-') => {
+ self.emitter.push_comment("-");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInComment);
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter.push_comment("-");
+ self.emitter.push_comment("-");
+ self.unread_char(c);
+ self.state = State::Comment;
+ ControlToken::Continue
+ }
+ },
+ State::CommentEndBang => match self.read_char() {
+ Some('-') => {
+ self.emitter.push_comment("-");
+ self.emitter.push_comment("-");
+ self.emitter.push_comment("!");
+ self.state = State::CommentEndDash;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::IncorrectlyClosedComment);
+ self.state = State::Data;
+ self.emitter.emit_current_comment();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInComment);
+ self.emitter.emit_current_comment();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter.push_comment("-");
+ self.emitter.push_comment("-");
+ self.emitter.push_comment("!");
+ self.state = State::Comment;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::Doctype => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeDoctypeName;
+ ControlToken::Continue
+ }
+ c @ Some('>') => {
+ self.unread_char(c);
+ self.state = State::BeforeDoctypeName;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.init_doctype();
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceBeforeDoctypeName);
+ self.unread_char(c);
+ self.state = State::BeforeDoctypeName;
+ ControlToken::Continue
+ }
+ },
+ State::BeforeDoctypeName => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.init_doctype();
+ self.emitter.push_doctype_name("\u{fffd}");
+ self.state = State::DoctypeName;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter.emit_error(Error::MissingDoctypeName);
+ self.emitter.init_doctype();
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.init_doctype();
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.init_doctype();
+ self.emitter
+ .push_doctype_name(ctostr!(x.to_ascii_lowercase()));
+ self.state = State::DoctypeName;
+ ControlToken::Continue
+ }
+ },
+ State::DoctypeName => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::AfterDoctypeName;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_doctype_name("\u{fffd}");
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter
+ .push_doctype_name(ctostr!(x.to_ascii_lowercase()));
+ ControlToken::Continue
+ }
+ },
+ State::AfterDoctypeName => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some('p' | 'P') if self.try_read_string("ublic", false) => {
+ self.state = State::AfterDoctypePublicKeyword;
+ ControlToken::Continue
+ }
+ Some('s' | 'S') if self.try_read_string("ystem", false) => {
+ self.state = State::AfterDoctypeSystemKeyword;
+ ControlToken::Continue
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::InvalidCharacterSequenceAfterDoctypeName);
+ self.emitter.set_force_quirks();
+ self.unread_char(c);
+ self.state = State::BogusDoctype;
+ ControlToken::Continue
+ }
+ },
+ State::AfterDoctypePublicKeyword => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeDoctypePublicIdentifier;
+ ControlToken::Continue
+ }
+ Some('"') => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceAfterDoctypePublicKeyword);
+ self.emitter.set_doctype_public_identifier("");
+ self.state = State::DoctypePublicIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceAfterDoctypePublicKeyword);
+ self.emitter.set_doctype_public_identifier("");
+ self.state = State::DoctypePublicIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::MissingDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.unread_char(c);
+ self.state = State::BogusDoctype;
+ ControlToken::Continue
+ }
+ },
+ State::BeforeDoctypePublicIdentifier => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('"') => {
+ self.emitter.set_doctype_public_identifier("");
+ self.state = State::DoctypePublicIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter.set_doctype_public_identifier("");
+ self.state = State::DoctypePublicIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::MissingDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.unread_char(c);
+ self.state = State::BogusDoctype;
+ ControlToken::Continue
+ }
+ },
+ State::DoctypePublicIdentifierDoubleQuoted => match self.read_char() {
+ Some('"') => {
+ self.state = State::AfterDoctypePublicIdentifier;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_doctype_public_identifier("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::AbruptDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_doctype_public_identifier(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::DoctypePublicIdentifierSingleQuoted => match self.read_char() {
+ Some('\'') => {
+ self.state = State::AfterDoctypePublicIdentifier;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_doctype_public_identifier("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::AbruptDoctypePublicIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_doctype_public_identifier(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::AfterDoctypePublicIdentifier => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BetweenDoctypePublicAndSystemIdentifiers;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ Some('"') => {
+ self.emitter.emit_error(
+ Error::MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers,
+ );
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter.emit_error(
+ Error::MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers,
+ );
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.unread_char(c);
+ self.state = State::BogusDoctype;
+ ControlToken::Continue
+ }
+ },
+ State::BetweenDoctypePublicAndSystemIdentifiers => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ Some('"') => {
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::BogusDoctype;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::AfterDoctypeSystemKeyword => match self.read_char() {
+ Some(whitespace_pat!()) => {
+ self.state = State::BeforeDoctypeSystemIdentifier;
+ ControlToken::Continue
+ }
+ Some('"') => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceAfterDoctypeSystemKeyword);
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter
+ .emit_error(Error::MissingWhitespaceAfterDoctypeSystemKeyword);
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::MissingDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::BogusDoctype;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::BeforeDoctypeSystemIdentifier => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('"') => {
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierDoubleQuoted;
+ ControlToken::Continue
+ }
+ Some('\'') => {
+ self.emitter.set_doctype_system_identifier("");
+ self.state = State::DoctypeSystemIdentifierSingleQuoted;
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::MissingDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::MissingQuoteBeforeDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::BogusDoctype;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::DoctypeSystemIdentifierDoubleQuoted => match self.read_char() {
+ Some('"') => {
+ self.state = State::AfterDoctypeSystemIdentifier;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_doctype_system_identifier("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::AbruptDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_doctype_system_identifier(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::DoctypeSystemIdentifierSingleQuoted => match self.read_char() {
+ Some('\'') => {
+ self.state = State::AfterDoctypeSystemIdentifier;
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ self.emitter.push_doctype_system_identifier("\u{fffd}");
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.emitter
+ .emit_error(Error::AbruptDoctypeSystemIdentifier);
+ self.emitter.set_force_quirks();
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.push_doctype_system_identifier(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::AfterDoctypeSystemIdentifier => match self.read_char() {
+ Some(whitespace_pat!()) => ControlToken::Continue,
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInDoctype);
+ self.emitter.set_force_quirks();
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ c @ Some(_) => {
+ self.emitter
+ .emit_error(Error::UnexpectedCharacterAfterDoctypeSystemIdentifier);
+ self.unread_char(c);
+ self.state = State::BogusDoctype;
+ ControlToken::Continue
+ }
+ },
+ State::BogusDoctype => match self.read_char() {
+ Some('>') => {
+ self.state = State::Data;
+ self.emitter.emit_current_doctype();
+ ControlToken::Continue
+ }
+ Some('\0') => {
+ self.emitter.emit_error(Error::UnexpectedNullCharacter);
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_current_doctype();
+ ControlToken::Eof
+ }
+ Some(_) => ControlToken::Continue,
+ },
+ State::CdataSection => match self.read_char() {
+ Some(']') => {
+ self.state = State::CdataSectionBracket;
+ ControlToken::Continue
+ }
+ None => {
+ self.emitter.emit_error(Error::EofInCdata);
+ ControlToken::Eof
+ }
+ Some(x) => {
+ self.emitter.emit_string(ctostr!(x));
+ ControlToken::Continue
+ }
+ },
+ State::CdataSectionBracket => match self.read_char() {
+ Some(']') => {
+ self.state = State::CdataSectionEnd;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("]");
+ self.state = State::CdataSection;
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ },
+ State::CdataSectionEnd => match self.read_char() {
+ Some(']') => {
+ self.emitter.emit_string("]");
+ ControlToken::Continue
+ }
+ Some('>') => {
+ self.state = State::Data;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter.emit_string("]]");
+ self.unread_char(c);
+ self.state = State::CdataSection;
+ ControlToken::Continue
+ }
+ },
+ State::CharacterReference => {
+ self.temporary_buffer.clear();
+ self.temporary_buffer.push('&');
+ match self.read_char() {
+ Some(x) if x.is_ascii_alphanumeric() => {
+ self.unread_char(Some(x));
+ self.state = State::NamedCharacterReference;
+ ControlToken::Continue
+ }
+ Some('#') => {
+ self.temporary_buffer.push('#');
+ self.state = State::NumericCharacterReference;
+ ControlToken::Continue
+ }
+ c => {
+ self.flush_code_points_consumed_as_character_reference();
+ self.state = self.return_state.take().unwrap();
+ self.unread_char(c);
+ ControlToken::Continue
+ }
+ }
+ }
+ State::NamedCharacterReference => {
+ let c = self.read_char();
+
+ let char_ref = c.and_then(|x| {
+ Some((
+ x,
+ entities::try_read_character_reference(x, |x| {
+ self.try_read_string(x, true)
+ })?,
+ ))
+ });
+
+ if let Some((x, char_ref)) = char_ref {
+ self.temporary_buffer.push(x);
+ self.temporary_buffer.push_str(char_ref.name);
+ let char_ref_name_last_character = char_ref.name.chars().last();
+ let next_character = self.next_input_character();
+ if self.is_consumed_as_part_of_an_attribute()
+ && char_ref_name_last_character != Some(';')
+ && matches!(next_character, Some(x) if x == '=' || x.is_ascii_alphanumeric())
+ {
+ self.flush_code_points_consumed_as_character_reference();
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ } else {
+ if char_ref_name_last_character != Some(';') {
+ self.emitter
+ .emit_error(Error::MissingSemicolonAfterCharacterReference);
+ }
+
+ self.temporary_buffer.clear();
+ self.temporary_buffer.push_str(char_ref.characters);
+ self.flush_code_points_consumed_as_character_reference();
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ } else {
+ self.unread_char(c);
+ self.flush_code_points_consumed_as_character_reference();
+ self.state = State::AmbiguousAmpersand;
+ ControlToken::Continue
+ }
+ }
+ State::AmbiguousAmpersand => match self.read_char() {
+ Some(x) if x.is_ascii_alphanumeric() => {
+ if self.is_consumed_as_part_of_an_attribute() {
+ self.emitter.push_attribute_value(ctostr!(x));
+ } else {
+ self.emitter.emit_string(ctostr!(x));
+ }
+
+ ControlToken::Continue
+ }
+ c @ Some(';') => {
+ self.emitter
+ .emit_error(Error::UnknownNamedCharacterReference);
+ self.unread_char(c);
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ },
+ State::NumericCharacterReference => {
+ self.character_reference_code = 0;
+ match self.read_char() {
+ Some(x @ 'x' | x @ 'X') => {
+ self.temporary_buffer.push(x);
+ self.state = State::HexadecimalCharacterReferenceStart;
+ ControlToken::Continue
+ }
+ c => {
+ self.unread_char(c);
+ self.state = State::DecimalCharacterReferenceStart;
+ ControlToken::Continue
+ }
+ }
+ }
+ State::HexadecimalCharacterReferenceStart => match self.read_char() {
+ c @ Some('0'..='9' | 'A'..='F' | 'a'..='f') => {
+ self.unread_char(c);
+ self.state = State::HexadecimalCharacterReference;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter
+ .emit_error(Error::AbsenceOfDigitsInNumericCharacterReference);
+ self.flush_code_points_consumed_as_character_reference();
+ self.unread_char(c);
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ },
+ State::DecimalCharacterReferenceStart => match self.read_char() {
+ Some(x @ ascii_digit_pat!()) => {
+ self.unread_char(Some(x));
+ self.state = State::DecimalCharacterReference;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter
+ .emit_error(Error::AbsenceOfDigitsInNumericCharacterReference);
+ self.flush_code_points_consumed_as_character_reference();
+ self.unread_char(c);
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ },
+ State::HexadecimalCharacterReference => match self.read_char() {
+ Some(x @ ascii_digit_pat!()) => {
+ mutate_character_reference!(*16 + x - 0x0030);
+ ControlToken::Continue
+ }
+ Some(x @ 'A'..='F') => {
+ mutate_character_reference!(*16 + x - 0x0037);
+ ControlToken::Continue
+ }
+ Some(x @ 'a'..='f') => {
+ mutate_character_reference!(*16 + x - 0x0057);
+ ControlToken::Continue
+ }
+ Some(';') => {
+ self.state = State::NumericCharacterReferenceEnd;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter
+ .emit_error(Error::MissingSemicolonAfterCharacterReference);
+ self.unread_char(c);
+ self.state = State::NumericCharacterReferenceEnd;
+ ControlToken::Continue
+ }
+ },
+ State::DecimalCharacterReference => match self.read_char() {
+ Some(x @ ascii_digit_pat!()) => {
+ mutate_character_reference!(*10 + x - 0x0030);
+ ControlToken::Continue
+ }
+ Some(';') => {
+ self.state = State::NumericCharacterReferenceEnd;
+ ControlToken::Continue
+ }
+ c => {
+ self.emitter
+ .emit_error(Error::MissingSemicolonAfterCharacterReference);
+ self.unread_char(c);
+ self.state = State::NumericCharacterReferenceEnd;
+ ControlToken::Continue
+ }
+ },
+ State::NumericCharacterReferenceEnd => {
+ match self.character_reference_code {
+ 0x00 => {
+ self.emitter.emit_error(Error::NullCharacterReference);
+ self.character_reference_code = 0xfffd;
+ }
+ 0x110000.. => {
+ self.emitter
+ .emit_error(Error::CharacterReferenceOutsideUnicodeRange);
+ self.character_reference_code = 0xfffd;
+ }
+ surrogate_pat!() => {
+ self.emitter.emit_error(Error::SurrogateCharacterReference);
+ self.character_reference_code = 0xfffd;
+ }
+ // noncharacter
+ noncharacter_pat!() => {
+ self.emitter
+ .emit_error(Error::NoncharacterCharacterReference);
+ }
+ // 0x000d, or a control that is not whitespace
+ x @ 0x000d | x @ control_pat!()
+ if !matches!(x, 0x0009 | 0x000a | 0x000c | 0x0020) =>
+ {
+ self.emitter.emit_error(Error::ControlCharacterReference);
+ self.character_reference_code = match x {
+ 0x80 => 0x20AC, // EURO SIGN (€)
+ 0x82 => 0x201A, // SINGLE LOW-9 QUOTATION MARK (‚)
+ 0x83 => 0x0192, // LATIN SMALL LETTER F WITH HOOK (Æ’)
+ 0x84 => 0x201E, // DOUBLE LOW-9 QUOTATION MARK („)
+ 0x85 => 0x2026, // HORIZONTAL ELLIPSIS (…)
+ 0x86 => 0x2020, // DAGGER (†)
+ 0x87 => 0x2021, // DOUBLE DAGGER (‡)
+ 0x88 => 0x02C6, // MODIFIER LETTER CIRCUMFLEX ACCENT (ˆ)
+ 0x89 => 0x2030, // PER MILLE SIGN (‰)
+ 0x8A => 0x0160, // LATIN CAPITAL LETTER S WITH CARON (Å )
+ 0x8B => 0x2039, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (‹)
+ 0x8C => 0x0152, // LATIN CAPITAL LIGATURE OE (Å’)
+ 0x8E => 0x017D, // LATIN CAPITAL LETTER Z WITH CARON (Ž)
+ 0x91 => 0x2018, // LEFT SINGLE QUOTATION MARK (‘)
+ 0x92 => 0x2019, // RIGHT SINGLE QUOTATION MARK (’)
+ 0x93 => 0x201C, // LEFT DOUBLE QUOTATION MARK (“)
+ 0x94 => 0x201D, // RIGHT DOUBLE QUOTATION MARK (â€)
+ 0x95 => 0x2022, // BULLET (•)
+ 0x96 => 0x2013, // EN DASH (–)
+ 0x97 => 0x2014, // EM DASH (—)
+ 0x98 => 0x02DC, // SMALL TILDE (˜)
+ 0x99 => 0x2122, // TRADE MARK SIGN (â„¢)
+ 0x9A => 0x0161, // LATIN SMALL LETTER S WITH CARON (Å¡)
+ 0x9B => 0x203A, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (›)
+ 0x9C => 0x0153, // LATIN SMALL LIGATURE OE (Å“)
+ 0x9E => 0x017E, // LATIN SMALL LETTER Z WITH CARON (ž)
+ 0x9F => 0x0178, // LATIN CAPITAL LETTER Y WITH DIAERESIS (Ÿ)
+ _ => self.character_reference_code,
+ };
+ }
+ _ => (),
+ }
+
+ self.temporary_buffer.clear();
+ self.temporary_buffer
+ .push(std::char::from_u32(self.character_reference_code).unwrap());
+ self.flush_code_points_consumed_as_character_reference();
+ self.state = self.return_state.take().unwrap();
+ ControlToken::Continue
+ }
+ }
+ }
+}
+
+impl<R: Reader, E: Emitter> Iterator for Tokenizer<R, E> {
+ type Item = E::Token;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ loop {
+ if let Some(token) = self.emitter.pop_token() {
+ break Some(token);
+ } else if !self.eof {
+ match self.consume() {
+ ControlToken::Continue => (),
+ ControlToken::Eof => {
+ self.eof = true;
+ self.emitter.emit_eof();
+ }
+ }
+ } else {
+ break None;
+ }
+ }
+ }
+}
diff --git a/src/machine.rs b/src/machine.rs
new file mode 100644
index 0000000..67db1b9
--- /dev/null
+++ b/src/machine.rs
@@ -0,0 +1,164 @@
+macro_rules! surrogate_pat {
+ () => {
+ 0xd800..=0xdfff
+ };
+}
+
+pub(crate) use surrogate_pat;
+
+macro_rules! control_pat {
+ () => (0x0d | 0x0000..=0x001f | 0x007f..=0x009f)
+}
+
+pub(crate) use control_pat;
+
+macro_rules! ascii_digit_pat {
+ () => {
+ '0'..='9'
+ };
+}
+
+pub(crate) use ascii_digit_pat;
+
+macro_rules! whitespace_pat {
+ () => {
+ '\t' | '\u{0A}' | '\u{0C}' | ' '
+ };
+}
+
+pub(crate) use whitespace_pat;
+
+macro_rules! noncharacter_pat {
+ () => {
+ 0xfdd0
+ ..=0xfdef
+ | 0xfffe
+ | 0xffff
+ | 0x1fffe
+ | 0x1ffff
+ | 0x2fffe
+ | 0x2ffff
+ | 0x3fffe
+ | 0x3ffff
+ | 0x4fffe
+ | 0x4ffff
+ | 0x5fffe
+ | 0x5ffff
+ | 0x6fffe
+ | 0x6ffff
+ | 0x7fffe
+ | 0x7ffff
+ | 0x8fffe
+ | 0x8ffff
+ | 0x9fffe
+ | 0x9ffff
+ | 0xafffe
+ | 0xaffff
+ | 0xbfffe
+ | 0xbffff
+ | 0xcfffe
+ | 0xcffff
+ | 0xdfffe
+ | 0xdffff
+ | 0xefffe
+ | 0xeffff
+ | 0xffffe
+ | 0xfffff
+ | 0x10fffe
+ | 0x10ffff
+ };
+}
+
+pub(crate) use noncharacter_pat;
+
+// When integration tests are running, this enum is public and we get warnings about missing docs.
+// However, it's not actually part of public API.
+#[allow(missing_docs)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum State {
+ Data,
+ RcData,
+ RawText,
+ ScriptData,
+ PlainText,
+ TagOpen,
+ EndTagOpen,
+ TagName,
+ RcDataLessThanSign,
+ RcDataEndTagOpen,
+ RcDataEndTagName,
+ RawTextLessThanSign,
+ RawTextEndTagOpen,
+ RawTextEndTagName,
+ ScriptDataLessThanSign,
+ ScriptDataEndTagOpen,
+ ScriptDataEndTagName,
+ ScriptDataEscapeStart,
+ ScriptDataEscapeStartDash,
+ ScriptDataEscaped,
+ ScriptDataEscapedDash,
+ ScriptDataEscapedDashDash,
+ ScriptDataEscapedLessThanSign,
+ ScriptDataEscapedEndTagOpen,
+ ScriptDataEscapedEndTagName,
+ ScriptDataDoubleEscapeStart,
+ ScriptDataDoubleEscaped,
+ ScriptDataDoubleEscapedDash,
+ ScriptDataDoubleEscapedDashDash,
+ ScriptDataDoubleEscapedLessThanSign,
+ ScriptDataDoubleEscapeEnd,
+ BeforeAttributeName,
+ AttributeName,
+ AfterAttributeName,
+ BeforeAttributeValue,
+ AttributeValueDoubleQuoted,
+ AttributeValueSingleQuoted,
+ AttributeValueUnquoted,
+ AfterAttributeValueQuoted,
+ SelfClosingStartTag,
+ BogusComment,
+ MarkupDeclarationOpen,
+ CommentStart,
+ CommentStartDash,
+ Comment,
+ CommentLessThanSign,
+ CommentLessThanSignBang,
+ CommentLessThanSignBangDash,
+ CommentLessThanSignBangDashDash,
+ CommentEndDash,
+ CommentEnd,
+ CommentEndBang,
+ Doctype,
+ BeforeDoctypeName,
+ DoctypeName,
+ AfterDoctypeName,
+ AfterDoctypePublicKeyword,
+ BeforeDoctypePublicIdentifier,
+ DoctypePublicIdentifierDoubleQuoted,
+ DoctypePublicIdentifierSingleQuoted,
+ AfterDoctypePublicIdentifier,
+ BetweenDoctypePublicAndSystemIdentifiers,
+ AfterDoctypeSystemKeyword,
+ BeforeDoctypeSystemIdentifier,
+ DoctypeSystemIdentifierDoubleQuoted,
+ DoctypeSystemIdentifierSingleQuoted,
+ AfterDoctypeSystemIdentifier,
+ BogusDoctype,
+ CdataSection,
+ CdataSectionBracket,
+ CdataSectionEnd,
+ CharacterReference,
+ NamedCharacterReference,
+ AmbiguousAmpersand,
+ NumericCharacterReference,
+ HexadecimalCharacterReferenceStart,
+ DecimalCharacterReferenceStart,
+ HexadecimalCharacterReference,
+ DecimalCharacterReference,
+ NumericCharacterReferenceEnd,
+}
+
+pub enum ControlToken {
+ Eof,
+ Continue,
+}
diff --git a/src/reader.rs b/src/reader.rs
new file mode 100644
index 0000000..d2cae92
--- /dev/null
+++ b/src/reader.rs
@@ -0,0 +1,114 @@
+/// An object that provides characters to the tokenizer.
+///
+/// See [`crate::Tokenizer::new`] for more information.
+pub trait Reader {
+ /// Return a new character from the input stream.
+ ///
+ /// Newlines have to be normalized as described in [Preprocessing the input
+ /// stream](https://html.spec.whatwg.org/#preprocessing-the-input-stream), however error
+ /// emission is done within the tokenizer.
+ fn read_char(&mut self) -> Option<char>;
+
+ /// Attempt to read an entire string at once, either case-insensitively or not.
+ ///
+ /// `case_sensitive=false` means that characters of the input stream should be compared while
+ /// ignoring ASCII-casing.
+ ///
+ /// It can be assumed that this function is never called with a string that contains `\r` or
+ /// `\n`.
+ ///
+ /// If the next characters equal to `s`, this function consumes the respective characters from
+ /// the input stream and returns `true`. If not, it does nothing and returns `false`.
+ fn try_read_string(&mut self, s: &str, case_sensitive: bool) -> bool;
+}
+
+/// An object that can be converted into a [`crate::Reader`].
+///
+/// For example, any utf8-string can be converted into a `StringReader`, such that
+/// `Tokenizer::new("mystring")` and `Tokenizer::new(&String::new("foo"))` work.
+pub trait Readable<'a> {
+ /// The reader type to which this type should be converted.
+ type Reader: Reader + 'a;
+
+ /// Convert self to some sort of reader.
+ fn to_reader(self) -> Self::Reader;
+}
+
+impl<'a, R: 'a + Reader> Readable<'a> for R {
+ type Reader = Self;
+
+ fn to_reader(self) -> Self::Reader {
+ self
+ }
+}
+
+/// A helper struct to seek forwards and backwards in strings. Used by the tokenizer to read HTML
+/// from strings.
+pub struct StringReader<'a> {
+ input: &'a str,
+ pos: usize,
+}
+
+impl<'a> StringReader<'a> {
+ fn new(input: &'a str) -> Self {
+ StringReader { input, pos: 0 }
+ }
+
+ fn peek_char(&self) -> Option<char> {
+ self.input.get(self.pos..)?.chars().next()
+ }
+}
+
+impl<'a> Reader for StringReader<'a> {
+ fn read_char(&mut self) -> Option<char> {
+ let mut r1 = match self.peek_char() {
+ Some(x) => x,
+ None => {
+ self.pos += 1;
+ return None;
+ }
+ };
+
+ self.pos += r1.len_utf8();
+
+ if r1 == '\r' {
+ r1 = '\n';
+ let r2 = self.peek_char();
+ if r2 == Some('\n') {
+ self.pos += r2.map(char::len_utf8).unwrap_or(0);
+ }
+ }
+
+ Some(r1)
+ }
+
+ fn try_read_string(&mut self, s1: &str, case_sensitive: bool) -> bool {
+ // we do not need to call validate_char here because `s` hopefully does not contain invalid
+ // characters
+
+ if let Some(s2) = self.input.get(self.pos..self.pos + s1.len()) {
+ if s1 == s2 || (!case_sensitive && s1.eq_ignore_ascii_case(s2)) {
+ self.pos += s1.len();
+ return true;
+ }
+ }
+
+ false
+ }
+}
+
+impl<'a> Readable<'a> for &'a str {
+ type Reader = StringReader<'a>;
+
+ fn to_reader(self) -> Self::Reader {
+ StringReader::new(self)
+ }
+}
+
+impl<'a> Readable<'a> for &'a String {
+ type Reader = StringReader<'a>;
+
+ fn to_reader(self) -> Self::Reader {
+ StringReader::new(self.as_str())
+ }
+}
diff --git a/tests/html5lib-tests/.gitattributes b/tests/html5lib-tests/.gitattributes
new file mode 100644
index 0000000..897831b
--- /dev/null
+++ b/tests/html5lib-tests/.gitattributes
@@ -0,0 +1,2 @@
+*.dat -text diff
+*.test -text diff
diff --git a/tests/html5lib-tests/AUTHORS.rst b/tests/html5lib-tests/AUTHORS.rst
new file mode 100644
index 0000000..4a7de17
--- /dev/null
+++ b/tests/html5lib-tests/AUTHORS.rst
@@ -0,0 +1,34 @@
+Credits
+=======
+
+The ``html5lib`` test data is maintained by:
+
+- James Graham
+- Geoffrey Sneddon
+
+
+Contributors
+------------
+
+- Adam Barth
+- Andi Sidwell
+- Anne van Kesteren
+- David Flanagan
+- Edward Z. Yang
+- Geoffrey Sneddon
+- Henri Sivonen
+- Ian Hickson
+- Jacques Distler
+- James Graham
+- Lachlan Hunt
+- lantis63
+- Mark Pilgrim
+- Mats Palmgren
+- Ms2ger
+- Nolan Waite
+- Philip Taylor
+- Rafael Weinstein
+- Ryan King
+- Sam Ruby
+- Simon Pieters
+- Thomas Broyer
diff --git a/tests/html5lib-tests/LICENSE b/tests/html5lib-tests/LICENSE
new file mode 100644
index 0000000..8812371
--- /dev/null
+++ b/tests/html5lib-tests/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2006-2013 James Graham, Geoffrey Sneddon, and
+other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/tests/html5lib-tests/encoding/chardet/test_big5.txt b/tests/html5lib-tests/encoding/chardet/test_big5.txt
new file mode 100644
index 0000000..91074c9
--- /dev/null
+++ b/tests/html5lib-tests/encoding/chardet/test_big5.txt
@@ -0,0 +1,51 @@
+¦Ñ¤l¡m¹D¼w¸g¡n ²Ä¤@~¥|¤Q³¹
+
+¦Ñ¤l¹D¸g
+
+²Ä¤@³¹
+
+¹D¥i¹D¡A«D±`¹D¡C¦W¥i¦W¡A«D±`¦W¡CµL¡A¦W¤Ñ¦a¤§©l¡Q¦³¡A¦W¸Uª«¤§¥À¡C
+¬G±`µL¡A±ý¥HÆ[¨ä§®¡F±`¦³¡A±ý¥HÆ[¨äéu¡C¦¹¨âªÌ¡A¦P¥X¦Ó²§¦W¡A¦P¿×¤§
+¥È¡C¥È¤§¤S¥È¡A²³§®¤§ªù¡C
+
+²Ä¤G³¹
+
+¤Ñ¤U¬Òª¾¬ü¤§¬°¬ü¡A´µ´c¨o¡Q¬Òª¾µ½¤§¬°µ½¡A´µ¤£µ½¨o¡C¬G¦³µL¬Û¥Í¡AÃø
+©ö¬Û¦¨¡Aªøµu¬Û§Î¡A°ª¤U¬Û¶É¡A­µÁn¬Û©M¡A«e«á¬ÛÀH¡C¬O¥H¸t¤H³B¡uµL¬°
+¡v¤§¨Æ¡A¦æ¡u¤£¨¥¡v¤§±Ð¡C¸Uª«§@²j¦Ó¤£Ãã¡A¥Í¦Ó¤£¦³¡A¬°¦Ó¤£«î¡A¥\¦¨
+¦Ó¥±©~¡C¤Ò°ß¥±©~¡A¬O¥H¤£¥h¡C
+
+²Ä¤T³¹
+
+¤£©|½å¡A¨Ï¥Á¤£ª§¡Q¤£¶QÃø±o¤§³f¡A¨Ï¥Á¤£¬°µs¡Q¤£¨£¥i±ý¡A¨Ï¥Á¤ß¤£¶Ã
+¡C¬O¥H¡u¸t¤H¡v¤§ªv¡Aµê¨ä¤ß¡A¹ê¨ä¸¡¡A®z¨ä§Ó¡A±j¨ä°©¡C±`¨Ï¥ÁµLª¾µL
+±ý¡C¨Ï¤Ò´¼ªÌ¤£´±¬°¤]¡C¬°¡uµL¬°¡v¡A«hµL¤£ªv¡C
+
+²Ä¥|³¹
+
+¡u¹D¡v¨R¡A¦Ó¥Î¤§©Î¤£¬Õ¡C²W¤¼¡A¦ü¸Uª«¤§©v¡Q®À¨ä¾U¡A¸Ñ¨ä¯É¡A©M¨ä¥ú
+¡A¦P¨ä¹Ð¡Q´ï¤¼¦ü©Î¦s¡C§^¤£ª¾½Ö¤§¤l¡H¶H«Ò¤§¥ý¡C
+
+²Ä¤­³¹
+
+¤Ñ¦a¤£¤¯¡A¥H¸Uª«¬°¯ìª¯¡Q¸t¤H¤£¤¯¡A¥H¦Ê©m¬°¯ìª¯¡C¤Ñ¦a¤§¶¡¡A¨äµSéÑ
+õþ¥G¡Hµê¦Ó¤£©}¡A°Ê¦Ó·U¥X¡C¦h¨¥¼Æ½a¡A¤£¦p¦u¤¤¡C
+
+²Ä¤»³¹
+
+¨¦¯«¤£¦º¡A¬O¿×¥È¦É¡C¥È¦É¤§ªù¡A¬O¿×¤Ñ¦a®Ú¡Cºøºø­Y¦s¡A¥Î¤§¤£¶Ô¡C
+
+²Ä¤C³¹
+
+¤Ñªø¦a¤[¡C¤Ñ¦a©Ò¥H¯àªø¥B¤[ªÌ¡A¥H¨ä¤£¦Û¥Í¡A¬G¯àªø¤[¡C¬O¥H¸t¤H«á¨ä
+¨­¦Ó¨­¥ý¡A¥~¨ä¨­¦Ó¨­¦s¡C«D¥H¨äµL¨p¨¸¡H¬G¯à¦¨¨ä¨p¡C
+
+²Ä¤K³¹
+
+¤Wµ½­Y¤ô¡C¤ôµ½§Q¸Uª«¦Ó¤£ª§¡C³B²³¤H¤§©Ò´c¡A¬G´X©ó¹D¡C©~µ½¦a¡A¤ßµ½
+²W¡A»Pµ½¤¯¡A¨¥µ½«H¡A¬Fµ½ªv¡A¨Æµ½¯à¡A°Êµ½®É¡C¤Ò°ß¤£ª§¡A¬GµL¤×¡C
+
+²Ä¤E³¹
+
+«ù¦Ó¬Õ¤§¡A¤£¦p¨ä¤w¡Q´¢¦Ó¾U¤§¡A¤£¥iªø«O¡Cª÷¥Éº¡°ó¡A²ö¤§¯à¦u¡Q´I¶Q
+¦Óź¡A¦Û¿ò¨ä©S¡C¥\¹E¨­°h¡A¤Ñ¤§¹D¡C
diff --git a/tests/html5lib-tests/encoding/scripted/tests1.dat b/tests/html5lib-tests/encoding/scripted/tests1.dat
new file mode 100644
index 0000000..04d18bb
--- /dev/null
+++ b/tests/html5lib-tests/encoding/scripted/tests1.dat
@@ -0,0 +1,5 @@
+#data
+<!DOCTYPE HTML>
+<script>document.write('<meta charset="ISO-8859-' + '2">')</script>
+#encoding
+iso-8859-2
diff --git a/tests/html5lib-tests/encoding/test-yahoo-jp.dat b/tests/html5lib-tests/encoding/test-yahoo-jp.dat
new file mode 100644
index 0000000..3629278
--- /dev/null
+++ b/tests/html5lib-tests/encoding/test-yahoo-jp.dat
@@ -0,0 +1,10 @@
+#data
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
+<!--京-->
+<title>Yahoo! JAPAN</title>
+<meta name="description" content="日本最大級ã®ãƒãƒ¼ã‚¿ãƒ«ã‚µã‚¤ãƒˆã€‚検索ã€ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ‹ãƒ¥ãƒ¼ã‚¹ã€ãƒ¡ãƒ¼ãƒ«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã€ã‚·ãƒ§ãƒƒãƒ”ングã€ãªã©80以上ã®ã‚µãƒ¼ãƒ“スを展開。ã‚ãªãŸã®ç”Ÿæ´»ã‚’より豊ã‹ã«ã™ã‚‹ã€Œãƒ©ã‚¤ãƒ•ãƒ»ã‚¨ãƒ³ã‚¸ãƒ³ã€ã‚’目指ã—ã¦ã„ãã¾ã™ã€‚">
+<style type="text/css" media="all">
+#encoding
+euc-jp
diff --git a/tests/html5lib-tests/encoding/tests1.dat b/tests/html5lib-tests/encoding/tests1.dat
new file mode 100644
index 0000000..7aa9586
--- /dev/null
+++ b/tests/html5lib-tests/encoding/tests1.dat
@@ -0,0 +1,388 @@
+#data
+<!DOCTYPE HTML>
+<!-- (control test - for the other tests to work, this should pass - you may have to set your defaults appropriately) -->
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta charset="ISO-8859-1">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset='iso8859-2'>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset=iso8859-2>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta
+charset=iso8859-2>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<metacharset=iso8859-2>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Type" content="text/html; charset=iso8859-2">
+<!-- XXX this is a tough one, not sure how to do this one, unless we explictly do content= processing -->
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2" http-equiv="Content-Type">
+<!-- XXX this is a tough one, not sure how to do this one, unless we explictly do content= processing -->
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Type" content=text/html; charset=iso8859-2>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Type content="text/html; charset=iso8859-2">
+#encoding
+windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Type " content="text/html; charset=iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2" http-equiv="Content-Type ">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Type>" content="text/html; charset=iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2" http-equiv="Content-Type>">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta http-equiv="Content-Style-Type" content="text/html; charset=iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2" http-equiv="Content-Style-Type">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta name="Content-Style-Type" content="text/html; charset=iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2" name="Content-Style-Type">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="text/html; charset=iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content=" text/html; charset = iso8859-2 ">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta content="
+text/html; charset=iso8859-2
+" http-equiv="Content-Type">
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset="
+iso8859-2
+">
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset=
+iso8859-2
+>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset="iso8859-2>
+<p>"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta charset=iso8859-2">
+<p>"</p>
+#encoding
+windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta " charset=iso8859-2>
+<p>"</p>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta test" charset=iso8859-2>
+<p>"</p>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta test=" charset=iso8859-2>
+<p>"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta test="' charset=iso8859-2>
+<p>"'</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta test='" charset=iso8859-2>
+<p>'"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta test="" charset=iso8859-2>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta test=x" charset=iso8859-2>
+<p>"</p>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<head></head><p title="x>
+<meta test=x" charset=iso8859-2>
+<p>"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<head></head><p title="x>
+<meta test=x charset=iso8859-2>
+<p>"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<head></head><p title="x>
+<meta charset=iso8859-2>
+<p>"</p>
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<head></head><p title="x>">
+<meta charset=iso8859-2>
+<p>"</p>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset="ISO-8859-1">
+<meta charset="iso8859-2">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<meta charset="iso8859-2">
+<meta charset="ISO-8859-1">
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<!--<meta charset="ISO-8859-1">-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<!--<meta charset="iso8859-2">-->
+<meta charset="ISO-8859-1">
+#encoding
+Windows-1252
+
+#data
+<!DOCTYPE HTML>
+<!-- Starts with UTF-8 BOM -->
+#encoding
+UTF-8
+
+#data
+<!DOCTYPE HTML>
+<meta charset="ISO-8859-1">
+<!-- Starts with UTF-8 BOM -->
+#encoding
+UTF-8
+
+#data
+<!-- 511 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 512 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 1024 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 1025 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 2048 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 2049 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 4096 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 4097 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 8192 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- 8193 characters xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz-->
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
+
+#data
+<!-- multi-script test -->
+<script>alert('step 1 of 3 ("þ")')</script>
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<script>alert('step 2 of 3 ("þ")')</script>
+<meta charset="iso8859-2">
+<script>alert('step 3 of 3 ("þ")')</script>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<script>document.write('<meta charset="iso8859-2">')</script>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<script type="text/plain"><meta charset="iso8859-2"></script>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<style type="text/plain"><meta charset="iso8859-2"></style>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<p><meta charset="iso8859-2"></p>
+#encoding
+iso-8859-2
+
+#data
+<!DOCTYPE HTML>
+<meta charset="bogus">
+<meta charset="iso8859-2">
+#encoding
+iso-8859-2
diff --git a/tests/html5lib-tests/encoding/tests2.dat b/tests/html5lib-tests/encoding/tests2.dat
new file mode 100644
index 0000000..d31b387
--- /dev/null
+++ b/tests/html5lib-tests/encoding/tests2.dat
@@ -0,0 +1,115 @@
+#data
+<meta
+#encoding
+windows-1252
+
+#data
+<
+#encoding
+windows-1252
+
+#data
+<!
+#encoding
+windows-1252
+
+#data
+<meta charset = "
+#encoding
+windows-1252
+
+#data
+<meta charset=euc-jp
+#encoding
+windows-1252
+
+#data
+<meta <meta charset='euc-jp'>
+#encoding
+euc-jp
+
+#data
+<meta charset = 'euc-jp'>
+#encoding
+euc-jp
+
+#data
+<!-- -->
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+#encoding
+utf-8
+
+#data
+<!-- -->
+<meta http-equiv="Content-Type" content="text/html; charset=utf
+#encoding
+windows-1252
+
+#data
+<meta http-equiv="Content-Type<meta charset="utf-8">
+#encoding
+windows-1252
+
+#data
+<meta http-equiv="Content-Type" content="text/html; charset='utf-8'">
+#encoding
+utf-8
+
+#data
+<meta http-equiv="Content-Type" content="text/html; charset='utf-8">
+#encoding
+windows-1252
+
+#data
+<meta
+#encoding
+windows-1252
+
+#data
+<meta charset =
+#encoding
+windows-1252
+
+#data
+<meta charset= utf-8
+>
+#encoding
+utf-8
+
+#data
+<meta content = "text/html;
+#encoding
+windows-1252
+
+#data
+<meta charset="UTF-16">
+#encoding
+utf-8
+
+#data
+<meta charset="UTF-16LE">
+#encoding
+utf-8
+
+#data
+<meta charset="UTF-16BE">
+#encoding
+utf-8
+
+#data
+<html a=ñ>
+<meta charset="utf-8">
+#encoding
+utf-8
+
+#data
+<html ñ>
+<meta charset="utf-8">
+#encoding
+utf-8
+
+#data
+<html>ñ
+<meta charset="utf-8">
+#encoding
+utf-8
diff --git a/tests/html5lib-tests/serializer/core.test b/tests/html5lib-tests/serializer/core.test
new file mode 100644
index 0000000..c0b4222
--- /dev/null
+++ b/tests/html5lib-tests/serializer/core.test
@@ -0,0 +1,125 @@
+{"tests": [
+
+{"description": "proper attribute value escaping",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "test \"with\" &quot;"}]]],
+ "expected": ["<span title='test \"with\" &amp;quot;'>"]
+},
+
+{"description": "proper attribute value non-quoting",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo"}]]],
+ "expected": ["<span title=foo>"],
+ "xhtml": ["<span title=\"foo\">"]
+},
+
+{"description": "proper attribute value non-quoting (with <)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo<bar"}]]],
+ "expected": ["<span title=foo<bar>"],
+ "xhtml": ["<span title=\"foo&lt;bar\">"]
+},
+
+{"description": "proper attribute value quoting (with =)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo=bar"}]]],
+ "expected": ["<span title=\"foo=bar\">"]
+},
+
+{"description": "proper attribute value quoting (with >)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo>bar"}]]],
+ "expected": ["<span title=\"foo>bar\">"]
+},
+
+{"description": "proper attribute value quoting (with \")",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\"bar"}]]],
+ "expected": ["<span title='foo\"bar'>"]
+},
+
+{"description": "proper attribute value quoting (with ')",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo'bar"}]]],
+ "expected": ["<span title=\"foo'bar\">"]
+},
+
+{"description": "proper attribute value quoting (with both \" and ')",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo'bar\"baz"}]]],
+ "expected": ["<span title=\"foo'bar&quot;baz\">"]
+},
+
+{"description": "proper attribute value quoting (with space)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo bar"}]]],
+ "expected": ["<span title=\"foo bar\">"]
+},
+
+{"description": "proper attribute value quoting (with tab)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\tbar"}]]],
+ "expected": ["<span title=\"foo\tbar\">"]
+},
+
+{"description": "proper attribute value quoting (with LF)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\nbar"}]]],
+ "expected": ["<span title=\"foo\nbar\">"]
+},
+
+{"description": "proper attribute value quoting (with CR)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\rbar"}]]],
+ "expected": ["<span title=\"foo\rbar\">"]
+},
+
+{"description": "proper attribute value non-quoting (with linetab)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\u000Bbar"}]]],
+ "expected": ["<span title=foo\u000Bbar>"],
+ "xhtml": ["<span title=\"foo\u000Bbar\">"]
+},
+
+{"description": "proper attribute value quoting (with form feed)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "foo\u000Cbar"}]]],
+ "expected": ["<span title=\"foo\u000Cbar\">"]
+},
+
+{"description": "void element (as EmptyTag token)",
+ "input": [["EmptyTag", "img", {}]],
+ "expected": ["<img>"],
+ "xhtml": ["<img />"]
+},
+
+{"description": "void element (as StartTag token)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "img", {}]],
+ "expected": ["<img>"],
+ "xhtml": ["<img />"]
+},
+
+{"description": "doctype in error",
+ "input": [["Doctype", "foo"]],
+ "expected": ["<!DOCTYPE foo>"]
+},
+
+{"description": "character data",
+ "options": {"encoding":"utf-8"},
+ "input": [["Characters", "a<b>c&d"]],
+ "expected": ["a&lt;b&gt;c&amp;d"]
+},
+
+{"description": "rcdata",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "script", {}], ["Characters", "a<b>c&d"]],
+ "expected": ["<script>a<b>c&d"],
+ "xhtml": ["<script>a&lt;b&gt;c&amp;d"]
+},
+
+{"description": "doctype",
+ "input": [["Doctype", "HTML"]],
+ "expected": ["<!DOCTYPE HTML>"]
+},
+
+{"description": "HTML 4.01 DOCTYPE",
+ "input": [["Doctype", "HTML", "-//W3C//DTD HTML 4.01//EN", "http://www.w3.org/TR/html4/strict.dtd"]],
+ "expected": ["<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"]
+},
+
+{"description": "HTML 4.01 DOCTYPE without system identifer",
+ "input": [["Doctype", "HTML", "-//W3C//DTD HTML 4.01//EN"]],
+ "expected": ["<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">"]
+},
+
+{"description": "IBM DOCTYPE without public identifer",
+ "input": [["Doctype", "html", "", "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"]],
+ "expected": ["<!DOCTYPE html SYSTEM \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\">"]
+}
+
+]}
diff --git a/tests/html5lib-tests/serializer/injectmeta.test b/tests/html5lib-tests/serializer/injectmeta.test
new file mode 100644
index 0000000..feaaa44
--- /dev/null
+++ b/tests/html5lib-tests/serializer/injectmeta.test
@@ -0,0 +1,66 @@
+{"tests": [
+
+{"description": "no encoding",
+ "options": {"inject_meta_charset": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": [""],
+ "xhtml": ["<head></head>"]
+},
+
+{"description": "empytag head",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta charset=utf-8>"],
+ "xhtml": ["<head><meta charset=\"utf-8\" /></head>"]
+},
+
+{"description": "head w/title",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["StartTag", "http://www.w3.org/1999/xhtml","title",{}], ["Characters", "foo"],["EndTag", "http://www.w3.org/1999/xhtml", "title"], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta charset=utf-8><title>foo</title>"],
+ "xhtml": ["<head><meta charset=\"utf-8\" /><title>foo</title></head>"]
+},
+
+{"description": "head w/meta-charset",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "charset", "value": "ascii"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta charset=utf-8>"],
+ "xhtml": ["<head><meta charset=\"utf-8\" /></head>"]
+},
+
+{"description": "head w/ two meta-charset",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "charset", "value": "ascii"}]], ["EmptyTag","meta",[{"namespace": null, "name": "charset", "value": "ascii"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta charset=utf-8><meta charset=utf-8>", "<head><meta charset=utf-8><meta charset=ascii>"],
+ "xhtml": ["<head><meta charset=\"utf-8\" /><meta charset=\"utf-8\" /></head>", "<head><meta charset=\"utf-8\" /><meta charset=\"ascii\" /></head>"]
+},
+
+{"description": "head w/robots",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "name", "value": "robots"},{"namespace": null, "name": "content", "value": "noindex"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta charset=utf-8><meta content=noindex name=robots>"],
+ "xhtml": ["<head><meta charset=\"utf-8\" /><meta content=\"noindex\" name=\"robots\" /></head>"]
+},
+
+{"description": "head w/robots & charset",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "name", "value": "robots"},{"namespace": null, "name": "content", "value": "noindex"}]], ["EmptyTag","meta",[{"namespace": null, "name": "charset", "value": "ascii"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta content=noindex name=robots><meta charset=utf-8>"],
+ "xhtml": ["<head><meta content=\"noindex\" name=\"robots\" /><meta charset=\"utf-8\" /></head>"]
+},
+
+{"description": "head w/ charset in http-equiv content-type",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "http-equiv", "value": "content-type"}, {"namespace": null, "name": "content", "value": "text/html; charset=ascii"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta content=\"text/html; charset=utf-8\" http-equiv=content-type>"],
+ "xhtml": ["<head><meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" /></head>"]
+},
+
+{"description": "head w/robots & charset in http-equiv content-type",
+ "options": {"inject_meta_charset": true, "encoding":"utf-8"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag","meta",[{"namespace": null, "name": "name", "value": "robots"},{"namespace": null, "name": "content", "value": "noindex"}]], ["EmptyTag","meta",[{"namespace": null, "name": "http-equiv", "value": "content-type"}, {"namespace": null, "name": "content", "value": "text/html; charset=ascii"}]], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": ["<meta content=noindex name=robots><meta content=\"text/html; charset=utf-8\" http-equiv=content-type>"],
+ "xhtml": ["<head><meta content=\"noindex\" name=\"robots\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" /></head>"]
+}
+
+]}
diff --git a/tests/html5lib-tests/serializer/optionaltags.test b/tests/html5lib-tests/serializer/optionaltags.test
new file mode 100644
index 0000000..80a5edf
--- /dev/null
+++ b/tests/html5lib-tests/serializer/optionaltags.test
@@ -0,0 +1,965 @@
+{"tests": [
+
+{"description": "html start-tag followed by text, with attributes",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", [{"namespace": null, "name": "lang", "value": "en"}]], ["Characters", "foo"]],
+ "expected": ["<html lang=en>foo"]
+},
+
+
+
+{"description": "html start-tag followed by comment",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}], ["Comment", "foo"]],
+ "expected": ["<html><!--foo-->"]
+},
+
+{"description": "html start-tag followed by space character",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}], ["Characters", " foo"]],
+ "expected": ["<html> foo"]
+},
+
+{"description": "html start-tag followed by text",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "html start-tag followed by start-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "html start-tag followed by end-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "html start-tag at EOF (shouldn't ever happen?!)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "html", {}]],
+ "expected": [""]
+},
+
+
+
+{"description": "html end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"], ["Comment", "foo"]],
+ "expected": ["</html><!--foo-->"]
+},
+
+{"description": "html end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"], ["Characters", " foo"]],
+ "expected": ["</html> foo"]
+},
+
+{"description": "html end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "html end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "html end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "html end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "html"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "head start-tag followed by comment",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["Comment", "foo"]],
+ "expected": ["<head><!--foo-->"]
+},
+
+{"description": "head start-tag followed by space character",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["Characters", " foo"]],
+ "expected": ["<head> foo"]
+},
+
+{"description": "head start-tag followed by text",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["Characters", "foo"]],
+ "expected": ["<head>foo"]
+},
+
+{"description": "head start-tag followed by start-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "head start-tag followed by end-tag (shouldn't ever happen?!)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["<head></foo>", "</foo>"]
+},
+
+{"description": "empty head element",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": [""]
+},
+
+{"description": "head start-tag followed by empty-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}], ["EmptyTag", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "head start-tag at EOF (shouldn't ever happen?!)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "head", {}]],
+ "expected": ["<head>", ""]
+},
+
+
+
+{"description": "head end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"], ["Comment", "foo"]],
+ "expected": ["</head><!--foo-->"]
+},
+
+{"description": "head end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"], ["Characters", " foo"]],
+ "expected": ["</head> foo"]
+},
+
+{"description": "head end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "head end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "head end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "head end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "head"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "body start-tag followed by comment",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}], ["Comment", "foo"]],
+ "expected": ["<body><!--foo-->"]
+},
+
+{"description": "body start-tag followed by space character",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}], ["Characters", " foo"]],
+ "expected": ["<body> foo"]
+},
+
+{"description": "body start-tag followed by text",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "body start-tag followed by start-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "body start-tag followed by end-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "body start-tag at EOF (shouldn't ever happen?!)",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "body", {}]],
+ "expected": [""]
+},
+
+
+
+{"description": "body end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"], ["Comment", "foo"]],
+ "expected": ["</body><!--foo-->"]
+},
+
+{"description": "body end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"], ["Characters", " foo"]],
+ "expected": ["</body> foo"]
+},
+
+{"description": "body end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "body end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "body end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "body end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "body"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "li end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["Comment", "foo"]],
+ "expected": ["</li><!--foo-->"]
+},
+
+{"description": "li end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["Characters", " foo"]],
+ "expected": ["</li> foo"]
+},
+
+{"description": "li end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["Characters", "foo"]],
+ "expected": ["</li>foo"]
+},
+
+{"description": "li end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</li><foo>"]
+},
+
+{"description": "li end-tag followed by li start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["StartTag", "http://www.w3.org/1999/xhtml", "li", {}]],
+ "expected": ["<li>"]
+},
+
+{"description": "li end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "li end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "li"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "dt end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["Comment", "foo"]],
+ "expected": ["</dt><!--foo-->"]
+},
+
+{"description": "dt end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["Characters", " foo"]],
+ "expected": ["</dt> foo"]
+},
+
+{"description": "dt end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["Characters", "foo"]],
+ "expected": ["</dt>foo"]
+},
+
+{"description": "dt end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</dt><foo>"]
+},
+
+{"description": "dt end-tag followed by dt start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["StartTag", "http://www.w3.org/1999/xhtml", "dt", {}]],
+ "expected": ["<dt>"]
+},
+
+{"description": "dt end-tag followed by dd start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["StartTag", "http://www.w3.org/1999/xhtml", "dd", {}]],
+ "expected": ["<dd>"]
+},
+
+{"description": "dt end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</dt></foo>"]
+},
+
+{"description": "dt end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dt"]],
+ "expected": ["</dt>"]
+},
+
+
+
+
+{"description": "dd end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["Comment", "foo"]],
+ "expected": ["</dd><!--foo-->"]
+},
+
+{"description": "dd end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["Characters", " foo"]],
+ "expected": ["</dd> foo"]
+},
+
+{"description": "dd end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["Characters", "foo"]],
+ "expected": ["</dd>foo"]
+},
+
+{"description": "dd end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</dd><foo>"]
+},
+
+{"description": "dd end-tag followed by dd start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["StartTag", "http://www.w3.org/1999/xhtml", "dd", {}]],
+ "expected": ["<dd>"]
+},
+
+{"description": "dd end-tag followed by dt start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["StartTag", "http://www.w3.org/1999/xhtml", "dt", {}]],
+ "expected": ["<dt>"]
+},
+
+{"description": "dd end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "dd end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "dd"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "p end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["Comment", "foo"]],
+ "expected": ["</p><!--foo-->"]
+},
+
+{"description": "p end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["Characters", " foo"]],
+ "expected": ["</p> foo"]
+},
+
+{"description": "p end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["Characters", "foo"]],
+ "expected": ["</p>foo"]
+},
+
+{"description": "p end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</p><foo>"]
+},
+
+{"description": "p end-tag followed by address start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "address", {}]],
+ "expected": ["<address>"]
+},
+
+{"description": "p end-tag followed by article start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "article", {}]],
+ "expected": ["<article>"]
+},
+
+{"description": "p end-tag followed by aside start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "aside", {}]],
+ "expected": ["<aside>"]
+},
+
+{"description": "p end-tag followed by blockquote start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "blockquote", {}]],
+ "expected": ["<blockquote>"]
+},
+
+{"description": "p end-tag followed by datagrid start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "datagrid", {}]],
+ "expected": ["<datagrid>"]
+},
+
+{"description": "p end-tag followed by dialog start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "dialog", {}]],
+ "expected": ["<dialog>"]
+},
+
+{"description": "p end-tag followed by dir start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "dir", {}]],
+ "expected": ["<dir>"]
+},
+
+{"description": "p end-tag followed by div start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "div", {}]],
+ "expected": ["<div>"]
+},
+
+{"description": "p end-tag followed by dl start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "dl", {}]],
+ "expected": ["<dl>"]
+},
+
+{"description": "p end-tag followed by fieldset start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "fieldset", {}]],
+ "expected": ["<fieldset>"]
+},
+
+{"description": "p end-tag followed by footer start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "footer", {}]],
+ "expected": ["<footer>"]
+},
+
+{"description": "p end-tag followed by form start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "form", {}]],
+ "expected": ["<form>"]
+},
+
+{"description": "p end-tag followed by h1 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h1", {}]],
+ "expected": ["<h1>"]
+},
+
+{"description": "p end-tag followed by h2 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h2", {}]],
+ "expected": ["<h2>"]
+},
+
+{"description": "p end-tag followed by h3 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h3", {}]],
+ "expected": ["<h3>"]
+},
+
+{"description": "p end-tag followed by h4 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h4", {}]],
+ "expected": ["<h4>"]
+},
+
+{"description": "p end-tag followed by h5 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h5", {}]],
+ "expected": ["<h5>"]
+},
+
+{"description": "p end-tag followed by h6 start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "h6", {}]],
+ "expected": ["<h6>"]
+},
+
+{"description": "p end-tag followed by header start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "header", {}]],
+ "expected": ["<header>"]
+},
+
+{"description": "p end-tag followed by hr empty-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["EmptyTag", "hr", {}]],
+ "expected": ["<hr>"]
+},
+
+{"description": "p end-tag followed by menu start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "menu", {}]],
+ "expected": ["<menu>"]
+},
+
+{"description": "p end-tag followed by nav start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "nav", {}]],
+ "expected": ["<nav>"]
+},
+
+{"description": "p end-tag followed by ol start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "ol", {}]],
+ "expected": ["<ol>"]
+},
+
+{"description": "p end-tag followed by p start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "p", {}]],
+ "expected": ["<p>"]
+},
+
+{"description": "p end-tag followed by pre start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "pre", {}]],
+ "expected": ["<pre>"]
+},
+
+{"description": "p end-tag followed by section start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "section", {}]],
+ "expected": ["<section>"]
+},
+
+{"description": "p end-tag followed by table start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "table", {}]],
+ "expected": ["<table>"]
+},
+
+{"description": "p end-tag followed by ul start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["StartTag", "http://www.w3.org/1999/xhtml", "ul", {}]],
+ "expected": ["<ul>"]
+},
+
+{"description": "p end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "p end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "p"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "optgroup end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["Comment", "foo"]],
+ "expected": ["</optgroup><!--foo-->"]
+},
+
+{"description": "optgroup end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["Characters", " foo"]],
+ "expected": ["</optgroup> foo"]
+},
+
+{"description": "optgroup end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["Characters", "foo"]],
+ "expected": ["</optgroup>foo"]
+},
+
+{"description": "optgroup end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</optgroup><foo>"]
+},
+
+{"description": "optgroup end-tag followed by optgroup start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["StartTag", "http://www.w3.org/1999/xhtml", "optgroup", {}]],
+ "expected": ["<optgroup>"]
+},
+
+{"description": "optgroup end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "optgroup end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "optgroup"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "option end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["Comment", "foo"]],
+ "expected": ["</option><!--foo-->"]
+},
+
+{"description": "option end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["Characters", " foo"]],
+ "expected": ["</option> foo"]
+},
+
+{"description": "option end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["Characters", "foo"]],
+ "expected": ["</option>foo"]
+},
+
+{"description": "option end-tag followed by optgroup start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["StartTag", "http://www.w3.org/1999/xhtml", "optgroup", {}]],
+ "expected": ["<optgroup>"]
+},
+
+{"description": "option end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</option><foo>"]
+},
+
+{"description": "option end-tag followed by option start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["StartTag", "http://www.w3.org/1999/xhtml", "option", {}]],
+ "expected": ["<option>"]
+},
+
+{"description": "option end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "option end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "option"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "colgroup start-tag followed by comment",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["Comment", "foo"]],
+ "expected": ["<colgroup><!--foo-->"]
+},
+
+{"description": "colgroup start-tag followed by space character",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["Characters", " foo"]],
+ "expected": ["<colgroup> foo"]
+},
+
+{"description": "colgroup start-tag followed by text",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["Characters", "foo"]],
+ "expected": ["<colgroup>foo"]
+},
+
+{"description": "colgroup start-tag followed by start-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<colgroup><foo>"]
+},
+
+{"description": "first colgroup in a table with a col child",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "table", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["EmptyTag", "col", {}]],
+ "expected": ["<table><col>"]
+},
+
+{"description": "colgroup with a col child, following another colgroup",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "col", {}]],
+ "expected": ["</colgroup><col>", "<colgroup><col>"]
+},
+
+{"description": "colgroup start-tag followed by end-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["<colgroup></foo>"]
+},
+
+{"description": "colgroup start-tag at EOF",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "colgroup", {}]],
+ "expected": ["<colgroup>"]
+},
+
+
+
+{"description": "colgroup end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["Comment", "foo"]],
+ "expected": ["</colgroup><!--foo-->"]
+},
+
+{"description": "colgroup end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["Characters", " foo"]],
+ "expected": ["</colgroup> foo"]
+},
+
+{"description": "colgroup end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["Characters", "foo"]],
+ "expected": ["foo"]
+},
+
+{"description": "colgroup end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<foo>"]
+},
+
+{"description": "colgroup end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "colgroup end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "colgroup"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "thead end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["Comment", "foo"]],
+ "expected": ["</thead><!--foo-->"]
+},
+
+{"description": "thead end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["Characters", " foo"]],
+ "expected": ["</thead> foo"]
+},
+
+{"description": "thead end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["Characters", "foo"]],
+ "expected": ["</thead>foo"]
+},
+
+{"description": "thead end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</thead><foo>"]
+},
+
+{"description": "thead end-tag followed by tbody start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}]],
+ "expected": ["<tbody>"]
+},
+
+{"description": "thead end-tag followed by tfoot start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["StartTag", "http://www.w3.org/1999/xhtml", "tfoot", {}]],
+ "expected": ["<tfoot>"]
+},
+
+{"description": "thead end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</thead></foo>"]
+},
+
+{"description": "thead end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"]],
+ "expected": ["</thead>"]
+},
+
+
+
+
+{"description": "tbody start-tag followed by comment",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["Comment", "foo"]],
+ "expected": ["<tbody><!--foo-->"]
+},
+
+{"description": "tbody start-tag followed by space character",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["Characters", " foo"]],
+ "expected": ["<tbody> foo"]
+},
+
+{"description": "tbody start-tag followed by text",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["Characters", "foo"]],
+ "expected": ["<tbody>foo"]
+},
+
+{"description": "tbody start-tag followed by start-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["<tbody><foo>"]
+},
+
+{"description": "first tbody in a table with a tr child",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "table", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "tr", {}]],
+ "expected": ["<table><tr>"]
+},
+
+{"description": "tbody with a tr child, following another tbody",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "tr", {}]],
+ "expected": ["<tbody><tr>", "</tbody><tr>"]
+},
+
+{"description": "tbody with a tr child, following a thead",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "thead"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "tr", {}]],
+ "expected": ["<tbody><tr>", "</thead><tr>"]
+},
+
+{"description": "tbody with a tr child, following a tfoot",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["StartTag", "http://www.w3.org/1999/xhtml", "tr", {}]],
+ "expected": ["<tbody><tr>", "</tfoot><tr>"]
+},
+
+{"description": "tbody start-tag followed by end-tag",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["<tbody></foo>"]
+},
+
+{"description": "tbody start-tag at EOF",
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}]],
+ "expected": ["<tbody>"]
+},
+
+
+
+{"description": "tbody end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["Comment", "foo"]],
+ "expected": ["</tbody><!--foo-->"]
+},
+
+{"description": "tbody end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["Characters", " foo"]],
+ "expected": ["</tbody> foo"]
+},
+
+{"description": "tbody end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["Characters", "foo"]],
+ "expected": ["</tbody>foo"]
+},
+
+{"description": "tbody end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</tbody><foo>"]
+},
+
+{"description": "tbody end-tag followed by tbody start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}]],
+ "expected": ["<tbody>", "</tbody>"]
+},
+
+{"description": "tbody end-tag followed by tfoot start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["StartTag", "http://www.w3.org/1999/xhtml", "tfoot", {}]],
+ "expected": ["<tfoot>"]
+},
+
+{"description": "tbody end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "tbody end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tbody"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "tfoot end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["Comment", "foo"]],
+ "expected": ["</tfoot><!--foo-->"]
+},
+
+{"description": "tfoot end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["Characters", " foo"]],
+ "expected": ["</tfoot> foo"]
+},
+
+{"description": "tfoot end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["Characters", "foo"]],
+ "expected": ["</tfoot>foo"]
+},
+
+{"description": "tfoot end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</tfoot><foo>"]
+},
+
+{"description": "tfoot end-tag followed by tbody start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["StartTag", "http://www.w3.org/1999/xhtml", "tbody", {}]],
+ "expected": ["<tbody>", "</tfoot>"]
+},
+
+{"description": "tfoot end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "tfoot end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tfoot"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "tr end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["Comment", "foo"]],
+ "expected": ["</tr><!--foo-->"]
+},
+
+{"description": "tr end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["Characters", " foo"]],
+ "expected": ["</tr> foo"]
+},
+
+{"description": "tr end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["Characters", "foo"]],
+ "expected": ["</tr>foo"]
+},
+
+{"description": "tr end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</tr><foo>"]
+},
+
+{"description": "tr end-tag followed by tr start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["StartTag", "http://www.w3.org/1999/xhtml", "tr", {}]],
+ "expected": ["<tr>", "</tr>"]
+},
+
+{"description": "tr end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "tr end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "tr"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "td end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["Comment", "foo"]],
+ "expected": ["</td><!--foo-->"]
+},
+
+{"description": "td end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["Characters", " foo"]],
+ "expected": ["</td> foo"]
+},
+
+{"description": "td end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["Characters", "foo"]],
+ "expected": ["</td>foo"]
+},
+
+{"description": "td end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</td><foo>"]
+},
+
+{"description": "td end-tag followed by td start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["StartTag", "http://www.w3.org/1999/xhtml", "td", {}]],
+ "expected": ["<td>", "</td>"]
+},
+
+{"description": "td end-tag followed by th start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["StartTag", "http://www.w3.org/1999/xhtml", "th", {}]],
+ "expected": ["<th>", "</td>"]
+},
+
+{"description": "td end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "td end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "td"]],
+ "expected": [""]
+},
+
+
+
+
+{"description": "th end-tag followed by comment",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["Comment", "foo"]],
+ "expected": ["</th><!--foo-->"]
+},
+
+{"description": "th end-tag followed by space character",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["Characters", " foo"]],
+ "expected": ["</th> foo"]
+},
+
+{"description": "th end-tag followed by text",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["Characters", "foo"]],
+ "expected": ["</th>foo"]
+},
+
+{"description": "th end-tag followed by start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["StartTag", "http://www.w3.org/1999/xhtml", "foo", {}]],
+ "expected": ["</th><foo>"]
+},
+
+{"description": "th end-tag followed by th start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["StartTag", "http://www.w3.org/1999/xhtml", "th", {}]],
+ "expected": ["<th>", "</th>"]
+},
+
+{"description": "th end-tag followed by td start-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["StartTag", "http://www.w3.org/1999/xhtml", "td", {}]],
+ "expected": ["<td>", "</th>"]
+},
+
+{"description": "th end-tag followed by end-tag",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml", "th"], ["EndTag", "http://www.w3.org/1999/xhtml", "foo"]],
+ "expected": ["</foo>"]
+},
+
+{"description": "th end-tag at EOF",
+ "input": [["EndTag", "http://www.w3.org/1999/xhtml" , "th"]],
+ "expected": [""]
+}
+
+]}
diff --git a/tests/html5lib-tests/serializer/options.test b/tests/html5lib-tests/serializer/options.test
new file mode 100644
index 0000000..6f342dd
--- /dev/null
+++ b/tests/html5lib-tests/serializer/options.test
@@ -0,0 +1,60 @@
+{"tests":[
+
+{"description": "quote_char=\"'\"",
+ "options": {"quote_char": "'"},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "span", [{"namespace": null, "name": "title", "value": "test 'with' quote_char"}]]],
+ "expected": ["<span title='test &#39;with&#39; quote_char'>"]
+},
+
+{"description": "quote_attr_values=true",
+ "options": {"quote_attr_values": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "button", [{"namespace": null, "name": "disabled", "value" :"disabled"}]]],
+ "expected": ["<button disabled>"],
+ "xhtml": ["<button disabled=\"disabled\">"]
+},
+
+{"description": "quote_attr_values=true with irrelevant",
+ "options": {"quote_attr_values": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "div", [{"namespace": null, "name": "irrelevant", "value" :"irrelevant"}]]],
+ "expected": ["<div irrelevant>"],
+ "xhtml": ["<div irrelevant=\"irrelevant\">"]
+},
+
+{"description": "use_trailing_solidus=true with void element",
+ "options": {"use_trailing_solidus": true},
+ "input": [["EmptyTag", "img", {}]],
+ "expected": ["<img />"]
+},
+
+{"description": "use_trailing_solidus=true with non-void element",
+ "options": {"use_trailing_solidus": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "div", {}]],
+ "expected": ["<div>"]
+},
+
+{"description": "minimize_boolean_attributes=false",
+ "options": {"minimize_boolean_attributes": false},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "div", [{"namespace": null, "name": "irrelevant", "value" :"irrelevant"}]]],
+ "expected": ["<div irrelevant=irrelevant>"],
+ "xhtml": ["<div irrelevant=\"irrelevant\">"]
+},
+
+{"description": "minimize_boolean_attributes=false with empty value",
+ "options": {"minimize_boolean_attributes": false},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "div", [{"namespace": null, "name": "irrelevant", "value" :""}]]],
+ "expected": ["<div irrelevant=\"\">"]
+},
+
+{"description": "escape less than signs in attribute values",
+ "options": {"escape_lt_in_attrs": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "a", [{"namespace": null, "name": "title", "value": "a<b>c&d"}]]],
+ "expected": ["<a title=\"a&lt;b>c&amp;d\">"]
+},
+
+{"description": "rcdata",
+ "options": {"escape_rcdata": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "script", {}], ["Characters", "a<b>c&d"]],
+ "expected": ["<script>a&lt;b&gt;c&amp;d"]
+}
+
+]}
diff --git a/tests/html5lib-tests/serializer/whitespace.test b/tests/html5lib-tests/serializer/whitespace.test
new file mode 100644
index 0000000..e5d050d
--- /dev/null
+++ b/tests/html5lib-tests/serializer/whitespace.test
@@ -0,0 +1,51 @@
+{"tests": [
+
+{"description": "bare text with leading spaces",
+ "options": {"strip_whitespace": true},
+ "input": [["Characters", "\t\r\n\u000C foo"]],
+ "expected": [" foo"]
+},
+
+{"description": "bare text with trailing spaces",
+ "options": {"strip_whitespace": true},
+ "input": [["Characters", "foo \t\r\n\u000C"]],
+ "expected": ["foo "]
+},
+
+{"description": "bare text with inner spaces",
+ "options": {"strip_whitespace": true},
+ "input": [["Characters", "foo \t\r\n\u000C bar"]],
+ "expected": ["foo bar"]
+},
+
+{"description": "text within <pre>",
+ "options": {"strip_whitespace": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "pre", {}], ["Characters", "\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C"], ["EndTag", "http://www.w3.org/1999/xhtml", "pre"]],
+ "expected": ["<pre>\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C</pre>"]
+},
+
+{"description": "text within <pre>, with inner markup",
+ "options": {"strip_whitespace": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "pre", {}], ["Characters", "\t\r\n\u000C fo"], ["StartTag", "http://www.w3.org/1999/xhtml", "span", {}], ["Characters", "o \t\r\n\u000C b"], ["EndTag", "http://www.w3.org/1999/xhtml", "span"], ["Characters", "ar \t\r\n\u000C"], ["EndTag", "http://www.w3.org/1999/xhtml", "pre"]],
+ "expected": ["<pre>\t\r\n\u000C fo<span>o \t\r\n\u000C b</span>ar \t\r\n\u000C</pre>"]
+},
+
+{"description": "text within <textarea>",
+ "options": {"strip_whitespace": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "textarea", {}], ["Characters", "\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C"], ["EndTag", "http://www.w3.org/1999/xhtml", "textarea"]],
+ "expected": ["<textarea>\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C</textarea>"]
+},
+
+{"description": "text within <script>",
+ "options": {"strip_whitespace": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "script", {}], ["Characters", "\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C"], ["EndTag", "http://www.w3.org/1999/xhtml", "script"]],
+ "expected": ["<script>\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C</script>"]
+},
+
+{"description": "text within <style>",
+ "options": {"strip_whitespace": true},
+ "input": [["StartTag", "http://www.w3.org/1999/xhtml", "style", {}], ["Characters", "\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C"], ["EndTag", "http://www.w3.org/1999/xhtml", "style"]],
+ "expected": ["<style>\t\r\n\u000C foo \t\r\n\u000C bar \t\r\n\u000C</style>"]
+}
+
+]} \ No newline at end of file
diff --git a/tests/html5lib-tests/tokenizer/README.md b/tests/html5lib-tests/tokenizer/README.md
new file mode 100644
index 0000000..66b81e8
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/README.md
@@ -0,0 +1,107 @@
+Tokenizer tests
+===============
+
+The test format is [JSON](http://www.json.org/). This has the advantage
+that the syntax allows backward-compatible extensions to the tests and
+the disadvantage that it is relatively verbose.
+
+Basic Structure
+---------------
+
+ {"tests": [
+     {"description": "Test description",
+     "input": "input_string",
+     "output": [expected_output_tokens],
+     "initialStates": [initial_states],
+     "lastStartTag": last_start_tag,
+ "errors": [parse_errors]
+     }
+ ]}
+
+Multiple tests per file are allowed simply by adding more objects to the
+"tests" list.
+
+Each parse error is an object that contains error `code` and one-based
+error location indices: `line` and `col`.
+
+`description`, `input` and `output` are always present. The other values
+are optional.
+
+### Test set-up
+
+`test.input` is a string containing the characters to pass to the
+tokenizer. Specifically, it represents the characters of the **input
+stream**, and so implementations are expected to perform the processing
+described in the spec's **Preprocessing the input stream** section
+before feeding the result to the tokenizer.
+
+If `test.doubleEscaped` is present and `true`, then `test.input` is not
+quite as described above. Instead, it must first be subjected to another
+round of unescaping (i.e., in addition to any unescaping involved in the
+JSON import), and the result of *that* represents the characters of the
+input stream. Currently, the only unescaping required by this option is
+to convert each sequence of the form \\uHHHH (where H is a hex digit)
+into the corresponding Unicode code point. (Note that this option also
+affects the interpretation of `test.output`.)
+
+`test.initialStates` is a list of strings, each being the name of a
+tokenizer state which can be one of the following:
+
+- `Data state`
+- `PLAINTEXT state`
+- `RCDATA state`
+- `RAWTEXT state`
+- `Script data state`
+- `CDATA section state`
+
+ The test should be run once for each string, using it
+to set the tokenizer's initial state for that run. If
+`test.initialStates` is omitted, it defaults to `["Data state"]`.
+
+`test.lastStartTag` is a lowercase string that should be used as "the
+tag name of the last start tag to have been emitted from this
+tokenizer", referenced in the spec's definition of **appropriate end tag
+token**. If it is omitted, it is treated as if "no start tag has been
+emitted from this tokenizer".
+
+### Test results
+
+`test.output` is a list of tokens, ordered with the first produced by
+the tokenizer the first (leftmost) in the list. The list must mach the
+**complete** list of tokens that the tokenizer should produce. Valid
+tokens are:
+
+ ["DOCTYPE", name, public_id, system_id, correctness]
+ ["StartTag", name, {attributes}*, true*]
+ ["StartTag", name, {attributes}]
+ ["EndTag", name]
+ ["Comment", data]
+ ["Character", data]
+
+`public_id` and `system_id` are either strings or `null`. `correctness`
+is either `true` or `false`; `true` corresponds to the force-quirks flag
+being false, and vice-versa.
+
+When the self-closing flag is set, the `StartTag` array has `true` as
+its fourth entry. When the flag is not set, the array has only three
+entries for backwards compatibility.
+
+All adjacent character tokens are coalesced into a single
+`["Character", data]` token.
+
+If `test.doubleEscaped` is present and `true`, then every string within
+`test.output` must be further unescaped (as described above) before
+comparing with the tokenizer's output.
+
+xmlViolation tests
+------------------
+
+`tokenizer/xmlViolation.test` differs from the above in a couple of
+ways:
+
+- The name of the single member of the top-level JSON object is
+ "xmlViolationTests" instead of "tests".
+- Each test's expected output assumes that implementation is applying
+ the tweaks given in the spec's "Coercing an HTML DOM into an
+ infoset" section.
+
diff --git a/tests/html5lib-tests/tokenizer/contentModelFlags.test b/tests/html5lib-tests/tokenizer/contentModelFlags.test
new file mode 100644
index 0000000..9cf7c8b
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/contentModelFlags.test
@@ -0,0 +1,93 @@
+{"tests": [
+
+{"description":"PLAINTEXT content model flag",
+"initialStates":["PLAINTEXT state"],
+"lastStartTag":"plaintext",
+"input":"<head>&body;",
+"output":[["Character", "<head>&body;"]]},
+
+{"description":"PLAINTEXT with seeming close tag",
+"initialStates":["PLAINTEXT state"],
+"lastStartTag":"plaintext",
+"input":"</plaintext>&body;",
+"output":[["Character", "</plaintext>&body;"]]},
+
+{"description":"End tag closing RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp>",
+"output":[["Character", "foo"], ["EndTag", "xmp"]]},
+
+{"description":"End tag closing RCDATA or RAWTEXT (case-insensitivity)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xMp>",
+"output":[["Character", "foo"], ["EndTag", "xmp"]]},
+
+{"description":"End tag closing RCDATA or RAWTEXT (ending with space)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp ",
+"output":[["Character", "foo"]],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 10 }
+]},
+
+{"description":"End tag closing RCDATA or RAWTEXT (ending with EOF)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp",
+"output":[["Character", "foo</xmp"]]},
+
+{"description":"End tag closing RCDATA or RAWTEXT (ending with slash)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp/",
+"output":[["Character", "foo"]],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 10 }
+]},
+
+{"description":"End tag not closing RCDATA or RAWTEXT (ending with left-angle-bracket)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp<",
+"output":[["Character", "foo</xmp<"]]},
+
+{"description":"End tag with incorrect name in RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"</foo>bar</xmp>",
+"output":[["Character", "</foo>bar"], ["EndTag", "xmp"]]},
+
+{"description":"Partial end tags leading straight into partial end tags",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"</xmp</xmp</xmp>",
+"output":[["Character", "</xmp</xmp"], ["EndTag", "xmp"]]},
+
+{"description":"End tag with incorrect name in RCDATA or RAWTEXT (starting like correct name)",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"</foo>bar</xmpaar>",
+"output":[["Character", "</foo>bar</xmpaar>"]]},
+
+{"description":"End tag closing RCDATA or RAWTEXT, switching back to PCDATA",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo</xmp></baz>",
+"output":[["Character", "foo"], ["EndTag", "xmp"], ["EndTag", "baz"]]},
+
+{"description":"RAWTEXT w/ something looking like an entity",
+"initialStates":["RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"&foo;",
+"output":[["Character", "&foo;"]]},
+
+{"description":"RCDATA w/ an entity",
+"initialStates":["RCDATA state"],
+"lastStartTag":"textarea",
+"input":"&lt;",
+"output":[["Character", "<"]]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/domjs.test b/tests/html5lib-tests/tokenizer/domjs.test
new file mode 100644
index 0000000..1373b27
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/domjs.test
@@ -0,0 +1,330 @@
+{
+ "tests": [
+ {
+ "description":"CR in bogus comment state",
+ "input":"<?\u000d",
+ "output":[["Comment", "?\u000a"]],
+ "errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+ ]
+ },
+ {
+ "description":"CRLF in bogus comment state",
+ "input":"<?\u000d\u000a",
+ "output":[["Comment", "?\u000a"]],
+ "errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+ ]
+ },
+ {
+ "description":"CRLFLF in bogus comment state",
+ "input":"<?\u000d\u000a\u000a",
+ "output":[["Comment", "?\u000a\u000a"]],
+ "errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+ ]
+ },
+ {
+ "description":"Raw NUL replacement",
+ "doubleEscaped":true,
+ "initialStates":["RCDATA state", "RAWTEXT state", "PLAINTEXT state", "Script data state"],
+ "input":"\\u0000",
+ "output":[["Character", "\\uFFFD"]],
+ "errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 1 }
+ ]
+ },
+ {
+ "description":"NUL in CDATA section",
+ "doubleEscaped":true,
+ "initialStates":["CDATA section state"],
+ "input":"\\u0000]]>",
+ "output":[["Character", "\\u0000"]]
+ },
+ {
+ "description":"NUL in script HTML comment",
+ "doubleEscaped":true,
+ "initialStates":["Script data state"],
+ "input":"<!--test\\u0000--><!--test-\\u0000--><!--test--\\u0000-->",
+ "output":[["Character", "<!--test\\uFFFD--><!--test-\\uFFFD--><!--test--\\uFFFD-->"]],
+ "errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 9 },
+ { "code": "unexpected-null-character", "line": 1, "col": 22 },
+ { "code": "unexpected-null-character", "line": 1, "col": 36 }
+ ]
+ },
+ {
+ "description":"NUL in script HTML comment - double escaped",
+ "doubleEscaped":true,
+ "initialStates":["Script data state"],
+ "input":"<!--<script>\\u0000--><!--<script>-\\u0000--><!--<script>--\\u0000-->",
+ "output":[["Character", "<!--<script>\\uFFFD--><!--<script>-\\uFFFD--><!--<script>--\\uFFFD-->"]],
+ "errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 13 },
+ { "code": "unexpected-null-character", "line": 1, "col": 30 },
+ { "code": "unexpected-null-character", "line": 1, "col": 48 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment",
+ "initialStates":["Script data state"],
+ "input":"<!--test",
+ "output":[["Character", "<!--test"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 9 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment after dash",
+ "initialStates":["Script data state"],
+ "input":"<!--test-",
+ "output":[["Character", "<!--test-"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 10 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment after dash dash",
+ "initialStates":["Script data state"],
+ "input":"<!--test--",
+ "output":[["Character", "<!--test--"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 11 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment double escaped after dash",
+ "initialStates":["Script data state"],
+ "input":"<!--<script>-",
+ "output":[["Character", "<!--<script>-"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 14 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment double escaped after dash dash",
+ "initialStates":["Script data state"],
+ "input":"<!--<script>--",
+ "output":[["Character", "<!--<script>--"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 15 }
+ ]
+ },
+ {
+ "description":"EOF in script HTML comment - double escaped",
+ "initialStates":["Script data state"],
+ "input":"<!--<script>",
+ "output":[["Character", "<!--<script>"]],
+ "errors":[
+ { "code": "eof-in-script-html-comment-like-text", "line": 1, "col": 13 }
+ ]
+ },
+ {
+ "description":"Dash in script HTML comment",
+ "initialStates":["Script data state"],
+ "input":"<!-- - -->",
+ "output":[["Character", "<!-- - -->"]]
+ },
+ {
+ "description":"Dash less-than in script HTML comment",
+ "initialStates":["Script data state"],
+ "input":"<!-- -< -->",
+ "output":[["Character", "<!-- -< -->"]]
+ },
+ {
+ "description":"Dash at end of script HTML comment",
+ "initialStates":["Script data state"],
+ "input":"<!--test--->",
+ "output":[["Character", "<!--test--->"]]
+ },
+ {
+ "description":"</script> in script HTML comment",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!-- </script> --></script>",
+ "output":[["Character", "<!-- "], ["EndTag", "script"], ["Character", " -->"], ["EndTag", "script"]]
+ },
+ {
+ "description":"</script> in script HTML comment - double escaped",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!-- <script></script> --></script>",
+ "output":[["Character", "<!-- <script></script> -->"], ["EndTag", "script"]]
+ },
+ {
+ "description":"</script> in script HTML comment - double escaped with nested <script>",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!-- <script><script></script></script> --></script>",
+ "output":[["Character", "<!-- <script><script></script>"], ["EndTag", "script"], ["Character", " -->"], ["EndTag", "script"]]
+ },
+ {
+ "description":"</script> in script HTML comment - double escaped with abrupt end",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!-- <script>--></script> --></script>",
+ "output":[["Character", "<!-- <script>-->"], ["EndTag", "script"], ["Character", " -->"], ["EndTag", "script"]]
+ },
+ {
+ "description":"Incomplete start tag in script HTML comment double escaped",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!--<scrip></script>-->",
+ "output":[["Character", "<!--<scrip>"], ["EndTag", "script"], ["Character", "-->"]]
+ },
+ {
+ "description":"Unclosed start tag in script HTML comment double escaped",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!--<script</script>-->",
+ "output":[["Character", "<!--<script"], ["EndTag", "script"], ["Character", "-->"]]
+ },
+ {
+ "description":"Incomplete end tag in script HTML comment double escaped",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!--<script></scrip>-->",
+ "output":[["Character", "<!--<script></scrip>-->"]]
+ },
+ {
+ "description":"Unclosed end tag in script HTML comment double escaped",
+ "initialStates":["Script data state"],
+ "lastStartTag":"script",
+ "input":"<!--<script></script-->",
+ "output":[["Character", "<!--<script></script-->"]]
+ },
+ {
+ "description":"leading U+FEFF must pass through",
+ "initialStates":["Data state", "RCDATA state", "RAWTEXT state", "Script data state"],
+ "doubleEscaped":true,
+ "input":"\\uFEFFfoo\\uFEFFbar",
+ "output":[["Character", "\\uFEFFfoo\\uFEFFbar"]]
+ },
+ {
+ "description":"Non BMP-charref in RCDATA",
+ "initialStates":["RCDATA state"],
+ "input":"&NotEqualTilde;",
+ "output":[["Character", "\u2242\u0338"]]
+ },
+ {
+ "description":"Bad charref in RCDATA",
+ "initialStates":["RCDATA state"],
+ "input":"&NotEqualTild;",
+ "output":[["Character", "&NotEqualTild;"]],
+ "errors":[
+ { "code": "unknown-named-character-reference", "line": 1, "col": 14 }
+ ]
+ },
+ {
+ "description":"lowercase endtags",
+ "initialStates":["RCDATA state", "RAWTEXT state", "Script data state"],
+ "lastStartTag":"xmp",
+ "input":"</XMP>",
+ "output":[["EndTag","xmp"]]
+ },
+ {
+ "description":"bad endtag (space before name)",
+ "initialStates":["RCDATA state", "RAWTEXT state", "Script data state"],
+ "lastStartTag":"xmp",
+ "input":"</ XMP>",
+ "output":[["Character","</ XMP>"]]
+ },
+ {
+ "description":"bad endtag (not matching last start tag)",
+ "initialStates":["RCDATA state", "RAWTEXT state", "Script data state"],
+ "lastStartTag":"xmp",
+ "input":"</xm>",
+ "output":[["Character","</xm>"]]
+ },
+ {
+ "description":"bad endtag (without close bracket)",
+ "initialStates":["RCDATA state", "RAWTEXT state", "Script data state"],
+ "lastStartTag":"xmp",
+ "input":"</xm ",
+ "output":[["Character","</xm "]]
+ },
+ {
+ "description":"bad endtag (trailing solidus)",
+ "initialStates":["RCDATA state", "RAWTEXT state", "Script data state"],
+ "lastStartTag":"xmp",
+ "input":"</xm/",
+ "output":[["Character","</xm/"]]
+ },
+ {
+ "description":"Non BMP-charref in attribute",
+ "input":"<p id=\"&NotEqualTilde;\">",
+ "output":[["StartTag", "p", {"id":"\u2242\u0338"}]]
+ },
+ {
+ "description":"--!NUL in comment ",
+ "doubleEscaped":true,
+ "input":"<!----!\\u0000-->",
+ "output":[["Comment", "--!\\uFFFD"]],
+ "errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "description":"space EOF after doctype ",
+ "input":"<!DOCTYPE html ",
+ "output":[["DOCTYPE", "html", null, null , false]],
+ "errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 16 }
+ ]
+ },
+ {
+ "description":"CDATA in HTML content",
+ "input":"<![CDATA[foo]]>",
+ "output":[["Comment", "[CDATA[foo]]"]],
+ "errors":[
+ { "code": "cdata-in-html-content", "line": 1, "col": 9 }
+ ]
+ },
+ {
+ "description":"CDATA content",
+ "input":"foo&#32;]]>",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo&#32;"]]
+ },
+ {
+ "description":"CDATA followed by HTML content",
+ "input":"foo&#32;]]>&#32;",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo&#32; "]]
+ },
+ {
+ "description":"CDATA with extra bracket",
+ "input":"foo]]]>",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo]"]]
+ },
+ {
+ "description":"CDATA without end marker",
+ "input":"foo",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo"]],
+ "errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 4 }
+ ]
+ },
+ {
+ "description":"CDATA with single bracket ending",
+ "input":"foo]",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo]"]],
+ "errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "description":"CDATA with two brackets ending",
+ "input":"foo]]",
+ "initialStates":["CDATA section state"],
+ "output":[["Character", "foo]]"]],
+ "errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 6 }
+ ]
+ }
+
+ ]
+}
diff --git a/tests/html5lib-tests/tokenizer/entities.test b/tests/html5lib-tests/tokenizer/entities.test
new file mode 100644
index 0000000..a6469cd
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/entities.test
@@ -0,0 +1,542 @@
+{"tests": [
+
+{"description": "Undefined named entity in a double-quoted attribute value ending in semicolon and whose name starts with a known entity name.",
+"input":"<h a=\"&noti;\">",
+"output": [["StartTag", "h", {"a": "&noti;"}]]},
+
+{"description": "Entity name requiring semicolon instead followed by the equals sign in a double-quoted attribute value.",
+"input":"<h a=\"&lang=\">",
+"output": [["StartTag", "h", {"a": "&lang="}]]},
+
+{"description": "Valid entity name followed by the equals sign in a double-quoted attribute value.",
+"input":"<h a=\"&not=\">",
+"output": [["StartTag", "h", {"a": "&not="}]]},
+
+{"description": "Undefined named entity in a single-quoted attribute value ending in semicolon and whose name starts with a known entity name.",
+"input":"<h a='&noti;'>",
+"output": [["StartTag", "h", {"a": "&noti;"}]]},
+
+{"description": "Entity name requiring semicolon instead followed by the equals sign in a single-quoted attribute value.",
+"input":"<h a='&lang='>",
+"output": [["StartTag", "h", {"a": "&lang="}]]},
+
+{"description": "Valid entity name followed by the equals sign in a single-quoted attribute value.",
+"input":"<h a='&not='>",
+"output": [["StartTag", "h", {"a": "&not="}]]},
+
+{"description": "Undefined named entity in an unquoted attribute value ending in semicolon and whose name starts with a known entity name.",
+"input":"<h a=&noti;>",
+"output": [["StartTag", "h", {"a": "&noti;"}]]},
+
+{"description": "Entity name requiring semicolon instead followed by the equals sign in an unquoted attribute value.",
+"input":"<h a=&lang=>",
+"output": [["StartTag", "h", {"a": "&lang="}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 11 }
+]},
+
+{"description": "Valid entity name followed by the equals sign in an unquoted attribute value.",
+"input":"<h a=&not=>",
+"output": [["StartTag", "h", {"a": "&not="}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 10 }
+]},
+
+{"description": "Ambiguous ampersand.",
+"input":"&rrrraannddom;",
+"output": [["Character", "&rrrraannddom;"]],
+"errors":[
+ { "code": "unknown-named-character-reference", "line": 1, "col": 14 }
+]},
+
+{"description": "Semicolonless named entity 'not' followed by 'i;' in body",
+"input":"&noti;",
+"output": [["Character", "\u00ACi;"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+]},
+
+{"description": "Very long undefined named entity in body",
+"input":"&ammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmp;",
+"output": [["Character", "&ammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmp;"]],
+"errors":[
+ { "code": "unknown-named-character-reference", "line": 1, "col": 950 }
+]},
+
+{"description": "CR as numeric entity",
+"input":"&#013;",
+"output": [["Character", "\r"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 7 }
+]},
+
+{"description": "CR as hexadecimal numeric entity",
+"input":"&#x00D;",
+"output": [["Character", "\r"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EURO SIGN numeric entity.",
+"input":"&#0128;",
+"output": [["Character", "\u20AC"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR numeric entity.",
+"input":"&#0129;",
+"output": [["Character", "\u0081"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE LOW-9 QUOTATION MARK numeric entity.",
+"input":"&#0130;",
+"output": [["Character", "\u201A"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LETTER F WITH HOOK numeric entity.",
+"input":"&#0131;",
+"output": [["Character", "\u0192"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DOUBLE LOW-9 QUOTATION MARK numeric entity.",
+"input":"&#0132;",
+"output": [["Character", "\u201E"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 HORIZONTAL ELLIPSIS numeric entity.",
+"input":"&#0133;",
+"output": [["Character", "\u2026"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DAGGER numeric entity.",
+"input":"&#0134;",
+"output": [["Character", "\u2020"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DOUBLE DAGGER numeric entity.",
+"input":"&#0135;",
+"output": [["Character", "\u2021"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 MODIFIER LETTER CIRCUMFLEX ACCENT numeric entity.",
+"input":"&#0136;",
+"output": [["Character", "\u02C6"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 PER MILLE SIGN numeric entity.",
+"input":"&#0137;",
+"output": [["Character", "\u2030"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LETTER S WITH CARON numeric entity.",
+"input":"&#0138;",
+"output": [["Character", "\u0160"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE LEFT-POINTING ANGLE QUOTATION MARK numeric entity.",
+"input":"&#0139;",
+"output": [["Character", "\u2039"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LIGATURE OE numeric entity.",
+"input":"&#0140;",
+"output": [["Character", "\u0152"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR numeric entity.",
+"input":"&#0141;",
+"output": [["Character", "\u008D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LETTER Z WITH CARON numeric entity.",
+"input":"&#0142;",
+"output": [["Character", "\u017D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR numeric entity.",
+"input":"&#0143;",
+"output": [["Character", "\u008F"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR numeric entity.",
+"input":"&#0144;",
+"output": [["Character", "\u0090"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LEFT SINGLE QUOTATION MARK numeric entity.",
+"input":"&#0145;",
+"output": [["Character", "\u2018"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 RIGHT SINGLE QUOTATION MARK numeric entity.",
+"input":"&#0146;",
+"output": [["Character", "\u2019"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LEFT DOUBLE QUOTATION MARK numeric entity.",
+"input":"&#0147;",
+"output": [["Character", "\u201C"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 RIGHT DOUBLE QUOTATION MARK numeric entity.",
+"input":"&#0148;",
+"output": [["Character", "\u201D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 BULLET numeric entity.",
+"input":"&#0149;",
+"output": [["Character", "\u2022"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EN DASH numeric entity.",
+"input":"&#0150;",
+"output": [["Character", "\u2013"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EM DASH numeric entity.",
+"input":"&#0151;",
+"output": [["Character", "\u2014"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SMALL TILDE numeric entity.",
+"input":"&#0152;",
+"output": [["Character", "\u02DC"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 TRADE MARK SIGN numeric entity.",
+"input":"&#0153;",
+"output": [["Character", "\u2122"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LETTER S WITH CARON numeric entity.",
+"input":"&#0154;",
+"output": [["Character", "\u0161"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE RIGHT-POINTING ANGLE QUOTATION MARK numeric entity.",
+"input":"&#0155;",
+"output": [["Character", "\u203A"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LIGATURE OE numeric entity.",
+"input":"&#0156;",
+"output": [["Character", "\u0153"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR numeric entity.",
+"input":"&#0157;",
+"output": [["Character", "\u009D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EURO SIGN hexadecimal numeric entity.",
+"input":"&#x080;",
+"output": [["Character", "\u20AC"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR hexadecimal numeric entity.",
+"input":"&#x081;",
+"output": [["Character", "\u0081"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE LOW-9 QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x082;",
+"output": [["Character", "\u201A"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LETTER F WITH HOOK hexadecimal numeric entity.",
+"input":"&#x083;",
+"output": [["Character", "\u0192"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DOUBLE LOW-9 QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x084;",
+"output": [["Character", "\u201E"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 HORIZONTAL ELLIPSIS hexadecimal numeric entity.",
+"input":"&#x085;",
+"output": [["Character", "\u2026"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DAGGER hexadecimal numeric entity.",
+"input":"&#x086;",
+"output": [["Character", "\u2020"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 DOUBLE DAGGER hexadecimal numeric entity.",
+"input":"&#x087;",
+"output": [["Character", "\u2021"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 MODIFIER LETTER CIRCUMFLEX ACCENT hexadecimal numeric entity.",
+"input":"&#x088;",
+"output": [["Character", "\u02C6"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 PER MILLE SIGN hexadecimal numeric entity.",
+"input":"&#x089;",
+"output": [["Character", "\u2030"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LETTER S WITH CARON hexadecimal numeric entity.",
+"input":"&#x08A;",
+"output": [["Character", "\u0160"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE LEFT-POINTING ANGLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x08B;",
+"output": [["Character", "\u2039"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LIGATURE OE hexadecimal numeric entity.",
+"input":"&#x08C;",
+"output": [["Character", "\u0152"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR hexadecimal numeric entity.",
+"input":"&#x08D;",
+"output": [["Character", "\u008D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LETTER Z WITH CARON hexadecimal numeric entity.",
+"input":"&#x08E;",
+"output": [["Character", "\u017D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR hexadecimal numeric entity.",
+"input":"&#x08F;",
+"output": [["Character", "\u008F"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR hexadecimal numeric entity.",
+"input":"&#x090;",
+"output": [["Character", "\u0090"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LEFT SINGLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x091;",
+"output": [["Character", "\u2018"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 RIGHT SINGLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x092;",
+"output": [["Character", "\u2019"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LEFT DOUBLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x093;",
+"output": [["Character", "\u201C"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 RIGHT DOUBLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x094;",
+"output": [["Character", "\u201D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 BULLET hexadecimal numeric entity.",
+"input":"&#x095;",
+"output": [["Character", "\u2022"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EN DASH hexadecimal numeric entity.",
+"input":"&#x096;",
+"output": [["Character", "\u2013"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 EM DASH hexadecimal numeric entity.",
+"input":"&#x097;",
+"output": [["Character", "\u2014"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SMALL TILDE hexadecimal numeric entity.",
+"input":"&#x098;",
+"output": [["Character", "\u02DC"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 TRADE MARK SIGN hexadecimal numeric entity.",
+"input":"&#x099;",
+"output": [["Character", "\u2122"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LETTER S WITH CARON hexadecimal numeric entity.",
+"input":"&#x09A;",
+"output": [["Character", "\u0161"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 SINGLE RIGHT-POINTING ANGLE QUOTATION MARK hexadecimal numeric entity.",
+"input":"&#x09B;",
+"output": [["Character", "\u203A"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LIGATURE OE hexadecimal numeric entity.",
+"input":"&#x09C;",
+"output": [["Character", "\u0153"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 REPLACEMENT CHAR hexadecimal numeric entity.",
+"input":"&#x09D;",
+"output": [["Character", "\u009D"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN SMALL LETTER Z WITH CARON hexadecimal numeric entity.",
+"input":"&#x09E;",
+"output": [["Character", "\u017E"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Windows-1252 LATIN CAPITAL LETTER Y WITH DIAERESIS hexadecimal numeric entity.",
+"input":"&#x09F;",
+"output": [["Character", "\u0178"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description": "Decimal numeric entity followed by hex character a.",
+"input":"&#97a",
+"output": [["Character", "aa"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+]},
+
+{"description": "Decimal numeric entity followed by hex character A.",
+"input":"&#97A",
+"output": [["Character", "aA"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+]},
+
+{"description": "Decimal numeric entity followed by hex character f.",
+"input":"&#97f",
+"output": [["Character", "af"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+]},
+
+{"description": "Decimal numeric entity followed by hex character A.",
+"input":"&#97F",
+"output": [["Character", "aF"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/escapeFlag.test b/tests/html5lib-tests/tokenizer/escapeFlag.test
new file mode 100644
index 0000000..d7d2c49
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/escapeFlag.test
@@ -0,0 +1,36 @@
+{"tests": [
+
+{"description":"Commented close tag in RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo<!--</xmp>--></xmp>",
+"output":[["Character", "foo<!--"], ["EndTag", "xmp"], ["Character", "-->"], ["EndTag", "xmp"]]},
+
+{"description":"Bogus comment in RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo<!-->baz</xmp>",
+"output":[["Character", "foo<!-->baz"], ["EndTag", "xmp"]]},
+
+{"description":"End tag surrounded by bogus comment in RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo<!--></xmp><!-->baz</xmp>",
+"output":[["Character", "foo<!-->"], ["EndTag", "xmp"], ["Comment", ""], ["Character", "baz"], ["EndTag", "xmp"]],
+"errors":[
+ { "code": "abrupt-closing-of-empty-comment", "line": 1, "col": 19 }
+]},
+
+{"description":"Commented entities in RCDATA",
+"initialStates":["RCDATA state"],
+"lastStartTag":"xmp",
+"input":" &amp; <!-- &amp; --> &amp; </xmp>",
+"output":[["Character", " & <!-- & --> & "], ["EndTag", "xmp"]]},
+
+{"description":"Incorrect comment ending sequences in RCDATA or RAWTEXT",
+"initialStates":["RCDATA state", "RAWTEXT state"],
+"lastStartTag":"xmp",
+"input":"foo<!-- x --x>x-- >x--!>x--<></xmp>",
+"output":[["Character", "foo<!-- x --x>x-- >x--!>x--<>"], ["EndTag", "xmp"]]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/namedEntities.test b/tests/html5lib-tests/tokenizer/namedEntities.test
new file mode 100644
index 0000000..f74f5bf
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/namedEntities.test
@@ -0,0 +1,42422 @@
+{
+ "tests": [
+ {
+ "input": "&AElig",
+ "description": "Named entity: AElig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&AElig;",
+ "description": "Named entity: AElig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c6"
+ ]
+ ]
+ },
+ {
+ "input": "&AMP",
+ "description": "Named entity: AMP without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&AMP;",
+ "description": "Named entity: AMP; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&"
+ ]
+ ]
+ },
+ {
+ "input": "&Aacute",
+ "description": "Named entity: Aacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Aacute;",
+ "description": "Named entity: Aacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c1"
+ ]
+ ]
+ },
+ {
+ "input": "&Abreve",
+ "description": "Bad named entity: Abreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Abreve"
+ ]
+ ]
+ },
+ {
+ "input": "&Abreve;",
+ "description": "Named entity: Abreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0102"
+ ]
+ ]
+ },
+ {
+ "input": "&Acirc",
+ "description": "Named entity: Acirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Acirc;",
+ "description": "Named entity: Acirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c2"
+ ]
+ ]
+ },
+ {
+ "input": "&Acy",
+ "description": "Bad named entity: Acy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Acy"
+ ]
+ ]
+ },
+ {
+ "input": "&Acy;",
+ "description": "Named entity: Acy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0410"
+ ]
+ ]
+ },
+ {
+ "input": "&Afr",
+ "description": "Bad named entity: Afr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Afr"
+ ]
+ ]
+ },
+ {
+ "input": "&Afr;",
+ "description": "Named entity: Afr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd04"
+ ]
+ ]
+ },
+ {
+ "input": "&Agrave",
+ "description": "Named entity: Agrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Agrave;",
+ "description": "Named entity: Agrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c0"
+ ]
+ ]
+ },
+ {
+ "input": "&Alpha",
+ "description": "Bad named entity: Alpha without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Alpha"
+ ]
+ ]
+ },
+ {
+ "input": "&Alpha;",
+ "description": "Named entity: Alpha; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0391"
+ ]
+ ]
+ },
+ {
+ "input": "&Amacr",
+ "description": "Bad named entity: Amacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Amacr"
+ ]
+ ]
+ },
+ {
+ "input": "&Amacr;",
+ "description": "Named entity: Amacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0100"
+ ]
+ ]
+ },
+ {
+ "input": "&And",
+ "description": "Bad named entity: And without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&And"
+ ]
+ ]
+ },
+ {
+ "input": "&And;",
+ "description": "Named entity: And; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a53"
+ ]
+ ]
+ },
+ {
+ "input": "&Aogon",
+ "description": "Bad named entity: Aogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Aogon"
+ ]
+ ]
+ },
+ {
+ "input": "&Aogon;",
+ "description": "Named entity: Aogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0104"
+ ]
+ ]
+ },
+ {
+ "input": "&Aopf",
+ "description": "Bad named entity: Aopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Aopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Aopf;",
+ "description": "Named entity: Aopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd38"
+ ]
+ ]
+ },
+ {
+ "input": "&ApplyFunction",
+ "description": "Bad named entity: ApplyFunction without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ApplyFunction"
+ ]
+ ]
+ },
+ {
+ "input": "&ApplyFunction;",
+ "description": "Named entity: ApplyFunction; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2061"
+ ]
+ ]
+ },
+ {
+ "input": "&Aring",
+ "description": "Named entity: Aring without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Aring;",
+ "description": "Named entity: Aring; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c5"
+ ]
+ ]
+ },
+ {
+ "input": "&Ascr",
+ "description": "Bad named entity: Ascr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ascr"
+ ]
+ ]
+ },
+ {
+ "input": "&Ascr;",
+ "description": "Named entity: Ascr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udc9c"
+ ]
+ ]
+ },
+ {
+ "input": "&Assign",
+ "description": "Bad named entity: Assign without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Assign"
+ ]
+ ]
+ },
+ {
+ "input": "&Assign;",
+ "description": "Named entity: Assign; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2254"
+ ]
+ ]
+ },
+ {
+ "input": "&Atilde",
+ "description": "Named entity: Atilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Atilde;",
+ "description": "Named entity: Atilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c3"
+ ]
+ ]
+ },
+ {
+ "input": "&Auml",
+ "description": "Named entity: Auml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&Auml;",
+ "description": "Named entity: Auml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c4"
+ ]
+ ]
+ },
+ {
+ "input": "&Backslash",
+ "description": "Bad named entity: Backslash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Backslash"
+ ]
+ ]
+ },
+ {
+ "input": "&Backslash;",
+ "description": "Named entity: Backslash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2216"
+ ]
+ ]
+ },
+ {
+ "input": "&Barv",
+ "description": "Bad named entity: Barv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Barv"
+ ]
+ ]
+ },
+ {
+ "input": "&Barv;",
+ "description": "Named entity: Barv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae7"
+ ]
+ ]
+ },
+ {
+ "input": "&Barwed",
+ "description": "Bad named entity: Barwed without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Barwed"
+ ]
+ ]
+ },
+ {
+ "input": "&Barwed;",
+ "description": "Named entity: Barwed; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2306"
+ ]
+ ]
+ },
+ {
+ "input": "&Bcy",
+ "description": "Bad named entity: Bcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Bcy;",
+ "description": "Named entity: Bcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0411"
+ ]
+ ]
+ },
+ {
+ "input": "&Because",
+ "description": "Bad named entity: Because without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Because"
+ ]
+ ]
+ },
+ {
+ "input": "&Because;",
+ "description": "Named entity: Because; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2235"
+ ]
+ ]
+ },
+ {
+ "input": "&Bernoullis",
+ "description": "Bad named entity: Bernoullis without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bernoullis"
+ ]
+ ]
+ },
+ {
+ "input": "&Bernoullis;",
+ "description": "Named entity: Bernoullis; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212c"
+ ]
+ ]
+ },
+ {
+ "input": "&Beta",
+ "description": "Bad named entity: Beta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Beta"
+ ]
+ ]
+ },
+ {
+ "input": "&Beta;",
+ "description": "Named entity: Beta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0392"
+ ]
+ ]
+ },
+ {
+ "input": "&Bfr",
+ "description": "Bad named entity: Bfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Bfr;",
+ "description": "Named entity: Bfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd05"
+ ]
+ ]
+ },
+ {
+ "input": "&Bopf",
+ "description": "Bad named entity: Bopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Bopf;",
+ "description": "Named entity: Bopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd39"
+ ]
+ ]
+ },
+ {
+ "input": "&Breve",
+ "description": "Bad named entity: Breve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Breve"
+ ]
+ ]
+ },
+ {
+ "input": "&Breve;",
+ "description": "Named entity: Breve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02d8"
+ ]
+ ]
+ },
+ {
+ "input": "&Bscr",
+ "description": "Bad named entity: Bscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Bscr;",
+ "description": "Named entity: Bscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212c"
+ ]
+ ]
+ },
+ {
+ "input": "&Bumpeq",
+ "description": "Bad named entity: Bumpeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Bumpeq"
+ ]
+ ]
+ },
+ {
+ "input": "&Bumpeq;",
+ "description": "Named entity: Bumpeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224e"
+ ]
+ ]
+ },
+ {
+ "input": "&CHcy",
+ "description": "Bad named entity: CHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&CHcy;",
+ "description": "Named entity: CHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0427"
+ ]
+ ]
+ },
+ {
+ "input": "&COPY",
+ "description": "Named entity: COPY without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&COPY;",
+ "description": "Named entity: COPY; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a9"
+ ]
+ ]
+ },
+ {
+ "input": "&Cacute",
+ "description": "Bad named entity: Cacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cacute"
+ ]
+ ]
+ },
+ {
+ "input": "&Cacute;",
+ "description": "Named entity: Cacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0106"
+ ]
+ ]
+ },
+ {
+ "input": "&Cap",
+ "description": "Bad named entity: Cap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cap"
+ ]
+ ]
+ },
+ {
+ "input": "&Cap;",
+ "description": "Named entity: Cap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d2"
+ ]
+ ]
+ },
+ {
+ "input": "&CapitalDifferentialD",
+ "description": "Bad named entity: CapitalDifferentialD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CapitalDifferentialD"
+ ]
+ ]
+ },
+ {
+ "input": "&CapitalDifferentialD;",
+ "description": "Named entity: CapitalDifferentialD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2145"
+ ]
+ ]
+ },
+ {
+ "input": "&Cayleys",
+ "description": "Bad named entity: Cayleys without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cayleys"
+ ]
+ ]
+ },
+ {
+ "input": "&Cayleys;",
+ "description": "Named entity: Cayleys; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212d"
+ ]
+ ]
+ },
+ {
+ "input": "&Ccaron",
+ "description": "Bad named entity: Ccaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ccaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Ccaron;",
+ "description": "Named entity: Ccaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010c"
+ ]
+ ]
+ },
+ {
+ "input": "&Ccedil",
+ "description": "Named entity: Ccedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Ccedil;",
+ "description": "Named entity: Ccedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c7"
+ ]
+ ]
+ },
+ {
+ "input": "&Ccirc",
+ "description": "Bad named entity: Ccirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ccirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Ccirc;",
+ "description": "Named entity: Ccirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0108"
+ ]
+ ]
+ },
+ {
+ "input": "&Cconint",
+ "description": "Bad named entity: Cconint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cconint"
+ ]
+ ]
+ },
+ {
+ "input": "&Cconint;",
+ "description": "Named entity: Cconint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2230"
+ ]
+ ]
+ },
+ {
+ "input": "&Cdot",
+ "description": "Bad named entity: Cdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cdot"
+ ]
+ ]
+ },
+ {
+ "input": "&Cdot;",
+ "description": "Named entity: Cdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010a"
+ ]
+ ]
+ },
+ {
+ "input": "&Cedilla",
+ "description": "Bad named entity: Cedilla without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cedilla"
+ ]
+ ]
+ },
+ {
+ "input": "&Cedilla;",
+ "description": "Named entity: Cedilla; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b8"
+ ]
+ ]
+ },
+ {
+ "input": "&CenterDot",
+ "description": "Bad named entity: CenterDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CenterDot"
+ ]
+ ]
+ },
+ {
+ "input": "&CenterDot;",
+ "description": "Named entity: CenterDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b7"
+ ]
+ ]
+ },
+ {
+ "input": "&Cfr",
+ "description": "Bad named entity: Cfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Cfr;",
+ "description": "Named entity: Cfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212d"
+ ]
+ ]
+ },
+ {
+ "input": "&Chi",
+ "description": "Bad named entity: Chi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Chi"
+ ]
+ ]
+ },
+ {
+ "input": "&Chi;",
+ "description": "Named entity: Chi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a7"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleDot",
+ "description": "Bad named entity: CircleDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CircleDot"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleDot;",
+ "description": "Named entity: CircleDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2299"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleMinus",
+ "description": "Bad named entity: CircleMinus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CircleMinus"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleMinus;",
+ "description": "Named entity: CircleMinus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2296"
+ ]
+ ]
+ },
+ {
+ "input": "&CirclePlus",
+ "description": "Bad named entity: CirclePlus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CirclePlus"
+ ]
+ ]
+ },
+ {
+ "input": "&CirclePlus;",
+ "description": "Named entity: CirclePlus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2295"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleTimes",
+ "description": "Bad named entity: CircleTimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CircleTimes"
+ ]
+ ]
+ },
+ {
+ "input": "&CircleTimes;",
+ "description": "Named entity: CircleTimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2297"
+ ]
+ ]
+ },
+ {
+ "input": "&ClockwiseContourIntegral",
+ "description": "Bad named entity: ClockwiseContourIntegral without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ClockwiseContourIntegral"
+ ]
+ ]
+ },
+ {
+ "input": "&ClockwiseContourIntegral;",
+ "description": "Named entity: ClockwiseContourIntegral; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2232"
+ ]
+ ]
+ },
+ {
+ "input": "&CloseCurlyDoubleQuote",
+ "description": "Bad named entity: CloseCurlyDoubleQuote without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CloseCurlyDoubleQuote"
+ ]
+ ]
+ },
+ {
+ "input": "&CloseCurlyDoubleQuote;",
+ "description": "Named entity: CloseCurlyDoubleQuote; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201d"
+ ]
+ ]
+ },
+ {
+ "input": "&CloseCurlyQuote",
+ "description": "Bad named entity: CloseCurlyQuote without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CloseCurlyQuote"
+ ]
+ ]
+ },
+ {
+ "input": "&CloseCurlyQuote;",
+ "description": "Named entity: CloseCurlyQuote; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2019"
+ ]
+ ]
+ },
+ {
+ "input": "&Colon",
+ "description": "Bad named entity: Colon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Colon"
+ ]
+ ]
+ },
+ {
+ "input": "&Colon;",
+ "description": "Named entity: Colon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2237"
+ ]
+ ]
+ },
+ {
+ "input": "&Colone",
+ "description": "Bad named entity: Colone without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Colone"
+ ]
+ ]
+ },
+ {
+ "input": "&Colone;",
+ "description": "Named entity: Colone; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a74"
+ ]
+ ]
+ },
+ {
+ "input": "&Congruent",
+ "description": "Bad named entity: Congruent without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Congruent"
+ ]
+ ]
+ },
+ {
+ "input": "&Congruent;",
+ "description": "Named entity: Congruent; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2261"
+ ]
+ ]
+ },
+ {
+ "input": "&Conint",
+ "description": "Bad named entity: Conint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Conint"
+ ]
+ ]
+ },
+ {
+ "input": "&Conint;",
+ "description": "Named entity: Conint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222f"
+ ]
+ ]
+ },
+ {
+ "input": "&ContourIntegral",
+ "description": "Bad named entity: ContourIntegral without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ContourIntegral"
+ ]
+ ]
+ },
+ {
+ "input": "&ContourIntegral;",
+ "description": "Named entity: ContourIntegral; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222e"
+ ]
+ ]
+ },
+ {
+ "input": "&Copf",
+ "description": "Bad named entity: Copf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Copf"
+ ]
+ ]
+ },
+ {
+ "input": "&Copf;",
+ "description": "Named entity: Copf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2102"
+ ]
+ ]
+ },
+ {
+ "input": "&Coproduct",
+ "description": "Bad named entity: Coproduct without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Coproduct"
+ ]
+ ]
+ },
+ {
+ "input": "&Coproduct;",
+ "description": "Named entity: Coproduct; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2210"
+ ]
+ ]
+ },
+ {
+ "input": "&CounterClockwiseContourIntegral",
+ "description": "Bad named entity: CounterClockwiseContourIntegral without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CounterClockwiseContourIntegral"
+ ]
+ ]
+ },
+ {
+ "input": "&CounterClockwiseContourIntegral;",
+ "description": "Named entity: CounterClockwiseContourIntegral; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2233"
+ ]
+ ]
+ },
+ {
+ "input": "&Cross",
+ "description": "Bad named entity: Cross without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cross"
+ ]
+ ]
+ },
+ {
+ "input": "&Cross;",
+ "description": "Named entity: Cross; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a2f"
+ ]
+ ]
+ },
+ {
+ "input": "&Cscr",
+ "description": "Bad named entity: Cscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Cscr;",
+ "description": "Named entity: Cscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udc9e"
+ ]
+ ]
+ },
+ {
+ "input": "&Cup",
+ "description": "Bad named entity: Cup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Cup"
+ ]
+ ]
+ },
+ {
+ "input": "&Cup;",
+ "description": "Named entity: Cup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d3"
+ ]
+ ]
+ },
+ {
+ "input": "&CupCap",
+ "description": "Bad named entity: CupCap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&CupCap"
+ ]
+ ]
+ },
+ {
+ "input": "&CupCap;",
+ "description": "Named entity: CupCap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224d"
+ ]
+ ]
+ },
+ {
+ "input": "&DD",
+ "description": "Bad named entity: DD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DD"
+ ]
+ ]
+ },
+ {
+ "input": "&DD;",
+ "description": "Named entity: DD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2145"
+ ]
+ ]
+ },
+ {
+ "input": "&DDotrahd",
+ "description": "Bad named entity: DDotrahd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DDotrahd"
+ ]
+ ]
+ },
+ {
+ "input": "&DDotrahd;",
+ "description": "Named entity: DDotrahd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2911"
+ ]
+ ]
+ },
+ {
+ "input": "&DJcy",
+ "description": "Bad named entity: DJcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DJcy"
+ ]
+ ]
+ },
+ {
+ "input": "&DJcy;",
+ "description": "Named entity: DJcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0402"
+ ]
+ ]
+ },
+ {
+ "input": "&DScy",
+ "description": "Bad named entity: DScy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DScy"
+ ]
+ ]
+ },
+ {
+ "input": "&DScy;",
+ "description": "Named entity: DScy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0405"
+ ]
+ ]
+ },
+ {
+ "input": "&DZcy",
+ "description": "Bad named entity: DZcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DZcy"
+ ]
+ ]
+ },
+ {
+ "input": "&DZcy;",
+ "description": "Named entity: DZcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u040f"
+ ]
+ ]
+ },
+ {
+ "input": "&Dagger",
+ "description": "Bad named entity: Dagger without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dagger"
+ ]
+ ]
+ },
+ {
+ "input": "&Dagger;",
+ "description": "Named entity: Dagger; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2021"
+ ]
+ ]
+ },
+ {
+ "input": "&Darr",
+ "description": "Bad named entity: Darr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Darr"
+ ]
+ ]
+ },
+ {
+ "input": "&Darr;",
+ "description": "Named entity: Darr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a1"
+ ]
+ ]
+ },
+ {
+ "input": "&Dashv",
+ "description": "Bad named entity: Dashv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dashv"
+ ]
+ ]
+ },
+ {
+ "input": "&Dashv;",
+ "description": "Named entity: Dashv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae4"
+ ]
+ ]
+ },
+ {
+ "input": "&Dcaron",
+ "description": "Bad named entity: Dcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Dcaron;",
+ "description": "Named entity: Dcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010e"
+ ]
+ ]
+ },
+ {
+ "input": "&Dcy",
+ "description": "Bad named entity: Dcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Dcy;",
+ "description": "Named entity: Dcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0414"
+ ]
+ ]
+ },
+ {
+ "input": "&Del",
+ "description": "Bad named entity: Del without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Del"
+ ]
+ ]
+ },
+ {
+ "input": "&Del;",
+ "description": "Named entity: Del; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2207"
+ ]
+ ]
+ },
+ {
+ "input": "&Delta",
+ "description": "Bad named entity: Delta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Delta"
+ ]
+ ]
+ },
+ {
+ "input": "&Delta;",
+ "description": "Named entity: Delta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0394"
+ ]
+ ]
+ },
+ {
+ "input": "&Dfr",
+ "description": "Bad named entity: Dfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Dfr;",
+ "description": "Named entity: Dfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd07"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalAcute",
+ "description": "Bad named entity: DiacriticalAcute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DiacriticalAcute"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalAcute;",
+ "description": "Named entity: DiacriticalAcute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b4"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalDot",
+ "description": "Bad named entity: DiacriticalDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DiacriticalDot"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalDot;",
+ "description": "Named entity: DiacriticalDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02d9"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalDoubleAcute",
+ "description": "Bad named entity: DiacriticalDoubleAcute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DiacriticalDoubleAcute"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalDoubleAcute;",
+ "description": "Named entity: DiacriticalDoubleAcute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02dd"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalGrave",
+ "description": "Bad named entity: DiacriticalGrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DiacriticalGrave"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalGrave;",
+ "description": "Named entity: DiacriticalGrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "`"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalTilde",
+ "description": "Bad named entity: DiacriticalTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DiacriticalTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&DiacriticalTilde;",
+ "description": "Named entity: DiacriticalTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02dc"
+ ]
+ ]
+ },
+ {
+ "input": "&Diamond",
+ "description": "Bad named entity: Diamond without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Diamond"
+ ]
+ ]
+ },
+ {
+ "input": "&Diamond;",
+ "description": "Named entity: Diamond; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c4"
+ ]
+ ]
+ },
+ {
+ "input": "&DifferentialD",
+ "description": "Bad named entity: DifferentialD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DifferentialD"
+ ]
+ ]
+ },
+ {
+ "input": "&DifferentialD;",
+ "description": "Named entity: DifferentialD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2146"
+ ]
+ ]
+ },
+ {
+ "input": "&Dopf",
+ "description": "Bad named entity: Dopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Dopf;",
+ "description": "Named entity: Dopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd3b"
+ ]
+ ]
+ },
+ {
+ "input": "&Dot",
+ "description": "Bad named entity: Dot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dot"
+ ]
+ ]
+ },
+ {
+ "input": "&Dot;",
+ "description": "Named entity: Dot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a8"
+ ]
+ ]
+ },
+ {
+ "input": "&DotDot",
+ "description": "Bad named entity: DotDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DotDot"
+ ]
+ ]
+ },
+ {
+ "input": "&DotDot;",
+ "description": "Named entity: DotDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u20dc"
+ ]
+ ]
+ },
+ {
+ "input": "&DotEqual",
+ "description": "Bad named entity: DotEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DotEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&DotEqual;",
+ "description": "Named entity: DotEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2250"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleContourIntegral",
+ "description": "Bad named entity: DoubleContourIntegral without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleContourIntegral"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleContourIntegral;",
+ "description": "Named entity: DoubleContourIntegral; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222f"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleDot",
+ "description": "Bad named entity: DoubleDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleDot"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleDot;",
+ "description": "Named entity: DoubleDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a8"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleDownArrow",
+ "description": "Bad named entity: DoubleDownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleDownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleDownArrow;",
+ "description": "Named entity: DoubleDownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d3"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftArrow",
+ "description": "Bad named entity: DoubleLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftArrow;",
+ "description": "Named entity: DoubleLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d0"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftRightArrow",
+ "description": "Bad named entity: DoubleLeftRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLeftRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftRightArrow;",
+ "description": "Named entity: DoubleLeftRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d4"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftTee",
+ "description": "Bad named entity: DoubleLeftTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLeftTee"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLeftTee;",
+ "description": "Named entity: DoubleLeftTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae4"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongLeftArrow",
+ "description": "Bad named entity: DoubleLongLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLongLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongLeftArrow;",
+ "description": "Named entity: DoubleLongLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f8"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongLeftRightArrow",
+ "description": "Bad named entity: DoubleLongLeftRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLongLeftRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongLeftRightArrow;",
+ "description": "Named entity: DoubleLongLeftRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27fa"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongRightArrow",
+ "description": "Bad named entity: DoubleLongRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleLongRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleLongRightArrow;",
+ "description": "Named entity: DoubleLongRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f9"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleRightArrow",
+ "description": "Bad named entity: DoubleRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleRightArrow;",
+ "description": "Named entity: DoubleRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d2"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleRightTee",
+ "description": "Bad named entity: DoubleRightTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleRightTee"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleRightTee;",
+ "description": "Named entity: DoubleRightTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a8"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleUpArrow",
+ "description": "Bad named entity: DoubleUpArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleUpArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleUpArrow;",
+ "description": "Named entity: DoubleUpArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d1"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleUpDownArrow",
+ "description": "Bad named entity: DoubleUpDownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleUpDownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleUpDownArrow;",
+ "description": "Named entity: DoubleUpDownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d5"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleVerticalBar",
+ "description": "Bad named entity: DoubleVerticalBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DoubleVerticalBar"
+ ]
+ ]
+ },
+ {
+ "input": "&DoubleVerticalBar;",
+ "description": "Named entity: DoubleVerticalBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2225"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrow",
+ "description": "Bad named entity: DownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrow;",
+ "description": "Named entity: DownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2193"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrowBar",
+ "description": "Bad named entity: DownArrowBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownArrowBar"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrowBar;",
+ "description": "Named entity: DownArrowBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2913"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrowUpArrow",
+ "description": "Bad named entity: DownArrowUpArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownArrowUpArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DownArrowUpArrow;",
+ "description": "Named entity: DownArrowUpArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21f5"
+ ]
+ ]
+ },
+ {
+ "input": "&DownBreve",
+ "description": "Bad named entity: DownBreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownBreve"
+ ]
+ ]
+ },
+ {
+ "input": "&DownBreve;",
+ "description": "Named entity: DownBreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0311"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftRightVector",
+ "description": "Bad named entity: DownLeftRightVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownLeftRightVector"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftRightVector;",
+ "description": "Named entity: DownLeftRightVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2950"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftTeeVector",
+ "description": "Bad named entity: DownLeftTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownLeftTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftTeeVector;",
+ "description": "Named entity: DownLeftTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295e"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftVector",
+ "description": "Bad named entity: DownLeftVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownLeftVector"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftVector;",
+ "description": "Named entity: DownLeftVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bd"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftVectorBar",
+ "description": "Bad named entity: DownLeftVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownLeftVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&DownLeftVectorBar;",
+ "description": "Named entity: DownLeftVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2956"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightTeeVector",
+ "description": "Bad named entity: DownRightTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownRightTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightTeeVector;",
+ "description": "Named entity: DownRightTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295f"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightVector",
+ "description": "Bad named entity: DownRightVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownRightVector"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightVector;",
+ "description": "Named entity: DownRightVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c1"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightVectorBar",
+ "description": "Bad named entity: DownRightVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownRightVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&DownRightVectorBar;",
+ "description": "Named entity: DownRightVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2957"
+ ]
+ ]
+ },
+ {
+ "input": "&DownTee",
+ "description": "Bad named entity: DownTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownTee"
+ ]
+ ]
+ },
+ {
+ "input": "&DownTee;",
+ "description": "Named entity: DownTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a4"
+ ]
+ ]
+ },
+ {
+ "input": "&DownTeeArrow",
+ "description": "Bad named entity: DownTeeArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&DownTeeArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&DownTeeArrow;",
+ "description": "Named entity: DownTeeArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a7"
+ ]
+ ]
+ },
+ {
+ "input": "&Downarrow",
+ "description": "Bad named entity: Downarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Downarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Downarrow;",
+ "description": "Named entity: Downarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d3"
+ ]
+ ]
+ },
+ {
+ "input": "&Dscr",
+ "description": "Bad named entity: Dscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Dscr;",
+ "description": "Named entity: Dscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udc9f"
+ ]
+ ]
+ },
+ {
+ "input": "&Dstrok",
+ "description": "Bad named entity: Dstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Dstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&Dstrok;",
+ "description": "Named entity: Dstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0110"
+ ]
+ ]
+ },
+ {
+ "input": "&ENG",
+ "description": "Bad named entity: ENG without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ENG"
+ ]
+ ]
+ },
+ {
+ "input": "&ENG;",
+ "description": "Named entity: ENG; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u014a"
+ ]
+ ]
+ },
+ {
+ "input": "&ETH",
+ "description": "Named entity: ETH without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&ETH;",
+ "description": "Named entity: ETH; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d0"
+ ]
+ ]
+ },
+ {
+ "input": "&Eacute",
+ "description": "Named entity: Eacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Eacute;",
+ "description": "Named entity: Eacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c9"
+ ]
+ ]
+ },
+ {
+ "input": "&Ecaron",
+ "description": "Bad named entity: Ecaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ecaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Ecaron;",
+ "description": "Named entity: Ecaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011a"
+ ]
+ ]
+ },
+ {
+ "input": "&Ecirc",
+ "description": "Named entity: Ecirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ca"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Ecirc;",
+ "description": "Named entity: Ecirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ca"
+ ]
+ ]
+ },
+ {
+ "input": "&Ecy",
+ "description": "Bad named entity: Ecy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ecy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ecy;",
+ "description": "Named entity: Ecy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042d"
+ ]
+ ]
+ },
+ {
+ "input": "&Edot",
+ "description": "Bad named entity: Edot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Edot"
+ ]
+ ]
+ },
+ {
+ "input": "&Edot;",
+ "description": "Named entity: Edot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0116"
+ ]
+ ]
+ },
+ {
+ "input": "&Efr",
+ "description": "Bad named entity: Efr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Efr"
+ ]
+ ]
+ },
+ {
+ "input": "&Efr;",
+ "description": "Named entity: Efr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd08"
+ ]
+ ]
+ },
+ {
+ "input": "&Egrave",
+ "description": "Named entity: Egrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Egrave;",
+ "description": "Named entity: Egrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c8"
+ ]
+ ]
+ },
+ {
+ "input": "&Element",
+ "description": "Bad named entity: Element without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Element"
+ ]
+ ]
+ },
+ {
+ "input": "&Element;",
+ "description": "Named entity: Element; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2208"
+ ]
+ ]
+ },
+ {
+ "input": "&Emacr",
+ "description": "Bad named entity: Emacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Emacr"
+ ]
+ ]
+ },
+ {
+ "input": "&Emacr;",
+ "description": "Named entity: Emacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0112"
+ ]
+ ]
+ },
+ {
+ "input": "&EmptySmallSquare",
+ "description": "Bad named entity: EmptySmallSquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&EmptySmallSquare"
+ ]
+ ]
+ },
+ {
+ "input": "&EmptySmallSquare;",
+ "description": "Named entity: EmptySmallSquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25fb"
+ ]
+ ]
+ },
+ {
+ "input": "&EmptyVerySmallSquare",
+ "description": "Bad named entity: EmptyVerySmallSquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&EmptyVerySmallSquare"
+ ]
+ ]
+ },
+ {
+ "input": "&EmptyVerySmallSquare;",
+ "description": "Named entity: EmptyVerySmallSquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ab"
+ ]
+ ]
+ },
+ {
+ "input": "&Eogon",
+ "description": "Bad named entity: Eogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Eogon"
+ ]
+ ]
+ },
+ {
+ "input": "&Eogon;",
+ "description": "Named entity: Eogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0118"
+ ]
+ ]
+ },
+ {
+ "input": "&Eopf",
+ "description": "Bad named entity: Eopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Eopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Eopf;",
+ "description": "Named entity: Eopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd3c"
+ ]
+ ]
+ },
+ {
+ "input": "&Epsilon",
+ "description": "Bad named entity: Epsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Epsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&Epsilon;",
+ "description": "Named entity: Epsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0395"
+ ]
+ ]
+ },
+ {
+ "input": "&Equal",
+ "description": "Bad named entity: Equal without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Equal"
+ ]
+ ]
+ },
+ {
+ "input": "&Equal;",
+ "description": "Named entity: Equal; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a75"
+ ]
+ ]
+ },
+ {
+ "input": "&EqualTilde",
+ "description": "Bad named entity: EqualTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&EqualTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&EqualTilde;",
+ "description": "Named entity: EqualTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2242"
+ ]
+ ]
+ },
+ {
+ "input": "&Equilibrium",
+ "description": "Bad named entity: Equilibrium without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Equilibrium"
+ ]
+ ]
+ },
+ {
+ "input": "&Equilibrium;",
+ "description": "Named entity: Equilibrium; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cc"
+ ]
+ ]
+ },
+ {
+ "input": "&Escr",
+ "description": "Bad named entity: Escr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Escr"
+ ]
+ ]
+ },
+ {
+ "input": "&Escr;",
+ "description": "Named entity: Escr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2130"
+ ]
+ ]
+ },
+ {
+ "input": "&Esim",
+ "description": "Bad named entity: Esim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Esim"
+ ]
+ ]
+ },
+ {
+ "input": "&Esim;",
+ "description": "Named entity: Esim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a73"
+ ]
+ ]
+ },
+ {
+ "input": "&Eta",
+ "description": "Bad named entity: Eta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Eta"
+ ]
+ ]
+ },
+ {
+ "input": "&Eta;",
+ "description": "Named entity: Eta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0397"
+ ]
+ ]
+ },
+ {
+ "input": "&Euml",
+ "description": "Named entity: Euml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cb"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&Euml;",
+ "description": "Named entity: Euml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cb"
+ ]
+ ]
+ },
+ {
+ "input": "&Exists",
+ "description": "Bad named entity: Exists without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Exists"
+ ]
+ ]
+ },
+ {
+ "input": "&Exists;",
+ "description": "Named entity: Exists; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2203"
+ ]
+ ]
+ },
+ {
+ "input": "&ExponentialE",
+ "description": "Bad named entity: ExponentialE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ExponentialE"
+ ]
+ ]
+ },
+ {
+ "input": "&ExponentialE;",
+ "description": "Named entity: ExponentialE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2147"
+ ]
+ ]
+ },
+ {
+ "input": "&Fcy",
+ "description": "Bad named entity: Fcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Fcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Fcy;",
+ "description": "Named entity: Fcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0424"
+ ]
+ ]
+ },
+ {
+ "input": "&Ffr",
+ "description": "Bad named entity: Ffr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ffr"
+ ]
+ ]
+ },
+ {
+ "input": "&Ffr;",
+ "description": "Named entity: Ffr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd09"
+ ]
+ ]
+ },
+ {
+ "input": "&FilledSmallSquare",
+ "description": "Bad named entity: FilledSmallSquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&FilledSmallSquare"
+ ]
+ ]
+ },
+ {
+ "input": "&FilledSmallSquare;",
+ "description": "Named entity: FilledSmallSquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25fc"
+ ]
+ ]
+ },
+ {
+ "input": "&FilledVerySmallSquare",
+ "description": "Bad named entity: FilledVerySmallSquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&FilledVerySmallSquare"
+ ]
+ ]
+ },
+ {
+ "input": "&FilledVerySmallSquare;",
+ "description": "Named entity: FilledVerySmallSquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25aa"
+ ]
+ ]
+ },
+ {
+ "input": "&Fopf",
+ "description": "Bad named entity: Fopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Fopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Fopf;",
+ "description": "Named entity: Fopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd3d"
+ ]
+ ]
+ },
+ {
+ "input": "&ForAll",
+ "description": "Bad named entity: ForAll without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ForAll"
+ ]
+ ]
+ },
+ {
+ "input": "&ForAll;",
+ "description": "Named entity: ForAll; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2200"
+ ]
+ ]
+ },
+ {
+ "input": "&Fouriertrf",
+ "description": "Bad named entity: Fouriertrf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Fouriertrf"
+ ]
+ ]
+ },
+ {
+ "input": "&Fouriertrf;",
+ "description": "Named entity: Fouriertrf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2131"
+ ]
+ ]
+ },
+ {
+ "input": "&Fscr",
+ "description": "Bad named entity: Fscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Fscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Fscr;",
+ "description": "Named entity: Fscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2131"
+ ]
+ ]
+ },
+ {
+ "input": "&GJcy",
+ "description": "Bad named entity: GJcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GJcy"
+ ]
+ ]
+ },
+ {
+ "input": "&GJcy;",
+ "description": "Named entity: GJcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0403"
+ ]
+ ]
+ },
+ {
+ "input": "&GT",
+ "description": "Named entity: GT without a semi-colon",
+ "output": [
+ [
+ "Character",
+ ">"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 4 }
+ ]
+ },
+ {
+ "input": "&GT;",
+ "description": "Named entity: GT; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ">"
+ ]
+ ]
+ },
+ {
+ "input": "&Gamma",
+ "description": "Bad named entity: Gamma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gamma"
+ ]
+ ]
+ },
+ {
+ "input": "&Gamma;",
+ "description": "Named entity: Gamma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0393"
+ ]
+ ]
+ },
+ {
+ "input": "&Gammad",
+ "description": "Bad named entity: Gammad without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gammad"
+ ]
+ ]
+ },
+ {
+ "input": "&Gammad;",
+ "description": "Named entity: Gammad; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03dc"
+ ]
+ ]
+ },
+ {
+ "input": "&Gbreve",
+ "description": "Bad named entity: Gbreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gbreve"
+ ]
+ ]
+ },
+ {
+ "input": "&Gbreve;",
+ "description": "Named entity: Gbreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011e"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcedil",
+ "description": "Bad named entity: Gcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcedil;",
+ "description": "Named entity: Gcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0122"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcirc",
+ "description": "Bad named entity: Gcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcirc;",
+ "description": "Named entity: Gcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011c"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcy",
+ "description": "Bad named entity: Gcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Gcy;",
+ "description": "Named entity: Gcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0413"
+ ]
+ ]
+ },
+ {
+ "input": "&Gdot",
+ "description": "Bad named entity: Gdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gdot"
+ ]
+ ]
+ },
+ {
+ "input": "&Gdot;",
+ "description": "Named entity: Gdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0120"
+ ]
+ ]
+ },
+ {
+ "input": "&Gfr",
+ "description": "Bad named entity: Gfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Gfr;",
+ "description": "Named entity: Gfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd0a"
+ ]
+ ]
+ },
+ {
+ "input": "&Gg",
+ "description": "Bad named entity: Gg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gg"
+ ]
+ ]
+ },
+ {
+ "input": "&Gg;",
+ "description": "Named entity: Gg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d9"
+ ]
+ ]
+ },
+ {
+ "input": "&Gopf",
+ "description": "Bad named entity: Gopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Gopf;",
+ "description": "Named entity: Gopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd3e"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterEqual",
+ "description": "Bad named entity: GreaterEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterEqual;",
+ "description": "Named entity: GreaterEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2265"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterEqualLess",
+ "description": "Bad named entity: GreaterEqualLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterEqualLess"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterEqualLess;",
+ "description": "Named entity: GreaterEqualLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22db"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterFullEqual",
+ "description": "Bad named entity: GreaterFullEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterFullEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterFullEqual;",
+ "description": "Named entity: GreaterFullEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterGreater",
+ "description": "Bad named entity: GreaterGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterGreater;",
+ "description": "Named entity: GreaterGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa2"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterLess",
+ "description": "Bad named entity: GreaterLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterLess"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterLess;",
+ "description": "Named entity: GreaterLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2277"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterSlantEqual",
+ "description": "Bad named entity: GreaterSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterSlantEqual;",
+ "description": "Named entity: GreaterSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterTilde",
+ "description": "Bad named entity: GreaterTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&GreaterTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&GreaterTilde;",
+ "description": "Named entity: GreaterTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2273"
+ ]
+ ]
+ },
+ {
+ "input": "&Gscr",
+ "description": "Bad named entity: Gscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Gscr;",
+ "description": "Named entity: Gscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udca2"
+ ]
+ ]
+ },
+ {
+ "input": "&Gt",
+ "description": "Bad named entity: Gt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Gt"
+ ]
+ ]
+ },
+ {
+ "input": "&Gt;",
+ "description": "Named entity: Gt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b"
+ ]
+ ]
+ },
+ {
+ "input": "&HARDcy",
+ "description": "Bad named entity: HARDcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&HARDcy"
+ ]
+ ]
+ },
+ {
+ "input": "&HARDcy;",
+ "description": "Named entity: HARDcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042a"
+ ]
+ ]
+ },
+ {
+ "input": "&Hacek",
+ "description": "Bad named entity: Hacek without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hacek"
+ ]
+ ]
+ },
+ {
+ "input": "&Hacek;",
+ "description": "Named entity: Hacek; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02c7"
+ ]
+ ]
+ },
+ {
+ "input": "&Hat",
+ "description": "Bad named entity: Hat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hat"
+ ]
+ ]
+ },
+ {
+ "input": "&Hat;",
+ "description": "Named entity: Hat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "^"
+ ]
+ ]
+ },
+ {
+ "input": "&Hcirc",
+ "description": "Bad named entity: Hcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Hcirc;",
+ "description": "Named entity: Hcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0124"
+ ]
+ ]
+ },
+ {
+ "input": "&Hfr",
+ "description": "Bad named entity: Hfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Hfr;",
+ "description": "Named entity: Hfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210c"
+ ]
+ ]
+ },
+ {
+ "input": "&HilbertSpace",
+ "description": "Bad named entity: HilbertSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&HilbertSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&HilbertSpace;",
+ "description": "Named entity: HilbertSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210b"
+ ]
+ ]
+ },
+ {
+ "input": "&Hopf",
+ "description": "Bad named entity: Hopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Hopf;",
+ "description": "Named entity: Hopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210d"
+ ]
+ ]
+ },
+ {
+ "input": "&HorizontalLine",
+ "description": "Bad named entity: HorizontalLine without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&HorizontalLine"
+ ]
+ ]
+ },
+ {
+ "input": "&HorizontalLine;",
+ "description": "Named entity: HorizontalLine; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2500"
+ ]
+ ]
+ },
+ {
+ "input": "&Hscr",
+ "description": "Bad named entity: Hscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Hscr;",
+ "description": "Named entity: Hscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210b"
+ ]
+ ]
+ },
+ {
+ "input": "&Hstrok",
+ "description": "Bad named entity: Hstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Hstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&Hstrok;",
+ "description": "Named entity: Hstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0126"
+ ]
+ ]
+ },
+ {
+ "input": "&HumpDownHump",
+ "description": "Bad named entity: HumpDownHump without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&HumpDownHump"
+ ]
+ ]
+ },
+ {
+ "input": "&HumpDownHump;",
+ "description": "Named entity: HumpDownHump; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224e"
+ ]
+ ]
+ },
+ {
+ "input": "&HumpEqual",
+ "description": "Bad named entity: HumpEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&HumpEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&HumpEqual;",
+ "description": "Named entity: HumpEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224f"
+ ]
+ ]
+ },
+ {
+ "input": "&IEcy",
+ "description": "Bad named entity: IEcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&IEcy"
+ ]
+ ]
+ },
+ {
+ "input": "&IEcy;",
+ "description": "Named entity: IEcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0415"
+ ]
+ ]
+ },
+ {
+ "input": "&IJlig",
+ "description": "Bad named entity: IJlig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&IJlig"
+ ]
+ ]
+ },
+ {
+ "input": "&IJlig;",
+ "description": "Named entity: IJlig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0132"
+ ]
+ ]
+ },
+ {
+ "input": "&IOcy",
+ "description": "Bad named entity: IOcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&IOcy"
+ ]
+ ]
+ },
+ {
+ "input": "&IOcy;",
+ "description": "Named entity: IOcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0401"
+ ]
+ ]
+ },
+ {
+ "input": "&Iacute",
+ "description": "Named entity: Iacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cd"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Iacute;",
+ "description": "Named entity: Iacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cd"
+ ]
+ ]
+ },
+ {
+ "input": "&Icirc",
+ "description": "Named entity: Icirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ce"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Icirc;",
+ "description": "Named entity: Icirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ce"
+ ]
+ ]
+ },
+ {
+ "input": "&Icy",
+ "description": "Bad named entity: Icy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Icy"
+ ]
+ ]
+ },
+ {
+ "input": "&Icy;",
+ "description": "Named entity: Icy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0418"
+ ]
+ ]
+ },
+ {
+ "input": "&Idot",
+ "description": "Bad named entity: Idot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Idot"
+ ]
+ ]
+ },
+ {
+ "input": "&Idot;",
+ "description": "Named entity: Idot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0130"
+ ]
+ ]
+ },
+ {
+ "input": "&Ifr",
+ "description": "Bad named entity: Ifr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ifr"
+ ]
+ ]
+ },
+ {
+ "input": "&Ifr;",
+ "description": "Named entity: Ifr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2111"
+ ]
+ ]
+ },
+ {
+ "input": "&Igrave",
+ "description": "Named entity: Igrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cc"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Igrave;",
+ "description": "Named entity: Igrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cc"
+ ]
+ ]
+ },
+ {
+ "input": "&Im",
+ "description": "Bad named entity: Im without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Im"
+ ]
+ ]
+ },
+ {
+ "input": "&Im;",
+ "description": "Named entity: Im; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2111"
+ ]
+ ]
+ },
+ {
+ "input": "&Imacr",
+ "description": "Bad named entity: Imacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Imacr"
+ ]
+ ]
+ },
+ {
+ "input": "&Imacr;",
+ "description": "Named entity: Imacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u012a"
+ ]
+ ]
+ },
+ {
+ "input": "&ImaginaryI",
+ "description": "Bad named entity: ImaginaryI without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ImaginaryI"
+ ]
+ ]
+ },
+ {
+ "input": "&ImaginaryI;",
+ "description": "Named entity: ImaginaryI; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2148"
+ ]
+ ]
+ },
+ {
+ "input": "&Implies",
+ "description": "Bad named entity: Implies without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Implies"
+ ]
+ ]
+ },
+ {
+ "input": "&Implies;",
+ "description": "Named entity: Implies; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d2"
+ ]
+ ]
+ },
+ {
+ "input": "&Int",
+ "description": "Bad named entity: Int without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Int"
+ ]
+ ]
+ },
+ {
+ "input": "&Int;",
+ "description": "Named entity: Int; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222c"
+ ]
+ ]
+ },
+ {
+ "input": "&Integral",
+ "description": "Bad named entity: Integral without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Integral"
+ ]
+ ]
+ },
+ {
+ "input": "&Integral;",
+ "description": "Named entity: Integral; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222b"
+ ]
+ ]
+ },
+ {
+ "input": "&Intersection",
+ "description": "Bad named entity: Intersection without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Intersection"
+ ]
+ ]
+ },
+ {
+ "input": "&Intersection;",
+ "description": "Named entity: Intersection; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c2"
+ ]
+ ]
+ },
+ {
+ "input": "&InvisibleComma",
+ "description": "Bad named entity: InvisibleComma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&InvisibleComma"
+ ]
+ ]
+ },
+ {
+ "input": "&InvisibleComma;",
+ "description": "Named entity: InvisibleComma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2063"
+ ]
+ ]
+ },
+ {
+ "input": "&InvisibleTimes",
+ "description": "Bad named entity: InvisibleTimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&InvisibleTimes"
+ ]
+ ]
+ },
+ {
+ "input": "&InvisibleTimes;",
+ "description": "Named entity: InvisibleTimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2062"
+ ]
+ ]
+ },
+ {
+ "input": "&Iogon",
+ "description": "Bad named entity: Iogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Iogon"
+ ]
+ ]
+ },
+ {
+ "input": "&Iogon;",
+ "description": "Named entity: Iogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u012e"
+ ]
+ ]
+ },
+ {
+ "input": "&Iopf",
+ "description": "Bad named entity: Iopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Iopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Iopf;",
+ "description": "Named entity: Iopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd40"
+ ]
+ ]
+ },
+ {
+ "input": "&Iota",
+ "description": "Bad named entity: Iota without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Iota"
+ ]
+ ]
+ },
+ {
+ "input": "&Iota;",
+ "description": "Named entity: Iota; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0399"
+ ]
+ ]
+ },
+ {
+ "input": "&Iscr",
+ "description": "Bad named entity: Iscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Iscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Iscr;",
+ "description": "Named entity: Iscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2110"
+ ]
+ ]
+ },
+ {
+ "input": "&Itilde",
+ "description": "Bad named entity: Itilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Itilde"
+ ]
+ ]
+ },
+ {
+ "input": "&Itilde;",
+ "description": "Named entity: Itilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0128"
+ ]
+ ]
+ },
+ {
+ "input": "&Iukcy",
+ "description": "Bad named entity: Iukcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Iukcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Iukcy;",
+ "description": "Named entity: Iukcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0406"
+ ]
+ ]
+ },
+ {
+ "input": "&Iuml",
+ "description": "Named entity: Iuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cf"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&Iuml;",
+ "description": "Named entity: Iuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00cf"
+ ]
+ ]
+ },
+ {
+ "input": "&Jcirc",
+ "description": "Bad named entity: Jcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Jcirc;",
+ "description": "Named entity: Jcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0134"
+ ]
+ ]
+ },
+ {
+ "input": "&Jcy",
+ "description": "Bad named entity: Jcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Jcy;",
+ "description": "Named entity: Jcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0419"
+ ]
+ ]
+ },
+ {
+ "input": "&Jfr",
+ "description": "Bad named entity: Jfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Jfr;",
+ "description": "Named entity: Jfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd0d"
+ ]
+ ]
+ },
+ {
+ "input": "&Jopf",
+ "description": "Bad named entity: Jopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Jopf;",
+ "description": "Named entity: Jopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd41"
+ ]
+ ]
+ },
+ {
+ "input": "&Jscr",
+ "description": "Bad named entity: Jscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Jscr;",
+ "description": "Named entity: Jscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udca5"
+ ]
+ ]
+ },
+ {
+ "input": "&Jsercy",
+ "description": "Bad named entity: Jsercy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jsercy"
+ ]
+ ]
+ },
+ {
+ "input": "&Jsercy;",
+ "description": "Named entity: Jsercy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0408"
+ ]
+ ]
+ },
+ {
+ "input": "&Jukcy",
+ "description": "Bad named entity: Jukcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Jukcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Jukcy;",
+ "description": "Named entity: Jukcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0404"
+ ]
+ ]
+ },
+ {
+ "input": "&KHcy",
+ "description": "Bad named entity: KHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&KHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&KHcy;",
+ "description": "Named entity: KHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0425"
+ ]
+ ]
+ },
+ {
+ "input": "&KJcy",
+ "description": "Bad named entity: KJcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&KJcy"
+ ]
+ ]
+ },
+ {
+ "input": "&KJcy;",
+ "description": "Named entity: KJcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u040c"
+ ]
+ ]
+ },
+ {
+ "input": "&Kappa",
+ "description": "Bad named entity: Kappa without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kappa"
+ ]
+ ]
+ },
+ {
+ "input": "&Kappa;",
+ "description": "Named entity: Kappa; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039a"
+ ]
+ ]
+ },
+ {
+ "input": "&Kcedil",
+ "description": "Bad named entity: Kcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Kcedil;",
+ "description": "Named entity: Kcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0136"
+ ]
+ ]
+ },
+ {
+ "input": "&Kcy",
+ "description": "Bad named entity: Kcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Kcy;",
+ "description": "Named entity: Kcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041a"
+ ]
+ ]
+ },
+ {
+ "input": "&Kfr",
+ "description": "Bad named entity: Kfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Kfr;",
+ "description": "Named entity: Kfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd0e"
+ ]
+ ]
+ },
+ {
+ "input": "&Kopf",
+ "description": "Bad named entity: Kopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Kopf;",
+ "description": "Named entity: Kopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd42"
+ ]
+ ]
+ },
+ {
+ "input": "&Kscr",
+ "description": "Bad named entity: Kscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Kscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Kscr;",
+ "description": "Named entity: Kscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udca6"
+ ]
+ ]
+ },
+ {
+ "input": "&LJcy",
+ "description": "Bad named entity: LJcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LJcy"
+ ]
+ ]
+ },
+ {
+ "input": "&LJcy;",
+ "description": "Named entity: LJcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0409"
+ ]
+ ]
+ },
+ {
+ "input": "&LT",
+ "description": "Named entity: LT without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "<"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 4 }
+ ]
+ },
+ {
+ "input": "&LT;",
+ "description": "Named entity: LT; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "<"
+ ]
+ ]
+ },
+ {
+ "input": "&Lacute",
+ "description": "Bad named entity: Lacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lacute"
+ ]
+ ]
+ },
+ {
+ "input": "&Lacute;",
+ "description": "Named entity: Lacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0139"
+ ]
+ ]
+ },
+ {
+ "input": "&Lambda",
+ "description": "Bad named entity: Lambda without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lambda"
+ ]
+ ]
+ },
+ {
+ "input": "&Lambda;",
+ "description": "Named entity: Lambda; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039b"
+ ]
+ ]
+ },
+ {
+ "input": "&Lang",
+ "description": "Bad named entity: Lang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lang"
+ ]
+ ]
+ },
+ {
+ "input": "&Lang;",
+ "description": "Named entity: Lang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27ea"
+ ]
+ ]
+ },
+ {
+ "input": "&Laplacetrf",
+ "description": "Bad named entity: Laplacetrf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Laplacetrf"
+ ]
+ ]
+ },
+ {
+ "input": "&Laplacetrf;",
+ "description": "Named entity: Laplacetrf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2112"
+ ]
+ ]
+ },
+ {
+ "input": "&Larr",
+ "description": "Bad named entity: Larr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Larr"
+ ]
+ ]
+ },
+ {
+ "input": "&Larr;",
+ "description": "Named entity: Larr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219e"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcaron",
+ "description": "Bad named entity: Lcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcaron;",
+ "description": "Named entity: Lcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013d"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcedil",
+ "description": "Bad named entity: Lcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcedil;",
+ "description": "Named entity: Lcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013b"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcy",
+ "description": "Bad named entity: Lcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Lcy;",
+ "description": "Named entity: Lcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041b"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftAngleBracket",
+ "description": "Bad named entity: LeftAngleBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftAngleBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftAngleBracket;",
+ "description": "Named entity: LeftAngleBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e8"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrow",
+ "description": "Bad named entity: LeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrow;",
+ "description": "Named entity: LeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2190"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrowBar",
+ "description": "Bad named entity: LeftArrowBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftArrowBar"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrowBar;",
+ "description": "Named entity: LeftArrowBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21e4"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrowRightArrow",
+ "description": "Bad named entity: LeftArrowRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftArrowRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftArrowRightArrow;",
+ "description": "Named entity: LeftArrowRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c6"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftCeiling",
+ "description": "Bad named entity: LeftCeiling without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftCeiling"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftCeiling;",
+ "description": "Named entity: LeftCeiling; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2308"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDoubleBracket",
+ "description": "Bad named entity: LeftDoubleBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftDoubleBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDoubleBracket;",
+ "description": "Named entity: LeftDoubleBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e6"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownTeeVector",
+ "description": "Bad named entity: LeftDownTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftDownTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownTeeVector;",
+ "description": "Named entity: LeftDownTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2961"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownVector",
+ "description": "Bad named entity: LeftDownVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftDownVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownVector;",
+ "description": "Named entity: LeftDownVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c3"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownVectorBar",
+ "description": "Bad named entity: LeftDownVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftDownVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftDownVectorBar;",
+ "description": "Named entity: LeftDownVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2959"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftFloor",
+ "description": "Bad named entity: LeftFloor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftFloor"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftFloor;",
+ "description": "Named entity: LeftFloor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230a"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftRightArrow",
+ "description": "Bad named entity: LeftRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftRightArrow;",
+ "description": "Named entity: LeftRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2194"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftRightVector",
+ "description": "Bad named entity: LeftRightVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftRightVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftRightVector;",
+ "description": "Named entity: LeftRightVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u294e"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTee",
+ "description": "Bad named entity: LeftTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTee"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTee;",
+ "description": "Named entity: LeftTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a3"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTeeArrow",
+ "description": "Bad named entity: LeftTeeArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTeeArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTeeArrow;",
+ "description": "Named entity: LeftTeeArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a4"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTeeVector",
+ "description": "Bad named entity: LeftTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTeeVector;",
+ "description": "Named entity: LeftTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295a"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangle",
+ "description": "Bad named entity: LeftTriangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTriangle"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangle;",
+ "description": "Named entity: LeftTriangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b2"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangleBar",
+ "description": "Bad named entity: LeftTriangleBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTriangleBar"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangleBar;",
+ "description": "Named entity: LeftTriangleBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29cf"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangleEqual",
+ "description": "Bad named entity: LeftTriangleEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftTriangleEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftTriangleEqual;",
+ "description": "Named entity: LeftTriangleEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b4"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpDownVector",
+ "description": "Bad named entity: LeftUpDownVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftUpDownVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpDownVector;",
+ "description": "Named entity: LeftUpDownVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2951"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpTeeVector",
+ "description": "Bad named entity: LeftUpTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftUpTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpTeeVector;",
+ "description": "Named entity: LeftUpTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2960"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpVector",
+ "description": "Bad named entity: LeftUpVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftUpVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpVector;",
+ "description": "Named entity: LeftUpVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bf"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpVectorBar",
+ "description": "Bad named entity: LeftUpVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftUpVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftUpVectorBar;",
+ "description": "Named entity: LeftUpVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2958"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftVector",
+ "description": "Bad named entity: LeftVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftVector"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftVector;",
+ "description": "Named entity: LeftVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bc"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftVectorBar",
+ "description": "Bad named entity: LeftVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LeftVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&LeftVectorBar;",
+ "description": "Named entity: LeftVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2952"
+ ]
+ ]
+ },
+ {
+ "input": "&Leftarrow",
+ "description": "Bad named entity: Leftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Leftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Leftarrow;",
+ "description": "Named entity: Leftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d0"
+ ]
+ ]
+ },
+ {
+ "input": "&Leftrightarrow",
+ "description": "Bad named entity: Leftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Leftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Leftrightarrow;",
+ "description": "Named entity: Leftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d4"
+ ]
+ ]
+ },
+ {
+ "input": "&LessEqualGreater",
+ "description": "Bad named entity: LessEqualGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessEqualGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&LessEqualGreater;",
+ "description": "Named entity: LessEqualGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22da"
+ ]
+ ]
+ },
+ {
+ "input": "&LessFullEqual",
+ "description": "Bad named entity: LessFullEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessFullEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&LessFullEqual;",
+ "description": "Named entity: LessFullEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2266"
+ ]
+ ]
+ },
+ {
+ "input": "&LessGreater",
+ "description": "Bad named entity: LessGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&LessGreater;",
+ "description": "Named entity: LessGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2276"
+ ]
+ ]
+ },
+ {
+ "input": "&LessLess",
+ "description": "Bad named entity: LessLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessLess"
+ ]
+ ]
+ },
+ {
+ "input": "&LessLess;",
+ "description": "Named entity: LessLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa1"
+ ]
+ ]
+ },
+ {
+ "input": "&LessSlantEqual",
+ "description": "Bad named entity: LessSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&LessSlantEqual;",
+ "description": "Named entity: LessSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d"
+ ]
+ ]
+ },
+ {
+ "input": "&LessTilde",
+ "description": "Bad named entity: LessTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LessTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&LessTilde;",
+ "description": "Named entity: LessTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2272"
+ ]
+ ]
+ },
+ {
+ "input": "&Lfr",
+ "description": "Bad named entity: Lfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Lfr;",
+ "description": "Named entity: Lfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd0f"
+ ]
+ ]
+ },
+ {
+ "input": "&Ll",
+ "description": "Bad named entity: Ll without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ll"
+ ]
+ ]
+ },
+ {
+ "input": "&Ll;",
+ "description": "Named entity: Ll; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d8"
+ ]
+ ]
+ },
+ {
+ "input": "&Lleftarrow",
+ "description": "Bad named entity: Lleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Lleftarrow;",
+ "description": "Named entity: Lleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21da"
+ ]
+ ]
+ },
+ {
+ "input": "&Lmidot",
+ "description": "Bad named entity: Lmidot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lmidot"
+ ]
+ ]
+ },
+ {
+ "input": "&Lmidot;",
+ "description": "Named entity: Lmidot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013f"
+ ]
+ ]
+ },
+ {
+ "input": "&LongLeftArrow",
+ "description": "Bad named entity: LongLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LongLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LongLeftArrow;",
+ "description": "Named entity: LongLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f5"
+ ]
+ ]
+ },
+ {
+ "input": "&LongLeftRightArrow",
+ "description": "Bad named entity: LongLeftRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LongLeftRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LongLeftRightArrow;",
+ "description": "Named entity: LongLeftRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f7"
+ ]
+ ]
+ },
+ {
+ "input": "&LongRightArrow",
+ "description": "Bad named entity: LongRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LongRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LongRightArrow;",
+ "description": "Named entity: LongRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f6"
+ ]
+ ]
+ },
+ {
+ "input": "&Longleftarrow",
+ "description": "Bad named entity: Longleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Longleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Longleftarrow;",
+ "description": "Named entity: Longleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f8"
+ ]
+ ]
+ },
+ {
+ "input": "&Longleftrightarrow",
+ "description": "Bad named entity: Longleftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Longleftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Longleftrightarrow;",
+ "description": "Named entity: Longleftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27fa"
+ ]
+ ]
+ },
+ {
+ "input": "&Longrightarrow",
+ "description": "Bad named entity: Longrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Longrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Longrightarrow;",
+ "description": "Named entity: Longrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f9"
+ ]
+ ]
+ },
+ {
+ "input": "&Lopf",
+ "description": "Bad named entity: Lopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Lopf;",
+ "description": "Named entity: Lopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd43"
+ ]
+ ]
+ },
+ {
+ "input": "&LowerLeftArrow",
+ "description": "Bad named entity: LowerLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LowerLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LowerLeftArrow;",
+ "description": "Named entity: LowerLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2199"
+ ]
+ ]
+ },
+ {
+ "input": "&LowerRightArrow",
+ "description": "Bad named entity: LowerRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&LowerRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&LowerRightArrow;",
+ "description": "Named entity: LowerRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2198"
+ ]
+ ]
+ },
+ {
+ "input": "&Lscr",
+ "description": "Bad named entity: Lscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Lscr;",
+ "description": "Named entity: Lscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2112"
+ ]
+ ]
+ },
+ {
+ "input": "&Lsh",
+ "description": "Bad named entity: Lsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lsh"
+ ]
+ ]
+ },
+ {
+ "input": "&Lsh;",
+ "description": "Named entity: Lsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b0"
+ ]
+ ]
+ },
+ {
+ "input": "&Lstrok",
+ "description": "Bad named entity: Lstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&Lstrok;",
+ "description": "Named entity: Lstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0141"
+ ]
+ ]
+ },
+ {
+ "input": "&Lt",
+ "description": "Bad named entity: Lt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Lt"
+ ]
+ ]
+ },
+ {
+ "input": "&Lt;",
+ "description": "Named entity: Lt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a"
+ ]
+ ]
+ },
+ {
+ "input": "&Map",
+ "description": "Bad named entity: Map without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Map"
+ ]
+ ]
+ },
+ {
+ "input": "&Map;",
+ "description": "Named entity: Map; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2905"
+ ]
+ ]
+ },
+ {
+ "input": "&Mcy",
+ "description": "Bad named entity: Mcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Mcy;",
+ "description": "Named entity: Mcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041c"
+ ]
+ ]
+ },
+ {
+ "input": "&MediumSpace",
+ "description": "Bad named entity: MediumSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&MediumSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&MediumSpace;",
+ "description": "Named entity: MediumSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u205f"
+ ]
+ ]
+ },
+ {
+ "input": "&Mellintrf",
+ "description": "Bad named entity: Mellintrf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mellintrf"
+ ]
+ ]
+ },
+ {
+ "input": "&Mellintrf;",
+ "description": "Named entity: Mellintrf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2133"
+ ]
+ ]
+ },
+ {
+ "input": "&Mfr",
+ "description": "Bad named entity: Mfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Mfr;",
+ "description": "Named entity: Mfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd10"
+ ]
+ ]
+ },
+ {
+ "input": "&MinusPlus",
+ "description": "Bad named entity: MinusPlus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&MinusPlus"
+ ]
+ ]
+ },
+ {
+ "input": "&MinusPlus;",
+ "description": "Named entity: MinusPlus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2213"
+ ]
+ ]
+ },
+ {
+ "input": "&Mopf",
+ "description": "Bad named entity: Mopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Mopf;",
+ "description": "Named entity: Mopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd44"
+ ]
+ ]
+ },
+ {
+ "input": "&Mscr",
+ "description": "Bad named entity: Mscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Mscr;",
+ "description": "Named entity: Mscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2133"
+ ]
+ ]
+ },
+ {
+ "input": "&Mu",
+ "description": "Bad named entity: Mu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Mu"
+ ]
+ ]
+ },
+ {
+ "input": "&Mu;",
+ "description": "Named entity: Mu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039c"
+ ]
+ ]
+ },
+ {
+ "input": "&NJcy",
+ "description": "Bad named entity: NJcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NJcy"
+ ]
+ ]
+ },
+ {
+ "input": "&NJcy;",
+ "description": "Named entity: NJcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u040a"
+ ]
+ ]
+ },
+ {
+ "input": "&Nacute",
+ "description": "Bad named entity: Nacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Nacute"
+ ]
+ ]
+ },
+ {
+ "input": "&Nacute;",
+ "description": "Named entity: Nacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0143"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncaron",
+ "description": "Bad named entity: Ncaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ncaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncaron;",
+ "description": "Named entity: Ncaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0147"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncedil",
+ "description": "Bad named entity: Ncedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ncedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncedil;",
+ "description": "Named entity: Ncedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0145"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncy",
+ "description": "Bad named entity: Ncy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ncy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ncy;",
+ "description": "Named entity: Ncy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041d"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeMediumSpace",
+ "description": "Bad named entity: NegativeMediumSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NegativeMediumSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeMediumSpace;",
+ "description": "Named entity: NegativeMediumSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200b"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeThickSpace",
+ "description": "Bad named entity: NegativeThickSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NegativeThickSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeThickSpace;",
+ "description": "Named entity: NegativeThickSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200b"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeThinSpace",
+ "description": "Bad named entity: NegativeThinSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NegativeThinSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeThinSpace;",
+ "description": "Named entity: NegativeThinSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200b"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeVeryThinSpace",
+ "description": "Bad named entity: NegativeVeryThinSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NegativeVeryThinSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&NegativeVeryThinSpace;",
+ "description": "Named entity: NegativeVeryThinSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200b"
+ ]
+ ]
+ },
+ {
+ "input": "&NestedGreaterGreater",
+ "description": "Bad named entity: NestedGreaterGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NestedGreaterGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&NestedGreaterGreater;",
+ "description": "Named entity: NestedGreaterGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b"
+ ]
+ ]
+ },
+ {
+ "input": "&NestedLessLess",
+ "description": "Bad named entity: NestedLessLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NestedLessLess"
+ ]
+ ]
+ },
+ {
+ "input": "&NestedLessLess;",
+ "description": "Named entity: NestedLessLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a"
+ ]
+ ]
+ },
+ {
+ "input": "&NewLine",
+ "description": "Bad named entity: NewLine without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NewLine"
+ ]
+ ]
+ },
+ {
+ "input": "&NewLine;",
+ "description": "Named entity: NewLine; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\n"
+ ]
+ ]
+ },
+ {
+ "input": "&Nfr",
+ "description": "Bad named entity: Nfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Nfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Nfr;",
+ "description": "Named entity: Nfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd11"
+ ]
+ ]
+ },
+ {
+ "input": "&NoBreak",
+ "description": "Bad named entity: NoBreak without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NoBreak"
+ ]
+ ]
+ },
+ {
+ "input": "&NoBreak;",
+ "description": "Named entity: NoBreak; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2060"
+ ]
+ ]
+ },
+ {
+ "input": "&NonBreakingSpace",
+ "description": "Bad named entity: NonBreakingSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NonBreakingSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&NonBreakingSpace;",
+ "description": "Named entity: NonBreakingSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a0"
+ ]
+ ]
+ },
+ {
+ "input": "&Nopf",
+ "description": "Bad named entity: Nopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Nopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Nopf;",
+ "description": "Named entity: Nopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2115"
+ ]
+ ]
+ },
+ {
+ "input": "&Not",
+ "description": "Bad named entity: Not without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Not"
+ ]
+ ]
+ },
+ {
+ "input": "&Not;",
+ "description": "Named entity: Not; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aec"
+ ]
+ ]
+ },
+ {
+ "input": "&NotCongruent",
+ "description": "Bad named entity: NotCongruent without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotCongruent"
+ ]
+ ]
+ },
+ {
+ "input": "&NotCongruent;",
+ "description": "Named entity: NotCongruent; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2262"
+ ]
+ ]
+ },
+ {
+ "input": "&NotCupCap",
+ "description": "Bad named entity: NotCupCap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotCupCap"
+ ]
+ ]
+ },
+ {
+ "input": "&NotCupCap;",
+ "description": "Named entity: NotCupCap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226d"
+ ]
+ ]
+ },
+ {
+ "input": "&NotDoubleVerticalBar",
+ "description": "Bad named entity: NotDoubleVerticalBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotDoubleVerticalBar"
+ ]
+ ]
+ },
+ {
+ "input": "&NotDoubleVerticalBar;",
+ "description": "Named entity: NotDoubleVerticalBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2226"
+ ]
+ ]
+ },
+ {
+ "input": "&NotElement",
+ "description": "Bad named entity: NotElement without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotElement"
+ ]
+ ]
+ },
+ {
+ "input": "&NotElement;",
+ "description": "Named entity: NotElement; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2209"
+ ]
+ ]
+ },
+ {
+ "input": "&NotEqual",
+ "description": "Bad named entity: NotEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotEqual;",
+ "description": "Named entity: NotEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2260"
+ ]
+ ]
+ },
+ {
+ "input": "&NotEqualTilde",
+ "description": "Bad named entity: NotEqualTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotEqualTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotEqualTilde;",
+ "description": "Named entity: NotEqualTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2242\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotExists",
+ "description": "Bad named entity: NotExists without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotExists"
+ ]
+ ]
+ },
+ {
+ "input": "&NotExists;",
+ "description": "Named entity: NotExists; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2204"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreater",
+ "description": "Bad named entity: NotGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreater;",
+ "description": "Named entity: NotGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226f"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterEqual",
+ "description": "Bad named entity: NotGreaterEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterEqual;",
+ "description": "Named entity: NotGreaterEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2271"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterFullEqual",
+ "description": "Bad named entity: NotGreaterFullEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterFullEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterFullEqual;",
+ "description": "Named entity: NotGreaterFullEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterGreater",
+ "description": "Bad named entity: NotGreaterGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterGreater;",
+ "description": "Named entity: NotGreaterGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterLess",
+ "description": "Bad named entity: NotGreaterLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterLess"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterLess;",
+ "description": "Named entity: NotGreaterLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2279"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterSlantEqual",
+ "description": "Bad named entity: NotGreaterSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterSlantEqual;",
+ "description": "Named entity: NotGreaterSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterTilde",
+ "description": "Bad named entity: NotGreaterTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotGreaterTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotGreaterTilde;",
+ "description": "Named entity: NotGreaterTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2275"
+ ]
+ ]
+ },
+ {
+ "input": "&NotHumpDownHump",
+ "description": "Bad named entity: NotHumpDownHump without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotHumpDownHump"
+ ]
+ ]
+ },
+ {
+ "input": "&NotHumpDownHump;",
+ "description": "Named entity: NotHumpDownHump; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224e\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotHumpEqual",
+ "description": "Bad named entity: NotHumpEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotHumpEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotHumpEqual;",
+ "description": "Named entity: NotHumpEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224f\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangle",
+ "description": "Bad named entity: NotLeftTriangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLeftTriangle"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangle;",
+ "description": "Named entity: NotLeftTriangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ea"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangleBar",
+ "description": "Bad named entity: NotLeftTriangleBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLeftTriangleBar"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangleBar;",
+ "description": "Named entity: NotLeftTriangleBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29cf\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangleEqual",
+ "description": "Bad named entity: NotLeftTriangleEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLeftTriangleEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLeftTriangleEqual;",
+ "description": "Named entity: NotLeftTriangleEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ec"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLess",
+ "description": "Bad named entity: NotLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLess"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLess;",
+ "description": "Named entity: NotLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226e"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessEqual",
+ "description": "Bad named entity: NotLessEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLessEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessEqual;",
+ "description": "Named entity: NotLessEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2270"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessGreater",
+ "description": "Bad named entity: NotLessGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLessGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessGreater;",
+ "description": "Named entity: NotLessGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2278"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessLess",
+ "description": "Bad named entity: NotLessLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLessLess"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessLess;",
+ "description": "Named entity: NotLessLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessSlantEqual",
+ "description": "Bad named entity: NotLessSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLessSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessSlantEqual;",
+ "description": "Named entity: NotLessSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessTilde",
+ "description": "Bad named entity: NotLessTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotLessTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotLessTilde;",
+ "description": "Named entity: NotLessTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2274"
+ ]
+ ]
+ },
+ {
+ "input": "&NotNestedGreaterGreater",
+ "description": "Bad named entity: NotNestedGreaterGreater without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotNestedGreaterGreater"
+ ]
+ ]
+ },
+ {
+ "input": "&NotNestedGreaterGreater;",
+ "description": "Named entity: NotNestedGreaterGreater; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa2\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotNestedLessLess",
+ "description": "Bad named entity: NotNestedLessLess without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotNestedLessLess"
+ ]
+ ]
+ },
+ {
+ "input": "&NotNestedLessLess;",
+ "description": "Named entity: NotNestedLessLess; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa1\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedes",
+ "description": "Bad named entity: NotPrecedes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotPrecedes"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedes;",
+ "description": "Named entity: NotPrecedes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2280"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedesEqual",
+ "description": "Bad named entity: NotPrecedesEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotPrecedesEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedesEqual;",
+ "description": "Named entity: NotPrecedesEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedesSlantEqual",
+ "description": "Bad named entity: NotPrecedesSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotPrecedesSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotPrecedesSlantEqual;",
+ "description": "Named entity: NotPrecedesSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e0"
+ ]
+ ]
+ },
+ {
+ "input": "&NotReverseElement",
+ "description": "Bad named entity: NotReverseElement without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotReverseElement"
+ ]
+ ]
+ },
+ {
+ "input": "&NotReverseElement;",
+ "description": "Named entity: NotReverseElement; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220c"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangle",
+ "description": "Bad named entity: NotRightTriangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotRightTriangle"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangle;",
+ "description": "Named entity: NotRightTriangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22eb"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangleBar",
+ "description": "Bad named entity: NotRightTriangleBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotRightTriangleBar"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangleBar;",
+ "description": "Named entity: NotRightTriangleBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29d0\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangleEqual",
+ "description": "Bad named entity: NotRightTriangleEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotRightTriangleEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotRightTriangleEqual;",
+ "description": "Named entity: NotRightTriangleEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ed"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSubset",
+ "description": "Bad named entity: NotSquareSubset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSquareSubset"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSubset;",
+ "description": "Named entity: NotSquareSubset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228f\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSubsetEqual",
+ "description": "Bad named entity: NotSquareSubsetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSquareSubsetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSubsetEqual;",
+ "description": "Named entity: NotSquareSubsetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e2"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSuperset",
+ "description": "Bad named entity: NotSquareSuperset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSquareSuperset"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSuperset;",
+ "description": "Named entity: NotSquareSuperset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2290\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSupersetEqual",
+ "description": "Bad named entity: NotSquareSupersetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSquareSupersetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSquareSupersetEqual;",
+ "description": "Named entity: NotSquareSupersetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e3"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSubset",
+ "description": "Bad named entity: NotSubset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSubset"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSubset;",
+ "description": "Named entity: NotSubset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2282\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSubsetEqual",
+ "description": "Bad named entity: NotSubsetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSubsetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSubsetEqual;",
+ "description": "Named entity: NotSubsetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2288"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceeds",
+ "description": "Bad named entity: NotSucceeds without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSucceeds"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceeds;",
+ "description": "Named entity: NotSucceeds; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2281"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsEqual",
+ "description": "Bad named entity: NotSucceedsEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSucceedsEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsEqual;",
+ "description": "Named entity: NotSucceedsEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsSlantEqual",
+ "description": "Bad named entity: NotSucceedsSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSucceedsSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsSlantEqual;",
+ "description": "Named entity: NotSucceedsSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e1"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsTilde",
+ "description": "Bad named entity: NotSucceedsTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSucceedsTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSucceedsTilde;",
+ "description": "Named entity: NotSucceedsTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227f\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSuperset",
+ "description": "Bad named entity: NotSuperset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSuperset"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSuperset;",
+ "description": "Named entity: NotSuperset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSupersetEqual",
+ "description": "Bad named entity: NotSupersetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotSupersetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotSupersetEqual;",
+ "description": "Named entity: NotSupersetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2289"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTilde",
+ "description": "Bad named entity: NotTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTilde;",
+ "description": "Named entity: NotTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2241"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeEqual",
+ "description": "Bad named entity: NotTildeEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotTildeEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeEqual;",
+ "description": "Named entity: NotTildeEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2244"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeFullEqual",
+ "description": "Bad named entity: NotTildeFullEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotTildeFullEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeFullEqual;",
+ "description": "Named entity: NotTildeFullEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2247"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeTilde",
+ "description": "Bad named entity: NotTildeTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotTildeTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&NotTildeTilde;",
+ "description": "Named entity: NotTildeTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2249"
+ ]
+ ]
+ },
+ {
+ "input": "&NotVerticalBar",
+ "description": "Bad named entity: NotVerticalBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&NotVerticalBar"
+ ]
+ ]
+ },
+ {
+ "input": "&NotVerticalBar;",
+ "description": "Named entity: NotVerticalBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2224"
+ ]
+ ]
+ },
+ {
+ "input": "&Nscr",
+ "description": "Bad named entity: Nscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Nscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Nscr;",
+ "description": "Named entity: Nscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udca9"
+ ]
+ ]
+ },
+ {
+ "input": "&Ntilde",
+ "description": "Named entity: Ntilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Ntilde;",
+ "description": "Named entity: Ntilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d1"
+ ]
+ ]
+ },
+ {
+ "input": "&Nu",
+ "description": "Bad named entity: Nu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Nu"
+ ]
+ ]
+ },
+ {
+ "input": "&Nu;",
+ "description": "Named entity: Nu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039d"
+ ]
+ ]
+ },
+ {
+ "input": "&OElig",
+ "description": "Bad named entity: OElig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OElig"
+ ]
+ ]
+ },
+ {
+ "input": "&OElig;",
+ "description": "Named entity: OElig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0152"
+ ]
+ ]
+ },
+ {
+ "input": "&Oacute",
+ "description": "Named entity: Oacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Oacute;",
+ "description": "Named entity: Oacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d3"
+ ]
+ ]
+ },
+ {
+ "input": "&Ocirc",
+ "description": "Named entity: Ocirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Ocirc;",
+ "description": "Named entity: Ocirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d4"
+ ]
+ ]
+ },
+ {
+ "input": "&Ocy",
+ "description": "Bad named entity: Ocy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ocy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ocy;",
+ "description": "Named entity: Ocy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041e"
+ ]
+ ]
+ },
+ {
+ "input": "&Odblac",
+ "description": "Bad named entity: Odblac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Odblac"
+ ]
+ ]
+ },
+ {
+ "input": "&Odblac;",
+ "description": "Named entity: Odblac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0150"
+ ]
+ ]
+ },
+ {
+ "input": "&Ofr",
+ "description": "Bad named entity: Ofr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ofr"
+ ]
+ ]
+ },
+ {
+ "input": "&Ofr;",
+ "description": "Named entity: Ofr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd12"
+ ]
+ ]
+ },
+ {
+ "input": "&Ograve",
+ "description": "Named entity: Ograve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Ograve;",
+ "description": "Named entity: Ograve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d2"
+ ]
+ ]
+ },
+ {
+ "input": "&Omacr",
+ "description": "Bad named entity: Omacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Omacr"
+ ]
+ ]
+ },
+ {
+ "input": "&Omacr;",
+ "description": "Named entity: Omacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u014c"
+ ]
+ ]
+ },
+ {
+ "input": "&Omega",
+ "description": "Bad named entity: Omega without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Omega"
+ ]
+ ]
+ },
+ {
+ "input": "&Omega;",
+ "description": "Named entity: Omega; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a9"
+ ]
+ ]
+ },
+ {
+ "input": "&Omicron",
+ "description": "Bad named entity: Omicron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Omicron"
+ ]
+ ]
+ },
+ {
+ "input": "&Omicron;",
+ "description": "Named entity: Omicron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039f"
+ ]
+ ]
+ },
+ {
+ "input": "&Oopf",
+ "description": "Bad named entity: Oopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Oopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Oopf;",
+ "description": "Named entity: Oopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd46"
+ ]
+ ]
+ },
+ {
+ "input": "&OpenCurlyDoubleQuote",
+ "description": "Bad named entity: OpenCurlyDoubleQuote without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OpenCurlyDoubleQuote"
+ ]
+ ]
+ },
+ {
+ "input": "&OpenCurlyDoubleQuote;",
+ "description": "Named entity: OpenCurlyDoubleQuote; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201c"
+ ]
+ ]
+ },
+ {
+ "input": "&OpenCurlyQuote",
+ "description": "Bad named entity: OpenCurlyQuote without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OpenCurlyQuote"
+ ]
+ ]
+ },
+ {
+ "input": "&OpenCurlyQuote;",
+ "description": "Named entity: OpenCurlyQuote; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2018"
+ ]
+ ]
+ },
+ {
+ "input": "&Or",
+ "description": "Bad named entity: Or without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Or"
+ ]
+ ]
+ },
+ {
+ "input": "&Or;",
+ "description": "Named entity: Or; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a54"
+ ]
+ ]
+ },
+ {
+ "input": "&Oscr",
+ "description": "Bad named entity: Oscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Oscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Oscr;",
+ "description": "Named entity: Oscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcaa"
+ ]
+ ]
+ },
+ {
+ "input": "&Oslash",
+ "description": "Named entity: Oslash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Oslash;",
+ "description": "Named entity: Oslash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d8"
+ ]
+ ]
+ },
+ {
+ "input": "&Otilde",
+ "description": "Named entity: Otilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Otilde;",
+ "description": "Named entity: Otilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d5"
+ ]
+ ]
+ },
+ {
+ "input": "&Otimes",
+ "description": "Bad named entity: Otimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Otimes"
+ ]
+ ]
+ },
+ {
+ "input": "&Otimes;",
+ "description": "Named entity: Otimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a37"
+ ]
+ ]
+ },
+ {
+ "input": "&Ouml",
+ "description": "Named entity: Ouml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&Ouml;",
+ "description": "Named entity: Ouml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d6"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBar",
+ "description": "Bad named entity: OverBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OverBar"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBar;",
+ "description": "Named entity: OverBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u203e"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBrace",
+ "description": "Bad named entity: OverBrace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OverBrace"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBrace;",
+ "description": "Named entity: OverBrace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23de"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBracket",
+ "description": "Bad named entity: OverBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OverBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&OverBracket;",
+ "description": "Named entity: OverBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b4"
+ ]
+ ]
+ },
+ {
+ "input": "&OverParenthesis",
+ "description": "Bad named entity: OverParenthesis without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&OverParenthesis"
+ ]
+ ]
+ },
+ {
+ "input": "&OverParenthesis;",
+ "description": "Named entity: OverParenthesis; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23dc"
+ ]
+ ]
+ },
+ {
+ "input": "&PartialD",
+ "description": "Bad named entity: PartialD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&PartialD"
+ ]
+ ]
+ },
+ {
+ "input": "&PartialD;",
+ "description": "Named entity: PartialD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2202"
+ ]
+ ]
+ },
+ {
+ "input": "&Pcy",
+ "description": "Bad named entity: Pcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Pcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Pcy;",
+ "description": "Named entity: Pcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u041f"
+ ]
+ ]
+ },
+ {
+ "input": "&Pfr",
+ "description": "Bad named entity: Pfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Pfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Pfr;",
+ "description": "Named entity: Pfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd13"
+ ]
+ ]
+ },
+ {
+ "input": "&Phi",
+ "description": "Bad named entity: Phi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Phi"
+ ]
+ ]
+ },
+ {
+ "input": "&Phi;",
+ "description": "Named entity: Phi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a6"
+ ]
+ ]
+ },
+ {
+ "input": "&Pi",
+ "description": "Bad named entity: Pi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Pi"
+ ]
+ ]
+ },
+ {
+ "input": "&Pi;",
+ "description": "Named entity: Pi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a0"
+ ]
+ ]
+ },
+ {
+ "input": "&PlusMinus",
+ "description": "Bad named entity: PlusMinus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&PlusMinus"
+ ]
+ ]
+ },
+ {
+ "input": "&PlusMinus;",
+ "description": "Named entity: PlusMinus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b1"
+ ]
+ ]
+ },
+ {
+ "input": "&Poincareplane",
+ "description": "Bad named entity: Poincareplane without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Poincareplane"
+ ]
+ ]
+ },
+ {
+ "input": "&Poincareplane;",
+ "description": "Named entity: Poincareplane; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210c"
+ ]
+ ]
+ },
+ {
+ "input": "&Popf",
+ "description": "Bad named entity: Popf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Popf"
+ ]
+ ]
+ },
+ {
+ "input": "&Popf;",
+ "description": "Named entity: Popf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2119"
+ ]
+ ]
+ },
+ {
+ "input": "&Pr",
+ "description": "Bad named entity: Pr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Pr"
+ ]
+ ]
+ },
+ {
+ "input": "&Pr;",
+ "description": "Named entity: Pr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2abb"
+ ]
+ ]
+ },
+ {
+ "input": "&Precedes",
+ "description": "Bad named entity: Precedes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Precedes"
+ ]
+ ]
+ },
+ {
+ "input": "&Precedes;",
+ "description": "Named entity: Precedes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227a"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesEqual",
+ "description": "Bad named entity: PrecedesEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&PrecedesEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesEqual;",
+ "description": "Named entity: PrecedesEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesSlantEqual",
+ "description": "Bad named entity: PrecedesSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&PrecedesSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesSlantEqual;",
+ "description": "Named entity: PrecedesSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227c"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesTilde",
+ "description": "Bad named entity: PrecedesTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&PrecedesTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&PrecedesTilde;",
+ "description": "Named entity: PrecedesTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227e"
+ ]
+ ]
+ },
+ {
+ "input": "&Prime",
+ "description": "Bad named entity: Prime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Prime"
+ ]
+ ]
+ },
+ {
+ "input": "&Prime;",
+ "description": "Named entity: Prime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2033"
+ ]
+ ]
+ },
+ {
+ "input": "&Product",
+ "description": "Bad named entity: Product without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Product"
+ ]
+ ]
+ },
+ {
+ "input": "&Product;",
+ "description": "Named entity: Product; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220f"
+ ]
+ ]
+ },
+ {
+ "input": "&Proportion",
+ "description": "Bad named entity: Proportion without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Proportion"
+ ]
+ ]
+ },
+ {
+ "input": "&Proportion;",
+ "description": "Named entity: Proportion; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2237"
+ ]
+ ]
+ },
+ {
+ "input": "&Proportional",
+ "description": "Bad named entity: Proportional without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Proportional"
+ ]
+ ]
+ },
+ {
+ "input": "&Proportional;",
+ "description": "Named entity: Proportional; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221d"
+ ]
+ ]
+ },
+ {
+ "input": "&Pscr",
+ "description": "Bad named entity: Pscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Pscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Pscr;",
+ "description": "Named entity: Pscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcab"
+ ]
+ ]
+ },
+ {
+ "input": "&Psi",
+ "description": "Bad named entity: Psi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Psi"
+ ]
+ ]
+ },
+ {
+ "input": "&Psi;",
+ "description": "Named entity: Psi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a8"
+ ]
+ ]
+ },
+ {
+ "input": "&QUOT",
+ "description": "Named entity: QUOT without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\""
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&QUOT;",
+ "description": "Named entity: QUOT; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\""
+ ]
+ ]
+ },
+ {
+ "input": "&Qfr",
+ "description": "Bad named entity: Qfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Qfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Qfr;",
+ "description": "Named entity: Qfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd14"
+ ]
+ ]
+ },
+ {
+ "input": "&Qopf",
+ "description": "Bad named entity: Qopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Qopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Qopf;",
+ "description": "Named entity: Qopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211a"
+ ]
+ ]
+ },
+ {
+ "input": "&Qscr",
+ "description": "Bad named entity: Qscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Qscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Qscr;",
+ "description": "Named entity: Qscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcac"
+ ]
+ ]
+ },
+ {
+ "input": "&RBarr",
+ "description": "Bad named entity: RBarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RBarr"
+ ]
+ ]
+ },
+ {
+ "input": "&RBarr;",
+ "description": "Named entity: RBarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2910"
+ ]
+ ]
+ },
+ {
+ "input": "&REG",
+ "description": "Named entity: REG without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ae"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&REG;",
+ "description": "Named entity: REG; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ae"
+ ]
+ ]
+ },
+ {
+ "input": "&Racute",
+ "description": "Bad named entity: Racute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Racute"
+ ]
+ ]
+ },
+ {
+ "input": "&Racute;",
+ "description": "Named entity: Racute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0154"
+ ]
+ ]
+ },
+ {
+ "input": "&Rang",
+ "description": "Bad named entity: Rang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rang"
+ ]
+ ]
+ },
+ {
+ "input": "&Rang;",
+ "description": "Named entity: Rang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27eb"
+ ]
+ ]
+ },
+ {
+ "input": "&Rarr",
+ "description": "Bad named entity: Rarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rarr"
+ ]
+ ]
+ },
+ {
+ "input": "&Rarr;",
+ "description": "Named entity: Rarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a0"
+ ]
+ ]
+ },
+ {
+ "input": "&Rarrtl",
+ "description": "Bad named entity: Rarrtl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rarrtl"
+ ]
+ ]
+ },
+ {
+ "input": "&Rarrtl;",
+ "description": "Named entity: Rarrtl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2916"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcaron",
+ "description": "Bad named entity: Rcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcaron;",
+ "description": "Named entity: Rcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0158"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcedil",
+ "description": "Bad named entity: Rcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcedil;",
+ "description": "Named entity: Rcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0156"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcy",
+ "description": "Bad named entity: Rcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Rcy;",
+ "description": "Named entity: Rcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0420"
+ ]
+ ]
+ },
+ {
+ "input": "&Re",
+ "description": "Bad named entity: Re without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Re"
+ ]
+ ]
+ },
+ {
+ "input": "&Re;",
+ "description": "Named entity: Re; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211c"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseElement",
+ "description": "Bad named entity: ReverseElement without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ReverseElement"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseElement;",
+ "description": "Named entity: ReverseElement; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220b"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseEquilibrium",
+ "description": "Bad named entity: ReverseEquilibrium without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ReverseEquilibrium"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseEquilibrium;",
+ "description": "Named entity: ReverseEquilibrium; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cb"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseUpEquilibrium",
+ "description": "Bad named entity: ReverseUpEquilibrium without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ReverseUpEquilibrium"
+ ]
+ ]
+ },
+ {
+ "input": "&ReverseUpEquilibrium;",
+ "description": "Named entity: ReverseUpEquilibrium; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296f"
+ ]
+ ]
+ },
+ {
+ "input": "&Rfr",
+ "description": "Bad named entity: Rfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Rfr;",
+ "description": "Named entity: Rfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211c"
+ ]
+ ]
+ },
+ {
+ "input": "&Rho",
+ "description": "Bad named entity: Rho without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rho"
+ ]
+ ]
+ },
+ {
+ "input": "&Rho;",
+ "description": "Named entity: Rho; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a1"
+ ]
+ ]
+ },
+ {
+ "input": "&RightAngleBracket",
+ "description": "Bad named entity: RightAngleBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightAngleBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&RightAngleBracket;",
+ "description": "Named entity: RightAngleBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e9"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrow",
+ "description": "Bad named entity: RightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrow;",
+ "description": "Named entity: RightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2192"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrowBar",
+ "description": "Bad named entity: RightArrowBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightArrowBar"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrowBar;",
+ "description": "Named entity: RightArrowBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21e5"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrowLeftArrow",
+ "description": "Bad named entity: RightArrowLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightArrowLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&RightArrowLeftArrow;",
+ "description": "Named entity: RightArrowLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c4"
+ ]
+ ]
+ },
+ {
+ "input": "&RightCeiling",
+ "description": "Bad named entity: RightCeiling without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightCeiling"
+ ]
+ ]
+ },
+ {
+ "input": "&RightCeiling;",
+ "description": "Named entity: RightCeiling; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2309"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDoubleBracket",
+ "description": "Bad named entity: RightDoubleBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightDoubleBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDoubleBracket;",
+ "description": "Named entity: RightDoubleBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e7"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownTeeVector",
+ "description": "Bad named entity: RightDownTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightDownTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownTeeVector;",
+ "description": "Named entity: RightDownTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295d"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownVector",
+ "description": "Bad named entity: RightDownVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightDownVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownVector;",
+ "description": "Named entity: RightDownVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c2"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownVectorBar",
+ "description": "Bad named entity: RightDownVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightDownVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&RightDownVectorBar;",
+ "description": "Named entity: RightDownVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2955"
+ ]
+ ]
+ },
+ {
+ "input": "&RightFloor",
+ "description": "Bad named entity: RightFloor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightFloor"
+ ]
+ ]
+ },
+ {
+ "input": "&RightFloor;",
+ "description": "Named entity: RightFloor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230b"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTee",
+ "description": "Bad named entity: RightTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTee"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTee;",
+ "description": "Named entity: RightTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a2"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTeeArrow",
+ "description": "Bad named entity: RightTeeArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTeeArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTeeArrow;",
+ "description": "Named entity: RightTeeArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a6"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTeeVector",
+ "description": "Bad named entity: RightTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTeeVector;",
+ "description": "Named entity: RightTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295b"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangle",
+ "description": "Bad named entity: RightTriangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTriangle"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangle;",
+ "description": "Named entity: RightTriangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b3"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangleBar",
+ "description": "Bad named entity: RightTriangleBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTriangleBar"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangleBar;",
+ "description": "Named entity: RightTriangleBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29d0"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangleEqual",
+ "description": "Bad named entity: RightTriangleEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightTriangleEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&RightTriangleEqual;",
+ "description": "Named entity: RightTriangleEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b5"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpDownVector",
+ "description": "Bad named entity: RightUpDownVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightUpDownVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpDownVector;",
+ "description": "Named entity: RightUpDownVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u294f"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpTeeVector",
+ "description": "Bad named entity: RightUpTeeVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightUpTeeVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpTeeVector;",
+ "description": "Named entity: RightUpTeeVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u295c"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpVector",
+ "description": "Bad named entity: RightUpVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightUpVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpVector;",
+ "description": "Named entity: RightUpVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21be"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpVectorBar",
+ "description": "Bad named entity: RightUpVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightUpVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&RightUpVectorBar;",
+ "description": "Named entity: RightUpVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2954"
+ ]
+ ]
+ },
+ {
+ "input": "&RightVector",
+ "description": "Bad named entity: RightVector without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightVector"
+ ]
+ ]
+ },
+ {
+ "input": "&RightVector;",
+ "description": "Named entity: RightVector; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c0"
+ ]
+ ]
+ },
+ {
+ "input": "&RightVectorBar",
+ "description": "Bad named entity: RightVectorBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RightVectorBar"
+ ]
+ ]
+ },
+ {
+ "input": "&RightVectorBar;",
+ "description": "Named entity: RightVectorBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2953"
+ ]
+ ]
+ },
+ {
+ "input": "&Rightarrow",
+ "description": "Bad named entity: Rightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Rightarrow;",
+ "description": "Named entity: Rightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d2"
+ ]
+ ]
+ },
+ {
+ "input": "&Ropf",
+ "description": "Bad named entity: Ropf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ropf"
+ ]
+ ]
+ },
+ {
+ "input": "&Ropf;",
+ "description": "Named entity: Ropf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211d"
+ ]
+ ]
+ },
+ {
+ "input": "&RoundImplies",
+ "description": "Bad named entity: RoundImplies without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RoundImplies"
+ ]
+ ]
+ },
+ {
+ "input": "&RoundImplies;",
+ "description": "Named entity: RoundImplies; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2970"
+ ]
+ ]
+ },
+ {
+ "input": "&Rrightarrow",
+ "description": "Bad named entity: Rrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Rrightarrow;",
+ "description": "Named entity: Rrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21db"
+ ]
+ ]
+ },
+ {
+ "input": "&Rscr",
+ "description": "Bad named entity: Rscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Rscr;",
+ "description": "Named entity: Rscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211b"
+ ]
+ ]
+ },
+ {
+ "input": "&Rsh",
+ "description": "Bad named entity: Rsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Rsh"
+ ]
+ ]
+ },
+ {
+ "input": "&Rsh;",
+ "description": "Named entity: Rsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b1"
+ ]
+ ]
+ },
+ {
+ "input": "&RuleDelayed",
+ "description": "Bad named entity: RuleDelayed without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&RuleDelayed"
+ ]
+ ]
+ },
+ {
+ "input": "&RuleDelayed;",
+ "description": "Named entity: RuleDelayed; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29f4"
+ ]
+ ]
+ },
+ {
+ "input": "&SHCHcy",
+ "description": "Bad named entity: SHCHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SHCHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&SHCHcy;",
+ "description": "Named entity: SHCHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0429"
+ ]
+ ]
+ },
+ {
+ "input": "&SHcy",
+ "description": "Bad named entity: SHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&SHcy;",
+ "description": "Named entity: SHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0428"
+ ]
+ ]
+ },
+ {
+ "input": "&SOFTcy",
+ "description": "Bad named entity: SOFTcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SOFTcy"
+ ]
+ ]
+ },
+ {
+ "input": "&SOFTcy;",
+ "description": "Named entity: SOFTcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042c"
+ ]
+ ]
+ },
+ {
+ "input": "&Sacute",
+ "description": "Bad named entity: Sacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sacute"
+ ]
+ ]
+ },
+ {
+ "input": "&Sacute;",
+ "description": "Named entity: Sacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015a"
+ ]
+ ]
+ },
+ {
+ "input": "&Sc",
+ "description": "Bad named entity: Sc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sc"
+ ]
+ ]
+ },
+ {
+ "input": "&Sc;",
+ "description": "Named entity: Sc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2abc"
+ ]
+ ]
+ },
+ {
+ "input": "&Scaron",
+ "description": "Bad named entity: Scaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Scaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Scaron;",
+ "description": "Named entity: Scaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0160"
+ ]
+ ]
+ },
+ {
+ "input": "&Scedil",
+ "description": "Bad named entity: Scedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Scedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Scedil;",
+ "description": "Named entity: Scedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015e"
+ ]
+ ]
+ },
+ {
+ "input": "&Scirc",
+ "description": "Bad named entity: Scirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Scirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Scirc;",
+ "description": "Named entity: Scirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015c"
+ ]
+ ]
+ },
+ {
+ "input": "&Scy",
+ "description": "Bad named entity: Scy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Scy"
+ ]
+ ]
+ },
+ {
+ "input": "&Scy;",
+ "description": "Named entity: Scy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0421"
+ ]
+ ]
+ },
+ {
+ "input": "&Sfr",
+ "description": "Bad named entity: Sfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Sfr;",
+ "description": "Named entity: Sfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd16"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortDownArrow",
+ "description": "Bad named entity: ShortDownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ShortDownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortDownArrow;",
+ "description": "Named entity: ShortDownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2193"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortLeftArrow",
+ "description": "Bad named entity: ShortLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ShortLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortLeftArrow;",
+ "description": "Named entity: ShortLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2190"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortRightArrow",
+ "description": "Bad named entity: ShortRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ShortRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortRightArrow;",
+ "description": "Named entity: ShortRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2192"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortUpArrow",
+ "description": "Bad named entity: ShortUpArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ShortUpArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&ShortUpArrow;",
+ "description": "Named entity: ShortUpArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2191"
+ ]
+ ]
+ },
+ {
+ "input": "&Sigma",
+ "description": "Bad named entity: Sigma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sigma"
+ ]
+ ]
+ },
+ {
+ "input": "&Sigma;",
+ "description": "Named entity: Sigma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a3"
+ ]
+ ]
+ },
+ {
+ "input": "&SmallCircle",
+ "description": "Bad named entity: SmallCircle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SmallCircle"
+ ]
+ ]
+ },
+ {
+ "input": "&SmallCircle;",
+ "description": "Named entity: SmallCircle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2218"
+ ]
+ ]
+ },
+ {
+ "input": "&Sopf",
+ "description": "Bad named entity: Sopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Sopf;",
+ "description": "Named entity: Sopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4a"
+ ]
+ ]
+ },
+ {
+ "input": "&Sqrt",
+ "description": "Bad named entity: Sqrt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sqrt"
+ ]
+ ]
+ },
+ {
+ "input": "&Sqrt;",
+ "description": "Named entity: Sqrt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221a"
+ ]
+ ]
+ },
+ {
+ "input": "&Square",
+ "description": "Bad named entity: Square without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Square"
+ ]
+ ]
+ },
+ {
+ "input": "&Square;",
+ "description": "Named entity: Square; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25a1"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareIntersection",
+ "description": "Bad named entity: SquareIntersection without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareIntersection"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareIntersection;",
+ "description": "Named entity: SquareIntersection; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2293"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSubset",
+ "description": "Bad named entity: SquareSubset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareSubset"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSubset;",
+ "description": "Named entity: SquareSubset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228f"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSubsetEqual",
+ "description": "Bad named entity: SquareSubsetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareSubsetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSubsetEqual;",
+ "description": "Named entity: SquareSubsetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2291"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSuperset",
+ "description": "Bad named entity: SquareSuperset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareSuperset"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSuperset;",
+ "description": "Named entity: SquareSuperset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2290"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSupersetEqual",
+ "description": "Bad named entity: SquareSupersetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareSupersetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareSupersetEqual;",
+ "description": "Named entity: SquareSupersetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2292"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareUnion",
+ "description": "Bad named entity: SquareUnion without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SquareUnion"
+ ]
+ ]
+ },
+ {
+ "input": "&SquareUnion;",
+ "description": "Named entity: SquareUnion; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2294"
+ ]
+ ]
+ },
+ {
+ "input": "&Sscr",
+ "description": "Bad named entity: Sscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Sscr;",
+ "description": "Named entity: Sscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcae"
+ ]
+ ]
+ },
+ {
+ "input": "&Star",
+ "description": "Bad named entity: Star without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Star"
+ ]
+ ]
+ },
+ {
+ "input": "&Star;",
+ "description": "Named entity: Star; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c6"
+ ]
+ ]
+ },
+ {
+ "input": "&Sub",
+ "description": "Bad named entity: Sub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sub"
+ ]
+ ]
+ },
+ {
+ "input": "&Sub;",
+ "description": "Named entity: Sub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d0"
+ ]
+ ]
+ },
+ {
+ "input": "&Subset",
+ "description": "Bad named entity: Subset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Subset"
+ ]
+ ]
+ },
+ {
+ "input": "&Subset;",
+ "description": "Named entity: Subset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d0"
+ ]
+ ]
+ },
+ {
+ "input": "&SubsetEqual",
+ "description": "Bad named entity: SubsetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SubsetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SubsetEqual;",
+ "description": "Named entity: SubsetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2286"
+ ]
+ ]
+ },
+ {
+ "input": "&Succeeds",
+ "description": "Bad named entity: Succeeds without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Succeeds"
+ ]
+ ]
+ },
+ {
+ "input": "&Succeeds;",
+ "description": "Named entity: Succeeds; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227b"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsEqual",
+ "description": "Bad named entity: SucceedsEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SucceedsEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsEqual;",
+ "description": "Named entity: SucceedsEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsSlantEqual",
+ "description": "Bad named entity: SucceedsSlantEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SucceedsSlantEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsSlantEqual;",
+ "description": "Named entity: SucceedsSlantEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227d"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsTilde",
+ "description": "Bad named entity: SucceedsTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SucceedsTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&SucceedsTilde;",
+ "description": "Named entity: SucceedsTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227f"
+ ]
+ ]
+ },
+ {
+ "input": "&SuchThat",
+ "description": "Bad named entity: SuchThat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SuchThat"
+ ]
+ ]
+ },
+ {
+ "input": "&SuchThat;",
+ "description": "Named entity: SuchThat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220b"
+ ]
+ ]
+ },
+ {
+ "input": "&Sum",
+ "description": "Bad named entity: Sum without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sum"
+ ]
+ ]
+ },
+ {
+ "input": "&Sum;",
+ "description": "Named entity: Sum; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2211"
+ ]
+ ]
+ },
+ {
+ "input": "&Sup",
+ "description": "Bad named entity: Sup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Sup"
+ ]
+ ]
+ },
+ {
+ "input": "&Sup;",
+ "description": "Named entity: Sup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d1"
+ ]
+ ]
+ },
+ {
+ "input": "&Superset",
+ "description": "Bad named entity: Superset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Superset"
+ ]
+ ]
+ },
+ {
+ "input": "&Superset;",
+ "description": "Named entity: Superset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283"
+ ]
+ ]
+ },
+ {
+ "input": "&SupersetEqual",
+ "description": "Bad named entity: SupersetEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&SupersetEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&SupersetEqual;",
+ "description": "Named entity: SupersetEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2287"
+ ]
+ ]
+ },
+ {
+ "input": "&Supset",
+ "description": "Bad named entity: Supset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Supset"
+ ]
+ ]
+ },
+ {
+ "input": "&Supset;",
+ "description": "Named entity: Supset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d1"
+ ]
+ ]
+ },
+ {
+ "input": "&THORN",
+ "description": "Named entity: THORN without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00de"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&THORN;",
+ "description": "Named entity: THORN; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00de"
+ ]
+ ]
+ },
+ {
+ "input": "&TRADE",
+ "description": "Bad named entity: TRADE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TRADE"
+ ]
+ ]
+ },
+ {
+ "input": "&TRADE;",
+ "description": "Named entity: TRADE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2122"
+ ]
+ ]
+ },
+ {
+ "input": "&TSHcy",
+ "description": "Bad named entity: TSHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TSHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&TSHcy;",
+ "description": "Named entity: TSHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u040b"
+ ]
+ ]
+ },
+ {
+ "input": "&TScy",
+ "description": "Bad named entity: TScy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TScy"
+ ]
+ ]
+ },
+ {
+ "input": "&TScy;",
+ "description": "Named entity: TScy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0426"
+ ]
+ ]
+ },
+ {
+ "input": "&Tab",
+ "description": "Bad named entity: Tab without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tab"
+ ]
+ ]
+ },
+ {
+ "input": "&Tab;",
+ "description": "Named entity: Tab; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\t"
+ ]
+ ]
+ },
+ {
+ "input": "&Tau",
+ "description": "Bad named entity: Tau without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tau"
+ ]
+ ]
+ },
+ {
+ "input": "&Tau;",
+ "description": "Named entity: Tau; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a4"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcaron",
+ "description": "Bad named entity: Tcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcaron;",
+ "description": "Named entity: Tcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0164"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcedil",
+ "description": "Bad named entity: Tcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcedil;",
+ "description": "Named entity: Tcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0162"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcy",
+ "description": "Bad named entity: Tcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Tcy;",
+ "description": "Named entity: Tcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0422"
+ ]
+ ]
+ },
+ {
+ "input": "&Tfr",
+ "description": "Bad named entity: Tfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Tfr;",
+ "description": "Named entity: Tfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd17"
+ ]
+ ]
+ },
+ {
+ "input": "&Therefore",
+ "description": "Bad named entity: Therefore without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Therefore"
+ ]
+ ]
+ },
+ {
+ "input": "&Therefore;",
+ "description": "Named entity: Therefore; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2234"
+ ]
+ ]
+ },
+ {
+ "input": "&Theta",
+ "description": "Bad named entity: Theta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Theta"
+ ]
+ ]
+ },
+ {
+ "input": "&Theta;",
+ "description": "Named entity: Theta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0398"
+ ]
+ ]
+ },
+ {
+ "input": "&ThickSpace",
+ "description": "Bad named entity: ThickSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ThickSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&ThickSpace;",
+ "description": "Named entity: ThickSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u205f\u200a"
+ ]
+ ]
+ },
+ {
+ "input": "&ThinSpace",
+ "description": "Bad named entity: ThinSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ThinSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&ThinSpace;",
+ "description": "Named entity: ThinSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2009"
+ ]
+ ]
+ },
+ {
+ "input": "&Tilde",
+ "description": "Bad named entity: Tilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tilde"
+ ]
+ ]
+ },
+ {
+ "input": "&Tilde;",
+ "description": "Named entity: Tilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223c"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeEqual",
+ "description": "Bad named entity: TildeEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TildeEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeEqual;",
+ "description": "Named entity: TildeEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2243"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeFullEqual",
+ "description": "Bad named entity: TildeFullEqual without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TildeFullEqual"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeFullEqual;",
+ "description": "Named entity: TildeFullEqual; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2245"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeTilde",
+ "description": "Bad named entity: TildeTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TildeTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&TildeTilde;",
+ "description": "Named entity: TildeTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&Topf",
+ "description": "Bad named entity: Topf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Topf"
+ ]
+ ]
+ },
+ {
+ "input": "&Topf;",
+ "description": "Named entity: Topf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4b"
+ ]
+ ]
+ },
+ {
+ "input": "&TripleDot",
+ "description": "Bad named entity: TripleDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&TripleDot"
+ ]
+ ]
+ },
+ {
+ "input": "&TripleDot;",
+ "description": "Named entity: TripleDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u20db"
+ ]
+ ]
+ },
+ {
+ "input": "&Tscr",
+ "description": "Bad named entity: Tscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Tscr;",
+ "description": "Named entity: Tscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcaf"
+ ]
+ ]
+ },
+ {
+ "input": "&Tstrok",
+ "description": "Bad named entity: Tstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Tstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&Tstrok;",
+ "description": "Named entity: Tstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0166"
+ ]
+ ]
+ },
+ {
+ "input": "&Uacute",
+ "description": "Named entity: Uacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00da"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Uacute;",
+ "description": "Named entity: Uacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00da"
+ ]
+ ]
+ },
+ {
+ "input": "&Uarr",
+ "description": "Bad named entity: Uarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uarr"
+ ]
+ ]
+ },
+ {
+ "input": "&Uarr;",
+ "description": "Named entity: Uarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219f"
+ ]
+ ]
+ },
+ {
+ "input": "&Uarrocir",
+ "description": "Bad named entity: Uarrocir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uarrocir"
+ ]
+ ]
+ },
+ {
+ "input": "&Uarrocir;",
+ "description": "Named entity: Uarrocir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2949"
+ ]
+ ]
+ },
+ {
+ "input": "&Ubrcy",
+ "description": "Bad named entity: Ubrcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ubrcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ubrcy;",
+ "description": "Named entity: Ubrcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u040e"
+ ]
+ ]
+ },
+ {
+ "input": "&Ubreve",
+ "description": "Bad named entity: Ubreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ubreve"
+ ]
+ ]
+ },
+ {
+ "input": "&Ubreve;",
+ "description": "Named entity: Ubreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016c"
+ ]
+ ]
+ },
+ {
+ "input": "&Ucirc",
+ "description": "Named entity: Ucirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00db"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&Ucirc;",
+ "description": "Named entity: Ucirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00db"
+ ]
+ ]
+ },
+ {
+ "input": "&Ucy",
+ "description": "Bad named entity: Ucy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ucy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ucy;",
+ "description": "Named entity: Ucy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0423"
+ ]
+ ]
+ },
+ {
+ "input": "&Udblac",
+ "description": "Bad named entity: Udblac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Udblac"
+ ]
+ ]
+ },
+ {
+ "input": "&Udblac;",
+ "description": "Named entity: Udblac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0170"
+ ]
+ ]
+ },
+ {
+ "input": "&Ufr",
+ "description": "Bad named entity: Ufr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ufr"
+ ]
+ ]
+ },
+ {
+ "input": "&Ufr;",
+ "description": "Named entity: Ufr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd18"
+ ]
+ ]
+ },
+ {
+ "input": "&Ugrave",
+ "description": "Named entity: Ugrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Ugrave;",
+ "description": "Named entity: Ugrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d9"
+ ]
+ ]
+ },
+ {
+ "input": "&Umacr",
+ "description": "Bad named entity: Umacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Umacr"
+ ]
+ ]
+ },
+ {
+ "input": "&Umacr;",
+ "description": "Named entity: Umacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016a"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBar",
+ "description": "Bad named entity: UnderBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UnderBar"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBar;",
+ "description": "Named entity: UnderBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "_"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBrace",
+ "description": "Bad named entity: UnderBrace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UnderBrace"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBrace;",
+ "description": "Named entity: UnderBrace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23df"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBracket",
+ "description": "Bad named entity: UnderBracket without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UnderBracket"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderBracket;",
+ "description": "Named entity: UnderBracket; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b5"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderParenthesis",
+ "description": "Bad named entity: UnderParenthesis without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UnderParenthesis"
+ ]
+ ]
+ },
+ {
+ "input": "&UnderParenthesis;",
+ "description": "Named entity: UnderParenthesis; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23dd"
+ ]
+ ]
+ },
+ {
+ "input": "&Union",
+ "description": "Bad named entity: Union without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Union"
+ ]
+ ]
+ },
+ {
+ "input": "&Union;",
+ "description": "Named entity: Union; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c3"
+ ]
+ ]
+ },
+ {
+ "input": "&UnionPlus",
+ "description": "Bad named entity: UnionPlus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UnionPlus"
+ ]
+ ]
+ },
+ {
+ "input": "&UnionPlus;",
+ "description": "Named entity: UnionPlus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228e"
+ ]
+ ]
+ },
+ {
+ "input": "&Uogon",
+ "description": "Bad named entity: Uogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uogon"
+ ]
+ ]
+ },
+ {
+ "input": "&Uogon;",
+ "description": "Named entity: Uogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0172"
+ ]
+ ]
+ },
+ {
+ "input": "&Uopf",
+ "description": "Bad named entity: Uopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Uopf;",
+ "description": "Named entity: Uopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4c"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrow",
+ "description": "Bad named entity: UpArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrow;",
+ "description": "Named entity: UpArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2191"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrowBar",
+ "description": "Bad named entity: UpArrowBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpArrowBar"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrowBar;",
+ "description": "Named entity: UpArrowBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2912"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrowDownArrow",
+ "description": "Bad named entity: UpArrowDownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpArrowDownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpArrowDownArrow;",
+ "description": "Named entity: UpArrowDownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c5"
+ ]
+ ]
+ },
+ {
+ "input": "&UpDownArrow",
+ "description": "Bad named entity: UpDownArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpDownArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpDownArrow;",
+ "description": "Named entity: UpDownArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2195"
+ ]
+ ]
+ },
+ {
+ "input": "&UpEquilibrium",
+ "description": "Bad named entity: UpEquilibrium without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpEquilibrium"
+ ]
+ ]
+ },
+ {
+ "input": "&UpEquilibrium;",
+ "description": "Named entity: UpEquilibrium; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296e"
+ ]
+ ]
+ },
+ {
+ "input": "&UpTee",
+ "description": "Bad named entity: UpTee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpTee"
+ ]
+ ]
+ },
+ {
+ "input": "&UpTee;",
+ "description": "Named entity: UpTee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a5"
+ ]
+ ]
+ },
+ {
+ "input": "&UpTeeArrow",
+ "description": "Bad named entity: UpTeeArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpTeeArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpTeeArrow;",
+ "description": "Named entity: UpTeeArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a5"
+ ]
+ ]
+ },
+ {
+ "input": "&Uparrow",
+ "description": "Bad named entity: Uparrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uparrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Uparrow;",
+ "description": "Named entity: Uparrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d1"
+ ]
+ ]
+ },
+ {
+ "input": "&Updownarrow",
+ "description": "Bad named entity: Updownarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Updownarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&Updownarrow;",
+ "description": "Named entity: Updownarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d5"
+ ]
+ ]
+ },
+ {
+ "input": "&UpperLeftArrow",
+ "description": "Bad named entity: UpperLeftArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpperLeftArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpperLeftArrow;",
+ "description": "Named entity: UpperLeftArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2196"
+ ]
+ ]
+ },
+ {
+ "input": "&UpperRightArrow",
+ "description": "Bad named entity: UpperRightArrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&UpperRightArrow"
+ ]
+ ]
+ },
+ {
+ "input": "&UpperRightArrow;",
+ "description": "Named entity: UpperRightArrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2197"
+ ]
+ ]
+ },
+ {
+ "input": "&Upsi",
+ "description": "Bad named entity: Upsi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Upsi"
+ ]
+ ]
+ },
+ {
+ "input": "&Upsi;",
+ "description": "Named entity: Upsi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d2"
+ ]
+ ]
+ },
+ {
+ "input": "&Upsilon",
+ "description": "Bad named entity: Upsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Upsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&Upsilon;",
+ "description": "Named entity: Upsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a5"
+ ]
+ ]
+ },
+ {
+ "input": "&Uring",
+ "description": "Bad named entity: Uring without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uring"
+ ]
+ ]
+ },
+ {
+ "input": "&Uring;",
+ "description": "Named entity: Uring; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016e"
+ ]
+ ]
+ },
+ {
+ "input": "&Uscr",
+ "description": "Bad named entity: Uscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Uscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Uscr;",
+ "description": "Named entity: Uscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb0"
+ ]
+ ]
+ },
+ {
+ "input": "&Utilde",
+ "description": "Bad named entity: Utilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Utilde"
+ ]
+ ]
+ },
+ {
+ "input": "&Utilde;",
+ "description": "Named entity: Utilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0168"
+ ]
+ ]
+ },
+ {
+ "input": "&Uuml",
+ "description": "Named entity: Uuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00dc"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&Uuml;",
+ "description": "Named entity: Uuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00dc"
+ ]
+ ]
+ },
+ {
+ "input": "&VDash",
+ "description": "Bad named entity: VDash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VDash"
+ ]
+ ]
+ },
+ {
+ "input": "&VDash;",
+ "description": "Named entity: VDash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ab"
+ ]
+ ]
+ },
+ {
+ "input": "&Vbar",
+ "description": "Bad named entity: Vbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vbar"
+ ]
+ ]
+ },
+ {
+ "input": "&Vbar;",
+ "description": "Named entity: Vbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aeb"
+ ]
+ ]
+ },
+ {
+ "input": "&Vcy",
+ "description": "Bad named entity: Vcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Vcy;",
+ "description": "Named entity: Vcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0412"
+ ]
+ ]
+ },
+ {
+ "input": "&Vdash",
+ "description": "Bad named entity: Vdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vdash"
+ ]
+ ]
+ },
+ {
+ "input": "&Vdash;",
+ "description": "Named entity: Vdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a9"
+ ]
+ ]
+ },
+ {
+ "input": "&Vdashl",
+ "description": "Bad named entity: Vdashl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vdashl"
+ ]
+ ]
+ },
+ {
+ "input": "&Vdashl;",
+ "description": "Named entity: Vdashl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae6"
+ ]
+ ]
+ },
+ {
+ "input": "&Vee",
+ "description": "Bad named entity: Vee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vee"
+ ]
+ ]
+ },
+ {
+ "input": "&Vee;",
+ "description": "Named entity: Vee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c1"
+ ]
+ ]
+ },
+ {
+ "input": "&Verbar",
+ "description": "Bad named entity: Verbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Verbar"
+ ]
+ ]
+ },
+ {
+ "input": "&Verbar;",
+ "description": "Named entity: Verbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2016"
+ ]
+ ]
+ },
+ {
+ "input": "&Vert",
+ "description": "Bad named entity: Vert without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vert"
+ ]
+ ]
+ },
+ {
+ "input": "&Vert;",
+ "description": "Named entity: Vert; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2016"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalBar",
+ "description": "Bad named entity: VerticalBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VerticalBar"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalBar;",
+ "description": "Named entity: VerticalBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2223"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalLine",
+ "description": "Bad named entity: VerticalLine without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VerticalLine"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalLine;",
+ "description": "Named entity: VerticalLine; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "|"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalSeparator",
+ "description": "Bad named entity: VerticalSeparator without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VerticalSeparator"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalSeparator;",
+ "description": "Named entity: VerticalSeparator; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2758"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalTilde",
+ "description": "Bad named entity: VerticalTilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VerticalTilde"
+ ]
+ ]
+ },
+ {
+ "input": "&VerticalTilde;",
+ "description": "Named entity: VerticalTilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2240"
+ ]
+ ]
+ },
+ {
+ "input": "&VeryThinSpace",
+ "description": "Bad named entity: VeryThinSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&VeryThinSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&VeryThinSpace;",
+ "description": "Named entity: VeryThinSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200a"
+ ]
+ ]
+ },
+ {
+ "input": "&Vfr",
+ "description": "Bad named entity: Vfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Vfr;",
+ "description": "Named entity: Vfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd19"
+ ]
+ ]
+ },
+ {
+ "input": "&Vopf",
+ "description": "Bad named entity: Vopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Vopf;",
+ "description": "Named entity: Vopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4d"
+ ]
+ ]
+ },
+ {
+ "input": "&Vscr",
+ "description": "Bad named entity: Vscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Vscr;",
+ "description": "Named entity: Vscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb1"
+ ]
+ ]
+ },
+ {
+ "input": "&Vvdash",
+ "description": "Bad named entity: Vvdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Vvdash"
+ ]
+ ]
+ },
+ {
+ "input": "&Vvdash;",
+ "description": "Named entity: Vvdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22aa"
+ ]
+ ]
+ },
+ {
+ "input": "&Wcirc",
+ "description": "Bad named entity: Wcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Wcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Wcirc;",
+ "description": "Named entity: Wcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0174"
+ ]
+ ]
+ },
+ {
+ "input": "&Wedge",
+ "description": "Bad named entity: Wedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Wedge"
+ ]
+ ]
+ },
+ {
+ "input": "&Wedge;",
+ "description": "Named entity: Wedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c0"
+ ]
+ ]
+ },
+ {
+ "input": "&Wfr",
+ "description": "Bad named entity: Wfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Wfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Wfr;",
+ "description": "Named entity: Wfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd1a"
+ ]
+ ]
+ },
+ {
+ "input": "&Wopf",
+ "description": "Bad named entity: Wopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Wopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Wopf;",
+ "description": "Named entity: Wopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4e"
+ ]
+ ]
+ },
+ {
+ "input": "&Wscr",
+ "description": "Bad named entity: Wscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Wscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Wscr;",
+ "description": "Named entity: Wscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb2"
+ ]
+ ]
+ },
+ {
+ "input": "&Xfr",
+ "description": "Bad named entity: Xfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Xfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Xfr;",
+ "description": "Named entity: Xfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd1b"
+ ]
+ ]
+ },
+ {
+ "input": "&Xi",
+ "description": "Bad named entity: Xi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Xi"
+ ]
+ ]
+ },
+ {
+ "input": "&Xi;",
+ "description": "Named entity: Xi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u039e"
+ ]
+ ]
+ },
+ {
+ "input": "&Xopf",
+ "description": "Bad named entity: Xopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Xopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Xopf;",
+ "description": "Named entity: Xopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd4f"
+ ]
+ ]
+ },
+ {
+ "input": "&Xscr",
+ "description": "Bad named entity: Xscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Xscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Xscr;",
+ "description": "Named entity: Xscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb3"
+ ]
+ ]
+ },
+ {
+ "input": "&YAcy",
+ "description": "Bad named entity: YAcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&YAcy"
+ ]
+ ]
+ },
+ {
+ "input": "&YAcy;",
+ "description": "Named entity: YAcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042f"
+ ]
+ ]
+ },
+ {
+ "input": "&YIcy",
+ "description": "Bad named entity: YIcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&YIcy"
+ ]
+ ]
+ },
+ {
+ "input": "&YIcy;",
+ "description": "Named entity: YIcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0407"
+ ]
+ ]
+ },
+ {
+ "input": "&YUcy",
+ "description": "Bad named entity: YUcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&YUcy"
+ ]
+ ]
+ },
+ {
+ "input": "&YUcy;",
+ "description": "Named entity: YUcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042e"
+ ]
+ ]
+ },
+ {
+ "input": "&Yacute",
+ "description": "Named entity: Yacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00dd"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&Yacute;",
+ "description": "Named entity: Yacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00dd"
+ ]
+ ]
+ },
+ {
+ "input": "&Ycirc",
+ "description": "Bad named entity: Ycirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ycirc"
+ ]
+ ]
+ },
+ {
+ "input": "&Ycirc;",
+ "description": "Named entity: Ycirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0176"
+ ]
+ ]
+ },
+ {
+ "input": "&Ycy",
+ "description": "Bad named entity: Ycy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Ycy"
+ ]
+ ]
+ },
+ {
+ "input": "&Ycy;",
+ "description": "Named entity: Ycy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u042b"
+ ]
+ ]
+ },
+ {
+ "input": "&Yfr",
+ "description": "Bad named entity: Yfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Yfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Yfr;",
+ "description": "Named entity: Yfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd1c"
+ ]
+ ]
+ },
+ {
+ "input": "&Yopf",
+ "description": "Bad named entity: Yopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Yopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Yopf;",
+ "description": "Named entity: Yopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd50"
+ ]
+ ]
+ },
+ {
+ "input": "&Yscr",
+ "description": "Bad named entity: Yscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Yscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Yscr;",
+ "description": "Named entity: Yscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb4"
+ ]
+ ]
+ },
+ {
+ "input": "&Yuml",
+ "description": "Bad named entity: Yuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Yuml"
+ ]
+ ]
+ },
+ {
+ "input": "&Yuml;",
+ "description": "Named entity: Yuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0178"
+ ]
+ ]
+ },
+ {
+ "input": "&ZHcy",
+ "description": "Bad named entity: ZHcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ZHcy"
+ ]
+ ]
+ },
+ {
+ "input": "&ZHcy;",
+ "description": "Named entity: ZHcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0416"
+ ]
+ ]
+ },
+ {
+ "input": "&Zacute",
+ "description": "Bad named entity: Zacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zacute"
+ ]
+ ]
+ },
+ {
+ "input": "&Zacute;",
+ "description": "Named entity: Zacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0179"
+ ]
+ ]
+ },
+ {
+ "input": "&Zcaron",
+ "description": "Bad named entity: Zcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&Zcaron;",
+ "description": "Named entity: Zcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u017d"
+ ]
+ ]
+ },
+ {
+ "input": "&Zcy",
+ "description": "Bad named entity: Zcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zcy"
+ ]
+ ]
+ },
+ {
+ "input": "&Zcy;",
+ "description": "Named entity: Zcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0417"
+ ]
+ ]
+ },
+ {
+ "input": "&Zdot",
+ "description": "Bad named entity: Zdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zdot"
+ ]
+ ]
+ },
+ {
+ "input": "&Zdot;",
+ "description": "Named entity: Zdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u017b"
+ ]
+ ]
+ },
+ {
+ "input": "&ZeroWidthSpace",
+ "description": "Bad named entity: ZeroWidthSpace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ZeroWidthSpace"
+ ]
+ ]
+ },
+ {
+ "input": "&ZeroWidthSpace;",
+ "description": "Named entity: ZeroWidthSpace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200b"
+ ]
+ ]
+ },
+ {
+ "input": "&Zeta",
+ "description": "Bad named entity: Zeta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zeta"
+ ]
+ ]
+ },
+ {
+ "input": "&Zeta;",
+ "description": "Named entity: Zeta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0396"
+ ]
+ ]
+ },
+ {
+ "input": "&Zfr",
+ "description": "Bad named entity: Zfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zfr"
+ ]
+ ]
+ },
+ {
+ "input": "&Zfr;",
+ "description": "Named entity: Zfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2128"
+ ]
+ ]
+ },
+ {
+ "input": "&Zopf",
+ "description": "Bad named entity: Zopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zopf"
+ ]
+ ]
+ },
+ {
+ "input": "&Zopf;",
+ "description": "Named entity: Zopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2124"
+ ]
+ ]
+ },
+ {
+ "input": "&Zscr",
+ "description": "Bad named entity: Zscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&Zscr"
+ ]
+ ]
+ },
+ {
+ "input": "&Zscr;",
+ "description": "Named entity: Zscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb5"
+ ]
+ ]
+ },
+ {
+ "input": "&aacute",
+ "description": "Named entity: aacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&aacute;",
+ "description": "Named entity: aacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e1"
+ ]
+ ]
+ },
+ {
+ "input": "&abreve",
+ "description": "Bad named entity: abreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&abreve"
+ ]
+ ]
+ },
+ {
+ "input": "&abreve;",
+ "description": "Named entity: abreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0103"
+ ]
+ ]
+ },
+ {
+ "input": "&ac",
+ "description": "Bad named entity: ac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ac"
+ ]
+ ]
+ },
+ {
+ "input": "&ac;",
+ "description": "Named entity: ac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223e"
+ ]
+ ]
+ },
+ {
+ "input": "&acE",
+ "description": "Bad named entity: acE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&acE"
+ ]
+ ]
+ },
+ {
+ "input": "&acE;",
+ "description": "Named entity: acE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223e\u0333"
+ ]
+ ]
+ },
+ {
+ "input": "&acd",
+ "description": "Bad named entity: acd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&acd"
+ ]
+ ]
+ },
+ {
+ "input": "&acd;",
+ "description": "Named entity: acd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223f"
+ ]
+ ]
+ },
+ {
+ "input": "&acirc",
+ "description": "Named entity: acirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&acirc;",
+ "description": "Named entity: acirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e2"
+ ]
+ ]
+ },
+ {
+ "input": "&acute",
+ "description": "Named entity: acute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&acute;",
+ "description": "Named entity: acute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b4"
+ ]
+ ]
+ },
+ {
+ "input": "&acy",
+ "description": "Bad named entity: acy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&acy"
+ ]
+ ]
+ },
+ {
+ "input": "&acy;",
+ "description": "Named entity: acy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0430"
+ ]
+ ]
+ },
+ {
+ "input": "&aelig",
+ "description": "Named entity: aelig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&aelig;",
+ "description": "Named entity: aelig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e6"
+ ]
+ ]
+ },
+ {
+ "input": "&af",
+ "description": "Bad named entity: af without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&af"
+ ]
+ ]
+ },
+ {
+ "input": "&af;",
+ "description": "Named entity: af; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2061"
+ ]
+ ]
+ },
+ {
+ "input": "&afr",
+ "description": "Bad named entity: afr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&afr"
+ ]
+ ]
+ },
+ {
+ "input": "&afr;",
+ "description": "Named entity: afr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd1e"
+ ]
+ ]
+ },
+ {
+ "input": "&agrave",
+ "description": "Named entity: agrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&agrave;",
+ "description": "Named entity: agrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e0"
+ ]
+ ]
+ },
+ {
+ "input": "&alefsym",
+ "description": "Bad named entity: alefsym without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&alefsym"
+ ]
+ ]
+ },
+ {
+ "input": "&alefsym;",
+ "description": "Named entity: alefsym; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2135"
+ ]
+ ]
+ },
+ {
+ "input": "&aleph",
+ "description": "Bad named entity: aleph without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&aleph"
+ ]
+ ]
+ },
+ {
+ "input": "&aleph;",
+ "description": "Named entity: aleph; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2135"
+ ]
+ ]
+ },
+ {
+ "input": "&alpha",
+ "description": "Bad named entity: alpha without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&alpha"
+ ]
+ ]
+ },
+ {
+ "input": "&alpha;",
+ "description": "Named entity: alpha; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b1"
+ ]
+ ]
+ },
+ {
+ "input": "&amacr",
+ "description": "Bad named entity: amacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&amacr"
+ ]
+ ]
+ },
+ {
+ "input": "&amacr;",
+ "description": "Named entity: amacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0101"
+ ]
+ ]
+ },
+ {
+ "input": "&amalg",
+ "description": "Bad named entity: amalg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&amalg"
+ ]
+ ]
+ },
+ {
+ "input": "&amalg;",
+ "description": "Named entity: amalg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a3f"
+ ]
+ ]
+ },
+ {
+ "input": "&amp",
+ "description": "Named entity: amp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&amp;",
+ "description": "Named entity: amp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&"
+ ]
+ ]
+ },
+ {
+ "input": "&and",
+ "description": "Bad named entity: and without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&and"
+ ]
+ ]
+ },
+ {
+ "input": "&and;",
+ "description": "Named entity: and; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2227"
+ ]
+ ]
+ },
+ {
+ "input": "&andand",
+ "description": "Bad named entity: andand without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&andand"
+ ]
+ ]
+ },
+ {
+ "input": "&andand;",
+ "description": "Named entity: andand; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a55"
+ ]
+ ]
+ },
+ {
+ "input": "&andd",
+ "description": "Bad named entity: andd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&andd"
+ ]
+ ]
+ },
+ {
+ "input": "&andd;",
+ "description": "Named entity: andd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a5c"
+ ]
+ ]
+ },
+ {
+ "input": "&andslope",
+ "description": "Bad named entity: andslope without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&andslope"
+ ]
+ ]
+ },
+ {
+ "input": "&andslope;",
+ "description": "Named entity: andslope; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a58"
+ ]
+ ]
+ },
+ {
+ "input": "&andv",
+ "description": "Bad named entity: andv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&andv"
+ ]
+ ]
+ },
+ {
+ "input": "&andv;",
+ "description": "Named entity: andv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a5a"
+ ]
+ ]
+ },
+ {
+ "input": "&ang",
+ "description": "Bad named entity: ang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ang"
+ ]
+ ]
+ },
+ {
+ "input": "&ang;",
+ "description": "Named entity: ang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2220"
+ ]
+ ]
+ },
+ {
+ "input": "&ange",
+ "description": "Bad named entity: ange without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ange"
+ ]
+ ]
+ },
+ {
+ "input": "&ange;",
+ "description": "Named entity: ange; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a4"
+ ]
+ ]
+ },
+ {
+ "input": "&angle",
+ "description": "Bad named entity: angle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angle"
+ ]
+ ]
+ },
+ {
+ "input": "&angle;",
+ "description": "Named entity: angle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2220"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsd",
+ "description": "Bad named entity: angmsd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsd"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsd;",
+ "description": "Named entity: angmsd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2221"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdaa",
+ "description": "Bad named entity: angmsdaa without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdaa"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdaa;",
+ "description": "Named entity: angmsdaa; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a8"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdab",
+ "description": "Bad named entity: angmsdab without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdab"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdab;",
+ "description": "Named entity: angmsdab; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a9"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdac",
+ "description": "Bad named entity: angmsdac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdac"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdac;",
+ "description": "Named entity: angmsdac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29aa"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdad",
+ "description": "Bad named entity: angmsdad without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdad"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdad;",
+ "description": "Named entity: angmsdad; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29ab"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdae",
+ "description": "Bad named entity: angmsdae without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdae"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdae;",
+ "description": "Named entity: angmsdae; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29ac"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdaf",
+ "description": "Bad named entity: angmsdaf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdaf"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdaf;",
+ "description": "Named entity: angmsdaf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29ad"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdag",
+ "description": "Bad named entity: angmsdag without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdag"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdag;",
+ "description": "Named entity: angmsdag; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29ae"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdah",
+ "description": "Bad named entity: angmsdah without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angmsdah"
+ ]
+ ]
+ },
+ {
+ "input": "&angmsdah;",
+ "description": "Named entity: angmsdah; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29af"
+ ]
+ ]
+ },
+ {
+ "input": "&angrt",
+ "description": "Bad named entity: angrt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angrt"
+ ]
+ ]
+ },
+ {
+ "input": "&angrt;",
+ "description": "Named entity: angrt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221f"
+ ]
+ ]
+ },
+ {
+ "input": "&angrtvb",
+ "description": "Bad named entity: angrtvb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angrtvb"
+ ]
+ ]
+ },
+ {
+ "input": "&angrtvb;",
+ "description": "Named entity: angrtvb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22be"
+ ]
+ ]
+ },
+ {
+ "input": "&angrtvbd",
+ "description": "Bad named entity: angrtvbd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angrtvbd"
+ ]
+ ]
+ },
+ {
+ "input": "&angrtvbd;",
+ "description": "Named entity: angrtvbd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u299d"
+ ]
+ ]
+ },
+ {
+ "input": "&angsph",
+ "description": "Bad named entity: angsph without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angsph"
+ ]
+ ]
+ },
+ {
+ "input": "&angsph;",
+ "description": "Named entity: angsph; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2222"
+ ]
+ ]
+ },
+ {
+ "input": "&angst",
+ "description": "Bad named entity: angst without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angst"
+ ]
+ ]
+ },
+ {
+ "input": "&angst;",
+ "description": "Named entity: angst; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00c5"
+ ]
+ ]
+ },
+ {
+ "input": "&angzarr",
+ "description": "Bad named entity: angzarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&angzarr"
+ ]
+ ]
+ },
+ {
+ "input": "&angzarr;",
+ "description": "Named entity: angzarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u237c"
+ ]
+ ]
+ },
+ {
+ "input": "&aogon",
+ "description": "Bad named entity: aogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&aogon"
+ ]
+ ]
+ },
+ {
+ "input": "&aogon;",
+ "description": "Named entity: aogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0105"
+ ]
+ ]
+ },
+ {
+ "input": "&aopf",
+ "description": "Bad named entity: aopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&aopf"
+ ]
+ ]
+ },
+ {
+ "input": "&aopf;",
+ "description": "Named entity: aopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd52"
+ ]
+ ]
+ },
+ {
+ "input": "&ap",
+ "description": "Bad named entity: ap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ap"
+ ]
+ ]
+ },
+ {
+ "input": "&ap;",
+ "description": "Named entity: ap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&apE",
+ "description": "Bad named entity: apE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&apE"
+ ]
+ ]
+ },
+ {
+ "input": "&apE;",
+ "description": "Named entity: apE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a70"
+ ]
+ ]
+ },
+ {
+ "input": "&apacir",
+ "description": "Bad named entity: apacir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&apacir"
+ ]
+ ]
+ },
+ {
+ "input": "&apacir;",
+ "description": "Named entity: apacir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a6f"
+ ]
+ ]
+ },
+ {
+ "input": "&ape",
+ "description": "Bad named entity: ape without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ape"
+ ]
+ ]
+ },
+ {
+ "input": "&ape;",
+ "description": "Named entity: ape; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224a"
+ ]
+ ]
+ },
+ {
+ "input": "&apid",
+ "description": "Bad named entity: apid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&apid"
+ ]
+ ]
+ },
+ {
+ "input": "&apid;",
+ "description": "Named entity: apid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224b"
+ ]
+ ]
+ },
+ {
+ "input": "&apos",
+ "description": "Bad named entity: apos without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&apos"
+ ]
+ ]
+ },
+ {
+ "input": "&apos;",
+ "description": "Named entity: apos; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "'"
+ ]
+ ]
+ },
+ {
+ "input": "&approx",
+ "description": "Bad named entity: approx without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&approx"
+ ]
+ ]
+ },
+ {
+ "input": "&approx;",
+ "description": "Named entity: approx; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&approxeq",
+ "description": "Bad named entity: approxeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&approxeq"
+ ]
+ ]
+ },
+ {
+ "input": "&approxeq;",
+ "description": "Named entity: approxeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224a"
+ ]
+ ]
+ },
+ {
+ "input": "&aring",
+ "description": "Named entity: aring without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&aring;",
+ "description": "Named entity: aring; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e5"
+ ]
+ ]
+ },
+ {
+ "input": "&ascr",
+ "description": "Bad named entity: ascr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ascr"
+ ]
+ ]
+ },
+ {
+ "input": "&ascr;",
+ "description": "Named entity: ascr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb6"
+ ]
+ ]
+ },
+ {
+ "input": "&ast",
+ "description": "Bad named entity: ast without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ast"
+ ]
+ ]
+ },
+ {
+ "input": "&ast;",
+ "description": "Named entity: ast; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "*"
+ ]
+ ]
+ },
+ {
+ "input": "&asymp",
+ "description": "Bad named entity: asymp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&asymp"
+ ]
+ ]
+ },
+ {
+ "input": "&asymp;",
+ "description": "Named entity: asymp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&asympeq",
+ "description": "Bad named entity: asympeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&asympeq"
+ ]
+ ]
+ },
+ {
+ "input": "&asympeq;",
+ "description": "Named entity: asympeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224d"
+ ]
+ ]
+ },
+ {
+ "input": "&atilde",
+ "description": "Named entity: atilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&atilde;",
+ "description": "Named entity: atilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e3"
+ ]
+ ]
+ },
+ {
+ "input": "&auml",
+ "description": "Named entity: auml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&auml;",
+ "description": "Named entity: auml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e4"
+ ]
+ ]
+ },
+ {
+ "input": "&awconint",
+ "description": "Bad named entity: awconint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&awconint"
+ ]
+ ]
+ },
+ {
+ "input": "&awconint;",
+ "description": "Named entity: awconint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2233"
+ ]
+ ]
+ },
+ {
+ "input": "&awint",
+ "description": "Bad named entity: awint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&awint"
+ ]
+ ]
+ },
+ {
+ "input": "&awint;",
+ "description": "Named entity: awint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a11"
+ ]
+ ]
+ },
+ {
+ "input": "&bNot",
+ "description": "Bad named entity: bNot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bNot"
+ ]
+ ]
+ },
+ {
+ "input": "&bNot;",
+ "description": "Named entity: bNot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aed"
+ ]
+ ]
+ },
+ {
+ "input": "&backcong",
+ "description": "Bad named entity: backcong without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&backcong"
+ ]
+ ]
+ },
+ {
+ "input": "&backcong;",
+ "description": "Named entity: backcong; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224c"
+ ]
+ ]
+ },
+ {
+ "input": "&backepsilon",
+ "description": "Bad named entity: backepsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&backepsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&backepsilon;",
+ "description": "Named entity: backepsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f6"
+ ]
+ ]
+ },
+ {
+ "input": "&backprime",
+ "description": "Bad named entity: backprime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&backprime"
+ ]
+ ]
+ },
+ {
+ "input": "&backprime;",
+ "description": "Named entity: backprime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2035"
+ ]
+ ]
+ },
+ {
+ "input": "&backsim",
+ "description": "Bad named entity: backsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&backsim"
+ ]
+ ]
+ },
+ {
+ "input": "&backsim;",
+ "description": "Named entity: backsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223d"
+ ]
+ ]
+ },
+ {
+ "input": "&backsimeq",
+ "description": "Bad named entity: backsimeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&backsimeq"
+ ]
+ ]
+ },
+ {
+ "input": "&backsimeq;",
+ "description": "Named entity: backsimeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cd"
+ ]
+ ]
+ },
+ {
+ "input": "&barvee",
+ "description": "Bad named entity: barvee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&barvee"
+ ]
+ ]
+ },
+ {
+ "input": "&barvee;",
+ "description": "Named entity: barvee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22bd"
+ ]
+ ]
+ },
+ {
+ "input": "&barwed",
+ "description": "Bad named entity: barwed without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&barwed"
+ ]
+ ]
+ },
+ {
+ "input": "&barwed;",
+ "description": "Named entity: barwed; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2305"
+ ]
+ ]
+ },
+ {
+ "input": "&barwedge",
+ "description": "Bad named entity: barwedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&barwedge"
+ ]
+ ]
+ },
+ {
+ "input": "&barwedge;",
+ "description": "Named entity: barwedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2305"
+ ]
+ ]
+ },
+ {
+ "input": "&bbrk",
+ "description": "Bad named entity: bbrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bbrk"
+ ]
+ ]
+ },
+ {
+ "input": "&bbrk;",
+ "description": "Named entity: bbrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b5"
+ ]
+ ]
+ },
+ {
+ "input": "&bbrktbrk",
+ "description": "Bad named entity: bbrktbrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bbrktbrk"
+ ]
+ ]
+ },
+ {
+ "input": "&bbrktbrk;",
+ "description": "Named entity: bbrktbrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b6"
+ ]
+ ]
+ },
+ {
+ "input": "&bcong",
+ "description": "Bad named entity: bcong without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bcong"
+ ]
+ ]
+ },
+ {
+ "input": "&bcong;",
+ "description": "Named entity: bcong; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224c"
+ ]
+ ]
+ },
+ {
+ "input": "&bcy",
+ "description": "Bad named entity: bcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bcy"
+ ]
+ ]
+ },
+ {
+ "input": "&bcy;",
+ "description": "Named entity: bcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0431"
+ ]
+ ]
+ },
+ {
+ "input": "&bdquo",
+ "description": "Bad named entity: bdquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bdquo"
+ ]
+ ]
+ },
+ {
+ "input": "&bdquo;",
+ "description": "Named entity: bdquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201e"
+ ]
+ ]
+ },
+ {
+ "input": "&becaus",
+ "description": "Bad named entity: becaus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&becaus"
+ ]
+ ]
+ },
+ {
+ "input": "&becaus;",
+ "description": "Named entity: becaus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2235"
+ ]
+ ]
+ },
+ {
+ "input": "&because",
+ "description": "Bad named entity: because without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&because"
+ ]
+ ]
+ },
+ {
+ "input": "&because;",
+ "description": "Named entity: because; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2235"
+ ]
+ ]
+ },
+ {
+ "input": "&bemptyv",
+ "description": "Bad named entity: bemptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bemptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&bemptyv;",
+ "description": "Named entity: bemptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b0"
+ ]
+ ]
+ },
+ {
+ "input": "&bepsi",
+ "description": "Bad named entity: bepsi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bepsi"
+ ]
+ ]
+ },
+ {
+ "input": "&bepsi;",
+ "description": "Named entity: bepsi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f6"
+ ]
+ ]
+ },
+ {
+ "input": "&bernou",
+ "description": "Bad named entity: bernou without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bernou"
+ ]
+ ]
+ },
+ {
+ "input": "&bernou;",
+ "description": "Named entity: bernou; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212c"
+ ]
+ ]
+ },
+ {
+ "input": "&beta",
+ "description": "Bad named entity: beta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&beta"
+ ]
+ ]
+ },
+ {
+ "input": "&beta;",
+ "description": "Named entity: beta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b2"
+ ]
+ ]
+ },
+ {
+ "input": "&beth",
+ "description": "Bad named entity: beth without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&beth"
+ ]
+ ]
+ },
+ {
+ "input": "&beth;",
+ "description": "Named entity: beth; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2136"
+ ]
+ ]
+ },
+ {
+ "input": "&between",
+ "description": "Bad named entity: between without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&between"
+ ]
+ ]
+ },
+ {
+ "input": "&between;",
+ "description": "Named entity: between; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226c"
+ ]
+ ]
+ },
+ {
+ "input": "&bfr",
+ "description": "Bad named entity: bfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bfr"
+ ]
+ ]
+ },
+ {
+ "input": "&bfr;",
+ "description": "Named entity: bfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd1f"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcap",
+ "description": "Bad named entity: bigcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigcap"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcap;",
+ "description": "Named entity: bigcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c2"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcirc",
+ "description": "Bad named entity: bigcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcirc;",
+ "description": "Named entity: bigcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ef"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcup",
+ "description": "Bad named entity: bigcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigcup"
+ ]
+ ]
+ },
+ {
+ "input": "&bigcup;",
+ "description": "Named entity: bigcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c3"
+ ]
+ ]
+ },
+ {
+ "input": "&bigodot",
+ "description": "Bad named entity: bigodot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigodot"
+ ]
+ ]
+ },
+ {
+ "input": "&bigodot;",
+ "description": "Named entity: bigodot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a00"
+ ]
+ ]
+ },
+ {
+ "input": "&bigoplus",
+ "description": "Bad named entity: bigoplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigoplus"
+ ]
+ ]
+ },
+ {
+ "input": "&bigoplus;",
+ "description": "Named entity: bigoplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a01"
+ ]
+ ]
+ },
+ {
+ "input": "&bigotimes",
+ "description": "Bad named entity: bigotimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigotimes"
+ ]
+ ]
+ },
+ {
+ "input": "&bigotimes;",
+ "description": "Named entity: bigotimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a02"
+ ]
+ ]
+ },
+ {
+ "input": "&bigsqcup",
+ "description": "Bad named entity: bigsqcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigsqcup"
+ ]
+ ]
+ },
+ {
+ "input": "&bigsqcup;",
+ "description": "Named entity: bigsqcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a06"
+ ]
+ ]
+ },
+ {
+ "input": "&bigstar",
+ "description": "Bad named entity: bigstar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigstar"
+ ]
+ ]
+ },
+ {
+ "input": "&bigstar;",
+ "description": "Named entity: bigstar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2605"
+ ]
+ ]
+ },
+ {
+ "input": "&bigtriangledown",
+ "description": "Bad named entity: bigtriangledown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigtriangledown"
+ ]
+ ]
+ },
+ {
+ "input": "&bigtriangledown;",
+ "description": "Named entity: bigtriangledown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25bd"
+ ]
+ ]
+ },
+ {
+ "input": "&bigtriangleup",
+ "description": "Bad named entity: bigtriangleup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigtriangleup"
+ ]
+ ]
+ },
+ {
+ "input": "&bigtriangleup;",
+ "description": "Named entity: bigtriangleup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b3"
+ ]
+ ]
+ },
+ {
+ "input": "&biguplus",
+ "description": "Bad named entity: biguplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&biguplus"
+ ]
+ ]
+ },
+ {
+ "input": "&biguplus;",
+ "description": "Named entity: biguplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a04"
+ ]
+ ]
+ },
+ {
+ "input": "&bigvee",
+ "description": "Bad named entity: bigvee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigvee"
+ ]
+ ]
+ },
+ {
+ "input": "&bigvee;",
+ "description": "Named entity: bigvee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c1"
+ ]
+ ]
+ },
+ {
+ "input": "&bigwedge",
+ "description": "Bad named entity: bigwedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bigwedge"
+ ]
+ ]
+ },
+ {
+ "input": "&bigwedge;",
+ "description": "Named entity: bigwedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c0"
+ ]
+ ]
+ },
+ {
+ "input": "&bkarow",
+ "description": "Bad named entity: bkarow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bkarow"
+ ]
+ ]
+ },
+ {
+ "input": "&bkarow;",
+ "description": "Named entity: bkarow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290d"
+ ]
+ ]
+ },
+ {
+ "input": "&blacklozenge",
+ "description": "Bad named entity: blacklozenge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacklozenge"
+ ]
+ ]
+ },
+ {
+ "input": "&blacklozenge;",
+ "description": "Named entity: blacklozenge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29eb"
+ ]
+ ]
+ },
+ {
+ "input": "&blacksquare",
+ "description": "Bad named entity: blacksquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacksquare"
+ ]
+ ]
+ },
+ {
+ "input": "&blacksquare;",
+ "description": "Named entity: blacksquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25aa"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangle",
+ "description": "Bad named entity: blacktriangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacktriangle"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangle;",
+ "description": "Named entity: blacktriangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b4"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangledown",
+ "description": "Bad named entity: blacktriangledown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacktriangledown"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangledown;",
+ "description": "Named entity: blacktriangledown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25be"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangleleft",
+ "description": "Bad named entity: blacktriangleleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacktriangleleft"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangleleft;",
+ "description": "Named entity: blacktriangleleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25c2"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangleright",
+ "description": "Bad named entity: blacktriangleright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blacktriangleright"
+ ]
+ ]
+ },
+ {
+ "input": "&blacktriangleright;",
+ "description": "Named entity: blacktriangleright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b8"
+ ]
+ ]
+ },
+ {
+ "input": "&blank",
+ "description": "Bad named entity: blank without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blank"
+ ]
+ ]
+ },
+ {
+ "input": "&blank;",
+ "description": "Named entity: blank; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2423"
+ ]
+ ]
+ },
+ {
+ "input": "&blk12",
+ "description": "Bad named entity: blk12 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blk12"
+ ]
+ ]
+ },
+ {
+ "input": "&blk12;",
+ "description": "Named entity: blk12; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2592"
+ ]
+ ]
+ },
+ {
+ "input": "&blk14",
+ "description": "Bad named entity: blk14 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blk14"
+ ]
+ ]
+ },
+ {
+ "input": "&blk14;",
+ "description": "Named entity: blk14; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2591"
+ ]
+ ]
+ },
+ {
+ "input": "&blk34",
+ "description": "Bad named entity: blk34 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&blk34"
+ ]
+ ]
+ },
+ {
+ "input": "&blk34;",
+ "description": "Named entity: blk34; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2593"
+ ]
+ ]
+ },
+ {
+ "input": "&block",
+ "description": "Bad named entity: block without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&block"
+ ]
+ ]
+ },
+ {
+ "input": "&block;",
+ "description": "Named entity: block; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2588"
+ ]
+ ]
+ },
+ {
+ "input": "&bne",
+ "description": "Bad named entity: bne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bne"
+ ]
+ ]
+ },
+ {
+ "input": "&bne;",
+ "description": "Named entity: bne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "=\u20e5"
+ ]
+ ]
+ },
+ {
+ "input": "&bnequiv",
+ "description": "Bad named entity: bnequiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bnequiv"
+ ]
+ ]
+ },
+ {
+ "input": "&bnequiv;",
+ "description": "Named entity: bnequiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2261\u20e5"
+ ]
+ ]
+ },
+ {
+ "input": "&bnot",
+ "description": "Bad named entity: bnot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bnot"
+ ]
+ ]
+ },
+ {
+ "input": "&bnot;",
+ "description": "Named entity: bnot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2310"
+ ]
+ ]
+ },
+ {
+ "input": "&bopf",
+ "description": "Bad named entity: bopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bopf"
+ ]
+ ]
+ },
+ {
+ "input": "&bopf;",
+ "description": "Named entity: bopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd53"
+ ]
+ ]
+ },
+ {
+ "input": "&bot",
+ "description": "Bad named entity: bot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bot"
+ ]
+ ]
+ },
+ {
+ "input": "&bot;",
+ "description": "Named entity: bot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a5"
+ ]
+ ]
+ },
+ {
+ "input": "&bottom",
+ "description": "Bad named entity: bottom without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bottom"
+ ]
+ ]
+ },
+ {
+ "input": "&bottom;",
+ "description": "Named entity: bottom; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a5"
+ ]
+ ]
+ },
+ {
+ "input": "&bowtie",
+ "description": "Bad named entity: bowtie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bowtie"
+ ]
+ ]
+ },
+ {
+ "input": "&bowtie;",
+ "description": "Named entity: bowtie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c8"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDL",
+ "description": "Bad named entity: boxDL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxDL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDL;",
+ "description": "Named entity: boxDL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2557"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDR",
+ "description": "Bad named entity: boxDR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxDR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDR;",
+ "description": "Named entity: boxDR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2554"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDl",
+ "description": "Bad named entity: boxDl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxDl"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDl;",
+ "description": "Named entity: boxDl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2556"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDr",
+ "description": "Bad named entity: boxDr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxDr"
+ ]
+ ]
+ },
+ {
+ "input": "&boxDr;",
+ "description": "Named entity: boxDr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2553"
+ ]
+ ]
+ },
+ {
+ "input": "&boxH",
+ "description": "Bad named entity: boxH without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxH"
+ ]
+ ]
+ },
+ {
+ "input": "&boxH;",
+ "description": "Named entity: boxH; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2550"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHD",
+ "description": "Bad named entity: boxHD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxHD"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHD;",
+ "description": "Named entity: boxHD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2566"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHU",
+ "description": "Bad named entity: boxHU without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxHU"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHU;",
+ "description": "Named entity: boxHU; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2569"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHd",
+ "description": "Bad named entity: boxHd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxHd"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHd;",
+ "description": "Named entity: boxHd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2564"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHu",
+ "description": "Bad named entity: boxHu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxHu"
+ ]
+ ]
+ },
+ {
+ "input": "&boxHu;",
+ "description": "Named entity: boxHu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2567"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUL",
+ "description": "Bad named entity: boxUL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxUL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUL;",
+ "description": "Named entity: boxUL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255d"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUR",
+ "description": "Bad named entity: boxUR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxUR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUR;",
+ "description": "Named entity: boxUR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255a"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUl",
+ "description": "Bad named entity: boxUl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxUl"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUl;",
+ "description": "Named entity: boxUl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255c"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUr",
+ "description": "Bad named entity: boxUr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxUr"
+ ]
+ ]
+ },
+ {
+ "input": "&boxUr;",
+ "description": "Named entity: boxUr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2559"
+ ]
+ ]
+ },
+ {
+ "input": "&boxV",
+ "description": "Bad named entity: boxV without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxV"
+ ]
+ ]
+ },
+ {
+ "input": "&boxV;",
+ "description": "Named entity: boxV; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2551"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVH",
+ "description": "Bad named entity: boxVH without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVH"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVH;",
+ "description": "Named entity: boxVH; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u256c"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVL",
+ "description": "Bad named entity: boxVL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVL;",
+ "description": "Named entity: boxVL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2563"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVR",
+ "description": "Bad named entity: boxVR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVR;",
+ "description": "Named entity: boxVR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2560"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVh",
+ "description": "Bad named entity: boxVh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVh"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVh;",
+ "description": "Named entity: boxVh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u256b"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVl",
+ "description": "Bad named entity: boxVl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVl"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVl;",
+ "description": "Named entity: boxVl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2562"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVr",
+ "description": "Bad named entity: boxVr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxVr"
+ ]
+ ]
+ },
+ {
+ "input": "&boxVr;",
+ "description": "Named entity: boxVr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255f"
+ ]
+ ]
+ },
+ {
+ "input": "&boxbox",
+ "description": "Bad named entity: boxbox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxbox"
+ ]
+ ]
+ },
+ {
+ "input": "&boxbox;",
+ "description": "Named entity: boxbox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c9"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdL",
+ "description": "Bad named entity: boxdL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxdL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdL;",
+ "description": "Named entity: boxdL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2555"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdR",
+ "description": "Bad named entity: boxdR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxdR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdR;",
+ "description": "Named entity: boxdR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2552"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdl",
+ "description": "Bad named entity: boxdl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxdl"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdl;",
+ "description": "Named entity: boxdl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2510"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdr",
+ "description": "Bad named entity: boxdr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxdr"
+ ]
+ ]
+ },
+ {
+ "input": "&boxdr;",
+ "description": "Named entity: boxdr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u250c"
+ ]
+ ]
+ },
+ {
+ "input": "&boxh",
+ "description": "Bad named entity: boxh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxh"
+ ]
+ ]
+ },
+ {
+ "input": "&boxh;",
+ "description": "Named entity: boxh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2500"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhD",
+ "description": "Bad named entity: boxhD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxhD"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhD;",
+ "description": "Named entity: boxhD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2565"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhU",
+ "description": "Bad named entity: boxhU without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxhU"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhU;",
+ "description": "Named entity: boxhU; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2568"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhd",
+ "description": "Bad named entity: boxhd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxhd"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhd;",
+ "description": "Named entity: boxhd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u252c"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhu",
+ "description": "Bad named entity: boxhu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxhu"
+ ]
+ ]
+ },
+ {
+ "input": "&boxhu;",
+ "description": "Named entity: boxhu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2534"
+ ]
+ ]
+ },
+ {
+ "input": "&boxminus",
+ "description": "Bad named entity: boxminus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxminus"
+ ]
+ ]
+ },
+ {
+ "input": "&boxminus;",
+ "description": "Named entity: boxminus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229f"
+ ]
+ ]
+ },
+ {
+ "input": "&boxplus",
+ "description": "Bad named entity: boxplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxplus"
+ ]
+ ]
+ },
+ {
+ "input": "&boxplus;",
+ "description": "Named entity: boxplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229e"
+ ]
+ ]
+ },
+ {
+ "input": "&boxtimes",
+ "description": "Bad named entity: boxtimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxtimes"
+ ]
+ ]
+ },
+ {
+ "input": "&boxtimes;",
+ "description": "Named entity: boxtimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a0"
+ ]
+ ]
+ },
+ {
+ "input": "&boxuL",
+ "description": "Bad named entity: boxuL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxuL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxuL;",
+ "description": "Named entity: boxuL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255b"
+ ]
+ ]
+ },
+ {
+ "input": "&boxuR",
+ "description": "Bad named entity: boxuR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxuR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxuR;",
+ "description": "Named entity: boxuR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2558"
+ ]
+ ]
+ },
+ {
+ "input": "&boxul",
+ "description": "Bad named entity: boxul without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxul"
+ ]
+ ]
+ },
+ {
+ "input": "&boxul;",
+ "description": "Named entity: boxul; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2518"
+ ]
+ ]
+ },
+ {
+ "input": "&boxur",
+ "description": "Bad named entity: boxur without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxur"
+ ]
+ ]
+ },
+ {
+ "input": "&boxur;",
+ "description": "Named entity: boxur; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2514"
+ ]
+ ]
+ },
+ {
+ "input": "&boxv",
+ "description": "Bad named entity: boxv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxv"
+ ]
+ ]
+ },
+ {
+ "input": "&boxv;",
+ "description": "Named entity: boxv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2502"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvH",
+ "description": "Bad named entity: boxvH without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvH"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvH;",
+ "description": "Named entity: boxvH; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u256a"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvL",
+ "description": "Bad named entity: boxvL without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvL"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvL;",
+ "description": "Named entity: boxvL; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2561"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvR",
+ "description": "Bad named entity: boxvR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvR"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvR;",
+ "description": "Named entity: boxvR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u255e"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvh",
+ "description": "Bad named entity: boxvh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvh"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvh;",
+ "description": "Named entity: boxvh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u253c"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvl",
+ "description": "Bad named entity: boxvl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvl"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvl;",
+ "description": "Named entity: boxvl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2524"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvr",
+ "description": "Bad named entity: boxvr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&boxvr"
+ ]
+ ]
+ },
+ {
+ "input": "&boxvr;",
+ "description": "Named entity: boxvr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u251c"
+ ]
+ ]
+ },
+ {
+ "input": "&bprime",
+ "description": "Bad named entity: bprime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bprime"
+ ]
+ ]
+ },
+ {
+ "input": "&bprime;",
+ "description": "Named entity: bprime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2035"
+ ]
+ ]
+ },
+ {
+ "input": "&breve",
+ "description": "Bad named entity: breve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&breve"
+ ]
+ ]
+ },
+ {
+ "input": "&breve;",
+ "description": "Named entity: breve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02d8"
+ ]
+ ]
+ },
+ {
+ "input": "&brvbar",
+ "description": "Named entity: brvbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&brvbar;",
+ "description": "Named entity: brvbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a6"
+ ]
+ ]
+ },
+ {
+ "input": "&bscr",
+ "description": "Bad named entity: bscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bscr"
+ ]
+ ]
+ },
+ {
+ "input": "&bscr;",
+ "description": "Named entity: bscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb7"
+ ]
+ ]
+ },
+ {
+ "input": "&bsemi",
+ "description": "Bad named entity: bsemi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsemi"
+ ]
+ ]
+ },
+ {
+ "input": "&bsemi;",
+ "description": "Named entity: bsemi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u204f"
+ ]
+ ]
+ },
+ {
+ "input": "&bsim",
+ "description": "Bad named entity: bsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsim"
+ ]
+ ]
+ },
+ {
+ "input": "&bsim;",
+ "description": "Named entity: bsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223d"
+ ]
+ ]
+ },
+ {
+ "input": "&bsime",
+ "description": "Bad named entity: bsime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsime"
+ ]
+ ]
+ },
+ {
+ "input": "&bsime;",
+ "description": "Named entity: bsime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cd"
+ ]
+ ]
+ },
+ {
+ "input": "&bsol",
+ "description": "Bad named entity: bsol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsol"
+ ]
+ ]
+ },
+ {
+ "input": "&bsol;",
+ "description": "Named entity: bsol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\\"
+ ]
+ ]
+ },
+ {
+ "input": "&bsolb",
+ "description": "Bad named entity: bsolb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsolb"
+ ]
+ ]
+ },
+ {
+ "input": "&bsolb;",
+ "description": "Named entity: bsolb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c5"
+ ]
+ ]
+ },
+ {
+ "input": "&bsolhsub",
+ "description": "Bad named entity: bsolhsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bsolhsub"
+ ]
+ ]
+ },
+ {
+ "input": "&bsolhsub;",
+ "description": "Named entity: bsolhsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27c8"
+ ]
+ ]
+ },
+ {
+ "input": "&bull",
+ "description": "Bad named entity: bull without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bull"
+ ]
+ ]
+ },
+ {
+ "input": "&bull;",
+ "description": "Named entity: bull; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2022"
+ ]
+ ]
+ },
+ {
+ "input": "&bullet",
+ "description": "Bad named entity: bullet without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bullet"
+ ]
+ ]
+ },
+ {
+ "input": "&bullet;",
+ "description": "Named entity: bullet; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2022"
+ ]
+ ]
+ },
+ {
+ "input": "&bump",
+ "description": "Bad named entity: bump without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bump"
+ ]
+ ]
+ },
+ {
+ "input": "&bump;",
+ "description": "Named entity: bump; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224e"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpE",
+ "description": "Bad named entity: bumpE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bumpE"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpE;",
+ "description": "Named entity: bumpE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aae"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpe",
+ "description": "Bad named entity: bumpe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bumpe"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpe;",
+ "description": "Named entity: bumpe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224f"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpeq",
+ "description": "Bad named entity: bumpeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&bumpeq"
+ ]
+ ]
+ },
+ {
+ "input": "&bumpeq;",
+ "description": "Named entity: bumpeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224f"
+ ]
+ ]
+ },
+ {
+ "input": "&cacute",
+ "description": "Bad named entity: cacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cacute"
+ ]
+ ]
+ },
+ {
+ "input": "&cacute;",
+ "description": "Named entity: cacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0107"
+ ]
+ ]
+ },
+ {
+ "input": "&cap",
+ "description": "Bad named entity: cap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cap"
+ ]
+ ]
+ },
+ {
+ "input": "&cap;",
+ "description": "Named entity: cap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2229"
+ ]
+ ]
+ },
+ {
+ "input": "&capand",
+ "description": "Bad named entity: capand without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&capand"
+ ]
+ ]
+ },
+ {
+ "input": "&capand;",
+ "description": "Named entity: capand; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a44"
+ ]
+ ]
+ },
+ {
+ "input": "&capbrcup",
+ "description": "Bad named entity: capbrcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&capbrcup"
+ ]
+ ]
+ },
+ {
+ "input": "&capbrcup;",
+ "description": "Named entity: capbrcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a49"
+ ]
+ ]
+ },
+ {
+ "input": "&capcap",
+ "description": "Bad named entity: capcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&capcap"
+ ]
+ ]
+ },
+ {
+ "input": "&capcap;",
+ "description": "Named entity: capcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a4b"
+ ]
+ ]
+ },
+ {
+ "input": "&capcup",
+ "description": "Bad named entity: capcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&capcup"
+ ]
+ ]
+ },
+ {
+ "input": "&capcup;",
+ "description": "Named entity: capcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a47"
+ ]
+ ]
+ },
+ {
+ "input": "&capdot",
+ "description": "Bad named entity: capdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&capdot"
+ ]
+ ]
+ },
+ {
+ "input": "&capdot;",
+ "description": "Named entity: capdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a40"
+ ]
+ ]
+ },
+ {
+ "input": "&caps",
+ "description": "Bad named entity: caps without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&caps"
+ ]
+ ]
+ },
+ {
+ "input": "&caps;",
+ "description": "Named entity: caps; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2229\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&caret",
+ "description": "Bad named entity: caret without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&caret"
+ ]
+ ]
+ },
+ {
+ "input": "&caret;",
+ "description": "Named entity: caret; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2041"
+ ]
+ ]
+ },
+ {
+ "input": "&caron",
+ "description": "Bad named entity: caron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&caron"
+ ]
+ ]
+ },
+ {
+ "input": "&caron;",
+ "description": "Named entity: caron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02c7"
+ ]
+ ]
+ },
+ {
+ "input": "&ccaps",
+ "description": "Bad named entity: ccaps without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ccaps"
+ ]
+ ]
+ },
+ {
+ "input": "&ccaps;",
+ "description": "Named entity: ccaps; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a4d"
+ ]
+ ]
+ },
+ {
+ "input": "&ccaron",
+ "description": "Bad named entity: ccaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ccaron"
+ ]
+ ]
+ },
+ {
+ "input": "&ccaron;",
+ "description": "Named entity: ccaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010d"
+ ]
+ ]
+ },
+ {
+ "input": "&ccedil",
+ "description": "Named entity: ccedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&ccedil;",
+ "description": "Named entity: ccedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e7"
+ ]
+ ]
+ },
+ {
+ "input": "&ccirc",
+ "description": "Bad named entity: ccirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ccirc"
+ ]
+ ]
+ },
+ {
+ "input": "&ccirc;",
+ "description": "Named entity: ccirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0109"
+ ]
+ ]
+ },
+ {
+ "input": "&ccups",
+ "description": "Bad named entity: ccups without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ccups"
+ ]
+ ]
+ },
+ {
+ "input": "&ccups;",
+ "description": "Named entity: ccups; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a4c"
+ ]
+ ]
+ },
+ {
+ "input": "&ccupssm",
+ "description": "Bad named entity: ccupssm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ccupssm"
+ ]
+ ]
+ },
+ {
+ "input": "&ccupssm;",
+ "description": "Named entity: ccupssm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a50"
+ ]
+ ]
+ },
+ {
+ "input": "&cdot",
+ "description": "Bad named entity: cdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cdot"
+ ]
+ ]
+ },
+ {
+ "input": "&cdot;",
+ "description": "Named entity: cdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010b"
+ ]
+ ]
+ },
+ {
+ "input": "&cedil",
+ "description": "Named entity: cedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&cedil;",
+ "description": "Named entity: cedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b8"
+ ]
+ ]
+ },
+ {
+ "input": "&cemptyv",
+ "description": "Bad named entity: cemptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cemptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&cemptyv;",
+ "description": "Named entity: cemptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b2"
+ ]
+ ]
+ },
+ {
+ "input": "&cent",
+ "description": "Named entity: cent without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&cent;",
+ "description": "Named entity: cent; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a2"
+ ]
+ ]
+ },
+ {
+ "input": "&centerdot;",
+ "description": "Named entity: centerdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b7"
+ ]
+ ]
+ },
+ {
+ "input": "&cfr",
+ "description": "Bad named entity: cfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cfr"
+ ]
+ ]
+ },
+ {
+ "input": "&cfr;",
+ "description": "Named entity: cfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd20"
+ ]
+ ]
+ },
+ {
+ "input": "&chcy",
+ "description": "Bad named entity: chcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&chcy"
+ ]
+ ]
+ },
+ {
+ "input": "&chcy;",
+ "description": "Named entity: chcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0447"
+ ]
+ ]
+ },
+ {
+ "input": "&check",
+ "description": "Bad named entity: check without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&check"
+ ]
+ ]
+ },
+ {
+ "input": "&check;",
+ "description": "Named entity: check; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2713"
+ ]
+ ]
+ },
+ {
+ "input": "&checkmark",
+ "description": "Bad named entity: checkmark without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&checkmark"
+ ]
+ ]
+ },
+ {
+ "input": "&checkmark;",
+ "description": "Named entity: checkmark; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2713"
+ ]
+ ]
+ },
+ {
+ "input": "&chi",
+ "description": "Bad named entity: chi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&chi"
+ ]
+ ]
+ },
+ {
+ "input": "&chi;",
+ "description": "Named entity: chi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c7"
+ ]
+ ]
+ },
+ {
+ "input": "&cir",
+ "description": "Bad named entity: cir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cir"
+ ]
+ ]
+ },
+ {
+ "input": "&cir;",
+ "description": "Named entity: cir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25cb"
+ ]
+ ]
+ },
+ {
+ "input": "&cirE",
+ "description": "Bad named entity: cirE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cirE"
+ ]
+ ]
+ },
+ {
+ "input": "&cirE;",
+ "description": "Named entity: cirE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c3"
+ ]
+ ]
+ },
+ {
+ "input": "&circ",
+ "description": "Bad named entity: circ without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circ"
+ ]
+ ]
+ },
+ {
+ "input": "&circ;",
+ "description": "Named entity: circ; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02c6"
+ ]
+ ]
+ },
+ {
+ "input": "&circeq",
+ "description": "Bad named entity: circeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circeq"
+ ]
+ ]
+ },
+ {
+ "input": "&circeq;",
+ "description": "Named entity: circeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2257"
+ ]
+ ]
+ },
+ {
+ "input": "&circlearrowleft",
+ "description": "Bad named entity: circlearrowleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circlearrowleft"
+ ]
+ ]
+ },
+ {
+ "input": "&circlearrowleft;",
+ "description": "Named entity: circlearrowleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ba"
+ ]
+ ]
+ },
+ {
+ "input": "&circlearrowright",
+ "description": "Bad named entity: circlearrowright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circlearrowright"
+ ]
+ ]
+ },
+ {
+ "input": "&circlearrowright;",
+ "description": "Named entity: circlearrowright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bb"
+ ]
+ ]
+ },
+ {
+ "input": "&circledR",
+ "description": "Bad named entity: circledR without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circledR"
+ ]
+ ]
+ },
+ {
+ "input": "&circledR;",
+ "description": "Named entity: circledR; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ae"
+ ]
+ ]
+ },
+ {
+ "input": "&circledS",
+ "description": "Bad named entity: circledS without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circledS"
+ ]
+ ]
+ },
+ {
+ "input": "&circledS;",
+ "description": "Named entity: circledS; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u24c8"
+ ]
+ ]
+ },
+ {
+ "input": "&circledast",
+ "description": "Bad named entity: circledast without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circledast"
+ ]
+ ]
+ },
+ {
+ "input": "&circledast;",
+ "description": "Named entity: circledast; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229b"
+ ]
+ ]
+ },
+ {
+ "input": "&circledcirc",
+ "description": "Bad named entity: circledcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circledcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&circledcirc;",
+ "description": "Named entity: circledcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229a"
+ ]
+ ]
+ },
+ {
+ "input": "&circleddash",
+ "description": "Bad named entity: circleddash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&circleddash"
+ ]
+ ]
+ },
+ {
+ "input": "&circleddash;",
+ "description": "Named entity: circleddash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229d"
+ ]
+ ]
+ },
+ {
+ "input": "&cire",
+ "description": "Bad named entity: cire without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cire"
+ ]
+ ]
+ },
+ {
+ "input": "&cire;",
+ "description": "Named entity: cire; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2257"
+ ]
+ ]
+ },
+ {
+ "input": "&cirfnint",
+ "description": "Bad named entity: cirfnint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cirfnint"
+ ]
+ ]
+ },
+ {
+ "input": "&cirfnint;",
+ "description": "Named entity: cirfnint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a10"
+ ]
+ ]
+ },
+ {
+ "input": "&cirmid",
+ "description": "Bad named entity: cirmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cirmid"
+ ]
+ ]
+ },
+ {
+ "input": "&cirmid;",
+ "description": "Named entity: cirmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aef"
+ ]
+ ]
+ },
+ {
+ "input": "&cirscir",
+ "description": "Bad named entity: cirscir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cirscir"
+ ]
+ ]
+ },
+ {
+ "input": "&cirscir;",
+ "description": "Named entity: cirscir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c2"
+ ]
+ ]
+ },
+ {
+ "input": "&clubs",
+ "description": "Bad named entity: clubs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&clubs"
+ ]
+ ]
+ },
+ {
+ "input": "&clubs;",
+ "description": "Named entity: clubs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2663"
+ ]
+ ]
+ },
+ {
+ "input": "&clubsuit",
+ "description": "Bad named entity: clubsuit without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&clubsuit"
+ ]
+ ]
+ },
+ {
+ "input": "&clubsuit;",
+ "description": "Named entity: clubsuit; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2663"
+ ]
+ ]
+ },
+ {
+ "input": "&colon",
+ "description": "Bad named entity: colon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&colon"
+ ]
+ ]
+ },
+ {
+ "input": "&colon;",
+ "description": "Named entity: colon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ":"
+ ]
+ ]
+ },
+ {
+ "input": "&colone",
+ "description": "Bad named entity: colone without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&colone"
+ ]
+ ]
+ },
+ {
+ "input": "&colone;",
+ "description": "Named entity: colone; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2254"
+ ]
+ ]
+ },
+ {
+ "input": "&coloneq",
+ "description": "Bad named entity: coloneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&coloneq"
+ ]
+ ]
+ },
+ {
+ "input": "&coloneq;",
+ "description": "Named entity: coloneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2254"
+ ]
+ ]
+ },
+ {
+ "input": "&comma",
+ "description": "Bad named entity: comma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&comma"
+ ]
+ ]
+ },
+ {
+ "input": "&comma;",
+ "description": "Named entity: comma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ","
+ ]
+ ]
+ },
+ {
+ "input": "&commat",
+ "description": "Bad named entity: commat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&commat"
+ ]
+ ]
+ },
+ {
+ "input": "&commat;",
+ "description": "Named entity: commat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "@"
+ ]
+ ]
+ },
+ {
+ "input": "&comp",
+ "description": "Bad named entity: comp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&comp"
+ ]
+ ]
+ },
+ {
+ "input": "&comp;",
+ "description": "Named entity: comp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2201"
+ ]
+ ]
+ },
+ {
+ "input": "&compfn",
+ "description": "Bad named entity: compfn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&compfn"
+ ]
+ ]
+ },
+ {
+ "input": "&compfn;",
+ "description": "Named entity: compfn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2218"
+ ]
+ ]
+ },
+ {
+ "input": "&complement",
+ "description": "Bad named entity: complement without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&complement"
+ ]
+ ]
+ },
+ {
+ "input": "&complement;",
+ "description": "Named entity: complement; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2201"
+ ]
+ ]
+ },
+ {
+ "input": "&complexes",
+ "description": "Bad named entity: complexes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&complexes"
+ ]
+ ]
+ },
+ {
+ "input": "&complexes;",
+ "description": "Named entity: complexes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2102"
+ ]
+ ]
+ },
+ {
+ "input": "&cong",
+ "description": "Bad named entity: cong without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cong"
+ ]
+ ]
+ },
+ {
+ "input": "&cong;",
+ "description": "Named entity: cong; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2245"
+ ]
+ ]
+ },
+ {
+ "input": "&congdot",
+ "description": "Bad named entity: congdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&congdot"
+ ]
+ ]
+ },
+ {
+ "input": "&congdot;",
+ "description": "Named entity: congdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a6d"
+ ]
+ ]
+ },
+ {
+ "input": "&conint",
+ "description": "Bad named entity: conint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&conint"
+ ]
+ ]
+ },
+ {
+ "input": "&conint;",
+ "description": "Named entity: conint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222e"
+ ]
+ ]
+ },
+ {
+ "input": "&copf",
+ "description": "Bad named entity: copf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&copf"
+ ]
+ ]
+ },
+ {
+ "input": "&copf;",
+ "description": "Named entity: copf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd54"
+ ]
+ ]
+ },
+ {
+ "input": "&coprod",
+ "description": "Bad named entity: coprod without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&coprod"
+ ]
+ ]
+ },
+ {
+ "input": "&coprod;",
+ "description": "Named entity: coprod; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2210"
+ ]
+ ]
+ },
+ {
+ "input": "&copy",
+ "description": "Named entity: copy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&copy;",
+ "description": "Named entity: copy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a9"
+ ]
+ ]
+ },
+ {
+ "input": "&copysr;",
+ "description": "Named entity: copysr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2117"
+ ]
+ ]
+ },
+ {
+ "input": "&crarr",
+ "description": "Bad named entity: crarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&crarr"
+ ]
+ ]
+ },
+ {
+ "input": "&crarr;",
+ "description": "Named entity: crarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b5"
+ ]
+ ]
+ },
+ {
+ "input": "&cross",
+ "description": "Bad named entity: cross without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cross"
+ ]
+ ]
+ },
+ {
+ "input": "&cross;",
+ "description": "Named entity: cross; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2717"
+ ]
+ ]
+ },
+ {
+ "input": "&cscr",
+ "description": "Bad named entity: cscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cscr"
+ ]
+ ]
+ },
+ {
+ "input": "&cscr;",
+ "description": "Named entity: cscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb8"
+ ]
+ ]
+ },
+ {
+ "input": "&csub",
+ "description": "Bad named entity: csub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&csub"
+ ]
+ ]
+ },
+ {
+ "input": "&csub;",
+ "description": "Named entity: csub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acf"
+ ]
+ ]
+ },
+ {
+ "input": "&csube",
+ "description": "Bad named entity: csube without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&csube"
+ ]
+ ]
+ },
+ {
+ "input": "&csube;",
+ "description": "Named entity: csube; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad1"
+ ]
+ ]
+ },
+ {
+ "input": "&csup",
+ "description": "Bad named entity: csup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&csup"
+ ]
+ ]
+ },
+ {
+ "input": "&csup;",
+ "description": "Named entity: csup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad0"
+ ]
+ ]
+ },
+ {
+ "input": "&csupe",
+ "description": "Bad named entity: csupe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&csupe"
+ ]
+ ]
+ },
+ {
+ "input": "&csupe;",
+ "description": "Named entity: csupe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad2"
+ ]
+ ]
+ },
+ {
+ "input": "&ctdot",
+ "description": "Bad named entity: ctdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ctdot"
+ ]
+ ]
+ },
+ {
+ "input": "&ctdot;",
+ "description": "Named entity: ctdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ef"
+ ]
+ ]
+ },
+ {
+ "input": "&cudarrl",
+ "description": "Bad named entity: cudarrl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cudarrl"
+ ]
+ ]
+ },
+ {
+ "input": "&cudarrl;",
+ "description": "Named entity: cudarrl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2938"
+ ]
+ ]
+ },
+ {
+ "input": "&cudarrr",
+ "description": "Bad named entity: cudarrr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cudarrr"
+ ]
+ ]
+ },
+ {
+ "input": "&cudarrr;",
+ "description": "Named entity: cudarrr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2935"
+ ]
+ ]
+ },
+ {
+ "input": "&cuepr",
+ "description": "Bad named entity: cuepr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cuepr"
+ ]
+ ]
+ },
+ {
+ "input": "&cuepr;",
+ "description": "Named entity: cuepr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22de"
+ ]
+ ]
+ },
+ {
+ "input": "&cuesc",
+ "description": "Bad named entity: cuesc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cuesc"
+ ]
+ ]
+ },
+ {
+ "input": "&cuesc;",
+ "description": "Named entity: cuesc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22df"
+ ]
+ ]
+ },
+ {
+ "input": "&cularr",
+ "description": "Bad named entity: cularr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cularr"
+ ]
+ ]
+ },
+ {
+ "input": "&cularr;",
+ "description": "Named entity: cularr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b6"
+ ]
+ ]
+ },
+ {
+ "input": "&cularrp",
+ "description": "Bad named entity: cularrp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cularrp"
+ ]
+ ]
+ },
+ {
+ "input": "&cularrp;",
+ "description": "Named entity: cularrp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u293d"
+ ]
+ ]
+ },
+ {
+ "input": "&cup",
+ "description": "Bad named entity: cup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cup"
+ ]
+ ]
+ },
+ {
+ "input": "&cup;",
+ "description": "Named entity: cup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222a"
+ ]
+ ]
+ },
+ {
+ "input": "&cupbrcap",
+ "description": "Bad named entity: cupbrcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cupbrcap"
+ ]
+ ]
+ },
+ {
+ "input": "&cupbrcap;",
+ "description": "Named entity: cupbrcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a48"
+ ]
+ ]
+ },
+ {
+ "input": "&cupcap",
+ "description": "Bad named entity: cupcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cupcap"
+ ]
+ ]
+ },
+ {
+ "input": "&cupcap;",
+ "description": "Named entity: cupcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a46"
+ ]
+ ]
+ },
+ {
+ "input": "&cupcup",
+ "description": "Bad named entity: cupcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cupcup"
+ ]
+ ]
+ },
+ {
+ "input": "&cupcup;",
+ "description": "Named entity: cupcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a4a"
+ ]
+ ]
+ },
+ {
+ "input": "&cupdot",
+ "description": "Bad named entity: cupdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cupdot"
+ ]
+ ]
+ },
+ {
+ "input": "&cupdot;",
+ "description": "Named entity: cupdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228d"
+ ]
+ ]
+ },
+ {
+ "input": "&cupor",
+ "description": "Bad named entity: cupor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cupor"
+ ]
+ ]
+ },
+ {
+ "input": "&cupor;",
+ "description": "Named entity: cupor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a45"
+ ]
+ ]
+ },
+ {
+ "input": "&cups",
+ "description": "Bad named entity: cups without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cups"
+ ]
+ ]
+ },
+ {
+ "input": "&cups;",
+ "description": "Named entity: cups; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222a\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&curarr",
+ "description": "Bad named entity: curarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curarr"
+ ]
+ ]
+ },
+ {
+ "input": "&curarr;",
+ "description": "Named entity: curarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b7"
+ ]
+ ]
+ },
+ {
+ "input": "&curarrm",
+ "description": "Bad named entity: curarrm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curarrm"
+ ]
+ ]
+ },
+ {
+ "input": "&curarrm;",
+ "description": "Named entity: curarrm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u293c"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyeqprec",
+ "description": "Bad named entity: curlyeqprec without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curlyeqprec"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyeqprec;",
+ "description": "Named entity: curlyeqprec; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22de"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyeqsucc",
+ "description": "Bad named entity: curlyeqsucc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curlyeqsucc"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyeqsucc;",
+ "description": "Named entity: curlyeqsucc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22df"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyvee",
+ "description": "Bad named entity: curlyvee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curlyvee"
+ ]
+ ]
+ },
+ {
+ "input": "&curlyvee;",
+ "description": "Named entity: curlyvee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ce"
+ ]
+ ]
+ },
+ {
+ "input": "&curlywedge",
+ "description": "Bad named entity: curlywedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curlywedge"
+ ]
+ ]
+ },
+ {
+ "input": "&curlywedge;",
+ "description": "Named entity: curlywedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cf"
+ ]
+ ]
+ },
+ {
+ "input": "&curren",
+ "description": "Named entity: curren without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&curren;",
+ "description": "Named entity: curren; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a4"
+ ]
+ ]
+ },
+ {
+ "input": "&curvearrowleft",
+ "description": "Bad named entity: curvearrowleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curvearrowleft"
+ ]
+ ]
+ },
+ {
+ "input": "&curvearrowleft;",
+ "description": "Named entity: curvearrowleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b6"
+ ]
+ ]
+ },
+ {
+ "input": "&curvearrowright",
+ "description": "Bad named entity: curvearrowright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&curvearrowright"
+ ]
+ ]
+ },
+ {
+ "input": "&curvearrowright;",
+ "description": "Named entity: curvearrowright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b7"
+ ]
+ ]
+ },
+ {
+ "input": "&cuvee",
+ "description": "Bad named entity: cuvee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cuvee"
+ ]
+ ]
+ },
+ {
+ "input": "&cuvee;",
+ "description": "Named entity: cuvee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ce"
+ ]
+ ]
+ },
+ {
+ "input": "&cuwed",
+ "description": "Bad named entity: cuwed without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cuwed"
+ ]
+ ]
+ },
+ {
+ "input": "&cuwed;",
+ "description": "Named entity: cuwed; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cf"
+ ]
+ ]
+ },
+ {
+ "input": "&cwconint",
+ "description": "Bad named entity: cwconint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cwconint"
+ ]
+ ]
+ },
+ {
+ "input": "&cwconint;",
+ "description": "Named entity: cwconint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2232"
+ ]
+ ]
+ },
+ {
+ "input": "&cwint",
+ "description": "Bad named entity: cwint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cwint"
+ ]
+ ]
+ },
+ {
+ "input": "&cwint;",
+ "description": "Named entity: cwint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2231"
+ ]
+ ]
+ },
+ {
+ "input": "&cylcty",
+ "description": "Bad named entity: cylcty without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&cylcty"
+ ]
+ ]
+ },
+ {
+ "input": "&cylcty;",
+ "description": "Named entity: cylcty; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u232d"
+ ]
+ ]
+ },
+ {
+ "input": "&dArr",
+ "description": "Bad named entity: dArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dArr"
+ ]
+ ]
+ },
+ {
+ "input": "&dArr;",
+ "description": "Named entity: dArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d3"
+ ]
+ ]
+ },
+ {
+ "input": "&dHar",
+ "description": "Bad named entity: dHar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dHar"
+ ]
+ ]
+ },
+ {
+ "input": "&dHar;",
+ "description": "Named entity: dHar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2965"
+ ]
+ ]
+ },
+ {
+ "input": "&dagger",
+ "description": "Bad named entity: dagger without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dagger"
+ ]
+ ]
+ },
+ {
+ "input": "&dagger;",
+ "description": "Named entity: dagger; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2020"
+ ]
+ ]
+ },
+ {
+ "input": "&daleth",
+ "description": "Bad named entity: daleth without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&daleth"
+ ]
+ ]
+ },
+ {
+ "input": "&daleth;",
+ "description": "Named entity: daleth; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2138"
+ ]
+ ]
+ },
+ {
+ "input": "&darr",
+ "description": "Bad named entity: darr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&darr"
+ ]
+ ]
+ },
+ {
+ "input": "&darr;",
+ "description": "Named entity: darr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2193"
+ ]
+ ]
+ },
+ {
+ "input": "&dash",
+ "description": "Bad named entity: dash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dash"
+ ]
+ ]
+ },
+ {
+ "input": "&dash;",
+ "description": "Named entity: dash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2010"
+ ]
+ ]
+ },
+ {
+ "input": "&dashv",
+ "description": "Bad named entity: dashv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dashv"
+ ]
+ ]
+ },
+ {
+ "input": "&dashv;",
+ "description": "Named entity: dashv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a3"
+ ]
+ ]
+ },
+ {
+ "input": "&dbkarow",
+ "description": "Bad named entity: dbkarow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dbkarow"
+ ]
+ ]
+ },
+ {
+ "input": "&dbkarow;",
+ "description": "Named entity: dbkarow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290f"
+ ]
+ ]
+ },
+ {
+ "input": "&dblac",
+ "description": "Bad named entity: dblac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dblac"
+ ]
+ ]
+ },
+ {
+ "input": "&dblac;",
+ "description": "Named entity: dblac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02dd"
+ ]
+ ]
+ },
+ {
+ "input": "&dcaron",
+ "description": "Bad named entity: dcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&dcaron;",
+ "description": "Named entity: dcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u010f"
+ ]
+ ]
+ },
+ {
+ "input": "&dcy",
+ "description": "Bad named entity: dcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dcy"
+ ]
+ ]
+ },
+ {
+ "input": "&dcy;",
+ "description": "Named entity: dcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0434"
+ ]
+ ]
+ },
+ {
+ "input": "&dd",
+ "description": "Bad named entity: dd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dd"
+ ]
+ ]
+ },
+ {
+ "input": "&dd;",
+ "description": "Named entity: dd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2146"
+ ]
+ ]
+ },
+ {
+ "input": "&ddagger",
+ "description": "Bad named entity: ddagger without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ddagger"
+ ]
+ ]
+ },
+ {
+ "input": "&ddagger;",
+ "description": "Named entity: ddagger; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2021"
+ ]
+ ]
+ },
+ {
+ "input": "&ddarr",
+ "description": "Bad named entity: ddarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ddarr"
+ ]
+ ]
+ },
+ {
+ "input": "&ddarr;",
+ "description": "Named entity: ddarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ca"
+ ]
+ ]
+ },
+ {
+ "input": "&ddotseq",
+ "description": "Bad named entity: ddotseq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ddotseq"
+ ]
+ ]
+ },
+ {
+ "input": "&ddotseq;",
+ "description": "Named entity: ddotseq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a77"
+ ]
+ ]
+ },
+ {
+ "input": "&deg",
+ "description": "Named entity: deg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&deg;",
+ "description": "Named entity: deg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b0"
+ ]
+ ]
+ },
+ {
+ "input": "&delta",
+ "description": "Bad named entity: delta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&delta"
+ ]
+ ]
+ },
+ {
+ "input": "&delta;",
+ "description": "Named entity: delta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b4"
+ ]
+ ]
+ },
+ {
+ "input": "&demptyv",
+ "description": "Bad named entity: demptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&demptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&demptyv;",
+ "description": "Named entity: demptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b1"
+ ]
+ ]
+ },
+ {
+ "input": "&dfisht",
+ "description": "Bad named entity: dfisht without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dfisht"
+ ]
+ ]
+ },
+ {
+ "input": "&dfisht;",
+ "description": "Named entity: dfisht; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u297f"
+ ]
+ ]
+ },
+ {
+ "input": "&dfr",
+ "description": "Bad named entity: dfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dfr"
+ ]
+ ]
+ },
+ {
+ "input": "&dfr;",
+ "description": "Named entity: dfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd21"
+ ]
+ ]
+ },
+ {
+ "input": "&dharl",
+ "description": "Bad named entity: dharl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dharl"
+ ]
+ ]
+ },
+ {
+ "input": "&dharl;",
+ "description": "Named entity: dharl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c3"
+ ]
+ ]
+ },
+ {
+ "input": "&dharr",
+ "description": "Bad named entity: dharr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dharr"
+ ]
+ ]
+ },
+ {
+ "input": "&dharr;",
+ "description": "Named entity: dharr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c2"
+ ]
+ ]
+ },
+ {
+ "input": "&diam",
+ "description": "Bad named entity: diam without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&diam"
+ ]
+ ]
+ },
+ {
+ "input": "&diam;",
+ "description": "Named entity: diam; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c4"
+ ]
+ ]
+ },
+ {
+ "input": "&diamond",
+ "description": "Bad named entity: diamond without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&diamond"
+ ]
+ ]
+ },
+ {
+ "input": "&diamond;",
+ "description": "Named entity: diamond; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c4"
+ ]
+ ]
+ },
+ {
+ "input": "&diamondsuit",
+ "description": "Bad named entity: diamondsuit without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&diamondsuit"
+ ]
+ ]
+ },
+ {
+ "input": "&diamondsuit;",
+ "description": "Named entity: diamondsuit; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2666"
+ ]
+ ]
+ },
+ {
+ "input": "&diams",
+ "description": "Bad named entity: diams without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&diams"
+ ]
+ ]
+ },
+ {
+ "input": "&diams;",
+ "description": "Named entity: diams; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2666"
+ ]
+ ]
+ },
+ {
+ "input": "&die",
+ "description": "Bad named entity: die without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&die"
+ ]
+ ]
+ },
+ {
+ "input": "&die;",
+ "description": "Named entity: die; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a8"
+ ]
+ ]
+ },
+ {
+ "input": "&digamma",
+ "description": "Bad named entity: digamma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&digamma"
+ ]
+ ]
+ },
+ {
+ "input": "&digamma;",
+ "description": "Named entity: digamma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03dd"
+ ]
+ ]
+ },
+ {
+ "input": "&disin",
+ "description": "Bad named entity: disin without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&disin"
+ ]
+ ]
+ },
+ {
+ "input": "&disin;",
+ "description": "Named entity: disin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f2"
+ ]
+ ]
+ },
+ {
+ "input": "&div",
+ "description": "Bad named entity: div without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&div"
+ ]
+ ]
+ },
+ {
+ "input": "&div;",
+ "description": "Named entity: div; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f7"
+ ]
+ ]
+ },
+ {
+ "input": "&divide",
+ "description": "Named entity: divide without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&divide;",
+ "description": "Named entity: divide; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f7"
+ ]
+ ]
+ },
+ {
+ "input": "&divideontimes;",
+ "description": "Named entity: divideontimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c7"
+ ]
+ ]
+ },
+ {
+ "input": "&divonx",
+ "description": "Bad named entity: divonx without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&divonx"
+ ]
+ ]
+ },
+ {
+ "input": "&divonx;",
+ "description": "Named entity: divonx; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c7"
+ ]
+ ]
+ },
+ {
+ "input": "&djcy",
+ "description": "Bad named entity: djcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&djcy"
+ ]
+ ]
+ },
+ {
+ "input": "&djcy;",
+ "description": "Named entity: djcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0452"
+ ]
+ ]
+ },
+ {
+ "input": "&dlcorn",
+ "description": "Bad named entity: dlcorn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dlcorn"
+ ]
+ ]
+ },
+ {
+ "input": "&dlcorn;",
+ "description": "Named entity: dlcorn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231e"
+ ]
+ ]
+ },
+ {
+ "input": "&dlcrop",
+ "description": "Bad named entity: dlcrop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dlcrop"
+ ]
+ ]
+ },
+ {
+ "input": "&dlcrop;",
+ "description": "Named entity: dlcrop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230d"
+ ]
+ ]
+ },
+ {
+ "input": "&dollar",
+ "description": "Bad named entity: dollar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dollar"
+ ]
+ ]
+ },
+ {
+ "input": "&dollar;",
+ "description": "Named entity: dollar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "$"
+ ]
+ ]
+ },
+ {
+ "input": "&dopf",
+ "description": "Bad named entity: dopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dopf"
+ ]
+ ]
+ },
+ {
+ "input": "&dopf;",
+ "description": "Named entity: dopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd55"
+ ]
+ ]
+ },
+ {
+ "input": "&dot",
+ "description": "Bad named entity: dot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dot"
+ ]
+ ]
+ },
+ {
+ "input": "&dot;",
+ "description": "Named entity: dot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02d9"
+ ]
+ ]
+ },
+ {
+ "input": "&doteq",
+ "description": "Bad named entity: doteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&doteq"
+ ]
+ ]
+ },
+ {
+ "input": "&doteq;",
+ "description": "Named entity: doteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2250"
+ ]
+ ]
+ },
+ {
+ "input": "&doteqdot",
+ "description": "Bad named entity: doteqdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&doteqdot"
+ ]
+ ]
+ },
+ {
+ "input": "&doteqdot;",
+ "description": "Named entity: doteqdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2251"
+ ]
+ ]
+ },
+ {
+ "input": "&dotminus",
+ "description": "Bad named entity: dotminus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dotminus"
+ ]
+ ]
+ },
+ {
+ "input": "&dotminus;",
+ "description": "Named entity: dotminus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2238"
+ ]
+ ]
+ },
+ {
+ "input": "&dotplus",
+ "description": "Bad named entity: dotplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dotplus"
+ ]
+ ]
+ },
+ {
+ "input": "&dotplus;",
+ "description": "Named entity: dotplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2214"
+ ]
+ ]
+ },
+ {
+ "input": "&dotsquare",
+ "description": "Bad named entity: dotsquare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dotsquare"
+ ]
+ ]
+ },
+ {
+ "input": "&dotsquare;",
+ "description": "Named entity: dotsquare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a1"
+ ]
+ ]
+ },
+ {
+ "input": "&doublebarwedge",
+ "description": "Bad named entity: doublebarwedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&doublebarwedge"
+ ]
+ ]
+ },
+ {
+ "input": "&doublebarwedge;",
+ "description": "Named entity: doublebarwedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2306"
+ ]
+ ]
+ },
+ {
+ "input": "&downarrow",
+ "description": "Bad named entity: downarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&downarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&downarrow;",
+ "description": "Named entity: downarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2193"
+ ]
+ ]
+ },
+ {
+ "input": "&downdownarrows",
+ "description": "Bad named entity: downdownarrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&downdownarrows"
+ ]
+ ]
+ },
+ {
+ "input": "&downdownarrows;",
+ "description": "Named entity: downdownarrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ca"
+ ]
+ ]
+ },
+ {
+ "input": "&downharpoonleft",
+ "description": "Bad named entity: downharpoonleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&downharpoonleft"
+ ]
+ ]
+ },
+ {
+ "input": "&downharpoonleft;",
+ "description": "Named entity: downharpoonleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c3"
+ ]
+ ]
+ },
+ {
+ "input": "&downharpoonright",
+ "description": "Bad named entity: downharpoonright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&downharpoonright"
+ ]
+ ]
+ },
+ {
+ "input": "&downharpoonright;",
+ "description": "Named entity: downharpoonright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c2"
+ ]
+ ]
+ },
+ {
+ "input": "&drbkarow",
+ "description": "Bad named entity: drbkarow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&drbkarow"
+ ]
+ ]
+ },
+ {
+ "input": "&drbkarow;",
+ "description": "Named entity: drbkarow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2910"
+ ]
+ ]
+ },
+ {
+ "input": "&drcorn",
+ "description": "Bad named entity: drcorn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&drcorn"
+ ]
+ ]
+ },
+ {
+ "input": "&drcorn;",
+ "description": "Named entity: drcorn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231f"
+ ]
+ ]
+ },
+ {
+ "input": "&drcrop",
+ "description": "Bad named entity: drcrop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&drcrop"
+ ]
+ ]
+ },
+ {
+ "input": "&drcrop;",
+ "description": "Named entity: drcrop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230c"
+ ]
+ ]
+ },
+ {
+ "input": "&dscr",
+ "description": "Bad named entity: dscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dscr"
+ ]
+ ]
+ },
+ {
+ "input": "&dscr;",
+ "description": "Named entity: dscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcb9"
+ ]
+ ]
+ },
+ {
+ "input": "&dscy",
+ "description": "Bad named entity: dscy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dscy"
+ ]
+ ]
+ },
+ {
+ "input": "&dscy;",
+ "description": "Named entity: dscy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0455"
+ ]
+ ]
+ },
+ {
+ "input": "&dsol",
+ "description": "Bad named entity: dsol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dsol"
+ ]
+ ]
+ },
+ {
+ "input": "&dsol;",
+ "description": "Named entity: dsol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29f6"
+ ]
+ ]
+ },
+ {
+ "input": "&dstrok",
+ "description": "Bad named entity: dstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&dstrok;",
+ "description": "Named entity: dstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0111"
+ ]
+ ]
+ },
+ {
+ "input": "&dtdot",
+ "description": "Bad named entity: dtdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dtdot"
+ ]
+ ]
+ },
+ {
+ "input": "&dtdot;",
+ "description": "Named entity: dtdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f1"
+ ]
+ ]
+ },
+ {
+ "input": "&dtri",
+ "description": "Bad named entity: dtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dtri"
+ ]
+ ]
+ },
+ {
+ "input": "&dtri;",
+ "description": "Named entity: dtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25bf"
+ ]
+ ]
+ },
+ {
+ "input": "&dtrif",
+ "description": "Bad named entity: dtrif without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dtrif"
+ ]
+ ]
+ },
+ {
+ "input": "&dtrif;",
+ "description": "Named entity: dtrif; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25be"
+ ]
+ ]
+ },
+ {
+ "input": "&duarr",
+ "description": "Bad named entity: duarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&duarr"
+ ]
+ ]
+ },
+ {
+ "input": "&duarr;",
+ "description": "Named entity: duarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21f5"
+ ]
+ ]
+ },
+ {
+ "input": "&duhar",
+ "description": "Bad named entity: duhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&duhar"
+ ]
+ ]
+ },
+ {
+ "input": "&duhar;",
+ "description": "Named entity: duhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296f"
+ ]
+ ]
+ },
+ {
+ "input": "&dwangle",
+ "description": "Bad named entity: dwangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dwangle"
+ ]
+ ]
+ },
+ {
+ "input": "&dwangle;",
+ "description": "Named entity: dwangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a6"
+ ]
+ ]
+ },
+ {
+ "input": "&dzcy",
+ "description": "Bad named entity: dzcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dzcy"
+ ]
+ ]
+ },
+ {
+ "input": "&dzcy;",
+ "description": "Named entity: dzcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u045f"
+ ]
+ ]
+ },
+ {
+ "input": "&dzigrarr",
+ "description": "Bad named entity: dzigrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&dzigrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&dzigrarr;",
+ "description": "Named entity: dzigrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27ff"
+ ]
+ ]
+ },
+ {
+ "input": "&eDDot",
+ "description": "Bad named entity: eDDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eDDot"
+ ]
+ ]
+ },
+ {
+ "input": "&eDDot;",
+ "description": "Named entity: eDDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a77"
+ ]
+ ]
+ },
+ {
+ "input": "&eDot",
+ "description": "Bad named entity: eDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eDot"
+ ]
+ ]
+ },
+ {
+ "input": "&eDot;",
+ "description": "Named entity: eDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2251"
+ ]
+ ]
+ },
+ {
+ "input": "&eacute",
+ "description": "Named entity: eacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&eacute;",
+ "description": "Named entity: eacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e9"
+ ]
+ ]
+ },
+ {
+ "input": "&easter",
+ "description": "Bad named entity: easter without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&easter"
+ ]
+ ]
+ },
+ {
+ "input": "&easter;",
+ "description": "Named entity: easter; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a6e"
+ ]
+ ]
+ },
+ {
+ "input": "&ecaron",
+ "description": "Bad named entity: ecaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ecaron"
+ ]
+ ]
+ },
+ {
+ "input": "&ecaron;",
+ "description": "Named entity: ecaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011b"
+ ]
+ ]
+ },
+ {
+ "input": "&ecir",
+ "description": "Bad named entity: ecir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ecir"
+ ]
+ ]
+ },
+ {
+ "input": "&ecir;",
+ "description": "Named entity: ecir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2256"
+ ]
+ ]
+ },
+ {
+ "input": "&ecirc",
+ "description": "Named entity: ecirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ea"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&ecirc;",
+ "description": "Named entity: ecirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ea"
+ ]
+ ]
+ },
+ {
+ "input": "&ecolon",
+ "description": "Bad named entity: ecolon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ecolon"
+ ]
+ ]
+ },
+ {
+ "input": "&ecolon;",
+ "description": "Named entity: ecolon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2255"
+ ]
+ ]
+ },
+ {
+ "input": "&ecy",
+ "description": "Bad named entity: ecy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ecy"
+ ]
+ ]
+ },
+ {
+ "input": "&ecy;",
+ "description": "Named entity: ecy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044d"
+ ]
+ ]
+ },
+ {
+ "input": "&edot",
+ "description": "Bad named entity: edot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&edot"
+ ]
+ ]
+ },
+ {
+ "input": "&edot;",
+ "description": "Named entity: edot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0117"
+ ]
+ ]
+ },
+ {
+ "input": "&ee",
+ "description": "Bad named entity: ee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ee"
+ ]
+ ]
+ },
+ {
+ "input": "&ee;",
+ "description": "Named entity: ee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2147"
+ ]
+ ]
+ },
+ {
+ "input": "&efDot",
+ "description": "Bad named entity: efDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&efDot"
+ ]
+ ]
+ },
+ {
+ "input": "&efDot;",
+ "description": "Named entity: efDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2252"
+ ]
+ ]
+ },
+ {
+ "input": "&efr",
+ "description": "Bad named entity: efr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&efr"
+ ]
+ ]
+ },
+ {
+ "input": "&efr;",
+ "description": "Named entity: efr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd22"
+ ]
+ ]
+ },
+ {
+ "input": "&eg",
+ "description": "Bad named entity: eg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eg"
+ ]
+ ]
+ },
+ {
+ "input": "&eg;",
+ "description": "Named entity: eg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a9a"
+ ]
+ ]
+ },
+ {
+ "input": "&egrave",
+ "description": "Named entity: egrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&egrave;",
+ "description": "Named entity: egrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00e8"
+ ]
+ ]
+ },
+ {
+ "input": "&egs",
+ "description": "Bad named entity: egs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&egs"
+ ]
+ ]
+ },
+ {
+ "input": "&egs;",
+ "description": "Named entity: egs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a96"
+ ]
+ ]
+ },
+ {
+ "input": "&egsdot",
+ "description": "Bad named entity: egsdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&egsdot"
+ ]
+ ]
+ },
+ {
+ "input": "&egsdot;",
+ "description": "Named entity: egsdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a98"
+ ]
+ ]
+ },
+ {
+ "input": "&el",
+ "description": "Bad named entity: el without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&el"
+ ]
+ ]
+ },
+ {
+ "input": "&el;",
+ "description": "Named entity: el; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a99"
+ ]
+ ]
+ },
+ {
+ "input": "&elinters",
+ "description": "Bad named entity: elinters without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&elinters"
+ ]
+ ]
+ },
+ {
+ "input": "&elinters;",
+ "description": "Named entity: elinters; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23e7"
+ ]
+ ]
+ },
+ {
+ "input": "&ell",
+ "description": "Bad named entity: ell without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ell"
+ ]
+ ]
+ },
+ {
+ "input": "&ell;",
+ "description": "Named entity: ell; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2113"
+ ]
+ ]
+ },
+ {
+ "input": "&els",
+ "description": "Bad named entity: els without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&els"
+ ]
+ ]
+ },
+ {
+ "input": "&els;",
+ "description": "Named entity: els; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a95"
+ ]
+ ]
+ },
+ {
+ "input": "&elsdot",
+ "description": "Bad named entity: elsdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&elsdot"
+ ]
+ ]
+ },
+ {
+ "input": "&elsdot;",
+ "description": "Named entity: elsdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a97"
+ ]
+ ]
+ },
+ {
+ "input": "&emacr",
+ "description": "Bad named entity: emacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emacr"
+ ]
+ ]
+ },
+ {
+ "input": "&emacr;",
+ "description": "Named entity: emacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0113"
+ ]
+ ]
+ },
+ {
+ "input": "&empty",
+ "description": "Bad named entity: empty without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&empty"
+ ]
+ ]
+ },
+ {
+ "input": "&empty;",
+ "description": "Named entity: empty; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2205"
+ ]
+ ]
+ },
+ {
+ "input": "&emptyset",
+ "description": "Bad named entity: emptyset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emptyset"
+ ]
+ ]
+ },
+ {
+ "input": "&emptyset;",
+ "description": "Named entity: emptyset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2205"
+ ]
+ ]
+ },
+ {
+ "input": "&emptyv",
+ "description": "Bad named entity: emptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&emptyv;",
+ "description": "Named entity: emptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2205"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp",
+ "description": "Bad named entity: emsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emsp"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp13",
+ "description": "Bad named entity: emsp13 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emsp13"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp13;",
+ "description": "Named entity: emsp13; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2004"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp14",
+ "description": "Bad named entity: emsp14 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&emsp14"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp14;",
+ "description": "Named entity: emsp14; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2005"
+ ]
+ ]
+ },
+ {
+ "input": "&emsp;",
+ "description": "Named entity: emsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2003"
+ ]
+ ]
+ },
+ {
+ "input": "&eng",
+ "description": "Bad named entity: eng without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eng"
+ ]
+ ]
+ },
+ {
+ "input": "&eng;",
+ "description": "Named entity: eng; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u014b"
+ ]
+ ]
+ },
+ {
+ "input": "&ensp",
+ "description": "Bad named entity: ensp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ensp"
+ ]
+ ]
+ },
+ {
+ "input": "&ensp;",
+ "description": "Named entity: ensp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2002"
+ ]
+ ]
+ },
+ {
+ "input": "&eogon",
+ "description": "Bad named entity: eogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eogon"
+ ]
+ ]
+ },
+ {
+ "input": "&eogon;",
+ "description": "Named entity: eogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0119"
+ ]
+ ]
+ },
+ {
+ "input": "&eopf",
+ "description": "Bad named entity: eopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eopf"
+ ]
+ ]
+ },
+ {
+ "input": "&eopf;",
+ "description": "Named entity: eopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd56"
+ ]
+ ]
+ },
+ {
+ "input": "&epar",
+ "description": "Bad named entity: epar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&epar"
+ ]
+ ]
+ },
+ {
+ "input": "&epar;",
+ "description": "Named entity: epar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d5"
+ ]
+ ]
+ },
+ {
+ "input": "&eparsl",
+ "description": "Bad named entity: eparsl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eparsl"
+ ]
+ ]
+ },
+ {
+ "input": "&eparsl;",
+ "description": "Named entity: eparsl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29e3"
+ ]
+ ]
+ },
+ {
+ "input": "&eplus",
+ "description": "Bad named entity: eplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eplus"
+ ]
+ ]
+ },
+ {
+ "input": "&eplus;",
+ "description": "Named entity: eplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a71"
+ ]
+ ]
+ },
+ {
+ "input": "&epsi",
+ "description": "Bad named entity: epsi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&epsi"
+ ]
+ ]
+ },
+ {
+ "input": "&epsi;",
+ "description": "Named entity: epsi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b5"
+ ]
+ ]
+ },
+ {
+ "input": "&epsilon",
+ "description": "Bad named entity: epsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&epsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&epsilon;",
+ "description": "Named entity: epsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b5"
+ ]
+ ]
+ },
+ {
+ "input": "&epsiv",
+ "description": "Bad named entity: epsiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&epsiv"
+ ]
+ ]
+ },
+ {
+ "input": "&epsiv;",
+ "description": "Named entity: epsiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f5"
+ ]
+ ]
+ },
+ {
+ "input": "&eqcirc",
+ "description": "Bad named entity: eqcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&eqcirc;",
+ "description": "Named entity: eqcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2256"
+ ]
+ ]
+ },
+ {
+ "input": "&eqcolon",
+ "description": "Bad named entity: eqcolon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqcolon"
+ ]
+ ]
+ },
+ {
+ "input": "&eqcolon;",
+ "description": "Named entity: eqcolon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2255"
+ ]
+ ]
+ },
+ {
+ "input": "&eqsim",
+ "description": "Bad named entity: eqsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqsim"
+ ]
+ ]
+ },
+ {
+ "input": "&eqsim;",
+ "description": "Named entity: eqsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2242"
+ ]
+ ]
+ },
+ {
+ "input": "&eqslantgtr",
+ "description": "Bad named entity: eqslantgtr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqslantgtr"
+ ]
+ ]
+ },
+ {
+ "input": "&eqslantgtr;",
+ "description": "Named entity: eqslantgtr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a96"
+ ]
+ ]
+ },
+ {
+ "input": "&eqslantless",
+ "description": "Bad named entity: eqslantless without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqslantless"
+ ]
+ ]
+ },
+ {
+ "input": "&eqslantless;",
+ "description": "Named entity: eqslantless; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a95"
+ ]
+ ]
+ },
+ {
+ "input": "&equals",
+ "description": "Bad named entity: equals without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&equals"
+ ]
+ ]
+ },
+ {
+ "input": "&equals;",
+ "description": "Named entity: equals; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "="
+ ]
+ ]
+ },
+ {
+ "input": "&equest",
+ "description": "Bad named entity: equest without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&equest"
+ ]
+ ]
+ },
+ {
+ "input": "&equest;",
+ "description": "Named entity: equest; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u225f"
+ ]
+ ]
+ },
+ {
+ "input": "&equiv",
+ "description": "Bad named entity: equiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&equiv"
+ ]
+ ]
+ },
+ {
+ "input": "&equiv;",
+ "description": "Named entity: equiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2261"
+ ]
+ ]
+ },
+ {
+ "input": "&equivDD",
+ "description": "Bad named entity: equivDD without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&equivDD"
+ ]
+ ]
+ },
+ {
+ "input": "&equivDD;",
+ "description": "Named entity: equivDD; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a78"
+ ]
+ ]
+ },
+ {
+ "input": "&eqvparsl",
+ "description": "Bad named entity: eqvparsl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eqvparsl"
+ ]
+ ]
+ },
+ {
+ "input": "&eqvparsl;",
+ "description": "Named entity: eqvparsl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29e5"
+ ]
+ ]
+ },
+ {
+ "input": "&erDot",
+ "description": "Bad named entity: erDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&erDot"
+ ]
+ ]
+ },
+ {
+ "input": "&erDot;",
+ "description": "Named entity: erDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2253"
+ ]
+ ]
+ },
+ {
+ "input": "&erarr",
+ "description": "Bad named entity: erarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&erarr"
+ ]
+ ]
+ },
+ {
+ "input": "&erarr;",
+ "description": "Named entity: erarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2971"
+ ]
+ ]
+ },
+ {
+ "input": "&escr",
+ "description": "Bad named entity: escr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&escr"
+ ]
+ ]
+ },
+ {
+ "input": "&escr;",
+ "description": "Named entity: escr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u212f"
+ ]
+ ]
+ },
+ {
+ "input": "&esdot",
+ "description": "Bad named entity: esdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&esdot"
+ ]
+ ]
+ },
+ {
+ "input": "&esdot;",
+ "description": "Named entity: esdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2250"
+ ]
+ ]
+ },
+ {
+ "input": "&esim",
+ "description": "Bad named entity: esim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&esim"
+ ]
+ ]
+ },
+ {
+ "input": "&esim;",
+ "description": "Named entity: esim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2242"
+ ]
+ ]
+ },
+ {
+ "input": "&eta",
+ "description": "Bad named entity: eta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&eta"
+ ]
+ ]
+ },
+ {
+ "input": "&eta;",
+ "description": "Named entity: eta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b7"
+ ]
+ ]
+ },
+ {
+ "input": "&eth",
+ "description": "Named entity: eth without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&eth;",
+ "description": "Named entity: eth; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f0"
+ ]
+ ]
+ },
+ {
+ "input": "&euml",
+ "description": "Named entity: euml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00eb"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&euml;",
+ "description": "Named entity: euml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00eb"
+ ]
+ ]
+ },
+ {
+ "input": "&euro",
+ "description": "Bad named entity: euro without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&euro"
+ ]
+ ]
+ },
+ {
+ "input": "&euro;",
+ "description": "Named entity: euro; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u20ac"
+ ]
+ ]
+ },
+ {
+ "input": "&excl",
+ "description": "Bad named entity: excl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&excl"
+ ]
+ ]
+ },
+ {
+ "input": "&excl;",
+ "description": "Named entity: excl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "!"
+ ]
+ ]
+ },
+ {
+ "input": "&exist",
+ "description": "Bad named entity: exist without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&exist"
+ ]
+ ]
+ },
+ {
+ "input": "&exist;",
+ "description": "Named entity: exist; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2203"
+ ]
+ ]
+ },
+ {
+ "input": "&expectation",
+ "description": "Bad named entity: expectation without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&expectation"
+ ]
+ ]
+ },
+ {
+ "input": "&expectation;",
+ "description": "Named entity: expectation; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2130"
+ ]
+ ]
+ },
+ {
+ "input": "&exponentiale",
+ "description": "Bad named entity: exponentiale without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&exponentiale"
+ ]
+ ]
+ },
+ {
+ "input": "&exponentiale;",
+ "description": "Named entity: exponentiale; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2147"
+ ]
+ ]
+ },
+ {
+ "input": "&fallingdotseq",
+ "description": "Bad named entity: fallingdotseq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fallingdotseq"
+ ]
+ ]
+ },
+ {
+ "input": "&fallingdotseq;",
+ "description": "Named entity: fallingdotseq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2252"
+ ]
+ ]
+ },
+ {
+ "input": "&fcy",
+ "description": "Bad named entity: fcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fcy"
+ ]
+ ]
+ },
+ {
+ "input": "&fcy;",
+ "description": "Named entity: fcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0444"
+ ]
+ ]
+ },
+ {
+ "input": "&female",
+ "description": "Bad named entity: female without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&female"
+ ]
+ ]
+ },
+ {
+ "input": "&female;",
+ "description": "Named entity: female; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2640"
+ ]
+ ]
+ },
+ {
+ "input": "&ffilig",
+ "description": "Bad named entity: ffilig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ffilig"
+ ]
+ ]
+ },
+ {
+ "input": "&ffilig;",
+ "description": "Named entity: ffilig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ufb03"
+ ]
+ ]
+ },
+ {
+ "input": "&fflig",
+ "description": "Bad named entity: fflig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fflig"
+ ]
+ ]
+ },
+ {
+ "input": "&fflig;",
+ "description": "Named entity: fflig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ufb00"
+ ]
+ ]
+ },
+ {
+ "input": "&ffllig",
+ "description": "Bad named entity: ffllig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ffllig"
+ ]
+ ]
+ },
+ {
+ "input": "&ffllig;",
+ "description": "Named entity: ffllig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ufb04"
+ ]
+ ]
+ },
+ {
+ "input": "&ffr",
+ "description": "Bad named entity: ffr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ffr"
+ ]
+ ]
+ },
+ {
+ "input": "&ffr;",
+ "description": "Named entity: ffr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd23"
+ ]
+ ]
+ },
+ {
+ "input": "&filig",
+ "description": "Bad named entity: filig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&filig"
+ ]
+ ]
+ },
+ {
+ "input": "&filig;",
+ "description": "Named entity: filig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ufb01"
+ ]
+ ]
+ },
+ {
+ "input": "&fjlig",
+ "description": "Bad named entity: fjlig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fjlig"
+ ]
+ ]
+ },
+ {
+ "input": "&fjlig;",
+ "description": "Named entity: fjlig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "fj"
+ ]
+ ]
+ },
+ {
+ "input": "&flat",
+ "description": "Bad named entity: flat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&flat"
+ ]
+ ]
+ },
+ {
+ "input": "&flat;",
+ "description": "Named entity: flat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u266d"
+ ]
+ ]
+ },
+ {
+ "input": "&fllig",
+ "description": "Bad named entity: fllig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fllig"
+ ]
+ ]
+ },
+ {
+ "input": "&fllig;",
+ "description": "Named entity: fllig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ufb02"
+ ]
+ ]
+ },
+ {
+ "input": "&fltns",
+ "description": "Bad named entity: fltns without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fltns"
+ ]
+ ]
+ },
+ {
+ "input": "&fltns;",
+ "description": "Named entity: fltns; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b1"
+ ]
+ ]
+ },
+ {
+ "input": "&fnof",
+ "description": "Bad named entity: fnof without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fnof"
+ ]
+ ]
+ },
+ {
+ "input": "&fnof;",
+ "description": "Named entity: fnof; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0192"
+ ]
+ ]
+ },
+ {
+ "input": "&fopf",
+ "description": "Bad named entity: fopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fopf"
+ ]
+ ]
+ },
+ {
+ "input": "&fopf;",
+ "description": "Named entity: fopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd57"
+ ]
+ ]
+ },
+ {
+ "input": "&forall",
+ "description": "Bad named entity: forall without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&forall"
+ ]
+ ]
+ },
+ {
+ "input": "&forall;",
+ "description": "Named entity: forall; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2200"
+ ]
+ ]
+ },
+ {
+ "input": "&fork",
+ "description": "Bad named entity: fork without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fork"
+ ]
+ ]
+ },
+ {
+ "input": "&fork;",
+ "description": "Named entity: fork; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d4"
+ ]
+ ]
+ },
+ {
+ "input": "&forkv",
+ "description": "Bad named entity: forkv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&forkv"
+ ]
+ ]
+ },
+ {
+ "input": "&forkv;",
+ "description": "Named entity: forkv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad9"
+ ]
+ ]
+ },
+ {
+ "input": "&fpartint",
+ "description": "Bad named entity: fpartint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fpartint"
+ ]
+ ]
+ },
+ {
+ "input": "&fpartint;",
+ "description": "Named entity: fpartint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a0d"
+ ]
+ ]
+ },
+ {
+ "input": "&frac12",
+ "description": "Named entity: frac12 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bd"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&frac12;",
+ "description": "Named entity: frac12; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bd"
+ ]
+ ]
+ },
+ {
+ "input": "&frac13",
+ "description": "Bad named entity: frac13 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac13"
+ ]
+ ]
+ },
+ {
+ "input": "&frac13;",
+ "description": "Named entity: frac13; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2153"
+ ]
+ ]
+ },
+ {
+ "input": "&frac14",
+ "description": "Named entity: frac14 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bc"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&frac14;",
+ "description": "Named entity: frac14; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bc"
+ ]
+ ]
+ },
+ {
+ "input": "&frac15",
+ "description": "Bad named entity: frac15 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac15"
+ ]
+ ]
+ },
+ {
+ "input": "&frac15;",
+ "description": "Named entity: frac15; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2155"
+ ]
+ ]
+ },
+ {
+ "input": "&frac16",
+ "description": "Bad named entity: frac16 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac16"
+ ]
+ ]
+ },
+ {
+ "input": "&frac16;",
+ "description": "Named entity: frac16; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2159"
+ ]
+ ]
+ },
+ {
+ "input": "&frac18",
+ "description": "Bad named entity: frac18 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac18"
+ ]
+ ]
+ },
+ {
+ "input": "&frac18;",
+ "description": "Named entity: frac18; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u215b"
+ ]
+ ]
+ },
+ {
+ "input": "&frac23",
+ "description": "Bad named entity: frac23 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac23"
+ ]
+ ]
+ },
+ {
+ "input": "&frac23;",
+ "description": "Named entity: frac23; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2154"
+ ]
+ ]
+ },
+ {
+ "input": "&frac25",
+ "description": "Bad named entity: frac25 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac25"
+ ]
+ ]
+ },
+ {
+ "input": "&frac25;",
+ "description": "Named entity: frac25; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2156"
+ ]
+ ]
+ },
+ {
+ "input": "&frac34",
+ "description": "Named entity: frac34 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00be"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&frac34;",
+ "description": "Named entity: frac34; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00be"
+ ]
+ ]
+ },
+ {
+ "input": "&frac35",
+ "description": "Bad named entity: frac35 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac35"
+ ]
+ ]
+ },
+ {
+ "input": "&frac35;",
+ "description": "Named entity: frac35; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2157"
+ ]
+ ]
+ },
+ {
+ "input": "&frac38",
+ "description": "Bad named entity: frac38 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac38"
+ ]
+ ]
+ },
+ {
+ "input": "&frac38;",
+ "description": "Named entity: frac38; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u215c"
+ ]
+ ]
+ },
+ {
+ "input": "&frac45",
+ "description": "Bad named entity: frac45 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac45"
+ ]
+ ]
+ },
+ {
+ "input": "&frac45;",
+ "description": "Named entity: frac45; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2158"
+ ]
+ ]
+ },
+ {
+ "input": "&frac56",
+ "description": "Bad named entity: frac56 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac56"
+ ]
+ ]
+ },
+ {
+ "input": "&frac56;",
+ "description": "Named entity: frac56; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u215a"
+ ]
+ ]
+ },
+ {
+ "input": "&frac58",
+ "description": "Bad named entity: frac58 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac58"
+ ]
+ ]
+ },
+ {
+ "input": "&frac58;",
+ "description": "Named entity: frac58; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u215d"
+ ]
+ ]
+ },
+ {
+ "input": "&frac78",
+ "description": "Bad named entity: frac78 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frac78"
+ ]
+ ]
+ },
+ {
+ "input": "&frac78;",
+ "description": "Named entity: frac78; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u215e"
+ ]
+ ]
+ },
+ {
+ "input": "&frasl",
+ "description": "Bad named entity: frasl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frasl"
+ ]
+ ]
+ },
+ {
+ "input": "&frasl;",
+ "description": "Named entity: frasl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2044"
+ ]
+ ]
+ },
+ {
+ "input": "&frown",
+ "description": "Bad named entity: frown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&frown"
+ ]
+ ]
+ },
+ {
+ "input": "&frown;",
+ "description": "Named entity: frown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2322"
+ ]
+ ]
+ },
+ {
+ "input": "&fscr",
+ "description": "Bad named entity: fscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&fscr"
+ ]
+ ]
+ },
+ {
+ "input": "&fscr;",
+ "description": "Named entity: fscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcbb"
+ ]
+ ]
+ },
+ {
+ "input": "&gE",
+ "description": "Bad named entity: gE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gE"
+ ]
+ ]
+ },
+ {
+ "input": "&gE;",
+ "description": "Named entity: gE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267"
+ ]
+ ]
+ },
+ {
+ "input": "&gEl",
+ "description": "Bad named entity: gEl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gEl"
+ ]
+ ]
+ },
+ {
+ "input": "&gEl;",
+ "description": "Named entity: gEl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8c"
+ ]
+ ]
+ },
+ {
+ "input": "&gacute",
+ "description": "Bad named entity: gacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gacute"
+ ]
+ ]
+ },
+ {
+ "input": "&gacute;",
+ "description": "Named entity: gacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u01f5"
+ ]
+ ]
+ },
+ {
+ "input": "&gamma",
+ "description": "Bad named entity: gamma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gamma"
+ ]
+ ]
+ },
+ {
+ "input": "&gamma;",
+ "description": "Named entity: gamma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b3"
+ ]
+ ]
+ },
+ {
+ "input": "&gammad",
+ "description": "Bad named entity: gammad without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gammad"
+ ]
+ ]
+ },
+ {
+ "input": "&gammad;",
+ "description": "Named entity: gammad; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03dd"
+ ]
+ ]
+ },
+ {
+ "input": "&gap",
+ "description": "Bad named entity: gap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gap"
+ ]
+ ]
+ },
+ {
+ "input": "&gap;",
+ "description": "Named entity: gap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a86"
+ ]
+ ]
+ },
+ {
+ "input": "&gbreve",
+ "description": "Bad named entity: gbreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gbreve"
+ ]
+ ]
+ },
+ {
+ "input": "&gbreve;",
+ "description": "Named entity: gbreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011f"
+ ]
+ ]
+ },
+ {
+ "input": "&gcirc",
+ "description": "Bad named entity: gcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&gcirc;",
+ "description": "Named entity: gcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u011d"
+ ]
+ ]
+ },
+ {
+ "input": "&gcy",
+ "description": "Bad named entity: gcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gcy"
+ ]
+ ]
+ },
+ {
+ "input": "&gcy;",
+ "description": "Named entity: gcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0433"
+ ]
+ ]
+ },
+ {
+ "input": "&gdot",
+ "description": "Bad named entity: gdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gdot"
+ ]
+ ]
+ },
+ {
+ "input": "&gdot;",
+ "description": "Named entity: gdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0121"
+ ]
+ ]
+ },
+ {
+ "input": "&ge",
+ "description": "Bad named entity: ge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ge"
+ ]
+ ]
+ },
+ {
+ "input": "&ge;",
+ "description": "Named entity: ge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2265"
+ ]
+ ]
+ },
+ {
+ "input": "&gel",
+ "description": "Bad named entity: gel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gel"
+ ]
+ ]
+ },
+ {
+ "input": "&gel;",
+ "description": "Named entity: gel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22db"
+ ]
+ ]
+ },
+ {
+ "input": "&geq",
+ "description": "Bad named entity: geq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&geq"
+ ]
+ ]
+ },
+ {
+ "input": "&geq;",
+ "description": "Named entity: geq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2265"
+ ]
+ ]
+ },
+ {
+ "input": "&geqq",
+ "description": "Bad named entity: geqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&geqq"
+ ]
+ ]
+ },
+ {
+ "input": "&geqq;",
+ "description": "Named entity: geqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267"
+ ]
+ ]
+ },
+ {
+ "input": "&geqslant",
+ "description": "Bad named entity: geqslant without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&geqslant"
+ ]
+ ]
+ },
+ {
+ "input": "&geqslant;",
+ "description": "Named entity: geqslant; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e"
+ ]
+ ]
+ },
+ {
+ "input": "&ges",
+ "description": "Bad named entity: ges without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ges"
+ ]
+ ]
+ },
+ {
+ "input": "&ges;",
+ "description": "Named entity: ges; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e"
+ ]
+ ]
+ },
+ {
+ "input": "&gescc",
+ "description": "Bad named entity: gescc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gescc"
+ ]
+ ]
+ },
+ {
+ "input": "&gescc;",
+ "description": "Named entity: gescc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa9"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdot",
+ "description": "Bad named entity: gesdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gesdot"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdot;",
+ "description": "Named entity: gesdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a80"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdoto",
+ "description": "Bad named entity: gesdoto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gesdoto"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdoto;",
+ "description": "Named entity: gesdoto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a82"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdotol",
+ "description": "Bad named entity: gesdotol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gesdotol"
+ ]
+ ]
+ },
+ {
+ "input": "&gesdotol;",
+ "description": "Named entity: gesdotol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a84"
+ ]
+ ]
+ },
+ {
+ "input": "&gesl",
+ "description": "Bad named entity: gesl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gesl"
+ ]
+ ]
+ },
+ {
+ "input": "&gesl;",
+ "description": "Named entity: gesl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22db\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&gesles",
+ "description": "Bad named entity: gesles without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gesles"
+ ]
+ ]
+ },
+ {
+ "input": "&gesles;",
+ "description": "Named entity: gesles; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a94"
+ ]
+ ]
+ },
+ {
+ "input": "&gfr",
+ "description": "Bad named entity: gfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gfr"
+ ]
+ ]
+ },
+ {
+ "input": "&gfr;",
+ "description": "Named entity: gfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd24"
+ ]
+ ]
+ },
+ {
+ "input": "&gg",
+ "description": "Bad named entity: gg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gg"
+ ]
+ ]
+ },
+ {
+ "input": "&gg;",
+ "description": "Named entity: gg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b"
+ ]
+ ]
+ },
+ {
+ "input": "&ggg",
+ "description": "Bad named entity: ggg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ggg"
+ ]
+ ]
+ },
+ {
+ "input": "&ggg;",
+ "description": "Named entity: ggg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d9"
+ ]
+ ]
+ },
+ {
+ "input": "&gimel",
+ "description": "Bad named entity: gimel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gimel"
+ ]
+ ]
+ },
+ {
+ "input": "&gimel;",
+ "description": "Named entity: gimel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2137"
+ ]
+ ]
+ },
+ {
+ "input": "&gjcy",
+ "description": "Bad named entity: gjcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gjcy"
+ ]
+ ]
+ },
+ {
+ "input": "&gjcy;",
+ "description": "Named entity: gjcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0453"
+ ]
+ ]
+ },
+ {
+ "input": "&gl",
+ "description": "Bad named entity: gl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gl"
+ ]
+ ]
+ },
+ {
+ "input": "&gl;",
+ "description": "Named entity: gl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2277"
+ ]
+ ]
+ },
+ {
+ "input": "&glE",
+ "description": "Bad named entity: glE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&glE"
+ ]
+ ]
+ },
+ {
+ "input": "&glE;",
+ "description": "Named entity: glE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a92"
+ ]
+ ]
+ },
+ {
+ "input": "&gla",
+ "description": "Bad named entity: gla without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gla"
+ ]
+ ]
+ },
+ {
+ "input": "&gla;",
+ "description": "Named entity: gla; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa5"
+ ]
+ ]
+ },
+ {
+ "input": "&glj",
+ "description": "Bad named entity: glj without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&glj"
+ ]
+ ]
+ },
+ {
+ "input": "&glj;",
+ "description": "Named entity: glj; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa4"
+ ]
+ ]
+ },
+ {
+ "input": "&gnE",
+ "description": "Bad named entity: gnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gnE"
+ ]
+ ]
+ },
+ {
+ "input": "&gnE;",
+ "description": "Named entity: gnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2269"
+ ]
+ ]
+ },
+ {
+ "input": "&gnap",
+ "description": "Bad named entity: gnap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gnap"
+ ]
+ ]
+ },
+ {
+ "input": "&gnap;",
+ "description": "Named entity: gnap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8a"
+ ]
+ ]
+ },
+ {
+ "input": "&gnapprox",
+ "description": "Bad named entity: gnapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gnapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&gnapprox;",
+ "description": "Named entity: gnapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8a"
+ ]
+ ]
+ },
+ {
+ "input": "&gne",
+ "description": "Bad named entity: gne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gne"
+ ]
+ ]
+ },
+ {
+ "input": "&gne;",
+ "description": "Named entity: gne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a88"
+ ]
+ ]
+ },
+ {
+ "input": "&gneq",
+ "description": "Bad named entity: gneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gneq"
+ ]
+ ]
+ },
+ {
+ "input": "&gneq;",
+ "description": "Named entity: gneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a88"
+ ]
+ ]
+ },
+ {
+ "input": "&gneqq",
+ "description": "Bad named entity: gneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&gneqq;",
+ "description": "Named entity: gneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2269"
+ ]
+ ]
+ },
+ {
+ "input": "&gnsim",
+ "description": "Bad named entity: gnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&gnsim;",
+ "description": "Named entity: gnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e7"
+ ]
+ ]
+ },
+ {
+ "input": "&gopf",
+ "description": "Bad named entity: gopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gopf"
+ ]
+ ]
+ },
+ {
+ "input": "&gopf;",
+ "description": "Named entity: gopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd58"
+ ]
+ ]
+ },
+ {
+ "input": "&grave",
+ "description": "Bad named entity: grave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&grave"
+ ]
+ ]
+ },
+ {
+ "input": "&grave;",
+ "description": "Named entity: grave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "`"
+ ]
+ ]
+ },
+ {
+ "input": "&gscr",
+ "description": "Bad named entity: gscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gscr"
+ ]
+ ]
+ },
+ {
+ "input": "&gscr;",
+ "description": "Named entity: gscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210a"
+ ]
+ ]
+ },
+ {
+ "input": "&gsim",
+ "description": "Bad named entity: gsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gsim"
+ ]
+ ]
+ },
+ {
+ "input": "&gsim;",
+ "description": "Named entity: gsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2273"
+ ]
+ ]
+ },
+ {
+ "input": "&gsime",
+ "description": "Bad named entity: gsime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gsime"
+ ]
+ ]
+ },
+ {
+ "input": "&gsime;",
+ "description": "Named entity: gsime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8e"
+ ]
+ ]
+ },
+ {
+ "input": "&gsiml",
+ "description": "Bad named entity: gsiml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gsiml"
+ ]
+ ]
+ },
+ {
+ "input": "&gsiml;",
+ "description": "Named entity: gsiml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a90"
+ ]
+ ]
+ },
+ {
+ "input": "&gt",
+ "description": "Named entity: gt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ ">"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 4 }
+ ]
+ },
+ {
+ "input": "&gt;",
+ "description": "Named entity: gt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ">"
+ ]
+ ]
+ },
+ {
+ "input": "&gtcc;",
+ "description": "Named entity: gtcc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa7"
+ ]
+ ]
+ },
+ {
+ "input": "&gtcir;",
+ "description": "Named entity: gtcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7a"
+ ]
+ ]
+ },
+ {
+ "input": "&gtdot;",
+ "description": "Named entity: gtdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d7"
+ ]
+ ]
+ },
+ {
+ "input": "&gtlPar;",
+ "description": "Named entity: gtlPar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2995"
+ ]
+ ]
+ },
+ {
+ "input": "&gtquest;",
+ "description": "Named entity: gtquest; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7c"
+ ]
+ ]
+ },
+ {
+ "input": "&gtrapprox;",
+ "description": "Named entity: gtrapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a86"
+ ]
+ ]
+ },
+ {
+ "input": "&gtrarr;",
+ "description": "Named entity: gtrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2978"
+ ]
+ ]
+ },
+ {
+ "input": "&gtrdot;",
+ "description": "Named entity: gtrdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d7"
+ ]
+ ]
+ },
+ {
+ "input": "&gtreqless;",
+ "description": "Named entity: gtreqless; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22db"
+ ]
+ ]
+ },
+ {
+ "input": "&gtreqqless;",
+ "description": "Named entity: gtreqqless; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8c"
+ ]
+ ]
+ },
+ {
+ "input": "&gtrless;",
+ "description": "Named entity: gtrless; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2277"
+ ]
+ ]
+ },
+ {
+ "input": "&gtrsim;",
+ "description": "Named entity: gtrsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2273"
+ ]
+ ]
+ },
+ {
+ "input": "&gvertneqq",
+ "description": "Bad named entity: gvertneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gvertneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&gvertneqq;",
+ "description": "Named entity: gvertneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2269\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&gvnE",
+ "description": "Bad named entity: gvnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&gvnE"
+ ]
+ ]
+ },
+ {
+ "input": "&gvnE;",
+ "description": "Named entity: gvnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2269\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&hArr",
+ "description": "Bad named entity: hArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hArr"
+ ]
+ ]
+ },
+ {
+ "input": "&hArr;",
+ "description": "Named entity: hArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d4"
+ ]
+ ]
+ },
+ {
+ "input": "&hairsp",
+ "description": "Bad named entity: hairsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hairsp"
+ ]
+ ]
+ },
+ {
+ "input": "&hairsp;",
+ "description": "Named entity: hairsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200a"
+ ]
+ ]
+ },
+ {
+ "input": "&half",
+ "description": "Bad named entity: half without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&half"
+ ]
+ ]
+ },
+ {
+ "input": "&half;",
+ "description": "Named entity: half; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bd"
+ ]
+ ]
+ },
+ {
+ "input": "&hamilt",
+ "description": "Bad named entity: hamilt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hamilt"
+ ]
+ ]
+ },
+ {
+ "input": "&hamilt;",
+ "description": "Named entity: hamilt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210b"
+ ]
+ ]
+ },
+ {
+ "input": "&hardcy",
+ "description": "Bad named entity: hardcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hardcy"
+ ]
+ ]
+ },
+ {
+ "input": "&hardcy;",
+ "description": "Named entity: hardcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044a"
+ ]
+ ]
+ },
+ {
+ "input": "&harr",
+ "description": "Bad named entity: harr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&harr"
+ ]
+ ]
+ },
+ {
+ "input": "&harr;",
+ "description": "Named entity: harr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2194"
+ ]
+ ]
+ },
+ {
+ "input": "&harrcir",
+ "description": "Bad named entity: harrcir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&harrcir"
+ ]
+ ]
+ },
+ {
+ "input": "&harrcir;",
+ "description": "Named entity: harrcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2948"
+ ]
+ ]
+ },
+ {
+ "input": "&harrw",
+ "description": "Bad named entity: harrw without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&harrw"
+ ]
+ ]
+ },
+ {
+ "input": "&harrw;",
+ "description": "Named entity: harrw; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ad"
+ ]
+ ]
+ },
+ {
+ "input": "&hbar",
+ "description": "Bad named entity: hbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hbar"
+ ]
+ ]
+ },
+ {
+ "input": "&hbar;",
+ "description": "Named entity: hbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210f"
+ ]
+ ]
+ },
+ {
+ "input": "&hcirc",
+ "description": "Bad named entity: hcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&hcirc;",
+ "description": "Named entity: hcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0125"
+ ]
+ ]
+ },
+ {
+ "input": "&hearts",
+ "description": "Bad named entity: hearts without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hearts"
+ ]
+ ]
+ },
+ {
+ "input": "&hearts;",
+ "description": "Named entity: hearts; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2665"
+ ]
+ ]
+ },
+ {
+ "input": "&heartsuit",
+ "description": "Bad named entity: heartsuit without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&heartsuit"
+ ]
+ ]
+ },
+ {
+ "input": "&heartsuit;",
+ "description": "Named entity: heartsuit; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2665"
+ ]
+ ]
+ },
+ {
+ "input": "&hellip",
+ "description": "Bad named entity: hellip without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hellip"
+ ]
+ ]
+ },
+ {
+ "input": "&hellip;",
+ "description": "Named entity: hellip; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2026"
+ ]
+ ]
+ },
+ {
+ "input": "&hercon",
+ "description": "Bad named entity: hercon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hercon"
+ ]
+ ]
+ },
+ {
+ "input": "&hercon;",
+ "description": "Named entity: hercon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b9"
+ ]
+ ]
+ },
+ {
+ "input": "&hfr",
+ "description": "Bad named entity: hfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hfr"
+ ]
+ ]
+ },
+ {
+ "input": "&hfr;",
+ "description": "Named entity: hfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd25"
+ ]
+ ]
+ },
+ {
+ "input": "&hksearow",
+ "description": "Bad named entity: hksearow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hksearow"
+ ]
+ ]
+ },
+ {
+ "input": "&hksearow;",
+ "description": "Named entity: hksearow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2925"
+ ]
+ ]
+ },
+ {
+ "input": "&hkswarow",
+ "description": "Bad named entity: hkswarow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hkswarow"
+ ]
+ ]
+ },
+ {
+ "input": "&hkswarow;",
+ "description": "Named entity: hkswarow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2926"
+ ]
+ ]
+ },
+ {
+ "input": "&hoarr",
+ "description": "Bad named entity: hoarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hoarr"
+ ]
+ ]
+ },
+ {
+ "input": "&hoarr;",
+ "description": "Named entity: hoarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ff"
+ ]
+ ]
+ },
+ {
+ "input": "&homtht",
+ "description": "Bad named entity: homtht without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&homtht"
+ ]
+ ]
+ },
+ {
+ "input": "&homtht;",
+ "description": "Named entity: homtht; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223b"
+ ]
+ ]
+ },
+ {
+ "input": "&hookleftarrow",
+ "description": "Bad named entity: hookleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hookleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&hookleftarrow;",
+ "description": "Named entity: hookleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a9"
+ ]
+ ]
+ },
+ {
+ "input": "&hookrightarrow",
+ "description": "Bad named entity: hookrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hookrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&hookrightarrow;",
+ "description": "Named entity: hookrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21aa"
+ ]
+ ]
+ },
+ {
+ "input": "&hopf",
+ "description": "Bad named entity: hopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hopf"
+ ]
+ ]
+ },
+ {
+ "input": "&hopf;",
+ "description": "Named entity: hopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd59"
+ ]
+ ]
+ },
+ {
+ "input": "&horbar",
+ "description": "Bad named entity: horbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&horbar"
+ ]
+ ]
+ },
+ {
+ "input": "&horbar;",
+ "description": "Named entity: horbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2015"
+ ]
+ ]
+ },
+ {
+ "input": "&hscr",
+ "description": "Bad named entity: hscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hscr"
+ ]
+ ]
+ },
+ {
+ "input": "&hscr;",
+ "description": "Named entity: hscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcbd"
+ ]
+ ]
+ },
+ {
+ "input": "&hslash",
+ "description": "Bad named entity: hslash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hslash"
+ ]
+ ]
+ },
+ {
+ "input": "&hslash;",
+ "description": "Named entity: hslash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210f"
+ ]
+ ]
+ },
+ {
+ "input": "&hstrok",
+ "description": "Bad named entity: hstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&hstrok;",
+ "description": "Named entity: hstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0127"
+ ]
+ ]
+ },
+ {
+ "input": "&hybull",
+ "description": "Bad named entity: hybull without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hybull"
+ ]
+ ]
+ },
+ {
+ "input": "&hybull;",
+ "description": "Named entity: hybull; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2043"
+ ]
+ ]
+ },
+ {
+ "input": "&hyphen",
+ "description": "Bad named entity: hyphen without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&hyphen"
+ ]
+ ]
+ },
+ {
+ "input": "&hyphen;",
+ "description": "Named entity: hyphen; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2010"
+ ]
+ ]
+ },
+ {
+ "input": "&iacute",
+ "description": "Named entity: iacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ed"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&iacute;",
+ "description": "Named entity: iacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ed"
+ ]
+ ]
+ },
+ {
+ "input": "&ic",
+ "description": "Bad named entity: ic without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ic"
+ ]
+ ]
+ },
+ {
+ "input": "&ic;",
+ "description": "Named entity: ic; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2063"
+ ]
+ ]
+ },
+ {
+ "input": "&icirc",
+ "description": "Named entity: icirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ee"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&icirc;",
+ "description": "Named entity: icirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ee"
+ ]
+ ]
+ },
+ {
+ "input": "&icy",
+ "description": "Bad named entity: icy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&icy"
+ ]
+ ]
+ },
+ {
+ "input": "&icy;",
+ "description": "Named entity: icy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0438"
+ ]
+ ]
+ },
+ {
+ "input": "&iecy",
+ "description": "Bad named entity: iecy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iecy"
+ ]
+ ]
+ },
+ {
+ "input": "&iecy;",
+ "description": "Named entity: iecy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0435"
+ ]
+ ]
+ },
+ {
+ "input": "&iexcl",
+ "description": "Named entity: iexcl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&iexcl;",
+ "description": "Named entity: iexcl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a1"
+ ]
+ ]
+ },
+ {
+ "input": "&iff",
+ "description": "Bad named entity: iff without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iff"
+ ]
+ ]
+ },
+ {
+ "input": "&iff;",
+ "description": "Named entity: iff; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d4"
+ ]
+ ]
+ },
+ {
+ "input": "&ifr",
+ "description": "Bad named entity: ifr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ifr"
+ ]
+ ]
+ },
+ {
+ "input": "&ifr;",
+ "description": "Named entity: ifr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd26"
+ ]
+ ]
+ },
+ {
+ "input": "&igrave",
+ "description": "Named entity: igrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ec"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&igrave;",
+ "description": "Named entity: igrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ec"
+ ]
+ ]
+ },
+ {
+ "input": "&ii",
+ "description": "Bad named entity: ii without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ii"
+ ]
+ ]
+ },
+ {
+ "input": "&ii;",
+ "description": "Named entity: ii; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2148"
+ ]
+ ]
+ },
+ {
+ "input": "&iiiint",
+ "description": "Bad named entity: iiiint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iiiint"
+ ]
+ ]
+ },
+ {
+ "input": "&iiiint;",
+ "description": "Named entity: iiiint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a0c"
+ ]
+ ]
+ },
+ {
+ "input": "&iiint",
+ "description": "Bad named entity: iiint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iiint"
+ ]
+ ]
+ },
+ {
+ "input": "&iiint;",
+ "description": "Named entity: iiint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222d"
+ ]
+ ]
+ },
+ {
+ "input": "&iinfin",
+ "description": "Bad named entity: iinfin without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iinfin"
+ ]
+ ]
+ },
+ {
+ "input": "&iinfin;",
+ "description": "Named entity: iinfin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29dc"
+ ]
+ ]
+ },
+ {
+ "input": "&iiota",
+ "description": "Bad named entity: iiota without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iiota"
+ ]
+ ]
+ },
+ {
+ "input": "&iiota;",
+ "description": "Named entity: iiota; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2129"
+ ]
+ ]
+ },
+ {
+ "input": "&ijlig",
+ "description": "Bad named entity: ijlig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ijlig"
+ ]
+ ]
+ },
+ {
+ "input": "&ijlig;",
+ "description": "Named entity: ijlig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0133"
+ ]
+ ]
+ },
+ {
+ "input": "&imacr",
+ "description": "Bad named entity: imacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imacr"
+ ]
+ ]
+ },
+ {
+ "input": "&imacr;",
+ "description": "Named entity: imacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u012b"
+ ]
+ ]
+ },
+ {
+ "input": "&image",
+ "description": "Bad named entity: image without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&image"
+ ]
+ ]
+ },
+ {
+ "input": "&image;",
+ "description": "Named entity: image; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2111"
+ ]
+ ]
+ },
+ {
+ "input": "&imagline",
+ "description": "Bad named entity: imagline without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imagline"
+ ]
+ ]
+ },
+ {
+ "input": "&imagline;",
+ "description": "Named entity: imagline; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2110"
+ ]
+ ]
+ },
+ {
+ "input": "&imagpart",
+ "description": "Bad named entity: imagpart without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imagpart"
+ ]
+ ]
+ },
+ {
+ "input": "&imagpart;",
+ "description": "Named entity: imagpart; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2111"
+ ]
+ ]
+ },
+ {
+ "input": "&imath",
+ "description": "Bad named entity: imath without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imath"
+ ]
+ ]
+ },
+ {
+ "input": "&imath;",
+ "description": "Named entity: imath; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0131"
+ ]
+ ]
+ },
+ {
+ "input": "&imof",
+ "description": "Bad named entity: imof without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imof"
+ ]
+ ]
+ },
+ {
+ "input": "&imof;",
+ "description": "Named entity: imof; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b7"
+ ]
+ ]
+ },
+ {
+ "input": "&imped",
+ "description": "Bad named entity: imped without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&imped"
+ ]
+ ]
+ },
+ {
+ "input": "&imped;",
+ "description": "Named entity: imped; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u01b5"
+ ]
+ ]
+ },
+ {
+ "input": "&in",
+ "description": "Bad named entity: in without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&in"
+ ]
+ ]
+ },
+ {
+ "input": "&in;",
+ "description": "Named entity: in; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2208"
+ ]
+ ]
+ },
+ {
+ "input": "&incare",
+ "description": "Bad named entity: incare without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&incare"
+ ]
+ ]
+ },
+ {
+ "input": "&incare;",
+ "description": "Named entity: incare; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2105"
+ ]
+ ]
+ },
+ {
+ "input": "&infin",
+ "description": "Bad named entity: infin without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&infin"
+ ]
+ ]
+ },
+ {
+ "input": "&infin;",
+ "description": "Named entity: infin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221e"
+ ]
+ ]
+ },
+ {
+ "input": "&infintie",
+ "description": "Bad named entity: infintie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&infintie"
+ ]
+ ]
+ },
+ {
+ "input": "&infintie;",
+ "description": "Named entity: infintie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29dd"
+ ]
+ ]
+ },
+ {
+ "input": "&inodot",
+ "description": "Bad named entity: inodot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&inodot"
+ ]
+ ]
+ },
+ {
+ "input": "&inodot;",
+ "description": "Named entity: inodot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0131"
+ ]
+ ]
+ },
+ {
+ "input": "&int",
+ "description": "Bad named entity: int without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&int"
+ ]
+ ]
+ },
+ {
+ "input": "&int;",
+ "description": "Named entity: int; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222b"
+ ]
+ ]
+ },
+ {
+ "input": "&intcal",
+ "description": "Bad named entity: intcal without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&intcal"
+ ]
+ ]
+ },
+ {
+ "input": "&intcal;",
+ "description": "Named entity: intcal; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ba"
+ ]
+ ]
+ },
+ {
+ "input": "&integers",
+ "description": "Bad named entity: integers without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&integers"
+ ]
+ ]
+ },
+ {
+ "input": "&integers;",
+ "description": "Named entity: integers; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2124"
+ ]
+ ]
+ },
+ {
+ "input": "&intercal",
+ "description": "Bad named entity: intercal without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&intercal"
+ ]
+ ]
+ },
+ {
+ "input": "&intercal;",
+ "description": "Named entity: intercal; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ba"
+ ]
+ ]
+ },
+ {
+ "input": "&intlarhk",
+ "description": "Bad named entity: intlarhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&intlarhk"
+ ]
+ ]
+ },
+ {
+ "input": "&intlarhk;",
+ "description": "Named entity: intlarhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a17"
+ ]
+ ]
+ },
+ {
+ "input": "&intprod",
+ "description": "Bad named entity: intprod without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&intprod"
+ ]
+ ]
+ },
+ {
+ "input": "&intprod;",
+ "description": "Named entity: intprod; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a3c"
+ ]
+ ]
+ },
+ {
+ "input": "&iocy",
+ "description": "Bad named entity: iocy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iocy"
+ ]
+ ]
+ },
+ {
+ "input": "&iocy;",
+ "description": "Named entity: iocy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0451"
+ ]
+ ]
+ },
+ {
+ "input": "&iogon",
+ "description": "Bad named entity: iogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iogon"
+ ]
+ ]
+ },
+ {
+ "input": "&iogon;",
+ "description": "Named entity: iogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u012f"
+ ]
+ ]
+ },
+ {
+ "input": "&iopf",
+ "description": "Bad named entity: iopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iopf"
+ ]
+ ]
+ },
+ {
+ "input": "&iopf;",
+ "description": "Named entity: iopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5a"
+ ]
+ ]
+ },
+ {
+ "input": "&iota",
+ "description": "Bad named entity: iota without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iota"
+ ]
+ ]
+ },
+ {
+ "input": "&iota;",
+ "description": "Named entity: iota; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b9"
+ ]
+ ]
+ },
+ {
+ "input": "&iprod",
+ "description": "Bad named entity: iprod without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iprod"
+ ]
+ ]
+ },
+ {
+ "input": "&iprod;",
+ "description": "Named entity: iprod; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a3c"
+ ]
+ ]
+ },
+ {
+ "input": "&iquest",
+ "description": "Named entity: iquest without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bf"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&iquest;",
+ "description": "Named entity: iquest; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bf"
+ ]
+ ]
+ },
+ {
+ "input": "&iscr",
+ "description": "Bad named entity: iscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iscr"
+ ]
+ ]
+ },
+ {
+ "input": "&iscr;",
+ "description": "Named entity: iscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcbe"
+ ]
+ ]
+ },
+ {
+ "input": "&isin",
+ "description": "Bad named entity: isin without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isin"
+ ]
+ ]
+ },
+ {
+ "input": "&isin;",
+ "description": "Named entity: isin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2208"
+ ]
+ ]
+ },
+ {
+ "input": "&isinE",
+ "description": "Bad named entity: isinE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isinE"
+ ]
+ ]
+ },
+ {
+ "input": "&isinE;",
+ "description": "Named entity: isinE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f9"
+ ]
+ ]
+ },
+ {
+ "input": "&isindot",
+ "description": "Bad named entity: isindot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isindot"
+ ]
+ ]
+ },
+ {
+ "input": "&isindot;",
+ "description": "Named entity: isindot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f5"
+ ]
+ ]
+ },
+ {
+ "input": "&isins",
+ "description": "Bad named entity: isins without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isins"
+ ]
+ ]
+ },
+ {
+ "input": "&isins;",
+ "description": "Named entity: isins; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f4"
+ ]
+ ]
+ },
+ {
+ "input": "&isinsv",
+ "description": "Bad named entity: isinsv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isinsv"
+ ]
+ ]
+ },
+ {
+ "input": "&isinsv;",
+ "description": "Named entity: isinsv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f3"
+ ]
+ ]
+ },
+ {
+ "input": "&isinv",
+ "description": "Bad named entity: isinv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&isinv"
+ ]
+ ]
+ },
+ {
+ "input": "&isinv;",
+ "description": "Named entity: isinv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2208"
+ ]
+ ]
+ },
+ {
+ "input": "&it",
+ "description": "Bad named entity: it without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&it"
+ ]
+ ]
+ },
+ {
+ "input": "&it;",
+ "description": "Named entity: it; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2062"
+ ]
+ ]
+ },
+ {
+ "input": "&itilde",
+ "description": "Bad named entity: itilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&itilde"
+ ]
+ ]
+ },
+ {
+ "input": "&itilde;",
+ "description": "Named entity: itilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0129"
+ ]
+ ]
+ },
+ {
+ "input": "&iukcy",
+ "description": "Bad named entity: iukcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&iukcy"
+ ]
+ ]
+ },
+ {
+ "input": "&iukcy;",
+ "description": "Named entity: iukcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0456"
+ ]
+ ]
+ },
+ {
+ "input": "&iuml",
+ "description": "Named entity: iuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ef"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&iuml;",
+ "description": "Named entity: iuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ef"
+ ]
+ ]
+ },
+ {
+ "input": "&jcirc",
+ "description": "Bad named entity: jcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&jcirc;",
+ "description": "Named entity: jcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0135"
+ ]
+ ]
+ },
+ {
+ "input": "&jcy",
+ "description": "Bad named entity: jcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jcy"
+ ]
+ ]
+ },
+ {
+ "input": "&jcy;",
+ "description": "Named entity: jcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0439"
+ ]
+ ]
+ },
+ {
+ "input": "&jfr",
+ "description": "Bad named entity: jfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jfr"
+ ]
+ ]
+ },
+ {
+ "input": "&jfr;",
+ "description": "Named entity: jfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd27"
+ ]
+ ]
+ },
+ {
+ "input": "&jmath",
+ "description": "Bad named entity: jmath without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jmath"
+ ]
+ ]
+ },
+ {
+ "input": "&jmath;",
+ "description": "Named entity: jmath; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0237"
+ ]
+ ]
+ },
+ {
+ "input": "&jopf",
+ "description": "Bad named entity: jopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jopf"
+ ]
+ ]
+ },
+ {
+ "input": "&jopf;",
+ "description": "Named entity: jopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5b"
+ ]
+ ]
+ },
+ {
+ "input": "&jscr",
+ "description": "Bad named entity: jscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jscr"
+ ]
+ ]
+ },
+ {
+ "input": "&jscr;",
+ "description": "Named entity: jscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcbf"
+ ]
+ ]
+ },
+ {
+ "input": "&jsercy",
+ "description": "Bad named entity: jsercy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jsercy"
+ ]
+ ]
+ },
+ {
+ "input": "&jsercy;",
+ "description": "Named entity: jsercy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0458"
+ ]
+ ]
+ },
+ {
+ "input": "&jukcy",
+ "description": "Bad named entity: jukcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&jukcy"
+ ]
+ ]
+ },
+ {
+ "input": "&jukcy;",
+ "description": "Named entity: jukcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0454"
+ ]
+ ]
+ },
+ {
+ "input": "&kappa",
+ "description": "Bad named entity: kappa without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kappa"
+ ]
+ ]
+ },
+ {
+ "input": "&kappa;",
+ "description": "Named entity: kappa; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03ba"
+ ]
+ ]
+ },
+ {
+ "input": "&kappav",
+ "description": "Bad named entity: kappav without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kappav"
+ ]
+ ]
+ },
+ {
+ "input": "&kappav;",
+ "description": "Named entity: kappav; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f0"
+ ]
+ ]
+ },
+ {
+ "input": "&kcedil",
+ "description": "Bad named entity: kcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&kcedil;",
+ "description": "Named entity: kcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0137"
+ ]
+ ]
+ },
+ {
+ "input": "&kcy",
+ "description": "Bad named entity: kcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kcy"
+ ]
+ ]
+ },
+ {
+ "input": "&kcy;",
+ "description": "Named entity: kcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043a"
+ ]
+ ]
+ },
+ {
+ "input": "&kfr",
+ "description": "Bad named entity: kfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kfr"
+ ]
+ ]
+ },
+ {
+ "input": "&kfr;",
+ "description": "Named entity: kfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd28"
+ ]
+ ]
+ },
+ {
+ "input": "&kgreen",
+ "description": "Bad named entity: kgreen without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kgreen"
+ ]
+ ]
+ },
+ {
+ "input": "&kgreen;",
+ "description": "Named entity: kgreen; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0138"
+ ]
+ ]
+ },
+ {
+ "input": "&khcy",
+ "description": "Bad named entity: khcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&khcy"
+ ]
+ ]
+ },
+ {
+ "input": "&khcy;",
+ "description": "Named entity: khcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0445"
+ ]
+ ]
+ },
+ {
+ "input": "&kjcy",
+ "description": "Bad named entity: kjcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kjcy"
+ ]
+ ]
+ },
+ {
+ "input": "&kjcy;",
+ "description": "Named entity: kjcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u045c"
+ ]
+ ]
+ },
+ {
+ "input": "&kopf",
+ "description": "Bad named entity: kopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kopf"
+ ]
+ ]
+ },
+ {
+ "input": "&kopf;",
+ "description": "Named entity: kopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5c"
+ ]
+ ]
+ },
+ {
+ "input": "&kscr",
+ "description": "Bad named entity: kscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&kscr"
+ ]
+ ]
+ },
+ {
+ "input": "&kscr;",
+ "description": "Named entity: kscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc0"
+ ]
+ ]
+ },
+ {
+ "input": "&lAarr",
+ "description": "Bad named entity: lAarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lAarr"
+ ]
+ ]
+ },
+ {
+ "input": "&lAarr;",
+ "description": "Named entity: lAarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21da"
+ ]
+ ]
+ },
+ {
+ "input": "&lArr",
+ "description": "Bad named entity: lArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lArr"
+ ]
+ ]
+ },
+ {
+ "input": "&lArr;",
+ "description": "Named entity: lArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d0"
+ ]
+ ]
+ },
+ {
+ "input": "&lAtail",
+ "description": "Bad named entity: lAtail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lAtail"
+ ]
+ ]
+ },
+ {
+ "input": "&lAtail;",
+ "description": "Named entity: lAtail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291b"
+ ]
+ ]
+ },
+ {
+ "input": "&lBarr",
+ "description": "Bad named entity: lBarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lBarr"
+ ]
+ ]
+ },
+ {
+ "input": "&lBarr;",
+ "description": "Named entity: lBarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290e"
+ ]
+ ]
+ },
+ {
+ "input": "&lE",
+ "description": "Bad named entity: lE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lE"
+ ]
+ ]
+ },
+ {
+ "input": "&lE;",
+ "description": "Named entity: lE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2266"
+ ]
+ ]
+ },
+ {
+ "input": "&lEg",
+ "description": "Bad named entity: lEg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lEg"
+ ]
+ ]
+ },
+ {
+ "input": "&lEg;",
+ "description": "Named entity: lEg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8b"
+ ]
+ ]
+ },
+ {
+ "input": "&lHar",
+ "description": "Bad named entity: lHar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lHar"
+ ]
+ ]
+ },
+ {
+ "input": "&lHar;",
+ "description": "Named entity: lHar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2962"
+ ]
+ ]
+ },
+ {
+ "input": "&lacute",
+ "description": "Bad named entity: lacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lacute"
+ ]
+ ]
+ },
+ {
+ "input": "&lacute;",
+ "description": "Named entity: lacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013a"
+ ]
+ ]
+ },
+ {
+ "input": "&laemptyv",
+ "description": "Bad named entity: laemptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&laemptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&laemptyv;",
+ "description": "Named entity: laemptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b4"
+ ]
+ ]
+ },
+ {
+ "input": "&lagran",
+ "description": "Bad named entity: lagran without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lagran"
+ ]
+ ]
+ },
+ {
+ "input": "&lagran;",
+ "description": "Named entity: lagran; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2112"
+ ]
+ ]
+ },
+ {
+ "input": "&lambda",
+ "description": "Bad named entity: lambda without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lambda"
+ ]
+ ]
+ },
+ {
+ "input": "&lambda;",
+ "description": "Named entity: lambda; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03bb"
+ ]
+ ]
+ },
+ {
+ "input": "&lang",
+ "description": "Bad named entity: lang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lang"
+ ]
+ ]
+ },
+ {
+ "input": "&lang;",
+ "description": "Named entity: lang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e8"
+ ]
+ ]
+ },
+ {
+ "input": "&langd",
+ "description": "Bad named entity: langd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&langd"
+ ]
+ ]
+ },
+ {
+ "input": "&langd;",
+ "description": "Named entity: langd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2991"
+ ]
+ ]
+ },
+ {
+ "input": "&langle",
+ "description": "Bad named entity: langle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&langle"
+ ]
+ ]
+ },
+ {
+ "input": "&langle;",
+ "description": "Named entity: langle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e8"
+ ]
+ ]
+ },
+ {
+ "input": "&lap",
+ "description": "Bad named entity: lap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lap"
+ ]
+ ]
+ },
+ {
+ "input": "&lap;",
+ "description": "Named entity: lap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a85"
+ ]
+ ]
+ },
+ {
+ "input": "&laquo",
+ "description": "Named entity: laquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ab"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&laquo;",
+ "description": "Named entity: laquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ab"
+ ]
+ ]
+ },
+ {
+ "input": "&larr",
+ "description": "Bad named entity: larr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larr"
+ ]
+ ]
+ },
+ {
+ "input": "&larr;",
+ "description": "Named entity: larr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2190"
+ ]
+ ]
+ },
+ {
+ "input": "&larrb",
+ "description": "Bad named entity: larrb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrb"
+ ]
+ ]
+ },
+ {
+ "input": "&larrb;",
+ "description": "Named entity: larrb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21e4"
+ ]
+ ]
+ },
+ {
+ "input": "&larrbfs",
+ "description": "Bad named entity: larrbfs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrbfs"
+ ]
+ ]
+ },
+ {
+ "input": "&larrbfs;",
+ "description": "Named entity: larrbfs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291f"
+ ]
+ ]
+ },
+ {
+ "input": "&larrfs",
+ "description": "Bad named entity: larrfs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrfs"
+ ]
+ ]
+ },
+ {
+ "input": "&larrfs;",
+ "description": "Named entity: larrfs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291d"
+ ]
+ ]
+ },
+ {
+ "input": "&larrhk",
+ "description": "Bad named entity: larrhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrhk"
+ ]
+ ]
+ },
+ {
+ "input": "&larrhk;",
+ "description": "Named entity: larrhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a9"
+ ]
+ ]
+ },
+ {
+ "input": "&larrlp",
+ "description": "Bad named entity: larrlp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrlp"
+ ]
+ ]
+ },
+ {
+ "input": "&larrlp;",
+ "description": "Named entity: larrlp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ab"
+ ]
+ ]
+ },
+ {
+ "input": "&larrpl",
+ "description": "Bad named entity: larrpl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrpl"
+ ]
+ ]
+ },
+ {
+ "input": "&larrpl;",
+ "description": "Named entity: larrpl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2939"
+ ]
+ ]
+ },
+ {
+ "input": "&larrsim",
+ "description": "Bad named entity: larrsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrsim"
+ ]
+ ]
+ },
+ {
+ "input": "&larrsim;",
+ "description": "Named entity: larrsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2973"
+ ]
+ ]
+ },
+ {
+ "input": "&larrtl",
+ "description": "Bad named entity: larrtl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&larrtl"
+ ]
+ ]
+ },
+ {
+ "input": "&larrtl;",
+ "description": "Named entity: larrtl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a2"
+ ]
+ ]
+ },
+ {
+ "input": "&lat",
+ "description": "Bad named entity: lat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lat"
+ ]
+ ]
+ },
+ {
+ "input": "&lat;",
+ "description": "Named entity: lat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aab"
+ ]
+ ]
+ },
+ {
+ "input": "&latail",
+ "description": "Bad named entity: latail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&latail"
+ ]
+ ]
+ },
+ {
+ "input": "&latail;",
+ "description": "Named entity: latail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2919"
+ ]
+ ]
+ },
+ {
+ "input": "&late",
+ "description": "Bad named entity: late without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&late"
+ ]
+ ]
+ },
+ {
+ "input": "&late;",
+ "description": "Named entity: late; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aad"
+ ]
+ ]
+ },
+ {
+ "input": "&lates",
+ "description": "Bad named entity: lates without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lates"
+ ]
+ ]
+ },
+ {
+ "input": "&lates;",
+ "description": "Named entity: lates; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aad\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&lbarr",
+ "description": "Bad named entity: lbarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbarr"
+ ]
+ ]
+ },
+ {
+ "input": "&lbarr;",
+ "description": "Named entity: lbarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290c"
+ ]
+ ]
+ },
+ {
+ "input": "&lbbrk",
+ "description": "Bad named entity: lbbrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbbrk"
+ ]
+ ]
+ },
+ {
+ "input": "&lbbrk;",
+ "description": "Named entity: lbbrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2772"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrace",
+ "description": "Bad named entity: lbrace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbrace"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrace;",
+ "description": "Named entity: lbrace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "{"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrack",
+ "description": "Bad named entity: lbrack without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbrack"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrack;",
+ "description": "Named entity: lbrack; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "["
+ ]
+ ]
+ },
+ {
+ "input": "&lbrke",
+ "description": "Bad named entity: lbrke without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbrke"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrke;",
+ "description": "Named entity: lbrke; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u298b"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrksld",
+ "description": "Bad named entity: lbrksld without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbrksld"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrksld;",
+ "description": "Named entity: lbrksld; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u298f"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrkslu",
+ "description": "Bad named entity: lbrkslu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lbrkslu"
+ ]
+ ]
+ },
+ {
+ "input": "&lbrkslu;",
+ "description": "Named entity: lbrkslu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u298d"
+ ]
+ ]
+ },
+ {
+ "input": "&lcaron",
+ "description": "Bad named entity: lcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&lcaron;",
+ "description": "Named entity: lcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013e"
+ ]
+ ]
+ },
+ {
+ "input": "&lcedil",
+ "description": "Bad named entity: lcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&lcedil;",
+ "description": "Named entity: lcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u013c"
+ ]
+ ]
+ },
+ {
+ "input": "&lceil",
+ "description": "Bad named entity: lceil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lceil"
+ ]
+ ]
+ },
+ {
+ "input": "&lceil;",
+ "description": "Named entity: lceil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2308"
+ ]
+ ]
+ },
+ {
+ "input": "&lcub",
+ "description": "Bad named entity: lcub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lcub"
+ ]
+ ]
+ },
+ {
+ "input": "&lcub;",
+ "description": "Named entity: lcub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "{"
+ ]
+ ]
+ },
+ {
+ "input": "&lcy",
+ "description": "Bad named entity: lcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lcy"
+ ]
+ ]
+ },
+ {
+ "input": "&lcy;",
+ "description": "Named entity: lcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043b"
+ ]
+ ]
+ },
+ {
+ "input": "&ldca",
+ "description": "Bad named entity: ldca without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldca"
+ ]
+ ]
+ },
+ {
+ "input": "&ldca;",
+ "description": "Named entity: ldca; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2936"
+ ]
+ ]
+ },
+ {
+ "input": "&ldquo",
+ "description": "Bad named entity: ldquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldquo"
+ ]
+ ]
+ },
+ {
+ "input": "&ldquo;",
+ "description": "Named entity: ldquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201c"
+ ]
+ ]
+ },
+ {
+ "input": "&ldquor",
+ "description": "Bad named entity: ldquor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldquor"
+ ]
+ ]
+ },
+ {
+ "input": "&ldquor;",
+ "description": "Named entity: ldquor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201e"
+ ]
+ ]
+ },
+ {
+ "input": "&ldrdhar",
+ "description": "Bad named entity: ldrdhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldrdhar"
+ ]
+ ]
+ },
+ {
+ "input": "&ldrdhar;",
+ "description": "Named entity: ldrdhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2967"
+ ]
+ ]
+ },
+ {
+ "input": "&ldrushar",
+ "description": "Bad named entity: ldrushar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldrushar"
+ ]
+ ]
+ },
+ {
+ "input": "&ldrushar;",
+ "description": "Named entity: ldrushar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u294b"
+ ]
+ ]
+ },
+ {
+ "input": "&ldsh",
+ "description": "Bad named entity: ldsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ldsh"
+ ]
+ ]
+ },
+ {
+ "input": "&ldsh;",
+ "description": "Named entity: ldsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b2"
+ ]
+ ]
+ },
+ {
+ "input": "&le",
+ "description": "Bad named entity: le without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&le"
+ ]
+ ]
+ },
+ {
+ "input": "&le;",
+ "description": "Named entity: le; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2264"
+ ]
+ ]
+ },
+ {
+ "input": "&leftarrow",
+ "description": "Bad named entity: leftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&leftarrow;",
+ "description": "Named entity: leftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2190"
+ ]
+ ]
+ },
+ {
+ "input": "&leftarrowtail",
+ "description": "Bad named entity: leftarrowtail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftarrowtail"
+ ]
+ ]
+ },
+ {
+ "input": "&leftarrowtail;",
+ "description": "Named entity: leftarrowtail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a2"
+ ]
+ ]
+ },
+ {
+ "input": "&leftharpoondown",
+ "description": "Bad named entity: leftharpoondown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftharpoondown"
+ ]
+ ]
+ },
+ {
+ "input": "&leftharpoondown;",
+ "description": "Named entity: leftharpoondown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bd"
+ ]
+ ]
+ },
+ {
+ "input": "&leftharpoonup",
+ "description": "Bad named entity: leftharpoonup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftharpoonup"
+ ]
+ ]
+ },
+ {
+ "input": "&leftharpoonup;",
+ "description": "Named entity: leftharpoonup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bc"
+ ]
+ ]
+ },
+ {
+ "input": "&leftleftarrows",
+ "description": "Bad named entity: leftleftarrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftleftarrows"
+ ]
+ ]
+ },
+ {
+ "input": "&leftleftarrows;",
+ "description": "Named entity: leftleftarrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c7"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightarrow",
+ "description": "Bad named entity: leftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightarrow;",
+ "description": "Named entity: leftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2194"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightarrows",
+ "description": "Bad named entity: leftrightarrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftrightarrows"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightarrows;",
+ "description": "Named entity: leftrightarrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c6"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightharpoons",
+ "description": "Bad named entity: leftrightharpoons without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftrightharpoons"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightharpoons;",
+ "description": "Named entity: leftrightharpoons; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cb"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightsquigarrow",
+ "description": "Bad named entity: leftrightsquigarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftrightsquigarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&leftrightsquigarrow;",
+ "description": "Named entity: leftrightsquigarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ad"
+ ]
+ ]
+ },
+ {
+ "input": "&leftthreetimes",
+ "description": "Bad named entity: leftthreetimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leftthreetimes"
+ ]
+ ]
+ },
+ {
+ "input": "&leftthreetimes;",
+ "description": "Named entity: leftthreetimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cb"
+ ]
+ ]
+ },
+ {
+ "input": "&leg",
+ "description": "Bad named entity: leg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leg"
+ ]
+ ]
+ },
+ {
+ "input": "&leg;",
+ "description": "Named entity: leg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22da"
+ ]
+ ]
+ },
+ {
+ "input": "&leq",
+ "description": "Bad named entity: leq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leq"
+ ]
+ ]
+ },
+ {
+ "input": "&leq;",
+ "description": "Named entity: leq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2264"
+ ]
+ ]
+ },
+ {
+ "input": "&leqq",
+ "description": "Bad named entity: leqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leqq"
+ ]
+ ]
+ },
+ {
+ "input": "&leqq;",
+ "description": "Named entity: leqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2266"
+ ]
+ ]
+ },
+ {
+ "input": "&leqslant",
+ "description": "Bad named entity: leqslant without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&leqslant"
+ ]
+ ]
+ },
+ {
+ "input": "&leqslant;",
+ "description": "Named entity: leqslant; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d"
+ ]
+ ]
+ },
+ {
+ "input": "&les",
+ "description": "Bad named entity: les without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&les"
+ ]
+ ]
+ },
+ {
+ "input": "&les;",
+ "description": "Named entity: les; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d"
+ ]
+ ]
+ },
+ {
+ "input": "&lescc",
+ "description": "Bad named entity: lescc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lescc"
+ ]
+ ]
+ },
+ {
+ "input": "&lescc;",
+ "description": "Named entity: lescc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa8"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdot",
+ "description": "Bad named entity: lesdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesdot"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdot;",
+ "description": "Named entity: lesdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7f"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdoto",
+ "description": "Bad named entity: lesdoto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesdoto"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdoto;",
+ "description": "Named entity: lesdoto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a81"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdotor",
+ "description": "Bad named entity: lesdotor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesdotor"
+ ]
+ ]
+ },
+ {
+ "input": "&lesdotor;",
+ "description": "Named entity: lesdotor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a83"
+ ]
+ ]
+ },
+ {
+ "input": "&lesg",
+ "description": "Bad named entity: lesg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesg"
+ ]
+ ]
+ },
+ {
+ "input": "&lesg;",
+ "description": "Named entity: lesg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22da\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&lesges",
+ "description": "Bad named entity: lesges without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesges"
+ ]
+ ]
+ },
+ {
+ "input": "&lesges;",
+ "description": "Named entity: lesges; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a93"
+ ]
+ ]
+ },
+ {
+ "input": "&lessapprox",
+ "description": "Bad named entity: lessapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lessapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&lessapprox;",
+ "description": "Named entity: lessapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a85"
+ ]
+ ]
+ },
+ {
+ "input": "&lessdot",
+ "description": "Bad named entity: lessdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lessdot"
+ ]
+ ]
+ },
+ {
+ "input": "&lessdot;",
+ "description": "Named entity: lessdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d6"
+ ]
+ ]
+ },
+ {
+ "input": "&lesseqgtr",
+ "description": "Bad named entity: lesseqgtr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesseqgtr"
+ ]
+ ]
+ },
+ {
+ "input": "&lesseqgtr;",
+ "description": "Named entity: lesseqgtr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22da"
+ ]
+ ]
+ },
+ {
+ "input": "&lesseqqgtr",
+ "description": "Bad named entity: lesseqqgtr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesseqqgtr"
+ ]
+ ]
+ },
+ {
+ "input": "&lesseqqgtr;",
+ "description": "Named entity: lesseqqgtr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8b"
+ ]
+ ]
+ },
+ {
+ "input": "&lessgtr",
+ "description": "Bad named entity: lessgtr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lessgtr"
+ ]
+ ]
+ },
+ {
+ "input": "&lessgtr;",
+ "description": "Named entity: lessgtr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2276"
+ ]
+ ]
+ },
+ {
+ "input": "&lesssim",
+ "description": "Bad named entity: lesssim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lesssim"
+ ]
+ ]
+ },
+ {
+ "input": "&lesssim;",
+ "description": "Named entity: lesssim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2272"
+ ]
+ ]
+ },
+ {
+ "input": "&lfisht",
+ "description": "Bad named entity: lfisht without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lfisht"
+ ]
+ ]
+ },
+ {
+ "input": "&lfisht;",
+ "description": "Named entity: lfisht; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u297c"
+ ]
+ ]
+ },
+ {
+ "input": "&lfloor",
+ "description": "Bad named entity: lfloor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lfloor"
+ ]
+ ]
+ },
+ {
+ "input": "&lfloor;",
+ "description": "Named entity: lfloor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230a"
+ ]
+ ]
+ },
+ {
+ "input": "&lfr",
+ "description": "Bad named entity: lfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lfr"
+ ]
+ ]
+ },
+ {
+ "input": "&lfr;",
+ "description": "Named entity: lfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd29"
+ ]
+ ]
+ },
+ {
+ "input": "&lg",
+ "description": "Bad named entity: lg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lg"
+ ]
+ ]
+ },
+ {
+ "input": "&lg;",
+ "description": "Named entity: lg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2276"
+ ]
+ ]
+ },
+ {
+ "input": "&lgE",
+ "description": "Bad named entity: lgE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lgE"
+ ]
+ ]
+ },
+ {
+ "input": "&lgE;",
+ "description": "Named entity: lgE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a91"
+ ]
+ ]
+ },
+ {
+ "input": "&lhard",
+ "description": "Bad named entity: lhard without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lhard"
+ ]
+ ]
+ },
+ {
+ "input": "&lhard;",
+ "description": "Named entity: lhard; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bd"
+ ]
+ ]
+ },
+ {
+ "input": "&lharu",
+ "description": "Bad named entity: lharu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lharu"
+ ]
+ ]
+ },
+ {
+ "input": "&lharu;",
+ "description": "Named entity: lharu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bc"
+ ]
+ ]
+ },
+ {
+ "input": "&lharul",
+ "description": "Bad named entity: lharul without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lharul"
+ ]
+ ]
+ },
+ {
+ "input": "&lharul;",
+ "description": "Named entity: lharul; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296a"
+ ]
+ ]
+ },
+ {
+ "input": "&lhblk",
+ "description": "Bad named entity: lhblk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lhblk"
+ ]
+ ]
+ },
+ {
+ "input": "&lhblk;",
+ "description": "Named entity: lhblk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2584"
+ ]
+ ]
+ },
+ {
+ "input": "&ljcy",
+ "description": "Bad named entity: ljcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ljcy"
+ ]
+ ]
+ },
+ {
+ "input": "&ljcy;",
+ "description": "Named entity: ljcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0459"
+ ]
+ ]
+ },
+ {
+ "input": "&ll",
+ "description": "Bad named entity: ll without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ll"
+ ]
+ ]
+ },
+ {
+ "input": "&ll;",
+ "description": "Named entity: ll; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a"
+ ]
+ ]
+ },
+ {
+ "input": "&llarr",
+ "description": "Bad named entity: llarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&llarr"
+ ]
+ ]
+ },
+ {
+ "input": "&llarr;",
+ "description": "Named entity: llarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c7"
+ ]
+ ]
+ },
+ {
+ "input": "&llcorner",
+ "description": "Bad named entity: llcorner without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&llcorner"
+ ]
+ ]
+ },
+ {
+ "input": "&llcorner;",
+ "description": "Named entity: llcorner; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231e"
+ ]
+ ]
+ },
+ {
+ "input": "&llhard",
+ "description": "Bad named entity: llhard without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&llhard"
+ ]
+ ]
+ },
+ {
+ "input": "&llhard;",
+ "description": "Named entity: llhard; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296b"
+ ]
+ ]
+ },
+ {
+ "input": "&lltri",
+ "description": "Bad named entity: lltri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lltri"
+ ]
+ ]
+ },
+ {
+ "input": "&lltri;",
+ "description": "Named entity: lltri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25fa"
+ ]
+ ]
+ },
+ {
+ "input": "&lmidot",
+ "description": "Bad named entity: lmidot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lmidot"
+ ]
+ ]
+ },
+ {
+ "input": "&lmidot;",
+ "description": "Named entity: lmidot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0140"
+ ]
+ ]
+ },
+ {
+ "input": "&lmoust",
+ "description": "Bad named entity: lmoust without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lmoust"
+ ]
+ ]
+ },
+ {
+ "input": "&lmoust;",
+ "description": "Named entity: lmoust; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b0"
+ ]
+ ]
+ },
+ {
+ "input": "&lmoustache",
+ "description": "Bad named entity: lmoustache without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lmoustache"
+ ]
+ ]
+ },
+ {
+ "input": "&lmoustache;",
+ "description": "Named entity: lmoustache; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b0"
+ ]
+ ]
+ },
+ {
+ "input": "&lnE",
+ "description": "Bad named entity: lnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lnE"
+ ]
+ ]
+ },
+ {
+ "input": "&lnE;",
+ "description": "Named entity: lnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2268"
+ ]
+ ]
+ },
+ {
+ "input": "&lnap",
+ "description": "Bad named entity: lnap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lnap"
+ ]
+ ]
+ },
+ {
+ "input": "&lnap;",
+ "description": "Named entity: lnap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a89"
+ ]
+ ]
+ },
+ {
+ "input": "&lnapprox",
+ "description": "Bad named entity: lnapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lnapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&lnapprox;",
+ "description": "Named entity: lnapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a89"
+ ]
+ ]
+ },
+ {
+ "input": "&lne",
+ "description": "Bad named entity: lne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lne"
+ ]
+ ]
+ },
+ {
+ "input": "&lne;",
+ "description": "Named entity: lne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a87"
+ ]
+ ]
+ },
+ {
+ "input": "&lneq",
+ "description": "Bad named entity: lneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lneq"
+ ]
+ ]
+ },
+ {
+ "input": "&lneq;",
+ "description": "Named entity: lneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a87"
+ ]
+ ]
+ },
+ {
+ "input": "&lneqq",
+ "description": "Bad named entity: lneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&lneqq;",
+ "description": "Named entity: lneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2268"
+ ]
+ ]
+ },
+ {
+ "input": "&lnsim",
+ "description": "Bad named entity: lnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&lnsim;",
+ "description": "Named entity: lnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e6"
+ ]
+ ]
+ },
+ {
+ "input": "&loang",
+ "description": "Bad named entity: loang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&loang"
+ ]
+ ]
+ },
+ {
+ "input": "&loang;",
+ "description": "Named entity: loang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27ec"
+ ]
+ ]
+ },
+ {
+ "input": "&loarr",
+ "description": "Bad named entity: loarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&loarr"
+ ]
+ ]
+ },
+ {
+ "input": "&loarr;",
+ "description": "Named entity: loarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21fd"
+ ]
+ ]
+ },
+ {
+ "input": "&lobrk",
+ "description": "Bad named entity: lobrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lobrk"
+ ]
+ ]
+ },
+ {
+ "input": "&lobrk;",
+ "description": "Named entity: lobrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e6"
+ ]
+ ]
+ },
+ {
+ "input": "&longleftarrow",
+ "description": "Bad named entity: longleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&longleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&longleftarrow;",
+ "description": "Named entity: longleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f5"
+ ]
+ ]
+ },
+ {
+ "input": "&longleftrightarrow",
+ "description": "Bad named entity: longleftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&longleftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&longleftrightarrow;",
+ "description": "Named entity: longleftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f7"
+ ]
+ ]
+ },
+ {
+ "input": "&longmapsto",
+ "description": "Bad named entity: longmapsto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&longmapsto"
+ ]
+ ]
+ },
+ {
+ "input": "&longmapsto;",
+ "description": "Named entity: longmapsto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27fc"
+ ]
+ ]
+ },
+ {
+ "input": "&longrightarrow",
+ "description": "Bad named entity: longrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&longrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&longrightarrow;",
+ "description": "Named entity: longrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f6"
+ ]
+ ]
+ },
+ {
+ "input": "&looparrowleft",
+ "description": "Bad named entity: looparrowleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&looparrowleft"
+ ]
+ ]
+ },
+ {
+ "input": "&looparrowleft;",
+ "description": "Named entity: looparrowleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ab"
+ ]
+ ]
+ },
+ {
+ "input": "&looparrowright",
+ "description": "Bad named entity: looparrowright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&looparrowright"
+ ]
+ ]
+ },
+ {
+ "input": "&looparrowright;",
+ "description": "Named entity: looparrowright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ac"
+ ]
+ ]
+ },
+ {
+ "input": "&lopar",
+ "description": "Bad named entity: lopar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lopar"
+ ]
+ ]
+ },
+ {
+ "input": "&lopar;",
+ "description": "Named entity: lopar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2985"
+ ]
+ ]
+ },
+ {
+ "input": "&lopf",
+ "description": "Bad named entity: lopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lopf"
+ ]
+ ]
+ },
+ {
+ "input": "&lopf;",
+ "description": "Named entity: lopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5d"
+ ]
+ ]
+ },
+ {
+ "input": "&loplus",
+ "description": "Bad named entity: loplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&loplus"
+ ]
+ ]
+ },
+ {
+ "input": "&loplus;",
+ "description": "Named entity: loplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a2d"
+ ]
+ ]
+ },
+ {
+ "input": "&lotimes",
+ "description": "Bad named entity: lotimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lotimes"
+ ]
+ ]
+ },
+ {
+ "input": "&lotimes;",
+ "description": "Named entity: lotimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a34"
+ ]
+ ]
+ },
+ {
+ "input": "&lowast",
+ "description": "Bad named entity: lowast without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lowast"
+ ]
+ ]
+ },
+ {
+ "input": "&lowast;",
+ "description": "Named entity: lowast; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2217"
+ ]
+ ]
+ },
+ {
+ "input": "&lowbar",
+ "description": "Bad named entity: lowbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lowbar"
+ ]
+ ]
+ },
+ {
+ "input": "&lowbar;",
+ "description": "Named entity: lowbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "_"
+ ]
+ ]
+ },
+ {
+ "input": "&loz",
+ "description": "Bad named entity: loz without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&loz"
+ ]
+ ]
+ },
+ {
+ "input": "&loz;",
+ "description": "Named entity: loz; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ca"
+ ]
+ ]
+ },
+ {
+ "input": "&lozenge",
+ "description": "Bad named entity: lozenge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lozenge"
+ ]
+ ]
+ },
+ {
+ "input": "&lozenge;",
+ "description": "Named entity: lozenge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ca"
+ ]
+ ]
+ },
+ {
+ "input": "&lozf",
+ "description": "Bad named entity: lozf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lozf"
+ ]
+ ]
+ },
+ {
+ "input": "&lozf;",
+ "description": "Named entity: lozf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29eb"
+ ]
+ ]
+ },
+ {
+ "input": "&lpar",
+ "description": "Bad named entity: lpar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lpar"
+ ]
+ ]
+ },
+ {
+ "input": "&lpar;",
+ "description": "Named entity: lpar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "("
+ ]
+ ]
+ },
+ {
+ "input": "&lparlt",
+ "description": "Bad named entity: lparlt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lparlt"
+ ]
+ ]
+ },
+ {
+ "input": "&lparlt;",
+ "description": "Named entity: lparlt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2993"
+ ]
+ ]
+ },
+ {
+ "input": "&lrarr",
+ "description": "Bad named entity: lrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&lrarr;",
+ "description": "Named entity: lrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c6"
+ ]
+ ]
+ },
+ {
+ "input": "&lrcorner",
+ "description": "Bad named entity: lrcorner without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrcorner"
+ ]
+ ]
+ },
+ {
+ "input": "&lrcorner;",
+ "description": "Named entity: lrcorner; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231f"
+ ]
+ ]
+ },
+ {
+ "input": "&lrhar",
+ "description": "Bad named entity: lrhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrhar"
+ ]
+ ]
+ },
+ {
+ "input": "&lrhar;",
+ "description": "Named entity: lrhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cb"
+ ]
+ ]
+ },
+ {
+ "input": "&lrhard",
+ "description": "Bad named entity: lrhard without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrhard"
+ ]
+ ]
+ },
+ {
+ "input": "&lrhard;",
+ "description": "Named entity: lrhard; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296d"
+ ]
+ ]
+ },
+ {
+ "input": "&lrm",
+ "description": "Bad named entity: lrm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrm"
+ ]
+ ]
+ },
+ {
+ "input": "&lrm;",
+ "description": "Named entity: lrm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200e"
+ ]
+ ]
+ },
+ {
+ "input": "&lrtri",
+ "description": "Bad named entity: lrtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lrtri"
+ ]
+ ]
+ },
+ {
+ "input": "&lrtri;",
+ "description": "Named entity: lrtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22bf"
+ ]
+ ]
+ },
+ {
+ "input": "&lsaquo",
+ "description": "Bad named entity: lsaquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsaquo"
+ ]
+ ]
+ },
+ {
+ "input": "&lsaquo;",
+ "description": "Named entity: lsaquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2039"
+ ]
+ ]
+ },
+ {
+ "input": "&lscr",
+ "description": "Bad named entity: lscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lscr"
+ ]
+ ]
+ },
+ {
+ "input": "&lscr;",
+ "description": "Named entity: lscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc1"
+ ]
+ ]
+ },
+ {
+ "input": "&lsh",
+ "description": "Bad named entity: lsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsh"
+ ]
+ ]
+ },
+ {
+ "input": "&lsh;",
+ "description": "Named entity: lsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b0"
+ ]
+ ]
+ },
+ {
+ "input": "&lsim",
+ "description": "Bad named entity: lsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsim"
+ ]
+ ]
+ },
+ {
+ "input": "&lsim;",
+ "description": "Named entity: lsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2272"
+ ]
+ ]
+ },
+ {
+ "input": "&lsime",
+ "description": "Bad named entity: lsime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsime"
+ ]
+ ]
+ },
+ {
+ "input": "&lsime;",
+ "description": "Named entity: lsime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8d"
+ ]
+ ]
+ },
+ {
+ "input": "&lsimg",
+ "description": "Bad named entity: lsimg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsimg"
+ ]
+ ]
+ },
+ {
+ "input": "&lsimg;",
+ "description": "Named entity: lsimg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a8f"
+ ]
+ ]
+ },
+ {
+ "input": "&lsqb",
+ "description": "Bad named entity: lsqb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsqb"
+ ]
+ ]
+ },
+ {
+ "input": "&lsqb;",
+ "description": "Named entity: lsqb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "["
+ ]
+ ]
+ },
+ {
+ "input": "&lsquo",
+ "description": "Bad named entity: lsquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsquo"
+ ]
+ ]
+ },
+ {
+ "input": "&lsquo;",
+ "description": "Named entity: lsquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2018"
+ ]
+ ]
+ },
+ {
+ "input": "&lsquor",
+ "description": "Bad named entity: lsquor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lsquor"
+ ]
+ ]
+ },
+ {
+ "input": "&lsquor;",
+ "description": "Named entity: lsquor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201a"
+ ]
+ ]
+ },
+ {
+ "input": "&lstrok",
+ "description": "Bad named entity: lstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&lstrok;",
+ "description": "Named entity: lstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0142"
+ ]
+ ]
+ },
+ {
+ "input": "&lt",
+ "description": "Named entity: lt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "<"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 4 }
+ ]
+ },
+ {
+ "input": "&lt;",
+ "description": "Named entity: lt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "<"
+ ]
+ ]
+ },
+ {
+ "input": "&ltcc;",
+ "description": "Named entity: ltcc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa6"
+ ]
+ ]
+ },
+ {
+ "input": "&ltcir;",
+ "description": "Named entity: ltcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a79"
+ ]
+ ]
+ },
+ {
+ "input": "&ltdot;",
+ "description": "Named entity: ltdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d6"
+ ]
+ ]
+ },
+ {
+ "input": "&lthree;",
+ "description": "Named entity: lthree; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cb"
+ ]
+ ]
+ },
+ {
+ "input": "&ltimes;",
+ "description": "Named entity: ltimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c9"
+ ]
+ ]
+ },
+ {
+ "input": "&ltlarr;",
+ "description": "Named entity: ltlarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2976"
+ ]
+ ]
+ },
+ {
+ "input": "&ltquest;",
+ "description": "Named entity: ltquest; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7b"
+ ]
+ ]
+ },
+ {
+ "input": "&ltrPar;",
+ "description": "Named entity: ltrPar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2996"
+ ]
+ ]
+ },
+ {
+ "input": "&ltri;",
+ "description": "Named entity: ltri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25c3"
+ ]
+ ]
+ },
+ {
+ "input": "&ltrie;",
+ "description": "Named entity: ltrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b4"
+ ]
+ ]
+ },
+ {
+ "input": "&ltrif;",
+ "description": "Named entity: ltrif; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25c2"
+ ]
+ ]
+ },
+ {
+ "input": "&lurdshar",
+ "description": "Bad named entity: lurdshar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lurdshar"
+ ]
+ ]
+ },
+ {
+ "input": "&lurdshar;",
+ "description": "Named entity: lurdshar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u294a"
+ ]
+ ]
+ },
+ {
+ "input": "&luruhar",
+ "description": "Bad named entity: luruhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&luruhar"
+ ]
+ ]
+ },
+ {
+ "input": "&luruhar;",
+ "description": "Named entity: luruhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2966"
+ ]
+ ]
+ },
+ {
+ "input": "&lvertneqq",
+ "description": "Bad named entity: lvertneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lvertneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&lvertneqq;",
+ "description": "Named entity: lvertneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2268\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&lvnE",
+ "description": "Bad named entity: lvnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&lvnE"
+ ]
+ ]
+ },
+ {
+ "input": "&lvnE;",
+ "description": "Named entity: lvnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2268\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&mDDot",
+ "description": "Bad named entity: mDDot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mDDot"
+ ]
+ ]
+ },
+ {
+ "input": "&mDDot;",
+ "description": "Named entity: mDDot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223a"
+ ]
+ ]
+ },
+ {
+ "input": "&macr",
+ "description": "Named entity: macr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00af"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&macr;",
+ "description": "Named entity: macr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00af"
+ ]
+ ]
+ },
+ {
+ "input": "&male",
+ "description": "Bad named entity: male without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&male"
+ ]
+ ]
+ },
+ {
+ "input": "&male;",
+ "description": "Named entity: male; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2642"
+ ]
+ ]
+ },
+ {
+ "input": "&malt",
+ "description": "Bad named entity: malt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&malt"
+ ]
+ ]
+ },
+ {
+ "input": "&malt;",
+ "description": "Named entity: malt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2720"
+ ]
+ ]
+ },
+ {
+ "input": "&maltese",
+ "description": "Bad named entity: maltese without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&maltese"
+ ]
+ ]
+ },
+ {
+ "input": "&maltese;",
+ "description": "Named entity: maltese; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2720"
+ ]
+ ]
+ },
+ {
+ "input": "&map",
+ "description": "Bad named entity: map without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&map"
+ ]
+ ]
+ },
+ {
+ "input": "&map;",
+ "description": "Named entity: map; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a6"
+ ]
+ ]
+ },
+ {
+ "input": "&mapsto",
+ "description": "Bad named entity: mapsto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mapsto"
+ ]
+ ]
+ },
+ {
+ "input": "&mapsto;",
+ "description": "Named entity: mapsto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a6"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstodown",
+ "description": "Bad named entity: mapstodown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mapstodown"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstodown;",
+ "description": "Named entity: mapstodown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a7"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstoleft",
+ "description": "Bad named entity: mapstoleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mapstoleft"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstoleft;",
+ "description": "Named entity: mapstoleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a4"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstoup",
+ "description": "Bad named entity: mapstoup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mapstoup"
+ ]
+ ]
+ },
+ {
+ "input": "&mapstoup;",
+ "description": "Named entity: mapstoup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a5"
+ ]
+ ]
+ },
+ {
+ "input": "&marker",
+ "description": "Bad named entity: marker without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&marker"
+ ]
+ ]
+ },
+ {
+ "input": "&marker;",
+ "description": "Named entity: marker; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ae"
+ ]
+ ]
+ },
+ {
+ "input": "&mcomma",
+ "description": "Bad named entity: mcomma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mcomma"
+ ]
+ ]
+ },
+ {
+ "input": "&mcomma;",
+ "description": "Named entity: mcomma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a29"
+ ]
+ ]
+ },
+ {
+ "input": "&mcy",
+ "description": "Bad named entity: mcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mcy"
+ ]
+ ]
+ },
+ {
+ "input": "&mcy;",
+ "description": "Named entity: mcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043c"
+ ]
+ ]
+ },
+ {
+ "input": "&mdash",
+ "description": "Bad named entity: mdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mdash"
+ ]
+ ]
+ },
+ {
+ "input": "&mdash;",
+ "description": "Named entity: mdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2014"
+ ]
+ ]
+ },
+ {
+ "input": "&measuredangle",
+ "description": "Bad named entity: measuredangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&measuredangle"
+ ]
+ ]
+ },
+ {
+ "input": "&measuredangle;",
+ "description": "Named entity: measuredangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2221"
+ ]
+ ]
+ },
+ {
+ "input": "&mfr",
+ "description": "Bad named entity: mfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mfr"
+ ]
+ ]
+ },
+ {
+ "input": "&mfr;",
+ "description": "Named entity: mfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2a"
+ ]
+ ]
+ },
+ {
+ "input": "&mho",
+ "description": "Bad named entity: mho without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mho"
+ ]
+ ]
+ },
+ {
+ "input": "&mho;",
+ "description": "Named entity: mho; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2127"
+ ]
+ ]
+ },
+ {
+ "input": "&micro",
+ "description": "Named entity: micro without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&micro;",
+ "description": "Named entity: micro; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b5"
+ ]
+ ]
+ },
+ {
+ "input": "&mid",
+ "description": "Bad named entity: mid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mid"
+ ]
+ ]
+ },
+ {
+ "input": "&mid;",
+ "description": "Named entity: mid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2223"
+ ]
+ ]
+ },
+ {
+ "input": "&midast",
+ "description": "Bad named entity: midast without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&midast"
+ ]
+ ]
+ },
+ {
+ "input": "&midast;",
+ "description": "Named entity: midast; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "*"
+ ]
+ ]
+ },
+ {
+ "input": "&midcir",
+ "description": "Bad named entity: midcir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&midcir"
+ ]
+ ]
+ },
+ {
+ "input": "&midcir;",
+ "description": "Named entity: midcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2af0"
+ ]
+ ]
+ },
+ {
+ "input": "&middot",
+ "description": "Named entity: middot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&middot;",
+ "description": "Named entity: middot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b7"
+ ]
+ ]
+ },
+ {
+ "input": "&minus",
+ "description": "Bad named entity: minus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&minus"
+ ]
+ ]
+ },
+ {
+ "input": "&minus;",
+ "description": "Named entity: minus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2212"
+ ]
+ ]
+ },
+ {
+ "input": "&minusb",
+ "description": "Bad named entity: minusb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&minusb"
+ ]
+ ]
+ },
+ {
+ "input": "&minusb;",
+ "description": "Named entity: minusb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229f"
+ ]
+ ]
+ },
+ {
+ "input": "&minusd",
+ "description": "Bad named entity: minusd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&minusd"
+ ]
+ ]
+ },
+ {
+ "input": "&minusd;",
+ "description": "Named entity: minusd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2238"
+ ]
+ ]
+ },
+ {
+ "input": "&minusdu",
+ "description": "Bad named entity: minusdu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&minusdu"
+ ]
+ ]
+ },
+ {
+ "input": "&minusdu;",
+ "description": "Named entity: minusdu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a2a"
+ ]
+ ]
+ },
+ {
+ "input": "&mlcp",
+ "description": "Bad named entity: mlcp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mlcp"
+ ]
+ ]
+ },
+ {
+ "input": "&mlcp;",
+ "description": "Named entity: mlcp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2adb"
+ ]
+ ]
+ },
+ {
+ "input": "&mldr",
+ "description": "Bad named entity: mldr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mldr"
+ ]
+ ]
+ },
+ {
+ "input": "&mldr;",
+ "description": "Named entity: mldr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2026"
+ ]
+ ]
+ },
+ {
+ "input": "&mnplus",
+ "description": "Bad named entity: mnplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mnplus"
+ ]
+ ]
+ },
+ {
+ "input": "&mnplus;",
+ "description": "Named entity: mnplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2213"
+ ]
+ ]
+ },
+ {
+ "input": "&models",
+ "description": "Bad named entity: models without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&models"
+ ]
+ ]
+ },
+ {
+ "input": "&models;",
+ "description": "Named entity: models; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a7"
+ ]
+ ]
+ },
+ {
+ "input": "&mopf",
+ "description": "Bad named entity: mopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mopf"
+ ]
+ ]
+ },
+ {
+ "input": "&mopf;",
+ "description": "Named entity: mopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5e"
+ ]
+ ]
+ },
+ {
+ "input": "&mp",
+ "description": "Bad named entity: mp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mp"
+ ]
+ ]
+ },
+ {
+ "input": "&mp;",
+ "description": "Named entity: mp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2213"
+ ]
+ ]
+ },
+ {
+ "input": "&mscr",
+ "description": "Bad named entity: mscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mscr"
+ ]
+ ]
+ },
+ {
+ "input": "&mscr;",
+ "description": "Named entity: mscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc2"
+ ]
+ ]
+ },
+ {
+ "input": "&mstpos",
+ "description": "Bad named entity: mstpos without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mstpos"
+ ]
+ ]
+ },
+ {
+ "input": "&mstpos;",
+ "description": "Named entity: mstpos; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223e"
+ ]
+ ]
+ },
+ {
+ "input": "&mu",
+ "description": "Bad named entity: mu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mu"
+ ]
+ ]
+ },
+ {
+ "input": "&mu;",
+ "description": "Named entity: mu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03bc"
+ ]
+ ]
+ },
+ {
+ "input": "&multimap",
+ "description": "Bad named entity: multimap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&multimap"
+ ]
+ ]
+ },
+ {
+ "input": "&multimap;",
+ "description": "Named entity: multimap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b8"
+ ]
+ ]
+ },
+ {
+ "input": "&mumap",
+ "description": "Bad named entity: mumap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&mumap"
+ ]
+ ]
+ },
+ {
+ "input": "&mumap;",
+ "description": "Named entity: mumap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b8"
+ ]
+ ]
+ },
+ {
+ "input": "&nGg",
+ "description": "Bad named entity: nGg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nGg"
+ ]
+ ]
+ },
+ {
+ "input": "&nGg;",
+ "description": "Named entity: nGg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d9\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nGt",
+ "description": "Bad named entity: nGt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nGt"
+ ]
+ ]
+ },
+ {
+ "input": "&nGt;",
+ "description": "Named entity: nGt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nGtv",
+ "description": "Bad named entity: nGtv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nGtv"
+ ]
+ ]
+ },
+ {
+ "input": "&nGtv;",
+ "description": "Named entity: nGtv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226b\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nLeftarrow",
+ "description": "Bad named entity: nLeftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nLeftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nLeftarrow;",
+ "description": "Named entity: nLeftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cd"
+ ]
+ ]
+ },
+ {
+ "input": "&nLeftrightarrow",
+ "description": "Bad named entity: nLeftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nLeftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nLeftrightarrow;",
+ "description": "Named entity: nLeftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ce"
+ ]
+ ]
+ },
+ {
+ "input": "&nLl",
+ "description": "Bad named entity: nLl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nLl"
+ ]
+ ]
+ },
+ {
+ "input": "&nLl;",
+ "description": "Named entity: nLl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d8\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nLt",
+ "description": "Bad named entity: nLt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nLt"
+ ]
+ ]
+ },
+ {
+ "input": "&nLt;",
+ "description": "Named entity: nLt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nLtv",
+ "description": "Bad named entity: nLtv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nLtv"
+ ]
+ ]
+ },
+ {
+ "input": "&nLtv;",
+ "description": "Named entity: nLtv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226a\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nRightarrow",
+ "description": "Bad named entity: nRightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nRightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nRightarrow;",
+ "description": "Named entity: nRightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cf"
+ ]
+ ]
+ },
+ {
+ "input": "&nVDash",
+ "description": "Bad named entity: nVDash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nVDash"
+ ]
+ ]
+ },
+ {
+ "input": "&nVDash;",
+ "description": "Named entity: nVDash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22af"
+ ]
+ ]
+ },
+ {
+ "input": "&nVdash",
+ "description": "Bad named entity: nVdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nVdash"
+ ]
+ ]
+ },
+ {
+ "input": "&nVdash;",
+ "description": "Named entity: nVdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ae"
+ ]
+ ]
+ },
+ {
+ "input": "&nabla",
+ "description": "Bad named entity: nabla without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nabla"
+ ]
+ ]
+ },
+ {
+ "input": "&nabla;",
+ "description": "Named entity: nabla; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2207"
+ ]
+ ]
+ },
+ {
+ "input": "&nacute",
+ "description": "Bad named entity: nacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nacute"
+ ]
+ ]
+ },
+ {
+ "input": "&nacute;",
+ "description": "Named entity: nacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0144"
+ ]
+ ]
+ },
+ {
+ "input": "&nang",
+ "description": "Bad named entity: nang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nang"
+ ]
+ ]
+ },
+ {
+ "input": "&nang;",
+ "description": "Named entity: nang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2220\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nap",
+ "description": "Bad named entity: nap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nap"
+ ]
+ ]
+ },
+ {
+ "input": "&nap;",
+ "description": "Named entity: nap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2249"
+ ]
+ ]
+ },
+ {
+ "input": "&napE",
+ "description": "Bad named entity: napE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&napE"
+ ]
+ ]
+ },
+ {
+ "input": "&napE;",
+ "description": "Named entity: napE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a70\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&napid",
+ "description": "Bad named entity: napid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&napid"
+ ]
+ ]
+ },
+ {
+ "input": "&napid;",
+ "description": "Named entity: napid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224b\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&napos",
+ "description": "Bad named entity: napos without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&napos"
+ ]
+ ]
+ },
+ {
+ "input": "&napos;",
+ "description": "Named entity: napos; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0149"
+ ]
+ ]
+ },
+ {
+ "input": "&napprox",
+ "description": "Bad named entity: napprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&napprox"
+ ]
+ ]
+ },
+ {
+ "input": "&napprox;",
+ "description": "Named entity: napprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2249"
+ ]
+ ]
+ },
+ {
+ "input": "&natur",
+ "description": "Bad named entity: natur without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&natur"
+ ]
+ ]
+ },
+ {
+ "input": "&natur;",
+ "description": "Named entity: natur; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u266e"
+ ]
+ ]
+ },
+ {
+ "input": "&natural",
+ "description": "Bad named entity: natural without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&natural"
+ ]
+ ]
+ },
+ {
+ "input": "&natural;",
+ "description": "Named entity: natural; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u266e"
+ ]
+ ]
+ },
+ {
+ "input": "&naturals",
+ "description": "Bad named entity: naturals without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&naturals"
+ ]
+ ]
+ },
+ {
+ "input": "&naturals;",
+ "description": "Named entity: naturals; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2115"
+ ]
+ ]
+ },
+ {
+ "input": "&nbsp",
+ "description": "Named entity: nbsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a0"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&nbsp;",
+ "description": "Named entity: nbsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a0"
+ ]
+ ]
+ },
+ {
+ "input": "&nbump",
+ "description": "Bad named entity: nbump without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nbump"
+ ]
+ ]
+ },
+ {
+ "input": "&nbump;",
+ "description": "Named entity: nbump; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224e\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nbumpe",
+ "description": "Bad named entity: nbumpe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nbumpe"
+ ]
+ ]
+ },
+ {
+ "input": "&nbumpe;",
+ "description": "Named entity: nbumpe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224f\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&ncap",
+ "description": "Bad named entity: ncap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncap"
+ ]
+ ]
+ },
+ {
+ "input": "&ncap;",
+ "description": "Named entity: ncap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a43"
+ ]
+ ]
+ },
+ {
+ "input": "&ncaron",
+ "description": "Bad named entity: ncaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncaron"
+ ]
+ ]
+ },
+ {
+ "input": "&ncaron;",
+ "description": "Named entity: ncaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0148"
+ ]
+ ]
+ },
+ {
+ "input": "&ncedil",
+ "description": "Bad named entity: ncedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncedil"
+ ]
+ ]
+ },
+ {
+ "input": "&ncedil;",
+ "description": "Named entity: ncedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0146"
+ ]
+ ]
+ },
+ {
+ "input": "&ncong",
+ "description": "Bad named entity: ncong without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncong"
+ ]
+ ]
+ },
+ {
+ "input": "&ncong;",
+ "description": "Named entity: ncong; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2247"
+ ]
+ ]
+ },
+ {
+ "input": "&ncongdot",
+ "description": "Bad named entity: ncongdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncongdot"
+ ]
+ ]
+ },
+ {
+ "input": "&ncongdot;",
+ "description": "Named entity: ncongdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a6d\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&ncup",
+ "description": "Bad named entity: ncup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncup"
+ ]
+ ]
+ },
+ {
+ "input": "&ncup;",
+ "description": "Named entity: ncup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a42"
+ ]
+ ]
+ },
+ {
+ "input": "&ncy",
+ "description": "Bad named entity: ncy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ncy"
+ ]
+ ]
+ },
+ {
+ "input": "&ncy;",
+ "description": "Named entity: ncy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043d"
+ ]
+ ]
+ },
+ {
+ "input": "&ndash",
+ "description": "Bad named entity: ndash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ndash"
+ ]
+ ]
+ },
+ {
+ "input": "&ndash;",
+ "description": "Named entity: ndash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2013"
+ ]
+ ]
+ },
+ {
+ "input": "&ne",
+ "description": "Bad named entity: ne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ne"
+ ]
+ ]
+ },
+ {
+ "input": "&ne;",
+ "description": "Named entity: ne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2260"
+ ]
+ ]
+ },
+ {
+ "input": "&neArr",
+ "description": "Bad named entity: neArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&neArr"
+ ]
+ ]
+ },
+ {
+ "input": "&neArr;",
+ "description": "Named entity: neArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d7"
+ ]
+ ]
+ },
+ {
+ "input": "&nearhk",
+ "description": "Bad named entity: nearhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nearhk"
+ ]
+ ]
+ },
+ {
+ "input": "&nearhk;",
+ "description": "Named entity: nearhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2924"
+ ]
+ ]
+ },
+ {
+ "input": "&nearr",
+ "description": "Bad named entity: nearr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nearr"
+ ]
+ ]
+ },
+ {
+ "input": "&nearr;",
+ "description": "Named entity: nearr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2197"
+ ]
+ ]
+ },
+ {
+ "input": "&nearrow",
+ "description": "Bad named entity: nearrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nearrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nearrow;",
+ "description": "Named entity: nearrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2197"
+ ]
+ ]
+ },
+ {
+ "input": "&nedot",
+ "description": "Bad named entity: nedot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nedot"
+ ]
+ ]
+ },
+ {
+ "input": "&nedot;",
+ "description": "Named entity: nedot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2250\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nequiv",
+ "description": "Bad named entity: nequiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nequiv"
+ ]
+ ]
+ },
+ {
+ "input": "&nequiv;",
+ "description": "Named entity: nequiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2262"
+ ]
+ ]
+ },
+ {
+ "input": "&nesear",
+ "description": "Bad named entity: nesear without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nesear"
+ ]
+ ]
+ },
+ {
+ "input": "&nesear;",
+ "description": "Named entity: nesear; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2928"
+ ]
+ ]
+ },
+ {
+ "input": "&nesim",
+ "description": "Bad named entity: nesim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nesim"
+ ]
+ ]
+ },
+ {
+ "input": "&nesim;",
+ "description": "Named entity: nesim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2242\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nexist",
+ "description": "Bad named entity: nexist without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nexist"
+ ]
+ ]
+ },
+ {
+ "input": "&nexist;",
+ "description": "Named entity: nexist; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2204"
+ ]
+ ]
+ },
+ {
+ "input": "&nexists",
+ "description": "Bad named entity: nexists without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nexists"
+ ]
+ ]
+ },
+ {
+ "input": "&nexists;",
+ "description": "Named entity: nexists; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2204"
+ ]
+ ]
+ },
+ {
+ "input": "&nfr",
+ "description": "Bad named entity: nfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nfr"
+ ]
+ ]
+ },
+ {
+ "input": "&nfr;",
+ "description": "Named entity: nfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2b"
+ ]
+ ]
+ },
+ {
+ "input": "&ngE",
+ "description": "Bad named entity: ngE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngE"
+ ]
+ ]
+ },
+ {
+ "input": "&ngE;",
+ "description": "Named entity: ngE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nge",
+ "description": "Bad named entity: nge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nge"
+ ]
+ ]
+ },
+ {
+ "input": "&nge;",
+ "description": "Named entity: nge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2271"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeq",
+ "description": "Bad named entity: ngeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngeq"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeq;",
+ "description": "Named entity: ngeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2271"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeqq",
+ "description": "Bad named entity: ngeqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngeqq"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeqq;",
+ "description": "Named entity: ngeqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2267\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeqslant",
+ "description": "Bad named entity: ngeqslant without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngeqslant"
+ ]
+ ]
+ },
+ {
+ "input": "&ngeqslant;",
+ "description": "Named entity: ngeqslant; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nges",
+ "description": "Bad named entity: nges without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nges"
+ ]
+ ]
+ },
+ {
+ "input": "&nges;",
+ "description": "Named entity: nges; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7e\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&ngsim",
+ "description": "Bad named entity: ngsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngsim"
+ ]
+ ]
+ },
+ {
+ "input": "&ngsim;",
+ "description": "Named entity: ngsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2275"
+ ]
+ ]
+ },
+ {
+ "input": "&ngt",
+ "description": "Bad named entity: ngt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngt"
+ ]
+ ]
+ },
+ {
+ "input": "&ngt;",
+ "description": "Named entity: ngt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226f"
+ ]
+ ]
+ },
+ {
+ "input": "&ngtr",
+ "description": "Bad named entity: ngtr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ngtr"
+ ]
+ ]
+ },
+ {
+ "input": "&ngtr;",
+ "description": "Named entity: ngtr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226f"
+ ]
+ ]
+ },
+ {
+ "input": "&nhArr",
+ "description": "Bad named entity: nhArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nhArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nhArr;",
+ "description": "Named entity: nhArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ce"
+ ]
+ ]
+ },
+ {
+ "input": "&nharr",
+ "description": "Bad named entity: nharr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nharr"
+ ]
+ ]
+ },
+ {
+ "input": "&nharr;",
+ "description": "Named entity: nharr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ae"
+ ]
+ ]
+ },
+ {
+ "input": "&nhpar",
+ "description": "Bad named entity: nhpar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nhpar"
+ ]
+ ]
+ },
+ {
+ "input": "&nhpar;",
+ "description": "Named entity: nhpar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2af2"
+ ]
+ ]
+ },
+ {
+ "input": "&ni",
+ "description": "Bad named entity: ni without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ni"
+ ]
+ ]
+ },
+ {
+ "input": "&ni;",
+ "description": "Named entity: ni; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220b"
+ ]
+ ]
+ },
+ {
+ "input": "&nis",
+ "description": "Bad named entity: nis without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nis"
+ ]
+ ]
+ },
+ {
+ "input": "&nis;",
+ "description": "Named entity: nis; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22fc"
+ ]
+ ]
+ },
+ {
+ "input": "&nisd",
+ "description": "Bad named entity: nisd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nisd"
+ ]
+ ]
+ },
+ {
+ "input": "&nisd;",
+ "description": "Named entity: nisd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22fa"
+ ]
+ ]
+ },
+ {
+ "input": "&niv",
+ "description": "Bad named entity: niv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&niv"
+ ]
+ ]
+ },
+ {
+ "input": "&niv;",
+ "description": "Named entity: niv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220b"
+ ]
+ ]
+ },
+ {
+ "input": "&njcy",
+ "description": "Bad named entity: njcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&njcy"
+ ]
+ ]
+ },
+ {
+ "input": "&njcy;",
+ "description": "Named entity: njcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u045a"
+ ]
+ ]
+ },
+ {
+ "input": "&nlArr",
+ "description": "Bad named entity: nlArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nlArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nlArr;",
+ "description": "Named entity: nlArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cd"
+ ]
+ ]
+ },
+ {
+ "input": "&nlE",
+ "description": "Bad named entity: nlE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nlE"
+ ]
+ ]
+ },
+ {
+ "input": "&nlE;",
+ "description": "Named entity: nlE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2266\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nlarr",
+ "description": "Bad named entity: nlarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nlarr"
+ ]
+ ]
+ },
+ {
+ "input": "&nlarr;",
+ "description": "Named entity: nlarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219a"
+ ]
+ ]
+ },
+ {
+ "input": "&nldr",
+ "description": "Bad named entity: nldr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nldr"
+ ]
+ ]
+ },
+ {
+ "input": "&nldr;",
+ "description": "Named entity: nldr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2025"
+ ]
+ ]
+ },
+ {
+ "input": "&nle",
+ "description": "Bad named entity: nle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nle"
+ ]
+ ]
+ },
+ {
+ "input": "&nle;",
+ "description": "Named entity: nle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2270"
+ ]
+ ]
+ },
+ {
+ "input": "&nleftarrow",
+ "description": "Bad named entity: nleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nleftarrow;",
+ "description": "Named entity: nleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219a"
+ ]
+ ]
+ },
+ {
+ "input": "&nleftrightarrow",
+ "description": "Bad named entity: nleftrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nleftrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nleftrightarrow;",
+ "description": "Named entity: nleftrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ae"
+ ]
+ ]
+ },
+ {
+ "input": "&nleq",
+ "description": "Bad named entity: nleq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nleq"
+ ]
+ ]
+ },
+ {
+ "input": "&nleq;",
+ "description": "Named entity: nleq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2270"
+ ]
+ ]
+ },
+ {
+ "input": "&nleqq",
+ "description": "Bad named entity: nleqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nleqq"
+ ]
+ ]
+ },
+ {
+ "input": "&nleqq;",
+ "description": "Named entity: nleqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2266\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nleqslant",
+ "description": "Bad named entity: nleqslant without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nleqslant"
+ ]
+ ]
+ },
+ {
+ "input": "&nleqslant;",
+ "description": "Named entity: nleqslant; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nles",
+ "description": "Bad named entity: nles without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nles"
+ ]
+ ]
+ },
+ {
+ "input": "&nles;",
+ "description": "Named entity: nles; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a7d\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nless",
+ "description": "Bad named entity: nless without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nless"
+ ]
+ ]
+ },
+ {
+ "input": "&nless;",
+ "description": "Named entity: nless; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226e"
+ ]
+ ]
+ },
+ {
+ "input": "&nlsim",
+ "description": "Bad named entity: nlsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nlsim"
+ ]
+ ]
+ },
+ {
+ "input": "&nlsim;",
+ "description": "Named entity: nlsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2274"
+ ]
+ ]
+ },
+ {
+ "input": "&nlt",
+ "description": "Bad named entity: nlt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nlt"
+ ]
+ ]
+ },
+ {
+ "input": "&nlt;",
+ "description": "Named entity: nlt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226e"
+ ]
+ ]
+ },
+ {
+ "input": "&nltri",
+ "description": "Bad named entity: nltri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nltri"
+ ]
+ ]
+ },
+ {
+ "input": "&nltri;",
+ "description": "Named entity: nltri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ea"
+ ]
+ ]
+ },
+ {
+ "input": "&nltrie",
+ "description": "Bad named entity: nltrie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nltrie"
+ ]
+ ]
+ },
+ {
+ "input": "&nltrie;",
+ "description": "Named entity: nltrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ec"
+ ]
+ ]
+ },
+ {
+ "input": "&nmid",
+ "description": "Bad named entity: nmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nmid"
+ ]
+ ]
+ },
+ {
+ "input": "&nmid;",
+ "description": "Named entity: nmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2224"
+ ]
+ ]
+ },
+ {
+ "input": "&nopf",
+ "description": "Bad named entity: nopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nopf"
+ ]
+ ]
+ },
+ {
+ "input": "&nopf;",
+ "description": "Named entity: nopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd5f"
+ ]
+ ]
+ },
+ {
+ "input": "&not",
+ "description": "Named entity: not without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ac"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&not;",
+ "description": "Named entity: not; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ac"
+ ]
+ ]
+ },
+ {
+ "input": "&notin;",
+ "description": "Named entity: notin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2209"
+ ]
+ ]
+ },
+ {
+ "input": "&notinE;",
+ "description": "Named entity: notinE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f9\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&notindot;",
+ "description": "Named entity: notindot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f5\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&notinva;",
+ "description": "Named entity: notinva; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2209"
+ ]
+ ]
+ },
+ {
+ "input": "&notinvb;",
+ "description": "Named entity: notinvb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f7"
+ ]
+ ]
+ },
+ {
+ "input": "&notinvc;",
+ "description": "Named entity: notinvc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f6"
+ ]
+ ]
+ },
+ {
+ "input": "&notni;",
+ "description": "Named entity: notni; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220c"
+ ]
+ ]
+ },
+ {
+ "input": "&notniva;",
+ "description": "Named entity: notniva; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220c"
+ ]
+ ]
+ },
+ {
+ "input": "&notnivb;",
+ "description": "Named entity: notnivb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22fe"
+ ]
+ ]
+ },
+ {
+ "input": "&notnivc;",
+ "description": "Named entity: notnivc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22fd"
+ ]
+ ]
+ },
+ {
+ "input": "&npar",
+ "description": "Bad named entity: npar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npar"
+ ]
+ ]
+ },
+ {
+ "input": "&npar;",
+ "description": "Named entity: npar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2226"
+ ]
+ ]
+ },
+ {
+ "input": "&nparallel",
+ "description": "Bad named entity: nparallel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nparallel"
+ ]
+ ]
+ },
+ {
+ "input": "&nparallel;",
+ "description": "Named entity: nparallel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2226"
+ ]
+ ]
+ },
+ {
+ "input": "&nparsl",
+ "description": "Bad named entity: nparsl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nparsl"
+ ]
+ ]
+ },
+ {
+ "input": "&nparsl;",
+ "description": "Named entity: nparsl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2afd\u20e5"
+ ]
+ ]
+ },
+ {
+ "input": "&npart",
+ "description": "Bad named entity: npart without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npart"
+ ]
+ ]
+ },
+ {
+ "input": "&npart;",
+ "description": "Named entity: npart; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2202\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&npolint",
+ "description": "Bad named entity: npolint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npolint"
+ ]
+ ]
+ },
+ {
+ "input": "&npolint;",
+ "description": "Named entity: npolint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a14"
+ ]
+ ]
+ },
+ {
+ "input": "&npr",
+ "description": "Bad named entity: npr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npr"
+ ]
+ ]
+ },
+ {
+ "input": "&npr;",
+ "description": "Named entity: npr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2280"
+ ]
+ ]
+ },
+ {
+ "input": "&nprcue",
+ "description": "Bad named entity: nprcue without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nprcue"
+ ]
+ ]
+ },
+ {
+ "input": "&nprcue;",
+ "description": "Named entity: nprcue; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e0"
+ ]
+ ]
+ },
+ {
+ "input": "&npre",
+ "description": "Bad named entity: npre without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npre"
+ ]
+ ]
+ },
+ {
+ "input": "&npre;",
+ "description": "Named entity: npre; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nprec",
+ "description": "Bad named entity: nprec without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nprec"
+ ]
+ ]
+ },
+ {
+ "input": "&nprec;",
+ "description": "Named entity: nprec; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2280"
+ ]
+ ]
+ },
+ {
+ "input": "&npreceq",
+ "description": "Bad named entity: npreceq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&npreceq"
+ ]
+ ]
+ },
+ {
+ "input": "&npreceq;",
+ "description": "Named entity: npreceq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nrArr",
+ "description": "Bad named entity: nrArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nrArr;",
+ "description": "Named entity: nrArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cf"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarr",
+ "description": "Bad named entity: nrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarr;",
+ "description": "Named entity: nrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219b"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarrc",
+ "description": "Bad named entity: nrarrc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrarrc"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarrc;",
+ "description": "Named entity: nrarrc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2933\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarrw",
+ "description": "Bad named entity: nrarrw without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrarrw"
+ ]
+ ]
+ },
+ {
+ "input": "&nrarrw;",
+ "description": "Named entity: nrarrw; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219d\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nrightarrow",
+ "description": "Bad named entity: nrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nrightarrow;",
+ "description": "Named entity: nrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219b"
+ ]
+ ]
+ },
+ {
+ "input": "&nrtri",
+ "description": "Bad named entity: nrtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrtri"
+ ]
+ ]
+ },
+ {
+ "input": "&nrtri;",
+ "description": "Named entity: nrtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22eb"
+ ]
+ ]
+ },
+ {
+ "input": "&nrtrie",
+ "description": "Bad named entity: nrtrie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nrtrie"
+ ]
+ ]
+ },
+ {
+ "input": "&nrtrie;",
+ "description": "Named entity: nrtrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ed"
+ ]
+ ]
+ },
+ {
+ "input": "&nsc",
+ "description": "Bad named entity: nsc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsc"
+ ]
+ ]
+ },
+ {
+ "input": "&nsc;",
+ "description": "Named entity: nsc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2281"
+ ]
+ ]
+ },
+ {
+ "input": "&nsccue",
+ "description": "Bad named entity: nsccue without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsccue"
+ ]
+ ]
+ },
+ {
+ "input": "&nsccue;",
+ "description": "Named entity: nsccue; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e1"
+ ]
+ ]
+ },
+ {
+ "input": "&nsce",
+ "description": "Bad named entity: nsce without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsce"
+ ]
+ ]
+ },
+ {
+ "input": "&nsce;",
+ "description": "Named entity: nsce; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nscr",
+ "description": "Bad named entity: nscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nscr"
+ ]
+ ]
+ },
+ {
+ "input": "&nscr;",
+ "description": "Named entity: nscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc3"
+ ]
+ ]
+ },
+ {
+ "input": "&nshortmid",
+ "description": "Bad named entity: nshortmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nshortmid"
+ ]
+ ]
+ },
+ {
+ "input": "&nshortmid;",
+ "description": "Named entity: nshortmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2224"
+ ]
+ ]
+ },
+ {
+ "input": "&nshortparallel",
+ "description": "Bad named entity: nshortparallel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nshortparallel"
+ ]
+ ]
+ },
+ {
+ "input": "&nshortparallel;",
+ "description": "Named entity: nshortparallel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2226"
+ ]
+ ]
+ },
+ {
+ "input": "&nsim",
+ "description": "Bad named entity: nsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsim"
+ ]
+ ]
+ },
+ {
+ "input": "&nsim;",
+ "description": "Named entity: nsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2241"
+ ]
+ ]
+ },
+ {
+ "input": "&nsime",
+ "description": "Bad named entity: nsime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsime"
+ ]
+ ]
+ },
+ {
+ "input": "&nsime;",
+ "description": "Named entity: nsime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2244"
+ ]
+ ]
+ },
+ {
+ "input": "&nsimeq",
+ "description": "Bad named entity: nsimeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsimeq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsimeq;",
+ "description": "Named entity: nsimeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2244"
+ ]
+ ]
+ },
+ {
+ "input": "&nsmid",
+ "description": "Bad named entity: nsmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsmid"
+ ]
+ ]
+ },
+ {
+ "input": "&nsmid;",
+ "description": "Named entity: nsmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2224"
+ ]
+ ]
+ },
+ {
+ "input": "&nspar",
+ "description": "Bad named entity: nspar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nspar"
+ ]
+ ]
+ },
+ {
+ "input": "&nspar;",
+ "description": "Named entity: nspar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2226"
+ ]
+ ]
+ },
+ {
+ "input": "&nsqsube",
+ "description": "Bad named entity: nsqsube without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsqsube"
+ ]
+ ]
+ },
+ {
+ "input": "&nsqsube;",
+ "description": "Named entity: nsqsube; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e2"
+ ]
+ ]
+ },
+ {
+ "input": "&nsqsupe",
+ "description": "Bad named entity: nsqsupe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsqsupe"
+ ]
+ ]
+ },
+ {
+ "input": "&nsqsupe;",
+ "description": "Named entity: nsqsupe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e3"
+ ]
+ ]
+ },
+ {
+ "input": "&nsub",
+ "description": "Bad named entity: nsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsub"
+ ]
+ ]
+ },
+ {
+ "input": "&nsub;",
+ "description": "Named entity: nsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2284"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubE",
+ "description": "Bad named entity: nsubE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsubE"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubE;",
+ "description": "Named entity: nsubE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac5\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nsube",
+ "description": "Bad named entity: nsube without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsube"
+ ]
+ ]
+ },
+ {
+ "input": "&nsube;",
+ "description": "Named entity: nsube; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2288"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubset",
+ "description": "Bad named entity: nsubset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsubset"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubset;",
+ "description": "Named entity: nsubset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2282\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubseteq",
+ "description": "Bad named entity: nsubseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsubseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubseteq;",
+ "description": "Named entity: nsubseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2288"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubseteqq",
+ "description": "Bad named entity: nsubseteqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsubseteqq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsubseteqq;",
+ "description": "Named entity: nsubseteqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac5\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nsucc",
+ "description": "Bad named entity: nsucc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsucc"
+ ]
+ ]
+ },
+ {
+ "input": "&nsucc;",
+ "description": "Named entity: nsucc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2281"
+ ]
+ ]
+ },
+ {
+ "input": "&nsucceq",
+ "description": "Bad named entity: nsucceq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsucceq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsucceq;",
+ "description": "Named entity: nsucceq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nsup",
+ "description": "Bad named entity: nsup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsup"
+ ]
+ ]
+ },
+ {
+ "input": "&nsup;",
+ "description": "Named entity: nsup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2285"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupE",
+ "description": "Bad named entity: nsupE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsupE"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupE;",
+ "description": "Named entity: nsupE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac6\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupe",
+ "description": "Bad named entity: nsupe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsupe"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupe;",
+ "description": "Named entity: nsupe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2289"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupset",
+ "description": "Bad named entity: nsupset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsupset"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupset;",
+ "description": "Named entity: nsupset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupseteq",
+ "description": "Bad named entity: nsupseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsupseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupseteq;",
+ "description": "Named entity: nsupseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2289"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupseteqq",
+ "description": "Bad named entity: nsupseteqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nsupseteqq"
+ ]
+ ]
+ },
+ {
+ "input": "&nsupseteqq;",
+ "description": "Named entity: nsupseteqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac6\u0338"
+ ]
+ ]
+ },
+ {
+ "input": "&ntgl",
+ "description": "Bad named entity: ntgl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntgl"
+ ]
+ ]
+ },
+ {
+ "input": "&ntgl;",
+ "description": "Named entity: ntgl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2279"
+ ]
+ ]
+ },
+ {
+ "input": "&ntilde",
+ "description": "Named entity: ntilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&ntilde;",
+ "description": "Named entity: ntilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f1"
+ ]
+ ]
+ },
+ {
+ "input": "&ntlg",
+ "description": "Bad named entity: ntlg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntlg"
+ ]
+ ]
+ },
+ {
+ "input": "&ntlg;",
+ "description": "Named entity: ntlg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2278"
+ ]
+ ]
+ },
+ {
+ "input": "&ntriangleleft",
+ "description": "Bad named entity: ntriangleleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntriangleleft"
+ ]
+ ]
+ },
+ {
+ "input": "&ntriangleleft;",
+ "description": "Named entity: ntriangleleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ea"
+ ]
+ ]
+ },
+ {
+ "input": "&ntrianglelefteq",
+ "description": "Bad named entity: ntrianglelefteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntrianglelefteq"
+ ]
+ ]
+ },
+ {
+ "input": "&ntrianglelefteq;",
+ "description": "Named entity: ntrianglelefteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ec"
+ ]
+ ]
+ },
+ {
+ "input": "&ntriangleright",
+ "description": "Bad named entity: ntriangleright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntriangleright"
+ ]
+ ]
+ },
+ {
+ "input": "&ntriangleright;",
+ "description": "Named entity: ntriangleright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22eb"
+ ]
+ ]
+ },
+ {
+ "input": "&ntrianglerighteq",
+ "description": "Bad named entity: ntrianglerighteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ntrianglerighteq"
+ ]
+ ]
+ },
+ {
+ "input": "&ntrianglerighteq;",
+ "description": "Named entity: ntrianglerighteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ed"
+ ]
+ ]
+ },
+ {
+ "input": "&nu",
+ "description": "Bad named entity: nu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nu"
+ ]
+ ]
+ },
+ {
+ "input": "&nu;",
+ "description": "Named entity: nu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03bd"
+ ]
+ ]
+ },
+ {
+ "input": "&num",
+ "description": "Bad named entity: num without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&num"
+ ]
+ ]
+ },
+ {
+ "input": "&num;",
+ "description": "Named entity: num; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "#"
+ ]
+ ]
+ },
+ {
+ "input": "&numero",
+ "description": "Bad named entity: numero without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&numero"
+ ]
+ ]
+ },
+ {
+ "input": "&numero;",
+ "description": "Named entity: numero; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2116"
+ ]
+ ]
+ },
+ {
+ "input": "&numsp",
+ "description": "Bad named entity: numsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&numsp"
+ ]
+ ]
+ },
+ {
+ "input": "&numsp;",
+ "description": "Named entity: numsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2007"
+ ]
+ ]
+ },
+ {
+ "input": "&nvDash",
+ "description": "Bad named entity: nvDash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvDash"
+ ]
+ ]
+ },
+ {
+ "input": "&nvDash;",
+ "description": "Named entity: nvDash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ad"
+ ]
+ ]
+ },
+ {
+ "input": "&nvHarr",
+ "description": "Bad named entity: nvHarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvHarr"
+ ]
+ ]
+ },
+ {
+ "input": "&nvHarr;",
+ "description": "Named entity: nvHarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2904"
+ ]
+ ]
+ },
+ {
+ "input": "&nvap",
+ "description": "Bad named entity: nvap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvap"
+ ]
+ ]
+ },
+ {
+ "input": "&nvap;",
+ "description": "Named entity: nvap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u224d\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvdash",
+ "description": "Bad named entity: nvdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvdash"
+ ]
+ ]
+ },
+ {
+ "input": "&nvdash;",
+ "description": "Named entity: nvdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ac"
+ ]
+ ]
+ },
+ {
+ "input": "&nvge",
+ "description": "Bad named entity: nvge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvge"
+ ]
+ ]
+ },
+ {
+ "input": "&nvge;",
+ "description": "Named entity: nvge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2265\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvgt",
+ "description": "Bad named entity: nvgt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvgt"
+ ]
+ ]
+ },
+ {
+ "input": "&nvgt;",
+ "description": "Named entity: nvgt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ">\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvinfin",
+ "description": "Bad named entity: nvinfin without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvinfin"
+ ]
+ ]
+ },
+ {
+ "input": "&nvinfin;",
+ "description": "Named entity: nvinfin; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29de"
+ ]
+ ]
+ },
+ {
+ "input": "&nvlArr",
+ "description": "Bad named entity: nvlArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvlArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nvlArr;",
+ "description": "Named entity: nvlArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2902"
+ ]
+ ]
+ },
+ {
+ "input": "&nvle",
+ "description": "Bad named entity: nvle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvle"
+ ]
+ ]
+ },
+ {
+ "input": "&nvle;",
+ "description": "Named entity: nvle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2264\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvlt",
+ "description": "Bad named entity: nvlt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvlt"
+ ]
+ ]
+ },
+ {
+ "input": "&nvlt;",
+ "description": "Named entity: nvlt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "<\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvltrie",
+ "description": "Bad named entity: nvltrie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvltrie"
+ ]
+ ]
+ },
+ {
+ "input": "&nvltrie;",
+ "description": "Named entity: nvltrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b4\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvrArr",
+ "description": "Bad named entity: nvrArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvrArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nvrArr;",
+ "description": "Named entity: nvrArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2903"
+ ]
+ ]
+ },
+ {
+ "input": "&nvrtrie",
+ "description": "Bad named entity: nvrtrie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvrtrie"
+ ]
+ ]
+ },
+ {
+ "input": "&nvrtrie;",
+ "description": "Named entity: nvrtrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b5\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nvsim",
+ "description": "Bad named entity: nvsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nvsim"
+ ]
+ ]
+ },
+ {
+ "input": "&nvsim;",
+ "description": "Named entity: nvsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223c\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&nwArr",
+ "description": "Bad named entity: nwArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nwArr"
+ ]
+ ]
+ },
+ {
+ "input": "&nwArr;",
+ "description": "Named entity: nwArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d6"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarhk",
+ "description": "Bad named entity: nwarhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nwarhk"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarhk;",
+ "description": "Named entity: nwarhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2923"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarr",
+ "description": "Bad named entity: nwarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nwarr"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarr;",
+ "description": "Named entity: nwarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2196"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarrow",
+ "description": "Bad named entity: nwarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nwarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&nwarrow;",
+ "description": "Named entity: nwarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2196"
+ ]
+ ]
+ },
+ {
+ "input": "&nwnear",
+ "description": "Bad named entity: nwnear without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&nwnear"
+ ]
+ ]
+ },
+ {
+ "input": "&nwnear;",
+ "description": "Named entity: nwnear; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2927"
+ ]
+ ]
+ },
+ {
+ "input": "&oS",
+ "description": "Bad named entity: oS without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oS"
+ ]
+ ]
+ },
+ {
+ "input": "&oS;",
+ "description": "Named entity: oS; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u24c8"
+ ]
+ ]
+ },
+ {
+ "input": "&oacute",
+ "description": "Named entity: oacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&oacute;",
+ "description": "Named entity: oacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f3"
+ ]
+ ]
+ },
+ {
+ "input": "&oast",
+ "description": "Bad named entity: oast without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oast"
+ ]
+ ]
+ },
+ {
+ "input": "&oast;",
+ "description": "Named entity: oast; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229b"
+ ]
+ ]
+ },
+ {
+ "input": "&ocir",
+ "description": "Bad named entity: ocir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ocir"
+ ]
+ ]
+ },
+ {
+ "input": "&ocir;",
+ "description": "Named entity: ocir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229a"
+ ]
+ ]
+ },
+ {
+ "input": "&ocirc",
+ "description": "Named entity: ocirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f4"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&ocirc;",
+ "description": "Named entity: ocirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f4"
+ ]
+ ]
+ },
+ {
+ "input": "&ocy",
+ "description": "Bad named entity: ocy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ocy"
+ ]
+ ]
+ },
+ {
+ "input": "&ocy;",
+ "description": "Named entity: ocy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043e"
+ ]
+ ]
+ },
+ {
+ "input": "&odash",
+ "description": "Bad named entity: odash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&odash"
+ ]
+ ]
+ },
+ {
+ "input": "&odash;",
+ "description": "Named entity: odash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229d"
+ ]
+ ]
+ },
+ {
+ "input": "&odblac",
+ "description": "Bad named entity: odblac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&odblac"
+ ]
+ ]
+ },
+ {
+ "input": "&odblac;",
+ "description": "Named entity: odblac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0151"
+ ]
+ ]
+ },
+ {
+ "input": "&odiv",
+ "description": "Bad named entity: odiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&odiv"
+ ]
+ ]
+ },
+ {
+ "input": "&odiv;",
+ "description": "Named entity: odiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a38"
+ ]
+ ]
+ },
+ {
+ "input": "&odot",
+ "description": "Bad named entity: odot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&odot"
+ ]
+ ]
+ },
+ {
+ "input": "&odot;",
+ "description": "Named entity: odot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2299"
+ ]
+ ]
+ },
+ {
+ "input": "&odsold",
+ "description": "Bad named entity: odsold without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&odsold"
+ ]
+ ]
+ },
+ {
+ "input": "&odsold;",
+ "description": "Named entity: odsold; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29bc"
+ ]
+ ]
+ },
+ {
+ "input": "&oelig",
+ "description": "Bad named entity: oelig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oelig"
+ ]
+ ]
+ },
+ {
+ "input": "&oelig;",
+ "description": "Named entity: oelig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0153"
+ ]
+ ]
+ },
+ {
+ "input": "&ofcir",
+ "description": "Bad named entity: ofcir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ofcir"
+ ]
+ ]
+ },
+ {
+ "input": "&ofcir;",
+ "description": "Named entity: ofcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29bf"
+ ]
+ ]
+ },
+ {
+ "input": "&ofr",
+ "description": "Bad named entity: ofr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ofr"
+ ]
+ ]
+ },
+ {
+ "input": "&ofr;",
+ "description": "Named entity: ofr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2c"
+ ]
+ ]
+ },
+ {
+ "input": "&ogon",
+ "description": "Bad named entity: ogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ogon"
+ ]
+ ]
+ },
+ {
+ "input": "&ogon;",
+ "description": "Named entity: ogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02db"
+ ]
+ ]
+ },
+ {
+ "input": "&ograve",
+ "description": "Named entity: ograve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&ograve;",
+ "description": "Named entity: ograve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f2"
+ ]
+ ]
+ },
+ {
+ "input": "&ogt",
+ "description": "Bad named entity: ogt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ogt"
+ ]
+ ]
+ },
+ {
+ "input": "&ogt;",
+ "description": "Named entity: ogt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c1"
+ ]
+ ]
+ },
+ {
+ "input": "&ohbar",
+ "description": "Bad named entity: ohbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ohbar"
+ ]
+ ]
+ },
+ {
+ "input": "&ohbar;",
+ "description": "Named entity: ohbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b5"
+ ]
+ ]
+ },
+ {
+ "input": "&ohm",
+ "description": "Bad named entity: ohm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ohm"
+ ]
+ ]
+ },
+ {
+ "input": "&ohm;",
+ "description": "Named entity: ohm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03a9"
+ ]
+ ]
+ },
+ {
+ "input": "&oint",
+ "description": "Bad named entity: oint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oint"
+ ]
+ ]
+ },
+ {
+ "input": "&oint;",
+ "description": "Named entity: oint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222e"
+ ]
+ ]
+ },
+ {
+ "input": "&olarr",
+ "description": "Bad named entity: olarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&olarr"
+ ]
+ ]
+ },
+ {
+ "input": "&olarr;",
+ "description": "Named entity: olarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ba"
+ ]
+ ]
+ },
+ {
+ "input": "&olcir",
+ "description": "Bad named entity: olcir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&olcir"
+ ]
+ ]
+ },
+ {
+ "input": "&olcir;",
+ "description": "Named entity: olcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29be"
+ ]
+ ]
+ },
+ {
+ "input": "&olcross",
+ "description": "Bad named entity: olcross without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&olcross"
+ ]
+ ]
+ },
+ {
+ "input": "&olcross;",
+ "description": "Named entity: olcross; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29bb"
+ ]
+ ]
+ },
+ {
+ "input": "&oline",
+ "description": "Bad named entity: oline without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oline"
+ ]
+ ]
+ },
+ {
+ "input": "&oline;",
+ "description": "Named entity: oline; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u203e"
+ ]
+ ]
+ },
+ {
+ "input": "&olt",
+ "description": "Bad named entity: olt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&olt"
+ ]
+ ]
+ },
+ {
+ "input": "&olt;",
+ "description": "Named entity: olt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c0"
+ ]
+ ]
+ },
+ {
+ "input": "&omacr",
+ "description": "Bad named entity: omacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&omacr"
+ ]
+ ]
+ },
+ {
+ "input": "&omacr;",
+ "description": "Named entity: omacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u014d"
+ ]
+ ]
+ },
+ {
+ "input": "&omega",
+ "description": "Bad named entity: omega without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&omega"
+ ]
+ ]
+ },
+ {
+ "input": "&omega;",
+ "description": "Named entity: omega; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c9"
+ ]
+ ]
+ },
+ {
+ "input": "&omicron",
+ "description": "Bad named entity: omicron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&omicron"
+ ]
+ ]
+ },
+ {
+ "input": "&omicron;",
+ "description": "Named entity: omicron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03bf"
+ ]
+ ]
+ },
+ {
+ "input": "&omid",
+ "description": "Bad named entity: omid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&omid"
+ ]
+ ]
+ },
+ {
+ "input": "&omid;",
+ "description": "Named entity: omid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b6"
+ ]
+ ]
+ },
+ {
+ "input": "&ominus",
+ "description": "Bad named entity: ominus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ominus"
+ ]
+ ]
+ },
+ {
+ "input": "&ominus;",
+ "description": "Named entity: ominus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2296"
+ ]
+ ]
+ },
+ {
+ "input": "&oopf",
+ "description": "Bad named entity: oopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oopf"
+ ]
+ ]
+ },
+ {
+ "input": "&oopf;",
+ "description": "Named entity: oopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd60"
+ ]
+ ]
+ },
+ {
+ "input": "&opar",
+ "description": "Bad named entity: opar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&opar"
+ ]
+ ]
+ },
+ {
+ "input": "&opar;",
+ "description": "Named entity: opar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b7"
+ ]
+ ]
+ },
+ {
+ "input": "&operp",
+ "description": "Bad named entity: operp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&operp"
+ ]
+ ]
+ },
+ {
+ "input": "&operp;",
+ "description": "Named entity: operp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b9"
+ ]
+ ]
+ },
+ {
+ "input": "&oplus",
+ "description": "Bad named entity: oplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oplus"
+ ]
+ ]
+ },
+ {
+ "input": "&oplus;",
+ "description": "Named entity: oplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2295"
+ ]
+ ]
+ },
+ {
+ "input": "&or",
+ "description": "Bad named entity: or without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&or"
+ ]
+ ]
+ },
+ {
+ "input": "&or;",
+ "description": "Named entity: or; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2228"
+ ]
+ ]
+ },
+ {
+ "input": "&orarr",
+ "description": "Bad named entity: orarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&orarr"
+ ]
+ ]
+ },
+ {
+ "input": "&orarr;",
+ "description": "Named entity: orarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bb"
+ ]
+ ]
+ },
+ {
+ "input": "&ord",
+ "description": "Bad named entity: ord without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ord"
+ ]
+ ]
+ },
+ {
+ "input": "&ord;",
+ "description": "Named entity: ord; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a5d"
+ ]
+ ]
+ },
+ {
+ "input": "&order",
+ "description": "Bad named entity: order without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&order"
+ ]
+ ]
+ },
+ {
+ "input": "&order;",
+ "description": "Named entity: order; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2134"
+ ]
+ ]
+ },
+ {
+ "input": "&orderof",
+ "description": "Bad named entity: orderof without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&orderof"
+ ]
+ ]
+ },
+ {
+ "input": "&orderof;",
+ "description": "Named entity: orderof; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2134"
+ ]
+ ]
+ },
+ {
+ "input": "&ordf",
+ "description": "Named entity: ordf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00aa"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&ordf;",
+ "description": "Named entity: ordf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00aa"
+ ]
+ ]
+ },
+ {
+ "input": "&ordm",
+ "description": "Named entity: ordm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ba"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&ordm;",
+ "description": "Named entity: ordm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ba"
+ ]
+ ]
+ },
+ {
+ "input": "&origof",
+ "description": "Bad named entity: origof without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&origof"
+ ]
+ ]
+ },
+ {
+ "input": "&origof;",
+ "description": "Named entity: origof; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b6"
+ ]
+ ]
+ },
+ {
+ "input": "&oror",
+ "description": "Bad named entity: oror without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oror"
+ ]
+ ]
+ },
+ {
+ "input": "&oror;",
+ "description": "Named entity: oror; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a56"
+ ]
+ ]
+ },
+ {
+ "input": "&orslope",
+ "description": "Bad named entity: orslope without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&orslope"
+ ]
+ ]
+ },
+ {
+ "input": "&orslope;",
+ "description": "Named entity: orslope; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a57"
+ ]
+ ]
+ },
+ {
+ "input": "&orv",
+ "description": "Bad named entity: orv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&orv"
+ ]
+ ]
+ },
+ {
+ "input": "&orv;",
+ "description": "Named entity: orv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a5b"
+ ]
+ ]
+ },
+ {
+ "input": "&oscr",
+ "description": "Bad named entity: oscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&oscr"
+ ]
+ ]
+ },
+ {
+ "input": "&oscr;",
+ "description": "Named entity: oscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2134"
+ ]
+ ]
+ },
+ {
+ "input": "&oslash",
+ "description": "Named entity: oslash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&oslash;",
+ "description": "Named entity: oslash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f8"
+ ]
+ ]
+ },
+ {
+ "input": "&osol",
+ "description": "Bad named entity: osol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&osol"
+ ]
+ ]
+ },
+ {
+ "input": "&osol;",
+ "description": "Named entity: osol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2298"
+ ]
+ ]
+ },
+ {
+ "input": "&otilde",
+ "description": "Named entity: otilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&otilde;",
+ "description": "Named entity: otilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f5"
+ ]
+ ]
+ },
+ {
+ "input": "&otimes",
+ "description": "Bad named entity: otimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&otimes"
+ ]
+ ]
+ },
+ {
+ "input": "&otimes;",
+ "description": "Named entity: otimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2297"
+ ]
+ ]
+ },
+ {
+ "input": "&otimesas",
+ "description": "Bad named entity: otimesas without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&otimesas"
+ ]
+ ]
+ },
+ {
+ "input": "&otimesas;",
+ "description": "Named entity: otimesas; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a36"
+ ]
+ ]
+ },
+ {
+ "input": "&ouml",
+ "description": "Named entity: ouml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&ouml;",
+ "description": "Named entity: ouml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f6"
+ ]
+ ]
+ },
+ {
+ "input": "&ovbar",
+ "description": "Bad named entity: ovbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ovbar"
+ ]
+ ]
+ },
+ {
+ "input": "&ovbar;",
+ "description": "Named entity: ovbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u233d"
+ ]
+ ]
+ },
+ {
+ "input": "&par",
+ "description": "Bad named entity: par without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&par"
+ ]
+ ]
+ },
+ {
+ "input": "&par;",
+ "description": "Named entity: par; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2225"
+ ]
+ ]
+ },
+ {
+ "input": "&para",
+ "description": "Named entity: para without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b6"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&para;",
+ "description": "Named entity: para; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b6"
+ ]
+ ]
+ },
+ {
+ "input": "&parallel;",
+ "description": "Named entity: parallel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2225"
+ ]
+ ]
+ },
+ {
+ "input": "&parsim",
+ "description": "Bad named entity: parsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&parsim"
+ ]
+ ]
+ },
+ {
+ "input": "&parsim;",
+ "description": "Named entity: parsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2af3"
+ ]
+ ]
+ },
+ {
+ "input": "&parsl",
+ "description": "Bad named entity: parsl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&parsl"
+ ]
+ ]
+ },
+ {
+ "input": "&parsl;",
+ "description": "Named entity: parsl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2afd"
+ ]
+ ]
+ },
+ {
+ "input": "&part",
+ "description": "Bad named entity: part without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&part"
+ ]
+ ]
+ },
+ {
+ "input": "&part;",
+ "description": "Named entity: part; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2202"
+ ]
+ ]
+ },
+ {
+ "input": "&pcy",
+ "description": "Bad named entity: pcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pcy"
+ ]
+ ]
+ },
+ {
+ "input": "&pcy;",
+ "description": "Named entity: pcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u043f"
+ ]
+ ]
+ },
+ {
+ "input": "&percnt",
+ "description": "Bad named entity: percnt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&percnt"
+ ]
+ ]
+ },
+ {
+ "input": "&percnt;",
+ "description": "Named entity: percnt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "%"
+ ]
+ ]
+ },
+ {
+ "input": "&period",
+ "description": "Bad named entity: period without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&period"
+ ]
+ ]
+ },
+ {
+ "input": "&period;",
+ "description": "Named entity: period; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "."
+ ]
+ ]
+ },
+ {
+ "input": "&permil",
+ "description": "Bad named entity: permil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&permil"
+ ]
+ ]
+ },
+ {
+ "input": "&permil;",
+ "description": "Named entity: permil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2030"
+ ]
+ ]
+ },
+ {
+ "input": "&perp",
+ "description": "Bad named entity: perp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&perp"
+ ]
+ ]
+ },
+ {
+ "input": "&perp;",
+ "description": "Named entity: perp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a5"
+ ]
+ ]
+ },
+ {
+ "input": "&pertenk",
+ "description": "Bad named entity: pertenk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pertenk"
+ ]
+ ]
+ },
+ {
+ "input": "&pertenk;",
+ "description": "Named entity: pertenk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2031"
+ ]
+ ]
+ },
+ {
+ "input": "&pfr",
+ "description": "Bad named entity: pfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pfr"
+ ]
+ ]
+ },
+ {
+ "input": "&pfr;",
+ "description": "Named entity: pfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2d"
+ ]
+ ]
+ },
+ {
+ "input": "&phi",
+ "description": "Bad named entity: phi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&phi"
+ ]
+ ]
+ },
+ {
+ "input": "&phi;",
+ "description": "Named entity: phi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c6"
+ ]
+ ]
+ },
+ {
+ "input": "&phiv",
+ "description": "Bad named entity: phiv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&phiv"
+ ]
+ ]
+ },
+ {
+ "input": "&phiv;",
+ "description": "Named entity: phiv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d5"
+ ]
+ ]
+ },
+ {
+ "input": "&phmmat",
+ "description": "Bad named entity: phmmat without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&phmmat"
+ ]
+ ]
+ },
+ {
+ "input": "&phmmat;",
+ "description": "Named entity: phmmat; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2133"
+ ]
+ ]
+ },
+ {
+ "input": "&phone",
+ "description": "Bad named entity: phone without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&phone"
+ ]
+ ]
+ },
+ {
+ "input": "&phone;",
+ "description": "Named entity: phone; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u260e"
+ ]
+ ]
+ },
+ {
+ "input": "&pi",
+ "description": "Bad named entity: pi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pi"
+ ]
+ ]
+ },
+ {
+ "input": "&pi;",
+ "description": "Named entity: pi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c0"
+ ]
+ ]
+ },
+ {
+ "input": "&pitchfork",
+ "description": "Bad named entity: pitchfork without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pitchfork"
+ ]
+ ]
+ },
+ {
+ "input": "&pitchfork;",
+ "description": "Named entity: pitchfork; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22d4"
+ ]
+ ]
+ },
+ {
+ "input": "&piv",
+ "description": "Bad named entity: piv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&piv"
+ ]
+ ]
+ },
+ {
+ "input": "&piv;",
+ "description": "Named entity: piv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d6"
+ ]
+ ]
+ },
+ {
+ "input": "&planck",
+ "description": "Bad named entity: planck without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&planck"
+ ]
+ ]
+ },
+ {
+ "input": "&planck;",
+ "description": "Named entity: planck; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210f"
+ ]
+ ]
+ },
+ {
+ "input": "&planckh",
+ "description": "Bad named entity: planckh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&planckh"
+ ]
+ ]
+ },
+ {
+ "input": "&planckh;",
+ "description": "Named entity: planckh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210e"
+ ]
+ ]
+ },
+ {
+ "input": "&plankv",
+ "description": "Bad named entity: plankv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plankv"
+ ]
+ ]
+ },
+ {
+ "input": "&plankv;",
+ "description": "Named entity: plankv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210f"
+ ]
+ ]
+ },
+ {
+ "input": "&plus",
+ "description": "Bad named entity: plus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plus"
+ ]
+ ]
+ },
+ {
+ "input": "&plus;",
+ "description": "Named entity: plus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "+"
+ ]
+ ]
+ },
+ {
+ "input": "&plusacir",
+ "description": "Bad named entity: plusacir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plusacir"
+ ]
+ ]
+ },
+ {
+ "input": "&plusacir;",
+ "description": "Named entity: plusacir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a23"
+ ]
+ ]
+ },
+ {
+ "input": "&plusb",
+ "description": "Bad named entity: plusb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plusb"
+ ]
+ ]
+ },
+ {
+ "input": "&plusb;",
+ "description": "Named entity: plusb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u229e"
+ ]
+ ]
+ },
+ {
+ "input": "&pluscir",
+ "description": "Bad named entity: pluscir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pluscir"
+ ]
+ ]
+ },
+ {
+ "input": "&pluscir;",
+ "description": "Named entity: pluscir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a22"
+ ]
+ ]
+ },
+ {
+ "input": "&plusdo",
+ "description": "Bad named entity: plusdo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plusdo"
+ ]
+ ]
+ },
+ {
+ "input": "&plusdo;",
+ "description": "Named entity: plusdo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2214"
+ ]
+ ]
+ },
+ {
+ "input": "&plusdu",
+ "description": "Bad named entity: plusdu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plusdu"
+ ]
+ ]
+ },
+ {
+ "input": "&plusdu;",
+ "description": "Named entity: plusdu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a25"
+ ]
+ ]
+ },
+ {
+ "input": "&pluse",
+ "description": "Bad named entity: pluse without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pluse"
+ ]
+ ]
+ },
+ {
+ "input": "&pluse;",
+ "description": "Named entity: pluse; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a72"
+ ]
+ ]
+ },
+ {
+ "input": "&plusmn",
+ "description": "Named entity: plusmn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b1"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&plusmn;",
+ "description": "Named entity: plusmn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b1"
+ ]
+ ]
+ },
+ {
+ "input": "&plussim",
+ "description": "Bad named entity: plussim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plussim"
+ ]
+ ]
+ },
+ {
+ "input": "&plussim;",
+ "description": "Named entity: plussim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a26"
+ ]
+ ]
+ },
+ {
+ "input": "&plustwo",
+ "description": "Bad named entity: plustwo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&plustwo"
+ ]
+ ]
+ },
+ {
+ "input": "&plustwo;",
+ "description": "Named entity: plustwo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a27"
+ ]
+ ]
+ },
+ {
+ "input": "&pm",
+ "description": "Bad named entity: pm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pm"
+ ]
+ ]
+ },
+ {
+ "input": "&pm;",
+ "description": "Named entity: pm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b1"
+ ]
+ ]
+ },
+ {
+ "input": "&pointint",
+ "description": "Bad named entity: pointint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pointint"
+ ]
+ ]
+ },
+ {
+ "input": "&pointint;",
+ "description": "Named entity: pointint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a15"
+ ]
+ ]
+ },
+ {
+ "input": "&popf",
+ "description": "Bad named entity: popf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&popf"
+ ]
+ ]
+ },
+ {
+ "input": "&popf;",
+ "description": "Named entity: popf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd61"
+ ]
+ ]
+ },
+ {
+ "input": "&pound",
+ "description": "Named entity: pound without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&pound;",
+ "description": "Named entity: pound; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a3"
+ ]
+ ]
+ },
+ {
+ "input": "&pr",
+ "description": "Bad named entity: pr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pr"
+ ]
+ ]
+ },
+ {
+ "input": "&pr;",
+ "description": "Named entity: pr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227a"
+ ]
+ ]
+ },
+ {
+ "input": "&prE",
+ "description": "Bad named entity: prE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prE"
+ ]
+ ]
+ },
+ {
+ "input": "&prE;",
+ "description": "Named entity: prE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab3"
+ ]
+ ]
+ },
+ {
+ "input": "&prap",
+ "description": "Bad named entity: prap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prap"
+ ]
+ ]
+ },
+ {
+ "input": "&prap;",
+ "description": "Named entity: prap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab7"
+ ]
+ ]
+ },
+ {
+ "input": "&prcue",
+ "description": "Bad named entity: prcue without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prcue"
+ ]
+ ]
+ },
+ {
+ "input": "&prcue;",
+ "description": "Named entity: prcue; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227c"
+ ]
+ ]
+ },
+ {
+ "input": "&pre",
+ "description": "Bad named entity: pre without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pre"
+ ]
+ ]
+ },
+ {
+ "input": "&pre;",
+ "description": "Named entity: pre; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf"
+ ]
+ ]
+ },
+ {
+ "input": "&prec",
+ "description": "Bad named entity: prec without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prec"
+ ]
+ ]
+ },
+ {
+ "input": "&prec;",
+ "description": "Named entity: prec; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227a"
+ ]
+ ]
+ },
+ {
+ "input": "&precapprox",
+ "description": "Bad named entity: precapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&precapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&precapprox;",
+ "description": "Named entity: precapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab7"
+ ]
+ ]
+ },
+ {
+ "input": "&preccurlyeq",
+ "description": "Bad named entity: preccurlyeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&preccurlyeq"
+ ]
+ ]
+ },
+ {
+ "input": "&preccurlyeq;",
+ "description": "Named entity: preccurlyeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227c"
+ ]
+ ]
+ },
+ {
+ "input": "&preceq",
+ "description": "Bad named entity: preceq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&preceq"
+ ]
+ ]
+ },
+ {
+ "input": "&preceq;",
+ "description": "Named entity: preceq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaf"
+ ]
+ ]
+ },
+ {
+ "input": "&precnapprox",
+ "description": "Bad named entity: precnapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&precnapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&precnapprox;",
+ "description": "Named entity: precnapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab9"
+ ]
+ ]
+ },
+ {
+ "input": "&precneqq",
+ "description": "Bad named entity: precneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&precneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&precneqq;",
+ "description": "Named entity: precneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab5"
+ ]
+ ]
+ },
+ {
+ "input": "&precnsim",
+ "description": "Bad named entity: precnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&precnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&precnsim;",
+ "description": "Named entity: precnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e8"
+ ]
+ ]
+ },
+ {
+ "input": "&precsim",
+ "description": "Bad named entity: precsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&precsim"
+ ]
+ ]
+ },
+ {
+ "input": "&precsim;",
+ "description": "Named entity: precsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227e"
+ ]
+ ]
+ },
+ {
+ "input": "&prime",
+ "description": "Bad named entity: prime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prime"
+ ]
+ ]
+ },
+ {
+ "input": "&prime;",
+ "description": "Named entity: prime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2032"
+ ]
+ ]
+ },
+ {
+ "input": "&primes",
+ "description": "Bad named entity: primes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&primes"
+ ]
+ ]
+ },
+ {
+ "input": "&primes;",
+ "description": "Named entity: primes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2119"
+ ]
+ ]
+ },
+ {
+ "input": "&prnE",
+ "description": "Bad named entity: prnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prnE"
+ ]
+ ]
+ },
+ {
+ "input": "&prnE;",
+ "description": "Named entity: prnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab5"
+ ]
+ ]
+ },
+ {
+ "input": "&prnap",
+ "description": "Bad named entity: prnap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prnap"
+ ]
+ ]
+ },
+ {
+ "input": "&prnap;",
+ "description": "Named entity: prnap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab9"
+ ]
+ ]
+ },
+ {
+ "input": "&prnsim",
+ "description": "Bad named entity: prnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&prnsim;",
+ "description": "Named entity: prnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e8"
+ ]
+ ]
+ },
+ {
+ "input": "&prod",
+ "description": "Bad named entity: prod without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prod"
+ ]
+ ]
+ },
+ {
+ "input": "&prod;",
+ "description": "Named entity: prod; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u220f"
+ ]
+ ]
+ },
+ {
+ "input": "&profalar",
+ "description": "Bad named entity: profalar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&profalar"
+ ]
+ ]
+ },
+ {
+ "input": "&profalar;",
+ "description": "Named entity: profalar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u232e"
+ ]
+ ]
+ },
+ {
+ "input": "&profline",
+ "description": "Bad named entity: profline without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&profline"
+ ]
+ ]
+ },
+ {
+ "input": "&profline;",
+ "description": "Named entity: profline; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2312"
+ ]
+ ]
+ },
+ {
+ "input": "&profsurf",
+ "description": "Bad named entity: profsurf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&profsurf"
+ ]
+ ]
+ },
+ {
+ "input": "&profsurf;",
+ "description": "Named entity: profsurf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2313"
+ ]
+ ]
+ },
+ {
+ "input": "&prop",
+ "description": "Bad named entity: prop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prop"
+ ]
+ ]
+ },
+ {
+ "input": "&prop;",
+ "description": "Named entity: prop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221d"
+ ]
+ ]
+ },
+ {
+ "input": "&propto",
+ "description": "Bad named entity: propto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&propto"
+ ]
+ ]
+ },
+ {
+ "input": "&propto;",
+ "description": "Named entity: propto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221d"
+ ]
+ ]
+ },
+ {
+ "input": "&prsim",
+ "description": "Bad named entity: prsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prsim"
+ ]
+ ]
+ },
+ {
+ "input": "&prsim;",
+ "description": "Named entity: prsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227e"
+ ]
+ ]
+ },
+ {
+ "input": "&prurel",
+ "description": "Bad named entity: prurel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&prurel"
+ ]
+ ]
+ },
+ {
+ "input": "&prurel;",
+ "description": "Named entity: prurel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b0"
+ ]
+ ]
+ },
+ {
+ "input": "&pscr",
+ "description": "Bad named entity: pscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&pscr"
+ ]
+ ]
+ },
+ {
+ "input": "&pscr;",
+ "description": "Named entity: pscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc5"
+ ]
+ ]
+ },
+ {
+ "input": "&psi",
+ "description": "Bad named entity: psi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&psi"
+ ]
+ ]
+ },
+ {
+ "input": "&psi;",
+ "description": "Named entity: psi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c8"
+ ]
+ ]
+ },
+ {
+ "input": "&puncsp",
+ "description": "Bad named entity: puncsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&puncsp"
+ ]
+ ]
+ },
+ {
+ "input": "&puncsp;",
+ "description": "Named entity: puncsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2008"
+ ]
+ ]
+ },
+ {
+ "input": "&qfr",
+ "description": "Bad named entity: qfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&qfr"
+ ]
+ ]
+ },
+ {
+ "input": "&qfr;",
+ "description": "Named entity: qfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2e"
+ ]
+ ]
+ },
+ {
+ "input": "&qint",
+ "description": "Bad named entity: qint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&qint"
+ ]
+ ]
+ },
+ {
+ "input": "&qint;",
+ "description": "Named entity: qint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a0c"
+ ]
+ ]
+ },
+ {
+ "input": "&qopf",
+ "description": "Bad named entity: qopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&qopf"
+ ]
+ ]
+ },
+ {
+ "input": "&qopf;",
+ "description": "Named entity: qopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd62"
+ ]
+ ]
+ },
+ {
+ "input": "&qprime",
+ "description": "Bad named entity: qprime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&qprime"
+ ]
+ ]
+ },
+ {
+ "input": "&qprime;",
+ "description": "Named entity: qprime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2057"
+ ]
+ ]
+ },
+ {
+ "input": "&qscr",
+ "description": "Bad named entity: qscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&qscr"
+ ]
+ ]
+ },
+ {
+ "input": "&qscr;",
+ "description": "Named entity: qscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc6"
+ ]
+ ]
+ },
+ {
+ "input": "&quaternions",
+ "description": "Bad named entity: quaternions without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&quaternions"
+ ]
+ ]
+ },
+ {
+ "input": "&quaternions;",
+ "description": "Named entity: quaternions; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u210d"
+ ]
+ ]
+ },
+ {
+ "input": "&quatint",
+ "description": "Bad named entity: quatint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&quatint"
+ ]
+ ]
+ },
+ {
+ "input": "&quatint;",
+ "description": "Named entity: quatint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a16"
+ ]
+ ]
+ },
+ {
+ "input": "&quest",
+ "description": "Bad named entity: quest without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&quest"
+ ]
+ ]
+ },
+ {
+ "input": "&quest;",
+ "description": "Named entity: quest; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "?"
+ ]
+ ]
+ },
+ {
+ "input": "&questeq",
+ "description": "Bad named entity: questeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&questeq"
+ ]
+ ]
+ },
+ {
+ "input": "&questeq;",
+ "description": "Named entity: questeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u225f"
+ ]
+ ]
+ },
+ {
+ "input": "&quot",
+ "description": "Named entity: quot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\""
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&quot;",
+ "description": "Named entity: quot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\""
+ ]
+ ]
+ },
+ {
+ "input": "&rAarr",
+ "description": "Bad named entity: rAarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rAarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rAarr;",
+ "description": "Named entity: rAarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21db"
+ ]
+ ]
+ },
+ {
+ "input": "&rArr",
+ "description": "Bad named entity: rArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rArr"
+ ]
+ ]
+ },
+ {
+ "input": "&rArr;",
+ "description": "Named entity: rArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d2"
+ ]
+ ]
+ },
+ {
+ "input": "&rAtail",
+ "description": "Bad named entity: rAtail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rAtail"
+ ]
+ ]
+ },
+ {
+ "input": "&rAtail;",
+ "description": "Named entity: rAtail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291c"
+ ]
+ ]
+ },
+ {
+ "input": "&rBarr",
+ "description": "Bad named entity: rBarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rBarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rBarr;",
+ "description": "Named entity: rBarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290f"
+ ]
+ ]
+ },
+ {
+ "input": "&rHar",
+ "description": "Bad named entity: rHar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rHar"
+ ]
+ ]
+ },
+ {
+ "input": "&rHar;",
+ "description": "Named entity: rHar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2964"
+ ]
+ ]
+ },
+ {
+ "input": "&race",
+ "description": "Bad named entity: race without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&race"
+ ]
+ ]
+ },
+ {
+ "input": "&race;",
+ "description": "Named entity: race; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223d\u0331"
+ ]
+ ]
+ },
+ {
+ "input": "&racute",
+ "description": "Bad named entity: racute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&racute"
+ ]
+ ]
+ },
+ {
+ "input": "&racute;",
+ "description": "Named entity: racute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0155"
+ ]
+ ]
+ },
+ {
+ "input": "&radic",
+ "description": "Bad named entity: radic without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&radic"
+ ]
+ ]
+ },
+ {
+ "input": "&radic;",
+ "description": "Named entity: radic; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221a"
+ ]
+ ]
+ },
+ {
+ "input": "&raemptyv",
+ "description": "Bad named entity: raemptyv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&raemptyv"
+ ]
+ ]
+ },
+ {
+ "input": "&raemptyv;",
+ "description": "Named entity: raemptyv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29b3"
+ ]
+ ]
+ },
+ {
+ "input": "&rang",
+ "description": "Bad named entity: rang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rang"
+ ]
+ ]
+ },
+ {
+ "input": "&rang;",
+ "description": "Named entity: rang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e9"
+ ]
+ ]
+ },
+ {
+ "input": "&rangd",
+ "description": "Bad named entity: rangd without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rangd"
+ ]
+ ]
+ },
+ {
+ "input": "&rangd;",
+ "description": "Named entity: rangd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2992"
+ ]
+ ]
+ },
+ {
+ "input": "&range",
+ "description": "Bad named entity: range without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&range"
+ ]
+ ]
+ },
+ {
+ "input": "&range;",
+ "description": "Named entity: range; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a5"
+ ]
+ ]
+ },
+ {
+ "input": "&rangle",
+ "description": "Bad named entity: rangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rangle"
+ ]
+ ]
+ },
+ {
+ "input": "&rangle;",
+ "description": "Named entity: rangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e9"
+ ]
+ ]
+ },
+ {
+ "input": "&raquo",
+ "description": "Named entity: raquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bb"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&raquo;",
+ "description": "Named entity: raquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00bb"
+ ]
+ ]
+ },
+ {
+ "input": "&rarr",
+ "description": "Bad named entity: rarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rarr;",
+ "description": "Named entity: rarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2192"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrap",
+ "description": "Bad named entity: rarrap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrap"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrap;",
+ "description": "Named entity: rarrap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2975"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrb",
+ "description": "Bad named entity: rarrb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrb"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrb;",
+ "description": "Named entity: rarrb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21e5"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrbfs",
+ "description": "Bad named entity: rarrbfs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrbfs"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrbfs;",
+ "description": "Named entity: rarrbfs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2920"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrc",
+ "description": "Bad named entity: rarrc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrc"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrc;",
+ "description": "Named entity: rarrc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2933"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrfs",
+ "description": "Bad named entity: rarrfs without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrfs"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrfs;",
+ "description": "Named entity: rarrfs; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291e"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrhk",
+ "description": "Bad named entity: rarrhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrhk"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrhk;",
+ "description": "Named entity: rarrhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21aa"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrlp",
+ "description": "Bad named entity: rarrlp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrlp"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrlp;",
+ "description": "Named entity: rarrlp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21ac"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrpl",
+ "description": "Bad named entity: rarrpl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrpl"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrpl;",
+ "description": "Named entity: rarrpl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2945"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrsim",
+ "description": "Bad named entity: rarrsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrsim"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrsim;",
+ "description": "Named entity: rarrsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2974"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrtl",
+ "description": "Bad named entity: rarrtl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrtl"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrtl;",
+ "description": "Named entity: rarrtl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a3"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrw",
+ "description": "Bad named entity: rarrw without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rarrw"
+ ]
+ ]
+ },
+ {
+ "input": "&rarrw;",
+ "description": "Named entity: rarrw; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219d"
+ ]
+ ]
+ },
+ {
+ "input": "&ratail",
+ "description": "Bad named entity: ratail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ratail"
+ ]
+ ]
+ },
+ {
+ "input": "&ratail;",
+ "description": "Named entity: ratail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u291a"
+ ]
+ ]
+ },
+ {
+ "input": "&ratio",
+ "description": "Bad named entity: ratio without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ratio"
+ ]
+ ]
+ },
+ {
+ "input": "&ratio;",
+ "description": "Named entity: ratio; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2236"
+ ]
+ ]
+ },
+ {
+ "input": "&rationals",
+ "description": "Bad named entity: rationals without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rationals"
+ ]
+ ]
+ },
+ {
+ "input": "&rationals;",
+ "description": "Named entity: rationals; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211a"
+ ]
+ ]
+ },
+ {
+ "input": "&rbarr",
+ "description": "Bad named entity: rbarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rbarr;",
+ "description": "Named entity: rbarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u290d"
+ ]
+ ]
+ },
+ {
+ "input": "&rbbrk",
+ "description": "Bad named entity: rbbrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbbrk"
+ ]
+ ]
+ },
+ {
+ "input": "&rbbrk;",
+ "description": "Named entity: rbbrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2773"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrace",
+ "description": "Bad named entity: rbrace without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbrace"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrace;",
+ "description": "Named entity: rbrace; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "}"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrack",
+ "description": "Bad named entity: rbrack without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbrack"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrack;",
+ "description": "Named entity: rbrack; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "]"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrke",
+ "description": "Bad named entity: rbrke without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbrke"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrke;",
+ "description": "Named entity: rbrke; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u298c"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrksld",
+ "description": "Bad named entity: rbrksld without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbrksld"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrksld;",
+ "description": "Named entity: rbrksld; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u298e"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrkslu",
+ "description": "Bad named entity: rbrkslu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rbrkslu"
+ ]
+ ]
+ },
+ {
+ "input": "&rbrkslu;",
+ "description": "Named entity: rbrkslu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2990"
+ ]
+ ]
+ },
+ {
+ "input": "&rcaron",
+ "description": "Bad named entity: rcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&rcaron;",
+ "description": "Named entity: rcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0159"
+ ]
+ ]
+ },
+ {
+ "input": "&rcedil",
+ "description": "Bad named entity: rcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&rcedil;",
+ "description": "Named entity: rcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0157"
+ ]
+ ]
+ },
+ {
+ "input": "&rceil",
+ "description": "Bad named entity: rceil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rceil"
+ ]
+ ]
+ },
+ {
+ "input": "&rceil;",
+ "description": "Named entity: rceil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2309"
+ ]
+ ]
+ },
+ {
+ "input": "&rcub",
+ "description": "Bad named entity: rcub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rcub"
+ ]
+ ]
+ },
+ {
+ "input": "&rcub;",
+ "description": "Named entity: rcub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "}"
+ ]
+ ]
+ },
+ {
+ "input": "&rcy",
+ "description": "Bad named entity: rcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rcy"
+ ]
+ ]
+ },
+ {
+ "input": "&rcy;",
+ "description": "Named entity: rcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0440"
+ ]
+ ]
+ },
+ {
+ "input": "&rdca",
+ "description": "Bad named entity: rdca without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rdca"
+ ]
+ ]
+ },
+ {
+ "input": "&rdca;",
+ "description": "Named entity: rdca; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2937"
+ ]
+ ]
+ },
+ {
+ "input": "&rdldhar",
+ "description": "Bad named entity: rdldhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rdldhar"
+ ]
+ ]
+ },
+ {
+ "input": "&rdldhar;",
+ "description": "Named entity: rdldhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2969"
+ ]
+ ]
+ },
+ {
+ "input": "&rdquo",
+ "description": "Bad named entity: rdquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rdquo"
+ ]
+ ]
+ },
+ {
+ "input": "&rdquo;",
+ "description": "Named entity: rdquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201d"
+ ]
+ ]
+ },
+ {
+ "input": "&rdquor",
+ "description": "Bad named entity: rdquor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rdquor"
+ ]
+ ]
+ },
+ {
+ "input": "&rdquor;",
+ "description": "Named entity: rdquor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201d"
+ ]
+ ]
+ },
+ {
+ "input": "&rdsh",
+ "description": "Bad named entity: rdsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rdsh"
+ ]
+ ]
+ },
+ {
+ "input": "&rdsh;",
+ "description": "Named entity: rdsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b3"
+ ]
+ ]
+ },
+ {
+ "input": "&real",
+ "description": "Bad named entity: real without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&real"
+ ]
+ ]
+ },
+ {
+ "input": "&real;",
+ "description": "Named entity: real; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211c"
+ ]
+ ]
+ },
+ {
+ "input": "&realine",
+ "description": "Bad named entity: realine without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&realine"
+ ]
+ ]
+ },
+ {
+ "input": "&realine;",
+ "description": "Named entity: realine; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211b"
+ ]
+ ]
+ },
+ {
+ "input": "&realpart",
+ "description": "Bad named entity: realpart without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&realpart"
+ ]
+ ]
+ },
+ {
+ "input": "&realpart;",
+ "description": "Named entity: realpart; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211c"
+ ]
+ ]
+ },
+ {
+ "input": "&reals",
+ "description": "Bad named entity: reals without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&reals"
+ ]
+ ]
+ },
+ {
+ "input": "&reals;",
+ "description": "Named entity: reals; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211d"
+ ]
+ ]
+ },
+ {
+ "input": "&rect",
+ "description": "Bad named entity: rect without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rect"
+ ]
+ ]
+ },
+ {
+ "input": "&rect;",
+ "description": "Named entity: rect; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ad"
+ ]
+ ]
+ },
+ {
+ "input": "&reg",
+ "description": "Named entity: reg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ae"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&reg;",
+ "description": "Named entity: reg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ae"
+ ]
+ ]
+ },
+ {
+ "input": "&rfisht",
+ "description": "Bad named entity: rfisht without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rfisht"
+ ]
+ ]
+ },
+ {
+ "input": "&rfisht;",
+ "description": "Named entity: rfisht; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u297d"
+ ]
+ ]
+ },
+ {
+ "input": "&rfloor",
+ "description": "Bad named entity: rfloor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rfloor"
+ ]
+ ]
+ },
+ {
+ "input": "&rfloor;",
+ "description": "Named entity: rfloor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230b"
+ ]
+ ]
+ },
+ {
+ "input": "&rfr",
+ "description": "Bad named entity: rfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rfr"
+ ]
+ ]
+ },
+ {
+ "input": "&rfr;",
+ "description": "Named entity: rfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd2f"
+ ]
+ ]
+ },
+ {
+ "input": "&rhard",
+ "description": "Bad named entity: rhard without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rhard"
+ ]
+ ]
+ },
+ {
+ "input": "&rhard;",
+ "description": "Named entity: rhard; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c1"
+ ]
+ ]
+ },
+ {
+ "input": "&rharu",
+ "description": "Bad named entity: rharu without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rharu"
+ ]
+ ]
+ },
+ {
+ "input": "&rharu;",
+ "description": "Named entity: rharu; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c0"
+ ]
+ ]
+ },
+ {
+ "input": "&rharul",
+ "description": "Bad named entity: rharul without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rharul"
+ ]
+ ]
+ },
+ {
+ "input": "&rharul;",
+ "description": "Named entity: rharul; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296c"
+ ]
+ ]
+ },
+ {
+ "input": "&rho",
+ "description": "Bad named entity: rho without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rho"
+ ]
+ ]
+ },
+ {
+ "input": "&rho;",
+ "description": "Named entity: rho; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c1"
+ ]
+ ]
+ },
+ {
+ "input": "&rhov",
+ "description": "Bad named entity: rhov without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rhov"
+ ]
+ ]
+ },
+ {
+ "input": "&rhov;",
+ "description": "Named entity: rhov; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f1"
+ ]
+ ]
+ },
+ {
+ "input": "&rightarrow",
+ "description": "Bad named entity: rightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&rightarrow;",
+ "description": "Named entity: rightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2192"
+ ]
+ ]
+ },
+ {
+ "input": "&rightarrowtail",
+ "description": "Bad named entity: rightarrowtail without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightarrowtail"
+ ]
+ ]
+ },
+ {
+ "input": "&rightarrowtail;",
+ "description": "Named entity: rightarrowtail; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a3"
+ ]
+ ]
+ },
+ {
+ "input": "&rightharpoondown",
+ "description": "Bad named entity: rightharpoondown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightharpoondown"
+ ]
+ ]
+ },
+ {
+ "input": "&rightharpoondown;",
+ "description": "Named entity: rightharpoondown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c1"
+ ]
+ ]
+ },
+ {
+ "input": "&rightharpoonup",
+ "description": "Bad named entity: rightharpoonup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightharpoonup"
+ ]
+ ]
+ },
+ {
+ "input": "&rightharpoonup;",
+ "description": "Named entity: rightharpoonup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c0"
+ ]
+ ]
+ },
+ {
+ "input": "&rightleftarrows",
+ "description": "Bad named entity: rightleftarrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightleftarrows"
+ ]
+ ]
+ },
+ {
+ "input": "&rightleftarrows;",
+ "description": "Named entity: rightleftarrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c4"
+ ]
+ ]
+ },
+ {
+ "input": "&rightleftharpoons",
+ "description": "Bad named entity: rightleftharpoons without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightleftharpoons"
+ ]
+ ]
+ },
+ {
+ "input": "&rightleftharpoons;",
+ "description": "Named entity: rightleftharpoons; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cc"
+ ]
+ ]
+ },
+ {
+ "input": "&rightrightarrows",
+ "description": "Bad named entity: rightrightarrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightrightarrows"
+ ]
+ ]
+ },
+ {
+ "input": "&rightrightarrows;",
+ "description": "Named entity: rightrightarrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c9"
+ ]
+ ]
+ },
+ {
+ "input": "&rightsquigarrow",
+ "description": "Bad named entity: rightsquigarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightsquigarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&rightsquigarrow;",
+ "description": "Named entity: rightsquigarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219d"
+ ]
+ ]
+ },
+ {
+ "input": "&rightthreetimes",
+ "description": "Bad named entity: rightthreetimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rightthreetimes"
+ ]
+ ]
+ },
+ {
+ "input": "&rightthreetimes;",
+ "description": "Named entity: rightthreetimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cc"
+ ]
+ ]
+ },
+ {
+ "input": "&ring",
+ "description": "Bad named entity: ring without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ring"
+ ]
+ ]
+ },
+ {
+ "input": "&ring;",
+ "description": "Named entity: ring; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02da"
+ ]
+ ]
+ },
+ {
+ "input": "&risingdotseq",
+ "description": "Bad named entity: risingdotseq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&risingdotseq"
+ ]
+ ]
+ },
+ {
+ "input": "&risingdotseq;",
+ "description": "Named entity: risingdotseq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2253"
+ ]
+ ]
+ },
+ {
+ "input": "&rlarr",
+ "description": "Bad named entity: rlarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rlarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rlarr;",
+ "description": "Named entity: rlarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c4"
+ ]
+ ]
+ },
+ {
+ "input": "&rlhar",
+ "description": "Bad named entity: rlhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rlhar"
+ ]
+ ]
+ },
+ {
+ "input": "&rlhar;",
+ "description": "Named entity: rlhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21cc"
+ ]
+ ]
+ },
+ {
+ "input": "&rlm",
+ "description": "Bad named entity: rlm without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rlm"
+ ]
+ ]
+ },
+ {
+ "input": "&rlm;",
+ "description": "Named entity: rlm; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200f"
+ ]
+ ]
+ },
+ {
+ "input": "&rmoust",
+ "description": "Bad named entity: rmoust without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rmoust"
+ ]
+ ]
+ },
+ {
+ "input": "&rmoust;",
+ "description": "Named entity: rmoust; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b1"
+ ]
+ ]
+ },
+ {
+ "input": "&rmoustache",
+ "description": "Bad named entity: rmoustache without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rmoustache"
+ ]
+ ]
+ },
+ {
+ "input": "&rmoustache;",
+ "description": "Named entity: rmoustache; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b1"
+ ]
+ ]
+ },
+ {
+ "input": "&rnmid",
+ "description": "Bad named entity: rnmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rnmid"
+ ]
+ ]
+ },
+ {
+ "input": "&rnmid;",
+ "description": "Named entity: rnmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aee"
+ ]
+ ]
+ },
+ {
+ "input": "&roang",
+ "description": "Bad named entity: roang without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&roang"
+ ]
+ ]
+ },
+ {
+ "input": "&roang;",
+ "description": "Named entity: roang; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27ed"
+ ]
+ ]
+ },
+ {
+ "input": "&roarr",
+ "description": "Bad named entity: roarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&roarr"
+ ]
+ ]
+ },
+ {
+ "input": "&roarr;",
+ "description": "Named entity: roarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21fe"
+ ]
+ ]
+ },
+ {
+ "input": "&robrk",
+ "description": "Bad named entity: robrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&robrk"
+ ]
+ ]
+ },
+ {
+ "input": "&robrk;",
+ "description": "Named entity: robrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27e7"
+ ]
+ ]
+ },
+ {
+ "input": "&ropar",
+ "description": "Bad named entity: ropar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ropar"
+ ]
+ ]
+ },
+ {
+ "input": "&ropar;",
+ "description": "Named entity: ropar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2986"
+ ]
+ ]
+ },
+ {
+ "input": "&ropf",
+ "description": "Bad named entity: ropf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ropf"
+ ]
+ ]
+ },
+ {
+ "input": "&ropf;",
+ "description": "Named entity: ropf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd63"
+ ]
+ ]
+ },
+ {
+ "input": "&roplus",
+ "description": "Bad named entity: roplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&roplus"
+ ]
+ ]
+ },
+ {
+ "input": "&roplus;",
+ "description": "Named entity: roplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a2e"
+ ]
+ ]
+ },
+ {
+ "input": "&rotimes",
+ "description": "Bad named entity: rotimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rotimes"
+ ]
+ ]
+ },
+ {
+ "input": "&rotimes;",
+ "description": "Named entity: rotimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a35"
+ ]
+ ]
+ },
+ {
+ "input": "&rpar",
+ "description": "Bad named entity: rpar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rpar"
+ ]
+ ]
+ },
+ {
+ "input": "&rpar;",
+ "description": "Named entity: rpar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ")"
+ ]
+ ]
+ },
+ {
+ "input": "&rpargt",
+ "description": "Bad named entity: rpargt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rpargt"
+ ]
+ ]
+ },
+ {
+ "input": "&rpargt;",
+ "description": "Named entity: rpargt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2994"
+ ]
+ ]
+ },
+ {
+ "input": "&rppolint",
+ "description": "Bad named entity: rppolint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rppolint"
+ ]
+ ]
+ },
+ {
+ "input": "&rppolint;",
+ "description": "Named entity: rppolint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a12"
+ ]
+ ]
+ },
+ {
+ "input": "&rrarr",
+ "description": "Bad named entity: rrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&rrarr;",
+ "description": "Named entity: rrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c9"
+ ]
+ ]
+ },
+ {
+ "input": "&rsaquo",
+ "description": "Bad named entity: rsaquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rsaquo"
+ ]
+ ]
+ },
+ {
+ "input": "&rsaquo;",
+ "description": "Named entity: rsaquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u203a"
+ ]
+ ]
+ },
+ {
+ "input": "&rscr",
+ "description": "Bad named entity: rscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rscr"
+ ]
+ ]
+ },
+ {
+ "input": "&rscr;",
+ "description": "Named entity: rscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc7"
+ ]
+ ]
+ },
+ {
+ "input": "&rsh",
+ "description": "Bad named entity: rsh without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rsh"
+ ]
+ ]
+ },
+ {
+ "input": "&rsh;",
+ "description": "Named entity: rsh; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21b1"
+ ]
+ ]
+ },
+ {
+ "input": "&rsqb",
+ "description": "Bad named entity: rsqb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rsqb"
+ ]
+ ]
+ },
+ {
+ "input": "&rsqb;",
+ "description": "Named entity: rsqb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "]"
+ ]
+ ]
+ },
+ {
+ "input": "&rsquo",
+ "description": "Bad named entity: rsquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rsquo"
+ ]
+ ]
+ },
+ {
+ "input": "&rsquo;",
+ "description": "Named entity: rsquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2019"
+ ]
+ ]
+ },
+ {
+ "input": "&rsquor",
+ "description": "Bad named entity: rsquor without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rsquor"
+ ]
+ ]
+ },
+ {
+ "input": "&rsquor;",
+ "description": "Named entity: rsquor; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2019"
+ ]
+ ]
+ },
+ {
+ "input": "&rthree",
+ "description": "Bad named entity: rthree without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rthree"
+ ]
+ ]
+ },
+ {
+ "input": "&rthree;",
+ "description": "Named entity: rthree; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22cc"
+ ]
+ ]
+ },
+ {
+ "input": "&rtimes",
+ "description": "Bad named entity: rtimes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rtimes"
+ ]
+ ]
+ },
+ {
+ "input": "&rtimes;",
+ "description": "Named entity: rtimes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ca"
+ ]
+ ]
+ },
+ {
+ "input": "&rtri",
+ "description": "Bad named entity: rtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rtri"
+ ]
+ ]
+ },
+ {
+ "input": "&rtri;",
+ "description": "Named entity: rtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b9"
+ ]
+ ]
+ },
+ {
+ "input": "&rtrie",
+ "description": "Bad named entity: rtrie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rtrie"
+ ]
+ ]
+ },
+ {
+ "input": "&rtrie;",
+ "description": "Named entity: rtrie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b5"
+ ]
+ ]
+ },
+ {
+ "input": "&rtrif",
+ "description": "Bad named entity: rtrif without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rtrif"
+ ]
+ ]
+ },
+ {
+ "input": "&rtrif;",
+ "description": "Named entity: rtrif; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b8"
+ ]
+ ]
+ },
+ {
+ "input": "&rtriltri",
+ "description": "Bad named entity: rtriltri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rtriltri"
+ ]
+ ]
+ },
+ {
+ "input": "&rtriltri;",
+ "description": "Named entity: rtriltri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29ce"
+ ]
+ ]
+ },
+ {
+ "input": "&ruluhar",
+ "description": "Bad named entity: ruluhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ruluhar"
+ ]
+ ]
+ },
+ {
+ "input": "&ruluhar;",
+ "description": "Named entity: ruluhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2968"
+ ]
+ ]
+ },
+ {
+ "input": "&rx",
+ "description": "Bad named entity: rx without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&rx"
+ ]
+ ]
+ },
+ {
+ "input": "&rx;",
+ "description": "Named entity: rx; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u211e"
+ ]
+ ]
+ },
+ {
+ "input": "&sacute",
+ "description": "Bad named entity: sacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sacute"
+ ]
+ ]
+ },
+ {
+ "input": "&sacute;",
+ "description": "Named entity: sacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015b"
+ ]
+ ]
+ },
+ {
+ "input": "&sbquo",
+ "description": "Bad named entity: sbquo without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sbquo"
+ ]
+ ]
+ },
+ {
+ "input": "&sbquo;",
+ "description": "Named entity: sbquo; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u201a"
+ ]
+ ]
+ },
+ {
+ "input": "&sc",
+ "description": "Bad named entity: sc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sc"
+ ]
+ ]
+ },
+ {
+ "input": "&sc;",
+ "description": "Named entity: sc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227b"
+ ]
+ ]
+ },
+ {
+ "input": "&scE",
+ "description": "Bad named entity: scE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scE"
+ ]
+ ]
+ },
+ {
+ "input": "&scE;",
+ "description": "Named entity: scE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab4"
+ ]
+ ]
+ },
+ {
+ "input": "&scap",
+ "description": "Bad named entity: scap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scap"
+ ]
+ ]
+ },
+ {
+ "input": "&scap;",
+ "description": "Named entity: scap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab8"
+ ]
+ ]
+ },
+ {
+ "input": "&scaron",
+ "description": "Bad named entity: scaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scaron"
+ ]
+ ]
+ },
+ {
+ "input": "&scaron;",
+ "description": "Named entity: scaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0161"
+ ]
+ ]
+ },
+ {
+ "input": "&sccue",
+ "description": "Bad named entity: sccue without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sccue"
+ ]
+ ]
+ },
+ {
+ "input": "&sccue;",
+ "description": "Named entity: sccue; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227d"
+ ]
+ ]
+ },
+ {
+ "input": "&sce",
+ "description": "Bad named entity: sce without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sce"
+ ]
+ ]
+ },
+ {
+ "input": "&sce;",
+ "description": "Named entity: sce; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0"
+ ]
+ ]
+ },
+ {
+ "input": "&scedil",
+ "description": "Bad named entity: scedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scedil"
+ ]
+ ]
+ },
+ {
+ "input": "&scedil;",
+ "description": "Named entity: scedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015f"
+ ]
+ ]
+ },
+ {
+ "input": "&scirc",
+ "description": "Bad named entity: scirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scirc"
+ ]
+ ]
+ },
+ {
+ "input": "&scirc;",
+ "description": "Named entity: scirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u015d"
+ ]
+ ]
+ },
+ {
+ "input": "&scnE",
+ "description": "Bad named entity: scnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scnE"
+ ]
+ ]
+ },
+ {
+ "input": "&scnE;",
+ "description": "Named entity: scnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab6"
+ ]
+ ]
+ },
+ {
+ "input": "&scnap",
+ "description": "Bad named entity: scnap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scnap"
+ ]
+ ]
+ },
+ {
+ "input": "&scnap;",
+ "description": "Named entity: scnap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aba"
+ ]
+ ]
+ },
+ {
+ "input": "&scnsim",
+ "description": "Bad named entity: scnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&scnsim;",
+ "description": "Named entity: scnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e9"
+ ]
+ ]
+ },
+ {
+ "input": "&scpolint",
+ "description": "Bad named entity: scpolint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scpolint"
+ ]
+ ]
+ },
+ {
+ "input": "&scpolint;",
+ "description": "Named entity: scpolint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a13"
+ ]
+ ]
+ },
+ {
+ "input": "&scsim",
+ "description": "Bad named entity: scsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scsim"
+ ]
+ ]
+ },
+ {
+ "input": "&scsim;",
+ "description": "Named entity: scsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227f"
+ ]
+ ]
+ },
+ {
+ "input": "&scy",
+ "description": "Bad named entity: scy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&scy"
+ ]
+ ]
+ },
+ {
+ "input": "&scy;",
+ "description": "Named entity: scy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0441"
+ ]
+ ]
+ },
+ {
+ "input": "&sdot",
+ "description": "Bad named entity: sdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sdot"
+ ]
+ ]
+ },
+ {
+ "input": "&sdot;",
+ "description": "Named entity: sdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c5"
+ ]
+ ]
+ },
+ {
+ "input": "&sdotb",
+ "description": "Bad named entity: sdotb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sdotb"
+ ]
+ ]
+ },
+ {
+ "input": "&sdotb;",
+ "description": "Named entity: sdotb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a1"
+ ]
+ ]
+ },
+ {
+ "input": "&sdote",
+ "description": "Bad named entity: sdote without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sdote"
+ ]
+ ]
+ },
+ {
+ "input": "&sdote;",
+ "description": "Named entity: sdote; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a66"
+ ]
+ ]
+ },
+ {
+ "input": "&seArr",
+ "description": "Bad named entity: seArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&seArr"
+ ]
+ ]
+ },
+ {
+ "input": "&seArr;",
+ "description": "Named entity: seArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d8"
+ ]
+ ]
+ },
+ {
+ "input": "&searhk",
+ "description": "Bad named entity: searhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&searhk"
+ ]
+ ]
+ },
+ {
+ "input": "&searhk;",
+ "description": "Named entity: searhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2925"
+ ]
+ ]
+ },
+ {
+ "input": "&searr",
+ "description": "Bad named entity: searr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&searr"
+ ]
+ ]
+ },
+ {
+ "input": "&searr;",
+ "description": "Named entity: searr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2198"
+ ]
+ ]
+ },
+ {
+ "input": "&searrow",
+ "description": "Bad named entity: searrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&searrow"
+ ]
+ ]
+ },
+ {
+ "input": "&searrow;",
+ "description": "Named entity: searrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2198"
+ ]
+ ]
+ },
+ {
+ "input": "&sect",
+ "description": "Named entity: sect without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&sect;",
+ "description": "Named entity: sect; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a7"
+ ]
+ ]
+ },
+ {
+ "input": "&semi",
+ "description": "Bad named entity: semi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&semi"
+ ]
+ ]
+ },
+ {
+ "input": "&semi;",
+ "description": "Named entity: semi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ ";"
+ ]
+ ]
+ },
+ {
+ "input": "&seswar",
+ "description": "Bad named entity: seswar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&seswar"
+ ]
+ ]
+ },
+ {
+ "input": "&seswar;",
+ "description": "Named entity: seswar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2929"
+ ]
+ ]
+ },
+ {
+ "input": "&setminus",
+ "description": "Bad named entity: setminus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&setminus"
+ ]
+ ]
+ },
+ {
+ "input": "&setminus;",
+ "description": "Named entity: setminus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2216"
+ ]
+ ]
+ },
+ {
+ "input": "&setmn",
+ "description": "Bad named entity: setmn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&setmn"
+ ]
+ ]
+ },
+ {
+ "input": "&setmn;",
+ "description": "Named entity: setmn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2216"
+ ]
+ ]
+ },
+ {
+ "input": "&sext",
+ "description": "Bad named entity: sext without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sext"
+ ]
+ ]
+ },
+ {
+ "input": "&sext;",
+ "description": "Named entity: sext; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2736"
+ ]
+ ]
+ },
+ {
+ "input": "&sfr",
+ "description": "Bad named entity: sfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sfr"
+ ]
+ ]
+ },
+ {
+ "input": "&sfr;",
+ "description": "Named entity: sfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd30"
+ ]
+ ]
+ },
+ {
+ "input": "&sfrown",
+ "description": "Bad named entity: sfrown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sfrown"
+ ]
+ ]
+ },
+ {
+ "input": "&sfrown;",
+ "description": "Named entity: sfrown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2322"
+ ]
+ ]
+ },
+ {
+ "input": "&sharp",
+ "description": "Bad named entity: sharp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sharp"
+ ]
+ ]
+ },
+ {
+ "input": "&sharp;",
+ "description": "Named entity: sharp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u266f"
+ ]
+ ]
+ },
+ {
+ "input": "&shchcy",
+ "description": "Bad named entity: shchcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&shchcy"
+ ]
+ ]
+ },
+ {
+ "input": "&shchcy;",
+ "description": "Named entity: shchcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0449"
+ ]
+ ]
+ },
+ {
+ "input": "&shcy",
+ "description": "Bad named entity: shcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&shcy"
+ ]
+ ]
+ },
+ {
+ "input": "&shcy;",
+ "description": "Named entity: shcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0448"
+ ]
+ ]
+ },
+ {
+ "input": "&shortmid",
+ "description": "Bad named entity: shortmid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&shortmid"
+ ]
+ ]
+ },
+ {
+ "input": "&shortmid;",
+ "description": "Named entity: shortmid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2223"
+ ]
+ ]
+ },
+ {
+ "input": "&shortparallel",
+ "description": "Bad named entity: shortparallel without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&shortparallel"
+ ]
+ ]
+ },
+ {
+ "input": "&shortparallel;",
+ "description": "Named entity: shortparallel; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2225"
+ ]
+ ]
+ },
+ {
+ "input": "&shy",
+ "description": "Named entity: shy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ad"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&shy;",
+ "description": "Named entity: shy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ad"
+ ]
+ ]
+ },
+ {
+ "input": "&sigma",
+ "description": "Bad named entity: sigma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sigma"
+ ]
+ ]
+ },
+ {
+ "input": "&sigma;",
+ "description": "Named entity: sigma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c3"
+ ]
+ ]
+ },
+ {
+ "input": "&sigmaf",
+ "description": "Bad named entity: sigmaf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sigmaf"
+ ]
+ ]
+ },
+ {
+ "input": "&sigmaf;",
+ "description": "Named entity: sigmaf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c2"
+ ]
+ ]
+ },
+ {
+ "input": "&sigmav",
+ "description": "Bad named entity: sigmav without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sigmav"
+ ]
+ ]
+ },
+ {
+ "input": "&sigmav;",
+ "description": "Named entity: sigmav; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c2"
+ ]
+ ]
+ },
+ {
+ "input": "&sim",
+ "description": "Bad named entity: sim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sim"
+ ]
+ ]
+ },
+ {
+ "input": "&sim;",
+ "description": "Named entity: sim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223c"
+ ]
+ ]
+ },
+ {
+ "input": "&simdot",
+ "description": "Bad named entity: simdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simdot"
+ ]
+ ]
+ },
+ {
+ "input": "&simdot;",
+ "description": "Named entity: simdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a6a"
+ ]
+ ]
+ },
+ {
+ "input": "&sime",
+ "description": "Bad named entity: sime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sime"
+ ]
+ ]
+ },
+ {
+ "input": "&sime;",
+ "description": "Named entity: sime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2243"
+ ]
+ ]
+ },
+ {
+ "input": "&simeq",
+ "description": "Bad named entity: simeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simeq"
+ ]
+ ]
+ },
+ {
+ "input": "&simeq;",
+ "description": "Named entity: simeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2243"
+ ]
+ ]
+ },
+ {
+ "input": "&simg",
+ "description": "Bad named entity: simg without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simg"
+ ]
+ ]
+ },
+ {
+ "input": "&simg;",
+ "description": "Named entity: simg; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a9e"
+ ]
+ ]
+ },
+ {
+ "input": "&simgE",
+ "description": "Bad named entity: simgE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simgE"
+ ]
+ ]
+ },
+ {
+ "input": "&simgE;",
+ "description": "Named entity: simgE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aa0"
+ ]
+ ]
+ },
+ {
+ "input": "&siml",
+ "description": "Bad named entity: siml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&siml"
+ ]
+ ]
+ },
+ {
+ "input": "&siml;",
+ "description": "Named entity: siml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a9d"
+ ]
+ ]
+ },
+ {
+ "input": "&simlE",
+ "description": "Bad named entity: simlE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simlE"
+ ]
+ ]
+ },
+ {
+ "input": "&simlE;",
+ "description": "Named entity: simlE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a9f"
+ ]
+ ]
+ },
+ {
+ "input": "&simne",
+ "description": "Bad named entity: simne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simne"
+ ]
+ ]
+ },
+ {
+ "input": "&simne;",
+ "description": "Named entity: simne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2246"
+ ]
+ ]
+ },
+ {
+ "input": "&simplus",
+ "description": "Bad named entity: simplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simplus"
+ ]
+ ]
+ },
+ {
+ "input": "&simplus;",
+ "description": "Named entity: simplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a24"
+ ]
+ ]
+ },
+ {
+ "input": "&simrarr",
+ "description": "Bad named entity: simrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&simrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&simrarr;",
+ "description": "Named entity: simrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2972"
+ ]
+ ]
+ },
+ {
+ "input": "&slarr",
+ "description": "Bad named entity: slarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&slarr"
+ ]
+ ]
+ },
+ {
+ "input": "&slarr;",
+ "description": "Named entity: slarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2190"
+ ]
+ ]
+ },
+ {
+ "input": "&smallsetminus",
+ "description": "Bad named entity: smallsetminus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smallsetminus"
+ ]
+ ]
+ },
+ {
+ "input": "&smallsetminus;",
+ "description": "Named entity: smallsetminus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2216"
+ ]
+ ]
+ },
+ {
+ "input": "&smashp",
+ "description": "Bad named entity: smashp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smashp"
+ ]
+ ]
+ },
+ {
+ "input": "&smashp;",
+ "description": "Named entity: smashp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a33"
+ ]
+ ]
+ },
+ {
+ "input": "&smeparsl",
+ "description": "Bad named entity: smeparsl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smeparsl"
+ ]
+ ]
+ },
+ {
+ "input": "&smeparsl;",
+ "description": "Named entity: smeparsl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29e4"
+ ]
+ ]
+ },
+ {
+ "input": "&smid",
+ "description": "Bad named entity: smid without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smid"
+ ]
+ ]
+ },
+ {
+ "input": "&smid;",
+ "description": "Named entity: smid; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2223"
+ ]
+ ]
+ },
+ {
+ "input": "&smile",
+ "description": "Bad named entity: smile without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smile"
+ ]
+ ]
+ },
+ {
+ "input": "&smile;",
+ "description": "Named entity: smile; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2323"
+ ]
+ ]
+ },
+ {
+ "input": "&smt",
+ "description": "Bad named entity: smt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smt"
+ ]
+ ]
+ },
+ {
+ "input": "&smt;",
+ "description": "Named entity: smt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aaa"
+ ]
+ ]
+ },
+ {
+ "input": "&smte",
+ "description": "Bad named entity: smte without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smte"
+ ]
+ ]
+ },
+ {
+ "input": "&smte;",
+ "description": "Named entity: smte; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aac"
+ ]
+ ]
+ },
+ {
+ "input": "&smtes",
+ "description": "Bad named entity: smtes without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&smtes"
+ ]
+ ]
+ },
+ {
+ "input": "&smtes;",
+ "description": "Named entity: smtes; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aac\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&softcy",
+ "description": "Bad named entity: softcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&softcy"
+ ]
+ ]
+ },
+ {
+ "input": "&softcy;",
+ "description": "Named entity: softcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044c"
+ ]
+ ]
+ },
+ {
+ "input": "&sol",
+ "description": "Bad named entity: sol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sol"
+ ]
+ ]
+ },
+ {
+ "input": "&sol;",
+ "description": "Named entity: sol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "/"
+ ]
+ ]
+ },
+ {
+ "input": "&solb",
+ "description": "Bad named entity: solb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&solb"
+ ]
+ ]
+ },
+ {
+ "input": "&solb;",
+ "description": "Named entity: solb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29c4"
+ ]
+ ]
+ },
+ {
+ "input": "&solbar",
+ "description": "Bad named entity: solbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&solbar"
+ ]
+ ]
+ },
+ {
+ "input": "&solbar;",
+ "description": "Named entity: solbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u233f"
+ ]
+ ]
+ },
+ {
+ "input": "&sopf",
+ "description": "Bad named entity: sopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sopf"
+ ]
+ ]
+ },
+ {
+ "input": "&sopf;",
+ "description": "Named entity: sopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd64"
+ ]
+ ]
+ },
+ {
+ "input": "&spades",
+ "description": "Bad named entity: spades without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&spades"
+ ]
+ ]
+ },
+ {
+ "input": "&spades;",
+ "description": "Named entity: spades; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2660"
+ ]
+ ]
+ },
+ {
+ "input": "&spadesuit",
+ "description": "Bad named entity: spadesuit without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&spadesuit"
+ ]
+ ]
+ },
+ {
+ "input": "&spadesuit;",
+ "description": "Named entity: spadesuit; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2660"
+ ]
+ ]
+ },
+ {
+ "input": "&spar",
+ "description": "Bad named entity: spar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&spar"
+ ]
+ ]
+ },
+ {
+ "input": "&spar;",
+ "description": "Named entity: spar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2225"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcap",
+ "description": "Bad named entity: sqcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqcap"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcap;",
+ "description": "Named entity: sqcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2293"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcaps",
+ "description": "Bad named entity: sqcaps without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqcaps"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcaps;",
+ "description": "Named entity: sqcaps; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2293\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcup",
+ "description": "Bad named entity: sqcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqcup"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcup;",
+ "description": "Named entity: sqcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2294"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcups",
+ "description": "Bad named entity: sqcups without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqcups"
+ ]
+ ]
+ },
+ {
+ "input": "&sqcups;",
+ "description": "Named entity: sqcups; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2294\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsub",
+ "description": "Bad named entity: sqsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsub"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsub;",
+ "description": "Named entity: sqsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228f"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsube",
+ "description": "Bad named entity: sqsube without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsube"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsube;",
+ "description": "Named entity: sqsube; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2291"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsubset",
+ "description": "Bad named entity: sqsubset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsubset"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsubset;",
+ "description": "Named entity: sqsubset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228f"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsubseteq",
+ "description": "Bad named entity: sqsubseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsubseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsubseteq;",
+ "description": "Named entity: sqsubseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2291"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsup",
+ "description": "Bad named entity: sqsup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsup"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsup;",
+ "description": "Named entity: sqsup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2290"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupe",
+ "description": "Bad named entity: sqsupe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsupe"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupe;",
+ "description": "Named entity: sqsupe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2292"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupset",
+ "description": "Bad named entity: sqsupset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsupset"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupset;",
+ "description": "Named entity: sqsupset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2290"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupseteq",
+ "description": "Bad named entity: sqsupseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sqsupseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&sqsupseteq;",
+ "description": "Named entity: sqsupseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2292"
+ ]
+ ]
+ },
+ {
+ "input": "&squ",
+ "description": "Bad named entity: squ without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&squ"
+ ]
+ ]
+ },
+ {
+ "input": "&squ;",
+ "description": "Named entity: squ; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25a1"
+ ]
+ ]
+ },
+ {
+ "input": "&square",
+ "description": "Bad named entity: square without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&square"
+ ]
+ ]
+ },
+ {
+ "input": "&square;",
+ "description": "Named entity: square; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25a1"
+ ]
+ ]
+ },
+ {
+ "input": "&squarf",
+ "description": "Bad named entity: squarf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&squarf"
+ ]
+ ]
+ },
+ {
+ "input": "&squarf;",
+ "description": "Named entity: squarf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25aa"
+ ]
+ ]
+ },
+ {
+ "input": "&squf",
+ "description": "Bad named entity: squf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&squf"
+ ]
+ ]
+ },
+ {
+ "input": "&squf;",
+ "description": "Named entity: squf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25aa"
+ ]
+ ]
+ },
+ {
+ "input": "&srarr",
+ "description": "Bad named entity: srarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&srarr"
+ ]
+ ]
+ },
+ {
+ "input": "&srarr;",
+ "description": "Named entity: srarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2192"
+ ]
+ ]
+ },
+ {
+ "input": "&sscr",
+ "description": "Bad named entity: sscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sscr"
+ ]
+ ]
+ },
+ {
+ "input": "&sscr;",
+ "description": "Named entity: sscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc8"
+ ]
+ ]
+ },
+ {
+ "input": "&ssetmn",
+ "description": "Bad named entity: ssetmn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ssetmn"
+ ]
+ ]
+ },
+ {
+ "input": "&ssetmn;",
+ "description": "Named entity: ssetmn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2216"
+ ]
+ ]
+ },
+ {
+ "input": "&ssmile",
+ "description": "Bad named entity: ssmile without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ssmile"
+ ]
+ ]
+ },
+ {
+ "input": "&ssmile;",
+ "description": "Named entity: ssmile; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2323"
+ ]
+ ]
+ },
+ {
+ "input": "&sstarf",
+ "description": "Bad named entity: sstarf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sstarf"
+ ]
+ ]
+ },
+ {
+ "input": "&sstarf;",
+ "description": "Named entity: sstarf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c6"
+ ]
+ ]
+ },
+ {
+ "input": "&star",
+ "description": "Bad named entity: star without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&star"
+ ]
+ ]
+ },
+ {
+ "input": "&star;",
+ "description": "Named entity: star; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2606"
+ ]
+ ]
+ },
+ {
+ "input": "&starf",
+ "description": "Bad named entity: starf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&starf"
+ ]
+ ]
+ },
+ {
+ "input": "&starf;",
+ "description": "Named entity: starf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2605"
+ ]
+ ]
+ },
+ {
+ "input": "&straightepsilon",
+ "description": "Bad named entity: straightepsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&straightepsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&straightepsilon;",
+ "description": "Named entity: straightepsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f5"
+ ]
+ ]
+ },
+ {
+ "input": "&straightphi",
+ "description": "Bad named entity: straightphi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&straightphi"
+ ]
+ ]
+ },
+ {
+ "input": "&straightphi;",
+ "description": "Named entity: straightphi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d5"
+ ]
+ ]
+ },
+ {
+ "input": "&strns",
+ "description": "Bad named entity: strns without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&strns"
+ ]
+ ]
+ },
+ {
+ "input": "&strns;",
+ "description": "Named entity: strns; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00af"
+ ]
+ ]
+ },
+ {
+ "input": "&sub",
+ "description": "Bad named entity: sub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sub"
+ ]
+ ]
+ },
+ {
+ "input": "&sub;",
+ "description": "Named entity: sub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2282"
+ ]
+ ]
+ },
+ {
+ "input": "&subE",
+ "description": "Bad named entity: subE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subE"
+ ]
+ ]
+ },
+ {
+ "input": "&subE;",
+ "description": "Named entity: subE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac5"
+ ]
+ ]
+ },
+ {
+ "input": "&subdot",
+ "description": "Bad named entity: subdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subdot"
+ ]
+ ]
+ },
+ {
+ "input": "&subdot;",
+ "description": "Named entity: subdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2abd"
+ ]
+ ]
+ },
+ {
+ "input": "&sube",
+ "description": "Bad named entity: sube without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sube"
+ ]
+ ]
+ },
+ {
+ "input": "&sube;",
+ "description": "Named entity: sube; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2286"
+ ]
+ ]
+ },
+ {
+ "input": "&subedot",
+ "description": "Bad named entity: subedot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subedot"
+ ]
+ ]
+ },
+ {
+ "input": "&subedot;",
+ "description": "Named entity: subedot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac3"
+ ]
+ ]
+ },
+ {
+ "input": "&submult",
+ "description": "Bad named entity: submult without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&submult"
+ ]
+ ]
+ },
+ {
+ "input": "&submult;",
+ "description": "Named entity: submult; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac1"
+ ]
+ ]
+ },
+ {
+ "input": "&subnE",
+ "description": "Bad named entity: subnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subnE"
+ ]
+ ]
+ },
+ {
+ "input": "&subnE;",
+ "description": "Named entity: subnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acb"
+ ]
+ ]
+ },
+ {
+ "input": "&subne",
+ "description": "Bad named entity: subne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subne"
+ ]
+ ]
+ },
+ {
+ "input": "&subne;",
+ "description": "Named entity: subne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228a"
+ ]
+ ]
+ },
+ {
+ "input": "&subplus",
+ "description": "Bad named entity: subplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subplus"
+ ]
+ ]
+ },
+ {
+ "input": "&subplus;",
+ "description": "Named entity: subplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2abf"
+ ]
+ ]
+ },
+ {
+ "input": "&subrarr",
+ "description": "Bad named entity: subrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&subrarr;",
+ "description": "Named entity: subrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2979"
+ ]
+ ]
+ },
+ {
+ "input": "&subset",
+ "description": "Bad named entity: subset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subset"
+ ]
+ ]
+ },
+ {
+ "input": "&subset;",
+ "description": "Named entity: subset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2282"
+ ]
+ ]
+ },
+ {
+ "input": "&subseteq",
+ "description": "Bad named entity: subseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&subseteq;",
+ "description": "Named entity: subseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2286"
+ ]
+ ]
+ },
+ {
+ "input": "&subseteqq",
+ "description": "Bad named entity: subseteqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subseteqq"
+ ]
+ ]
+ },
+ {
+ "input": "&subseteqq;",
+ "description": "Named entity: subseteqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac5"
+ ]
+ ]
+ },
+ {
+ "input": "&subsetneq",
+ "description": "Bad named entity: subsetneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subsetneq"
+ ]
+ ]
+ },
+ {
+ "input": "&subsetneq;",
+ "description": "Named entity: subsetneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228a"
+ ]
+ ]
+ },
+ {
+ "input": "&subsetneqq",
+ "description": "Bad named entity: subsetneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subsetneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&subsetneqq;",
+ "description": "Named entity: subsetneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acb"
+ ]
+ ]
+ },
+ {
+ "input": "&subsim",
+ "description": "Bad named entity: subsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subsim"
+ ]
+ ]
+ },
+ {
+ "input": "&subsim;",
+ "description": "Named entity: subsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac7"
+ ]
+ ]
+ },
+ {
+ "input": "&subsub",
+ "description": "Bad named entity: subsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subsub"
+ ]
+ ]
+ },
+ {
+ "input": "&subsub;",
+ "description": "Named entity: subsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad5"
+ ]
+ ]
+ },
+ {
+ "input": "&subsup",
+ "description": "Bad named entity: subsup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&subsup"
+ ]
+ ]
+ },
+ {
+ "input": "&subsup;",
+ "description": "Named entity: subsup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad3"
+ ]
+ ]
+ },
+ {
+ "input": "&succ",
+ "description": "Bad named entity: succ without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succ"
+ ]
+ ]
+ },
+ {
+ "input": "&succ;",
+ "description": "Named entity: succ; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227b"
+ ]
+ ]
+ },
+ {
+ "input": "&succapprox",
+ "description": "Bad named entity: succapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&succapprox;",
+ "description": "Named entity: succapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab8"
+ ]
+ ]
+ },
+ {
+ "input": "&succcurlyeq",
+ "description": "Bad named entity: succcurlyeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succcurlyeq"
+ ]
+ ]
+ },
+ {
+ "input": "&succcurlyeq;",
+ "description": "Named entity: succcurlyeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227d"
+ ]
+ ]
+ },
+ {
+ "input": "&succeq",
+ "description": "Bad named entity: succeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succeq"
+ ]
+ ]
+ },
+ {
+ "input": "&succeq;",
+ "description": "Named entity: succeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab0"
+ ]
+ ]
+ },
+ {
+ "input": "&succnapprox",
+ "description": "Bad named entity: succnapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succnapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&succnapprox;",
+ "description": "Named entity: succnapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2aba"
+ ]
+ ]
+ },
+ {
+ "input": "&succneqq",
+ "description": "Bad named entity: succneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&succneqq;",
+ "description": "Named entity: succneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ab6"
+ ]
+ ]
+ },
+ {
+ "input": "&succnsim",
+ "description": "Bad named entity: succnsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succnsim"
+ ]
+ ]
+ },
+ {
+ "input": "&succnsim;",
+ "description": "Named entity: succnsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22e9"
+ ]
+ ]
+ },
+ {
+ "input": "&succsim",
+ "description": "Bad named entity: succsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&succsim"
+ ]
+ ]
+ },
+ {
+ "input": "&succsim;",
+ "description": "Named entity: succsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u227f"
+ ]
+ ]
+ },
+ {
+ "input": "&sum",
+ "description": "Bad named entity: sum without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sum"
+ ]
+ ]
+ },
+ {
+ "input": "&sum;",
+ "description": "Named entity: sum; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2211"
+ ]
+ ]
+ },
+ {
+ "input": "&sung",
+ "description": "Bad named entity: sung without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sung"
+ ]
+ ]
+ },
+ {
+ "input": "&sung;",
+ "description": "Named entity: sung; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u266a"
+ ]
+ ]
+ },
+ {
+ "input": "&sup",
+ "description": "Bad named entity: sup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&sup"
+ ]
+ ]
+ },
+ {
+ "input": "&sup1",
+ "description": "Named entity: sup1 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&sup1;",
+ "description": "Named entity: sup1; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b9"
+ ]
+ ]
+ },
+ {
+ "input": "&sup2",
+ "description": "Named entity: sup2 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b2"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&sup2;",
+ "description": "Named entity: sup2; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b2"
+ ]
+ ]
+ },
+ {
+ "input": "&sup3",
+ "description": "Named entity: sup3 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b3"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&sup3;",
+ "description": "Named entity: sup3; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00b3"
+ ]
+ ]
+ },
+ {
+ "input": "&sup;",
+ "description": "Named entity: sup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283"
+ ]
+ ]
+ },
+ {
+ "input": "&supE",
+ "description": "Bad named entity: supE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supE"
+ ]
+ ]
+ },
+ {
+ "input": "&supE;",
+ "description": "Named entity: supE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac6"
+ ]
+ ]
+ },
+ {
+ "input": "&supdot",
+ "description": "Bad named entity: supdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supdot"
+ ]
+ ]
+ },
+ {
+ "input": "&supdot;",
+ "description": "Named entity: supdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2abe"
+ ]
+ ]
+ },
+ {
+ "input": "&supdsub",
+ "description": "Bad named entity: supdsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supdsub"
+ ]
+ ]
+ },
+ {
+ "input": "&supdsub;",
+ "description": "Named entity: supdsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad8"
+ ]
+ ]
+ },
+ {
+ "input": "&supe",
+ "description": "Bad named entity: supe without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supe"
+ ]
+ ]
+ },
+ {
+ "input": "&supe;",
+ "description": "Named entity: supe; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2287"
+ ]
+ ]
+ },
+ {
+ "input": "&supedot",
+ "description": "Bad named entity: supedot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supedot"
+ ]
+ ]
+ },
+ {
+ "input": "&supedot;",
+ "description": "Named entity: supedot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac4"
+ ]
+ ]
+ },
+ {
+ "input": "&suphsol",
+ "description": "Bad named entity: suphsol without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&suphsol"
+ ]
+ ]
+ },
+ {
+ "input": "&suphsol;",
+ "description": "Named entity: suphsol; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27c9"
+ ]
+ ]
+ },
+ {
+ "input": "&suphsub",
+ "description": "Bad named entity: suphsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&suphsub"
+ ]
+ ]
+ },
+ {
+ "input": "&suphsub;",
+ "description": "Named entity: suphsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad7"
+ ]
+ ]
+ },
+ {
+ "input": "&suplarr",
+ "description": "Bad named entity: suplarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&suplarr"
+ ]
+ ]
+ },
+ {
+ "input": "&suplarr;",
+ "description": "Named entity: suplarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u297b"
+ ]
+ ]
+ },
+ {
+ "input": "&supmult",
+ "description": "Bad named entity: supmult without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supmult"
+ ]
+ ]
+ },
+ {
+ "input": "&supmult;",
+ "description": "Named entity: supmult; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac2"
+ ]
+ ]
+ },
+ {
+ "input": "&supnE",
+ "description": "Bad named entity: supnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supnE"
+ ]
+ ]
+ },
+ {
+ "input": "&supnE;",
+ "description": "Named entity: supnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acc"
+ ]
+ ]
+ },
+ {
+ "input": "&supne",
+ "description": "Bad named entity: supne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supne"
+ ]
+ ]
+ },
+ {
+ "input": "&supne;",
+ "description": "Named entity: supne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228b"
+ ]
+ ]
+ },
+ {
+ "input": "&supplus",
+ "description": "Bad named entity: supplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supplus"
+ ]
+ ]
+ },
+ {
+ "input": "&supplus;",
+ "description": "Named entity: supplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac0"
+ ]
+ ]
+ },
+ {
+ "input": "&supset",
+ "description": "Bad named entity: supset without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supset"
+ ]
+ ]
+ },
+ {
+ "input": "&supset;",
+ "description": "Named entity: supset; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283"
+ ]
+ ]
+ },
+ {
+ "input": "&supseteq",
+ "description": "Bad named entity: supseteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supseteq"
+ ]
+ ]
+ },
+ {
+ "input": "&supseteq;",
+ "description": "Named entity: supseteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2287"
+ ]
+ ]
+ },
+ {
+ "input": "&supseteqq",
+ "description": "Bad named entity: supseteqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supseteqq"
+ ]
+ ]
+ },
+ {
+ "input": "&supseteqq;",
+ "description": "Named entity: supseteqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac6"
+ ]
+ ]
+ },
+ {
+ "input": "&supsetneq",
+ "description": "Bad named entity: supsetneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supsetneq"
+ ]
+ ]
+ },
+ {
+ "input": "&supsetneq;",
+ "description": "Named entity: supsetneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228b"
+ ]
+ ]
+ },
+ {
+ "input": "&supsetneqq",
+ "description": "Bad named entity: supsetneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supsetneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&supsetneqq;",
+ "description": "Named entity: supsetneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acc"
+ ]
+ ]
+ },
+ {
+ "input": "&supsim",
+ "description": "Bad named entity: supsim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supsim"
+ ]
+ ]
+ },
+ {
+ "input": "&supsim;",
+ "description": "Named entity: supsim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ac8"
+ ]
+ ]
+ },
+ {
+ "input": "&supsub",
+ "description": "Bad named entity: supsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supsub"
+ ]
+ ]
+ },
+ {
+ "input": "&supsub;",
+ "description": "Named entity: supsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad4"
+ ]
+ ]
+ },
+ {
+ "input": "&supsup",
+ "description": "Bad named entity: supsup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&supsup"
+ ]
+ ]
+ },
+ {
+ "input": "&supsup;",
+ "description": "Named entity: supsup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ad6"
+ ]
+ ]
+ },
+ {
+ "input": "&swArr",
+ "description": "Bad named entity: swArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&swArr"
+ ]
+ ]
+ },
+ {
+ "input": "&swArr;",
+ "description": "Named entity: swArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d9"
+ ]
+ ]
+ },
+ {
+ "input": "&swarhk",
+ "description": "Bad named entity: swarhk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&swarhk"
+ ]
+ ]
+ },
+ {
+ "input": "&swarhk;",
+ "description": "Named entity: swarhk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2926"
+ ]
+ ]
+ },
+ {
+ "input": "&swarr",
+ "description": "Bad named entity: swarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&swarr"
+ ]
+ ]
+ },
+ {
+ "input": "&swarr;",
+ "description": "Named entity: swarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2199"
+ ]
+ ]
+ },
+ {
+ "input": "&swarrow",
+ "description": "Bad named entity: swarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&swarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&swarrow;",
+ "description": "Named entity: swarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2199"
+ ]
+ ]
+ },
+ {
+ "input": "&swnwar",
+ "description": "Bad named entity: swnwar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&swnwar"
+ ]
+ ]
+ },
+ {
+ "input": "&swnwar;",
+ "description": "Named entity: swnwar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u292a"
+ ]
+ ]
+ },
+ {
+ "input": "&szlig",
+ "description": "Named entity: szlig without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00df"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&szlig;",
+ "description": "Named entity: szlig; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00df"
+ ]
+ ]
+ },
+ {
+ "input": "&target",
+ "description": "Bad named entity: target without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&target"
+ ]
+ ]
+ },
+ {
+ "input": "&target;",
+ "description": "Named entity: target; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2316"
+ ]
+ ]
+ },
+ {
+ "input": "&tau",
+ "description": "Bad named entity: tau without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tau"
+ ]
+ ]
+ },
+ {
+ "input": "&tau;",
+ "description": "Named entity: tau; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c4"
+ ]
+ ]
+ },
+ {
+ "input": "&tbrk",
+ "description": "Bad named entity: tbrk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tbrk"
+ ]
+ ]
+ },
+ {
+ "input": "&tbrk;",
+ "description": "Named entity: tbrk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23b4"
+ ]
+ ]
+ },
+ {
+ "input": "&tcaron",
+ "description": "Bad named entity: tcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&tcaron;",
+ "description": "Named entity: tcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0165"
+ ]
+ ]
+ },
+ {
+ "input": "&tcedil",
+ "description": "Bad named entity: tcedil without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tcedil"
+ ]
+ ]
+ },
+ {
+ "input": "&tcedil;",
+ "description": "Named entity: tcedil; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0163"
+ ]
+ ]
+ },
+ {
+ "input": "&tcy",
+ "description": "Bad named entity: tcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tcy"
+ ]
+ ]
+ },
+ {
+ "input": "&tcy;",
+ "description": "Named entity: tcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0442"
+ ]
+ ]
+ },
+ {
+ "input": "&tdot",
+ "description": "Bad named entity: tdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tdot"
+ ]
+ ]
+ },
+ {
+ "input": "&tdot;",
+ "description": "Named entity: tdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u20db"
+ ]
+ ]
+ },
+ {
+ "input": "&telrec",
+ "description": "Bad named entity: telrec without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&telrec"
+ ]
+ ]
+ },
+ {
+ "input": "&telrec;",
+ "description": "Named entity: telrec; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2315"
+ ]
+ ]
+ },
+ {
+ "input": "&tfr",
+ "description": "Bad named entity: tfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tfr"
+ ]
+ ]
+ },
+ {
+ "input": "&tfr;",
+ "description": "Named entity: tfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd31"
+ ]
+ ]
+ },
+ {
+ "input": "&there4",
+ "description": "Bad named entity: there4 without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&there4"
+ ]
+ ]
+ },
+ {
+ "input": "&there4;",
+ "description": "Named entity: there4; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2234"
+ ]
+ ]
+ },
+ {
+ "input": "&therefore",
+ "description": "Bad named entity: therefore without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&therefore"
+ ]
+ ]
+ },
+ {
+ "input": "&therefore;",
+ "description": "Named entity: therefore; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2234"
+ ]
+ ]
+ },
+ {
+ "input": "&theta",
+ "description": "Bad named entity: theta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&theta"
+ ]
+ ]
+ },
+ {
+ "input": "&theta;",
+ "description": "Named entity: theta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b8"
+ ]
+ ]
+ },
+ {
+ "input": "&thetasym",
+ "description": "Bad named entity: thetasym without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thetasym"
+ ]
+ ]
+ },
+ {
+ "input": "&thetasym;",
+ "description": "Named entity: thetasym; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d1"
+ ]
+ ]
+ },
+ {
+ "input": "&thetav",
+ "description": "Bad named entity: thetav without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thetav"
+ ]
+ ]
+ },
+ {
+ "input": "&thetav;",
+ "description": "Named entity: thetav; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d1"
+ ]
+ ]
+ },
+ {
+ "input": "&thickapprox",
+ "description": "Bad named entity: thickapprox without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thickapprox"
+ ]
+ ]
+ },
+ {
+ "input": "&thickapprox;",
+ "description": "Named entity: thickapprox; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&thicksim",
+ "description": "Bad named entity: thicksim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thicksim"
+ ]
+ ]
+ },
+ {
+ "input": "&thicksim;",
+ "description": "Named entity: thicksim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223c"
+ ]
+ ]
+ },
+ {
+ "input": "&thinsp",
+ "description": "Bad named entity: thinsp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thinsp"
+ ]
+ ]
+ },
+ {
+ "input": "&thinsp;",
+ "description": "Named entity: thinsp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2009"
+ ]
+ ]
+ },
+ {
+ "input": "&thkap",
+ "description": "Bad named entity: thkap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thkap"
+ ]
+ ]
+ },
+ {
+ "input": "&thkap;",
+ "description": "Named entity: thkap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2248"
+ ]
+ ]
+ },
+ {
+ "input": "&thksim",
+ "description": "Bad named entity: thksim without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&thksim"
+ ]
+ ]
+ },
+ {
+ "input": "&thksim;",
+ "description": "Named entity: thksim; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u223c"
+ ]
+ ]
+ },
+ {
+ "input": "&thorn",
+ "description": "Named entity: thorn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fe"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&thorn;",
+ "description": "Named entity: thorn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fe"
+ ]
+ ]
+ },
+ {
+ "input": "&tilde",
+ "description": "Bad named entity: tilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tilde"
+ ]
+ ]
+ },
+ {
+ "input": "&tilde;",
+ "description": "Named entity: tilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u02dc"
+ ]
+ ]
+ },
+ {
+ "input": "&times",
+ "description": "Named entity: times without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d7"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&times;",
+ "description": "Named entity: times; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00d7"
+ ]
+ ]
+ },
+ {
+ "input": "&timesb;",
+ "description": "Named entity: timesb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a0"
+ ]
+ ]
+ },
+ {
+ "input": "&timesbar;",
+ "description": "Named entity: timesbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a31"
+ ]
+ ]
+ },
+ {
+ "input": "&timesd;",
+ "description": "Named entity: timesd; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a30"
+ ]
+ ]
+ },
+ {
+ "input": "&tint",
+ "description": "Bad named entity: tint without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tint"
+ ]
+ ]
+ },
+ {
+ "input": "&tint;",
+ "description": "Named entity: tint; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u222d"
+ ]
+ ]
+ },
+ {
+ "input": "&toea",
+ "description": "Bad named entity: toea without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&toea"
+ ]
+ ]
+ },
+ {
+ "input": "&toea;",
+ "description": "Named entity: toea; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2928"
+ ]
+ ]
+ },
+ {
+ "input": "&top",
+ "description": "Bad named entity: top without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&top"
+ ]
+ ]
+ },
+ {
+ "input": "&top;",
+ "description": "Named entity: top; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a4"
+ ]
+ ]
+ },
+ {
+ "input": "&topbot",
+ "description": "Bad named entity: topbot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&topbot"
+ ]
+ ]
+ },
+ {
+ "input": "&topbot;",
+ "description": "Named entity: topbot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2336"
+ ]
+ ]
+ },
+ {
+ "input": "&topcir",
+ "description": "Bad named entity: topcir without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&topcir"
+ ]
+ ]
+ },
+ {
+ "input": "&topcir;",
+ "description": "Named entity: topcir; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2af1"
+ ]
+ ]
+ },
+ {
+ "input": "&topf",
+ "description": "Bad named entity: topf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&topf"
+ ]
+ ]
+ },
+ {
+ "input": "&topf;",
+ "description": "Named entity: topf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd65"
+ ]
+ ]
+ },
+ {
+ "input": "&topfork",
+ "description": "Bad named entity: topfork without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&topfork"
+ ]
+ ]
+ },
+ {
+ "input": "&topfork;",
+ "description": "Named entity: topfork; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ada"
+ ]
+ ]
+ },
+ {
+ "input": "&tosa",
+ "description": "Bad named entity: tosa without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tosa"
+ ]
+ ]
+ },
+ {
+ "input": "&tosa;",
+ "description": "Named entity: tosa; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2929"
+ ]
+ ]
+ },
+ {
+ "input": "&tprime",
+ "description": "Bad named entity: tprime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tprime"
+ ]
+ ]
+ },
+ {
+ "input": "&tprime;",
+ "description": "Named entity: tprime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2034"
+ ]
+ ]
+ },
+ {
+ "input": "&trade",
+ "description": "Bad named entity: trade without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trade"
+ ]
+ ]
+ },
+ {
+ "input": "&trade;",
+ "description": "Named entity: trade; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2122"
+ ]
+ ]
+ },
+ {
+ "input": "&triangle",
+ "description": "Bad named entity: triangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triangle"
+ ]
+ ]
+ },
+ {
+ "input": "&triangle;",
+ "description": "Named entity: triangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b5"
+ ]
+ ]
+ },
+ {
+ "input": "&triangledown",
+ "description": "Bad named entity: triangledown without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triangledown"
+ ]
+ ]
+ },
+ {
+ "input": "&triangledown;",
+ "description": "Named entity: triangledown; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25bf"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleleft",
+ "description": "Bad named entity: triangleleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triangleleft"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleleft;",
+ "description": "Named entity: triangleleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25c3"
+ ]
+ ]
+ },
+ {
+ "input": "&trianglelefteq",
+ "description": "Bad named entity: trianglelefteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trianglelefteq"
+ ]
+ ]
+ },
+ {
+ "input": "&trianglelefteq;",
+ "description": "Named entity: trianglelefteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b4"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleq",
+ "description": "Bad named entity: triangleq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triangleq"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleq;",
+ "description": "Named entity: triangleq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u225c"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleright",
+ "description": "Bad named entity: triangleright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triangleright"
+ ]
+ ]
+ },
+ {
+ "input": "&triangleright;",
+ "description": "Named entity: triangleright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b9"
+ ]
+ ]
+ },
+ {
+ "input": "&trianglerighteq",
+ "description": "Bad named entity: trianglerighteq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trianglerighteq"
+ ]
+ ]
+ },
+ {
+ "input": "&trianglerighteq;",
+ "description": "Named entity: trianglerighteq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b5"
+ ]
+ ]
+ },
+ {
+ "input": "&tridot",
+ "description": "Bad named entity: tridot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tridot"
+ ]
+ ]
+ },
+ {
+ "input": "&tridot;",
+ "description": "Named entity: tridot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ec"
+ ]
+ ]
+ },
+ {
+ "input": "&trie",
+ "description": "Bad named entity: trie without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trie"
+ ]
+ ]
+ },
+ {
+ "input": "&trie;",
+ "description": "Named entity: trie; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u225c"
+ ]
+ ]
+ },
+ {
+ "input": "&triminus",
+ "description": "Bad named entity: triminus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triminus"
+ ]
+ ]
+ },
+ {
+ "input": "&triminus;",
+ "description": "Named entity: triminus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a3a"
+ ]
+ ]
+ },
+ {
+ "input": "&triplus",
+ "description": "Bad named entity: triplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&triplus"
+ ]
+ ]
+ },
+ {
+ "input": "&triplus;",
+ "description": "Named entity: triplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a39"
+ ]
+ ]
+ },
+ {
+ "input": "&trisb",
+ "description": "Bad named entity: trisb without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trisb"
+ ]
+ ]
+ },
+ {
+ "input": "&trisb;",
+ "description": "Named entity: trisb; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29cd"
+ ]
+ ]
+ },
+ {
+ "input": "&tritime",
+ "description": "Bad named entity: tritime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tritime"
+ ]
+ ]
+ },
+ {
+ "input": "&tritime;",
+ "description": "Named entity: tritime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a3b"
+ ]
+ ]
+ },
+ {
+ "input": "&trpezium",
+ "description": "Bad named entity: trpezium without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&trpezium"
+ ]
+ ]
+ },
+ {
+ "input": "&trpezium;",
+ "description": "Named entity: trpezium; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u23e2"
+ ]
+ ]
+ },
+ {
+ "input": "&tscr",
+ "description": "Bad named entity: tscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tscr"
+ ]
+ ]
+ },
+ {
+ "input": "&tscr;",
+ "description": "Named entity: tscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcc9"
+ ]
+ ]
+ },
+ {
+ "input": "&tscy",
+ "description": "Bad named entity: tscy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tscy"
+ ]
+ ]
+ },
+ {
+ "input": "&tscy;",
+ "description": "Named entity: tscy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0446"
+ ]
+ ]
+ },
+ {
+ "input": "&tshcy",
+ "description": "Bad named entity: tshcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tshcy"
+ ]
+ ]
+ },
+ {
+ "input": "&tshcy;",
+ "description": "Named entity: tshcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u045b"
+ ]
+ ]
+ },
+ {
+ "input": "&tstrok",
+ "description": "Bad named entity: tstrok without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&tstrok"
+ ]
+ ]
+ },
+ {
+ "input": "&tstrok;",
+ "description": "Named entity: tstrok; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0167"
+ ]
+ ]
+ },
+ {
+ "input": "&twixt",
+ "description": "Bad named entity: twixt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&twixt"
+ ]
+ ]
+ },
+ {
+ "input": "&twixt;",
+ "description": "Named entity: twixt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u226c"
+ ]
+ ]
+ },
+ {
+ "input": "&twoheadleftarrow",
+ "description": "Bad named entity: twoheadleftarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&twoheadleftarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&twoheadleftarrow;",
+ "description": "Named entity: twoheadleftarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u219e"
+ ]
+ ]
+ },
+ {
+ "input": "&twoheadrightarrow",
+ "description": "Bad named entity: twoheadrightarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&twoheadrightarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&twoheadrightarrow;",
+ "description": "Named entity: twoheadrightarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21a0"
+ ]
+ ]
+ },
+ {
+ "input": "&uArr",
+ "description": "Bad named entity: uArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uArr"
+ ]
+ ]
+ },
+ {
+ "input": "&uArr;",
+ "description": "Named entity: uArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d1"
+ ]
+ ]
+ },
+ {
+ "input": "&uHar",
+ "description": "Bad named entity: uHar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uHar"
+ ]
+ ]
+ },
+ {
+ "input": "&uHar;",
+ "description": "Named entity: uHar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2963"
+ ]
+ ]
+ },
+ {
+ "input": "&uacute",
+ "description": "Named entity: uacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fa"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&uacute;",
+ "description": "Named entity: uacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fa"
+ ]
+ ]
+ },
+ {
+ "input": "&uarr",
+ "description": "Bad named entity: uarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uarr"
+ ]
+ ]
+ },
+ {
+ "input": "&uarr;",
+ "description": "Named entity: uarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2191"
+ ]
+ ]
+ },
+ {
+ "input": "&ubrcy",
+ "description": "Bad named entity: ubrcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ubrcy"
+ ]
+ ]
+ },
+ {
+ "input": "&ubrcy;",
+ "description": "Named entity: ubrcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u045e"
+ ]
+ ]
+ },
+ {
+ "input": "&ubreve",
+ "description": "Bad named entity: ubreve without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ubreve"
+ ]
+ ]
+ },
+ {
+ "input": "&ubreve;",
+ "description": "Named entity: ubreve; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016d"
+ ]
+ ]
+ },
+ {
+ "input": "&ucirc",
+ "description": "Named entity: ucirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fb"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 7 }
+ ]
+ },
+ {
+ "input": "&ucirc;",
+ "description": "Named entity: ucirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fb"
+ ]
+ ]
+ },
+ {
+ "input": "&ucy",
+ "description": "Bad named entity: ucy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ucy"
+ ]
+ ]
+ },
+ {
+ "input": "&ucy;",
+ "description": "Named entity: ucy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0443"
+ ]
+ ]
+ },
+ {
+ "input": "&udarr",
+ "description": "Bad named entity: udarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&udarr"
+ ]
+ ]
+ },
+ {
+ "input": "&udarr;",
+ "description": "Named entity: udarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c5"
+ ]
+ ]
+ },
+ {
+ "input": "&udblac",
+ "description": "Bad named entity: udblac without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&udblac"
+ ]
+ ]
+ },
+ {
+ "input": "&udblac;",
+ "description": "Named entity: udblac; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0171"
+ ]
+ ]
+ },
+ {
+ "input": "&udhar",
+ "description": "Bad named entity: udhar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&udhar"
+ ]
+ ]
+ },
+ {
+ "input": "&udhar;",
+ "description": "Named entity: udhar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u296e"
+ ]
+ ]
+ },
+ {
+ "input": "&ufisht",
+ "description": "Bad named entity: ufisht without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ufisht"
+ ]
+ ]
+ },
+ {
+ "input": "&ufisht;",
+ "description": "Named entity: ufisht; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u297e"
+ ]
+ ]
+ },
+ {
+ "input": "&ufr",
+ "description": "Bad named entity: ufr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ufr"
+ ]
+ ]
+ },
+ {
+ "input": "&ufr;",
+ "description": "Named entity: ufr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd32"
+ ]
+ ]
+ },
+ {
+ "input": "&ugrave",
+ "description": "Named entity: ugrave without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f9"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&ugrave;",
+ "description": "Named entity: ugrave; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00f9"
+ ]
+ ]
+ },
+ {
+ "input": "&uharl",
+ "description": "Bad named entity: uharl without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uharl"
+ ]
+ ]
+ },
+ {
+ "input": "&uharl;",
+ "description": "Named entity: uharl; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bf"
+ ]
+ ]
+ },
+ {
+ "input": "&uharr",
+ "description": "Bad named entity: uharr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uharr"
+ ]
+ ]
+ },
+ {
+ "input": "&uharr;",
+ "description": "Named entity: uharr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21be"
+ ]
+ ]
+ },
+ {
+ "input": "&uhblk",
+ "description": "Bad named entity: uhblk without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uhblk"
+ ]
+ ]
+ },
+ {
+ "input": "&uhblk;",
+ "description": "Named entity: uhblk; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2580"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcorn",
+ "description": "Bad named entity: ulcorn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ulcorn"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcorn;",
+ "description": "Named entity: ulcorn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231c"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcorner",
+ "description": "Bad named entity: ulcorner without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ulcorner"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcorner;",
+ "description": "Named entity: ulcorner; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231c"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcrop",
+ "description": "Bad named entity: ulcrop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ulcrop"
+ ]
+ ]
+ },
+ {
+ "input": "&ulcrop;",
+ "description": "Named entity: ulcrop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230f"
+ ]
+ ]
+ },
+ {
+ "input": "&ultri",
+ "description": "Bad named entity: ultri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ultri"
+ ]
+ ]
+ },
+ {
+ "input": "&ultri;",
+ "description": "Named entity: ultri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25f8"
+ ]
+ ]
+ },
+ {
+ "input": "&umacr",
+ "description": "Bad named entity: umacr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&umacr"
+ ]
+ ]
+ },
+ {
+ "input": "&umacr;",
+ "description": "Named entity: umacr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016b"
+ ]
+ ]
+ },
+ {
+ "input": "&uml",
+ "description": "Named entity: uml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a8"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&uml;",
+ "description": "Named entity: uml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a8"
+ ]
+ ]
+ },
+ {
+ "input": "&uogon",
+ "description": "Bad named entity: uogon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uogon"
+ ]
+ ]
+ },
+ {
+ "input": "&uogon;",
+ "description": "Named entity: uogon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0173"
+ ]
+ ]
+ },
+ {
+ "input": "&uopf",
+ "description": "Bad named entity: uopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uopf"
+ ]
+ ]
+ },
+ {
+ "input": "&uopf;",
+ "description": "Named entity: uopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd66"
+ ]
+ ]
+ },
+ {
+ "input": "&uparrow",
+ "description": "Bad named entity: uparrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uparrow"
+ ]
+ ]
+ },
+ {
+ "input": "&uparrow;",
+ "description": "Named entity: uparrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2191"
+ ]
+ ]
+ },
+ {
+ "input": "&updownarrow",
+ "description": "Bad named entity: updownarrow without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&updownarrow"
+ ]
+ ]
+ },
+ {
+ "input": "&updownarrow;",
+ "description": "Named entity: updownarrow; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2195"
+ ]
+ ]
+ },
+ {
+ "input": "&upharpoonleft",
+ "description": "Bad named entity: upharpoonleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upharpoonleft"
+ ]
+ ]
+ },
+ {
+ "input": "&upharpoonleft;",
+ "description": "Named entity: upharpoonleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21bf"
+ ]
+ ]
+ },
+ {
+ "input": "&upharpoonright",
+ "description": "Bad named entity: upharpoonright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upharpoonright"
+ ]
+ ]
+ },
+ {
+ "input": "&upharpoonright;",
+ "description": "Named entity: upharpoonright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21be"
+ ]
+ ]
+ },
+ {
+ "input": "&uplus",
+ "description": "Bad named entity: uplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uplus"
+ ]
+ ]
+ },
+ {
+ "input": "&uplus;",
+ "description": "Named entity: uplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228e"
+ ]
+ ]
+ },
+ {
+ "input": "&upsi",
+ "description": "Bad named entity: upsi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upsi"
+ ]
+ ]
+ },
+ {
+ "input": "&upsi;",
+ "description": "Named entity: upsi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c5"
+ ]
+ ]
+ },
+ {
+ "input": "&upsih",
+ "description": "Bad named entity: upsih without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upsih"
+ ]
+ ]
+ },
+ {
+ "input": "&upsih;",
+ "description": "Named entity: upsih; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d2"
+ ]
+ ]
+ },
+ {
+ "input": "&upsilon",
+ "description": "Bad named entity: upsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&upsilon;",
+ "description": "Named entity: upsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c5"
+ ]
+ ]
+ },
+ {
+ "input": "&upuparrows",
+ "description": "Bad named entity: upuparrows without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&upuparrows"
+ ]
+ ]
+ },
+ {
+ "input": "&upuparrows;",
+ "description": "Named entity: upuparrows; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c8"
+ ]
+ ]
+ },
+ {
+ "input": "&urcorn",
+ "description": "Bad named entity: urcorn without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&urcorn"
+ ]
+ ]
+ },
+ {
+ "input": "&urcorn;",
+ "description": "Named entity: urcorn; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231d"
+ ]
+ ]
+ },
+ {
+ "input": "&urcorner",
+ "description": "Bad named entity: urcorner without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&urcorner"
+ ]
+ ]
+ },
+ {
+ "input": "&urcorner;",
+ "description": "Named entity: urcorner; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u231d"
+ ]
+ ]
+ },
+ {
+ "input": "&urcrop",
+ "description": "Bad named entity: urcrop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&urcrop"
+ ]
+ ]
+ },
+ {
+ "input": "&urcrop;",
+ "description": "Named entity: urcrop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u230e"
+ ]
+ ]
+ },
+ {
+ "input": "&uring",
+ "description": "Bad named entity: uring without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uring"
+ ]
+ ]
+ },
+ {
+ "input": "&uring;",
+ "description": "Named entity: uring; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u016f"
+ ]
+ ]
+ },
+ {
+ "input": "&urtri",
+ "description": "Bad named entity: urtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&urtri"
+ ]
+ ]
+ },
+ {
+ "input": "&urtri;",
+ "description": "Named entity: urtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25f9"
+ ]
+ ]
+ },
+ {
+ "input": "&uscr",
+ "description": "Bad named entity: uscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uscr"
+ ]
+ ]
+ },
+ {
+ "input": "&uscr;",
+ "description": "Named entity: uscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcca"
+ ]
+ ]
+ },
+ {
+ "input": "&utdot",
+ "description": "Bad named entity: utdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&utdot"
+ ]
+ ]
+ },
+ {
+ "input": "&utdot;",
+ "description": "Named entity: utdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22f0"
+ ]
+ ]
+ },
+ {
+ "input": "&utilde",
+ "description": "Bad named entity: utilde without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&utilde"
+ ]
+ ]
+ },
+ {
+ "input": "&utilde;",
+ "description": "Named entity: utilde; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0169"
+ ]
+ ]
+ },
+ {
+ "input": "&utri",
+ "description": "Bad named entity: utri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&utri"
+ ]
+ ]
+ },
+ {
+ "input": "&utri;",
+ "description": "Named entity: utri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b5"
+ ]
+ ]
+ },
+ {
+ "input": "&utrif",
+ "description": "Bad named entity: utrif without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&utrif"
+ ]
+ ]
+ },
+ {
+ "input": "&utrif;",
+ "description": "Named entity: utrif; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b4"
+ ]
+ ]
+ },
+ {
+ "input": "&uuarr",
+ "description": "Bad named entity: uuarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uuarr"
+ ]
+ ]
+ },
+ {
+ "input": "&uuarr;",
+ "description": "Named entity: uuarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21c8"
+ ]
+ ]
+ },
+ {
+ "input": "&uuml",
+ "description": "Named entity: uuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fc"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&uuml;",
+ "description": "Named entity: uuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fc"
+ ]
+ ]
+ },
+ {
+ "input": "&uwangle",
+ "description": "Bad named entity: uwangle without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&uwangle"
+ ]
+ ]
+ },
+ {
+ "input": "&uwangle;",
+ "description": "Named entity: uwangle; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u29a7"
+ ]
+ ]
+ },
+ {
+ "input": "&vArr",
+ "description": "Bad named entity: vArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vArr"
+ ]
+ ]
+ },
+ {
+ "input": "&vArr;",
+ "description": "Named entity: vArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21d5"
+ ]
+ ]
+ },
+ {
+ "input": "&vBar",
+ "description": "Bad named entity: vBar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vBar"
+ ]
+ ]
+ },
+ {
+ "input": "&vBar;",
+ "description": "Named entity: vBar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae8"
+ ]
+ ]
+ },
+ {
+ "input": "&vBarv",
+ "description": "Bad named entity: vBarv without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vBarv"
+ ]
+ ]
+ },
+ {
+ "input": "&vBarv;",
+ "description": "Named entity: vBarv; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2ae9"
+ ]
+ ]
+ },
+ {
+ "input": "&vDash",
+ "description": "Bad named entity: vDash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vDash"
+ ]
+ ]
+ },
+ {
+ "input": "&vDash;",
+ "description": "Named entity: vDash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a8"
+ ]
+ ]
+ },
+ {
+ "input": "&vangrt",
+ "description": "Bad named entity: vangrt without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vangrt"
+ ]
+ ]
+ },
+ {
+ "input": "&vangrt;",
+ "description": "Named entity: vangrt; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u299c"
+ ]
+ ]
+ },
+ {
+ "input": "&varepsilon",
+ "description": "Bad named entity: varepsilon without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varepsilon"
+ ]
+ ]
+ },
+ {
+ "input": "&varepsilon;",
+ "description": "Named entity: varepsilon; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f5"
+ ]
+ ]
+ },
+ {
+ "input": "&varkappa",
+ "description": "Bad named entity: varkappa without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varkappa"
+ ]
+ ]
+ },
+ {
+ "input": "&varkappa;",
+ "description": "Named entity: varkappa; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f0"
+ ]
+ ]
+ },
+ {
+ "input": "&varnothing",
+ "description": "Bad named entity: varnothing without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varnothing"
+ ]
+ ]
+ },
+ {
+ "input": "&varnothing;",
+ "description": "Named entity: varnothing; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2205"
+ ]
+ ]
+ },
+ {
+ "input": "&varphi",
+ "description": "Bad named entity: varphi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varphi"
+ ]
+ ]
+ },
+ {
+ "input": "&varphi;",
+ "description": "Named entity: varphi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d5"
+ ]
+ ]
+ },
+ {
+ "input": "&varpi",
+ "description": "Bad named entity: varpi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varpi"
+ ]
+ ]
+ },
+ {
+ "input": "&varpi;",
+ "description": "Named entity: varpi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d6"
+ ]
+ ]
+ },
+ {
+ "input": "&varpropto",
+ "description": "Bad named entity: varpropto without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varpropto"
+ ]
+ ]
+ },
+ {
+ "input": "&varpropto;",
+ "description": "Named entity: varpropto; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221d"
+ ]
+ ]
+ },
+ {
+ "input": "&varr",
+ "description": "Bad named entity: varr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varr"
+ ]
+ ]
+ },
+ {
+ "input": "&varr;",
+ "description": "Named entity: varr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2195"
+ ]
+ ]
+ },
+ {
+ "input": "&varrho",
+ "description": "Bad named entity: varrho without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varrho"
+ ]
+ ]
+ },
+ {
+ "input": "&varrho;",
+ "description": "Named entity: varrho; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03f1"
+ ]
+ ]
+ },
+ {
+ "input": "&varsigma",
+ "description": "Bad named entity: varsigma without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varsigma"
+ ]
+ ]
+ },
+ {
+ "input": "&varsigma;",
+ "description": "Named entity: varsigma; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03c2"
+ ]
+ ]
+ },
+ {
+ "input": "&varsubsetneq",
+ "description": "Bad named entity: varsubsetneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varsubsetneq"
+ ]
+ ]
+ },
+ {
+ "input": "&varsubsetneq;",
+ "description": "Named entity: varsubsetneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228a\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&varsubsetneqq",
+ "description": "Bad named entity: varsubsetneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varsubsetneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&varsubsetneqq;",
+ "description": "Named entity: varsubsetneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acb\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&varsupsetneq",
+ "description": "Bad named entity: varsupsetneq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varsupsetneq"
+ ]
+ ]
+ },
+ {
+ "input": "&varsupsetneq;",
+ "description": "Named entity: varsupsetneq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228b\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&varsupsetneqq",
+ "description": "Bad named entity: varsupsetneqq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&varsupsetneqq"
+ ]
+ ]
+ },
+ {
+ "input": "&varsupsetneqq;",
+ "description": "Named entity: varsupsetneqq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acc\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&vartheta",
+ "description": "Bad named entity: vartheta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vartheta"
+ ]
+ ]
+ },
+ {
+ "input": "&vartheta;",
+ "description": "Named entity: vartheta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03d1"
+ ]
+ ]
+ },
+ {
+ "input": "&vartriangleleft",
+ "description": "Bad named entity: vartriangleleft without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vartriangleleft"
+ ]
+ ]
+ },
+ {
+ "input": "&vartriangleleft;",
+ "description": "Named entity: vartriangleleft; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b2"
+ ]
+ ]
+ },
+ {
+ "input": "&vartriangleright",
+ "description": "Bad named entity: vartriangleright without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vartriangleright"
+ ]
+ ]
+ },
+ {
+ "input": "&vartriangleright;",
+ "description": "Named entity: vartriangleright; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b3"
+ ]
+ ]
+ },
+ {
+ "input": "&vcy",
+ "description": "Bad named entity: vcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vcy"
+ ]
+ ]
+ },
+ {
+ "input": "&vcy;",
+ "description": "Named entity: vcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0432"
+ ]
+ ]
+ },
+ {
+ "input": "&vdash",
+ "description": "Bad named entity: vdash without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vdash"
+ ]
+ ]
+ },
+ {
+ "input": "&vdash;",
+ "description": "Named entity: vdash; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22a2"
+ ]
+ ]
+ },
+ {
+ "input": "&vee",
+ "description": "Bad named entity: vee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vee"
+ ]
+ ]
+ },
+ {
+ "input": "&vee;",
+ "description": "Named entity: vee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2228"
+ ]
+ ]
+ },
+ {
+ "input": "&veebar",
+ "description": "Bad named entity: veebar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&veebar"
+ ]
+ ]
+ },
+ {
+ "input": "&veebar;",
+ "description": "Named entity: veebar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22bb"
+ ]
+ ]
+ },
+ {
+ "input": "&veeeq",
+ "description": "Bad named entity: veeeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&veeeq"
+ ]
+ ]
+ },
+ {
+ "input": "&veeeq;",
+ "description": "Named entity: veeeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u225a"
+ ]
+ ]
+ },
+ {
+ "input": "&vellip",
+ "description": "Bad named entity: vellip without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vellip"
+ ]
+ ]
+ },
+ {
+ "input": "&vellip;",
+ "description": "Named entity: vellip; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22ee"
+ ]
+ ]
+ },
+ {
+ "input": "&verbar",
+ "description": "Bad named entity: verbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&verbar"
+ ]
+ ]
+ },
+ {
+ "input": "&verbar;",
+ "description": "Named entity: verbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "|"
+ ]
+ ]
+ },
+ {
+ "input": "&vert",
+ "description": "Bad named entity: vert without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vert"
+ ]
+ ]
+ },
+ {
+ "input": "&vert;",
+ "description": "Named entity: vert; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "|"
+ ]
+ ]
+ },
+ {
+ "input": "&vfr",
+ "description": "Bad named entity: vfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vfr"
+ ]
+ ]
+ },
+ {
+ "input": "&vfr;",
+ "description": "Named entity: vfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd33"
+ ]
+ ]
+ },
+ {
+ "input": "&vltri",
+ "description": "Bad named entity: vltri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vltri"
+ ]
+ ]
+ },
+ {
+ "input": "&vltri;",
+ "description": "Named entity: vltri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b2"
+ ]
+ ]
+ },
+ {
+ "input": "&vnsub",
+ "description": "Bad named entity: vnsub without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vnsub"
+ ]
+ ]
+ },
+ {
+ "input": "&vnsub;",
+ "description": "Named entity: vnsub; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2282\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&vnsup",
+ "description": "Bad named entity: vnsup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vnsup"
+ ]
+ ]
+ },
+ {
+ "input": "&vnsup;",
+ "description": "Named entity: vnsup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2283\u20d2"
+ ]
+ ]
+ },
+ {
+ "input": "&vopf",
+ "description": "Bad named entity: vopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vopf"
+ ]
+ ]
+ },
+ {
+ "input": "&vopf;",
+ "description": "Named entity: vopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd67"
+ ]
+ ]
+ },
+ {
+ "input": "&vprop",
+ "description": "Bad named entity: vprop without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vprop"
+ ]
+ ]
+ },
+ {
+ "input": "&vprop;",
+ "description": "Named entity: vprop; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u221d"
+ ]
+ ]
+ },
+ {
+ "input": "&vrtri",
+ "description": "Bad named entity: vrtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vrtri"
+ ]
+ ]
+ },
+ {
+ "input": "&vrtri;",
+ "description": "Named entity: vrtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22b3"
+ ]
+ ]
+ },
+ {
+ "input": "&vscr",
+ "description": "Bad named entity: vscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vscr"
+ ]
+ ]
+ },
+ {
+ "input": "&vscr;",
+ "description": "Named entity: vscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udccb"
+ ]
+ ]
+ },
+ {
+ "input": "&vsubnE",
+ "description": "Bad named entity: vsubnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vsubnE"
+ ]
+ ]
+ },
+ {
+ "input": "&vsubnE;",
+ "description": "Named entity: vsubnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acb\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&vsubne",
+ "description": "Bad named entity: vsubne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vsubne"
+ ]
+ ]
+ },
+ {
+ "input": "&vsubne;",
+ "description": "Named entity: vsubne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228a\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&vsupnE",
+ "description": "Bad named entity: vsupnE without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vsupnE"
+ ]
+ ]
+ },
+ {
+ "input": "&vsupnE;",
+ "description": "Named entity: vsupnE; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2acc\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&vsupne",
+ "description": "Bad named entity: vsupne without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vsupne"
+ ]
+ ]
+ },
+ {
+ "input": "&vsupne;",
+ "description": "Named entity: vsupne; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u228b\ufe00"
+ ]
+ ]
+ },
+ {
+ "input": "&vzigzag",
+ "description": "Bad named entity: vzigzag without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&vzigzag"
+ ]
+ ]
+ },
+ {
+ "input": "&vzigzag;",
+ "description": "Named entity: vzigzag; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u299a"
+ ]
+ ]
+ },
+ {
+ "input": "&wcirc",
+ "description": "Bad named entity: wcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&wcirc;",
+ "description": "Named entity: wcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0175"
+ ]
+ ]
+ },
+ {
+ "input": "&wedbar",
+ "description": "Bad named entity: wedbar without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wedbar"
+ ]
+ ]
+ },
+ {
+ "input": "&wedbar;",
+ "description": "Named entity: wedbar; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a5f"
+ ]
+ ]
+ },
+ {
+ "input": "&wedge",
+ "description": "Bad named entity: wedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wedge"
+ ]
+ ]
+ },
+ {
+ "input": "&wedge;",
+ "description": "Named entity: wedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2227"
+ ]
+ ]
+ },
+ {
+ "input": "&wedgeq",
+ "description": "Bad named entity: wedgeq without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wedgeq"
+ ]
+ ]
+ },
+ {
+ "input": "&wedgeq;",
+ "description": "Named entity: wedgeq; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2259"
+ ]
+ ]
+ },
+ {
+ "input": "&weierp",
+ "description": "Bad named entity: weierp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&weierp"
+ ]
+ ]
+ },
+ {
+ "input": "&weierp;",
+ "description": "Named entity: weierp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2118"
+ ]
+ ]
+ },
+ {
+ "input": "&wfr",
+ "description": "Bad named entity: wfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wfr"
+ ]
+ ]
+ },
+ {
+ "input": "&wfr;",
+ "description": "Named entity: wfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd34"
+ ]
+ ]
+ },
+ {
+ "input": "&wopf",
+ "description": "Bad named entity: wopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wopf"
+ ]
+ ]
+ },
+ {
+ "input": "&wopf;",
+ "description": "Named entity: wopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd68"
+ ]
+ ]
+ },
+ {
+ "input": "&wp",
+ "description": "Bad named entity: wp without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wp"
+ ]
+ ]
+ },
+ {
+ "input": "&wp;",
+ "description": "Named entity: wp; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2118"
+ ]
+ ]
+ },
+ {
+ "input": "&wr",
+ "description": "Bad named entity: wr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wr"
+ ]
+ ]
+ },
+ {
+ "input": "&wr;",
+ "description": "Named entity: wr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2240"
+ ]
+ ]
+ },
+ {
+ "input": "&wreath",
+ "description": "Bad named entity: wreath without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wreath"
+ ]
+ ]
+ },
+ {
+ "input": "&wreath;",
+ "description": "Named entity: wreath; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2240"
+ ]
+ ]
+ },
+ {
+ "input": "&wscr",
+ "description": "Bad named entity: wscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&wscr"
+ ]
+ ]
+ },
+ {
+ "input": "&wscr;",
+ "description": "Named entity: wscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udccc"
+ ]
+ ]
+ },
+ {
+ "input": "&xcap",
+ "description": "Bad named entity: xcap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xcap"
+ ]
+ ]
+ },
+ {
+ "input": "&xcap;",
+ "description": "Named entity: xcap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c2"
+ ]
+ ]
+ },
+ {
+ "input": "&xcirc",
+ "description": "Bad named entity: xcirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xcirc"
+ ]
+ ]
+ },
+ {
+ "input": "&xcirc;",
+ "description": "Named entity: xcirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25ef"
+ ]
+ ]
+ },
+ {
+ "input": "&xcup",
+ "description": "Bad named entity: xcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xcup"
+ ]
+ ]
+ },
+ {
+ "input": "&xcup;",
+ "description": "Named entity: xcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c3"
+ ]
+ ]
+ },
+ {
+ "input": "&xdtri",
+ "description": "Bad named entity: xdtri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xdtri"
+ ]
+ ]
+ },
+ {
+ "input": "&xdtri;",
+ "description": "Named entity: xdtri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25bd"
+ ]
+ ]
+ },
+ {
+ "input": "&xfr",
+ "description": "Bad named entity: xfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xfr"
+ ]
+ ]
+ },
+ {
+ "input": "&xfr;",
+ "description": "Named entity: xfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd35"
+ ]
+ ]
+ },
+ {
+ "input": "&xhArr",
+ "description": "Bad named entity: xhArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xhArr"
+ ]
+ ]
+ },
+ {
+ "input": "&xhArr;",
+ "description": "Named entity: xhArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27fa"
+ ]
+ ]
+ },
+ {
+ "input": "&xharr",
+ "description": "Bad named entity: xharr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xharr"
+ ]
+ ]
+ },
+ {
+ "input": "&xharr;",
+ "description": "Named entity: xharr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f7"
+ ]
+ ]
+ },
+ {
+ "input": "&xi",
+ "description": "Bad named entity: xi without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xi"
+ ]
+ ]
+ },
+ {
+ "input": "&xi;",
+ "description": "Named entity: xi; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03be"
+ ]
+ ]
+ },
+ {
+ "input": "&xlArr",
+ "description": "Bad named entity: xlArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xlArr"
+ ]
+ ]
+ },
+ {
+ "input": "&xlArr;",
+ "description": "Named entity: xlArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f8"
+ ]
+ ]
+ },
+ {
+ "input": "&xlarr",
+ "description": "Bad named entity: xlarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xlarr"
+ ]
+ ]
+ },
+ {
+ "input": "&xlarr;",
+ "description": "Named entity: xlarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f5"
+ ]
+ ]
+ },
+ {
+ "input": "&xmap",
+ "description": "Bad named entity: xmap without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xmap"
+ ]
+ ]
+ },
+ {
+ "input": "&xmap;",
+ "description": "Named entity: xmap; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27fc"
+ ]
+ ]
+ },
+ {
+ "input": "&xnis",
+ "description": "Bad named entity: xnis without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xnis"
+ ]
+ ]
+ },
+ {
+ "input": "&xnis;",
+ "description": "Named entity: xnis; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22fb"
+ ]
+ ]
+ },
+ {
+ "input": "&xodot",
+ "description": "Bad named entity: xodot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xodot"
+ ]
+ ]
+ },
+ {
+ "input": "&xodot;",
+ "description": "Named entity: xodot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a00"
+ ]
+ ]
+ },
+ {
+ "input": "&xopf",
+ "description": "Bad named entity: xopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xopf"
+ ]
+ ]
+ },
+ {
+ "input": "&xopf;",
+ "description": "Named entity: xopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd69"
+ ]
+ ]
+ },
+ {
+ "input": "&xoplus",
+ "description": "Bad named entity: xoplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xoplus"
+ ]
+ ]
+ },
+ {
+ "input": "&xoplus;",
+ "description": "Named entity: xoplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a01"
+ ]
+ ]
+ },
+ {
+ "input": "&xotime",
+ "description": "Bad named entity: xotime without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xotime"
+ ]
+ ]
+ },
+ {
+ "input": "&xotime;",
+ "description": "Named entity: xotime; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a02"
+ ]
+ ]
+ },
+ {
+ "input": "&xrArr",
+ "description": "Bad named entity: xrArr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xrArr"
+ ]
+ ]
+ },
+ {
+ "input": "&xrArr;",
+ "description": "Named entity: xrArr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f9"
+ ]
+ ]
+ },
+ {
+ "input": "&xrarr",
+ "description": "Bad named entity: xrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&xrarr;",
+ "description": "Named entity: xrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u27f6"
+ ]
+ ]
+ },
+ {
+ "input": "&xscr",
+ "description": "Bad named entity: xscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xscr"
+ ]
+ ]
+ },
+ {
+ "input": "&xscr;",
+ "description": "Named entity: xscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udccd"
+ ]
+ ]
+ },
+ {
+ "input": "&xsqcup",
+ "description": "Bad named entity: xsqcup without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xsqcup"
+ ]
+ ]
+ },
+ {
+ "input": "&xsqcup;",
+ "description": "Named entity: xsqcup; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a06"
+ ]
+ ]
+ },
+ {
+ "input": "&xuplus",
+ "description": "Bad named entity: xuplus without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xuplus"
+ ]
+ ]
+ },
+ {
+ "input": "&xuplus;",
+ "description": "Named entity: xuplus; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2a04"
+ ]
+ ]
+ },
+ {
+ "input": "&xutri",
+ "description": "Bad named entity: xutri without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xutri"
+ ]
+ ]
+ },
+ {
+ "input": "&xutri;",
+ "description": "Named entity: xutri; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u25b3"
+ ]
+ ]
+ },
+ {
+ "input": "&xvee",
+ "description": "Bad named entity: xvee without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xvee"
+ ]
+ ]
+ },
+ {
+ "input": "&xvee;",
+ "description": "Named entity: xvee; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c1"
+ ]
+ ]
+ },
+ {
+ "input": "&xwedge",
+ "description": "Bad named entity: xwedge without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&xwedge"
+ ]
+ ]
+ },
+ {
+ "input": "&xwedge;",
+ "description": "Named entity: xwedge; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u22c0"
+ ]
+ ]
+ },
+ {
+ "input": "&yacute",
+ "description": "Named entity: yacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fd"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 8 }
+ ]
+ },
+ {
+ "input": "&yacute;",
+ "description": "Named entity: yacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00fd"
+ ]
+ ]
+ },
+ {
+ "input": "&yacy",
+ "description": "Bad named entity: yacy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yacy"
+ ]
+ ]
+ },
+ {
+ "input": "&yacy;",
+ "description": "Named entity: yacy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044f"
+ ]
+ ]
+ },
+ {
+ "input": "&ycirc",
+ "description": "Bad named entity: ycirc without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ycirc"
+ ]
+ ]
+ },
+ {
+ "input": "&ycirc;",
+ "description": "Named entity: ycirc; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0177"
+ ]
+ ]
+ },
+ {
+ "input": "&ycy",
+ "description": "Bad named entity: ycy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&ycy"
+ ]
+ ]
+ },
+ {
+ "input": "&ycy;",
+ "description": "Named entity: ycy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044b"
+ ]
+ ]
+ },
+ {
+ "input": "&yen",
+ "description": "Named entity: yen without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a5"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 }
+ ]
+ },
+ {
+ "input": "&yen;",
+ "description": "Named entity: yen; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00a5"
+ ]
+ ]
+ },
+ {
+ "input": "&yfr",
+ "description": "Bad named entity: yfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yfr"
+ ]
+ ]
+ },
+ {
+ "input": "&yfr;",
+ "description": "Named entity: yfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd36"
+ ]
+ ]
+ },
+ {
+ "input": "&yicy",
+ "description": "Bad named entity: yicy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yicy"
+ ]
+ ]
+ },
+ {
+ "input": "&yicy;",
+ "description": "Named entity: yicy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0457"
+ ]
+ ]
+ },
+ {
+ "input": "&yopf",
+ "description": "Bad named entity: yopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yopf"
+ ]
+ ]
+ },
+ {
+ "input": "&yopf;",
+ "description": "Named entity: yopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd6a"
+ ]
+ ]
+ },
+ {
+ "input": "&yscr",
+ "description": "Bad named entity: yscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yscr"
+ ]
+ ]
+ },
+ {
+ "input": "&yscr;",
+ "description": "Named entity: yscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udcce"
+ ]
+ ]
+ },
+ {
+ "input": "&yucy",
+ "description": "Bad named entity: yucy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&yucy"
+ ]
+ ]
+ },
+ {
+ "input": "&yucy;",
+ "description": "Named entity: yucy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u044e"
+ ]
+ ]
+ },
+ {
+ "input": "&yuml",
+ "description": "Named entity: yuml without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ff"
+ ]
+ ],
+ "errors": [
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 6 }
+ ]
+ },
+ {
+ "input": "&yuml;",
+ "description": "Named entity: yuml; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u00ff"
+ ]
+ ]
+ },
+ {
+ "input": "&zacute",
+ "description": "Bad named entity: zacute without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zacute"
+ ]
+ ]
+ },
+ {
+ "input": "&zacute;",
+ "description": "Named entity: zacute; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u017a"
+ ]
+ ]
+ },
+ {
+ "input": "&zcaron",
+ "description": "Bad named entity: zcaron without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zcaron"
+ ]
+ ]
+ },
+ {
+ "input": "&zcaron;",
+ "description": "Named entity: zcaron; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u017e"
+ ]
+ ]
+ },
+ {
+ "input": "&zcy",
+ "description": "Bad named entity: zcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zcy"
+ ]
+ ]
+ },
+ {
+ "input": "&zcy;",
+ "description": "Named entity: zcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0437"
+ ]
+ ]
+ },
+ {
+ "input": "&zdot",
+ "description": "Bad named entity: zdot without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zdot"
+ ]
+ ]
+ },
+ {
+ "input": "&zdot;",
+ "description": "Named entity: zdot; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u017c"
+ ]
+ ]
+ },
+ {
+ "input": "&zeetrf",
+ "description": "Bad named entity: zeetrf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zeetrf"
+ ]
+ ]
+ },
+ {
+ "input": "&zeetrf;",
+ "description": "Named entity: zeetrf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u2128"
+ ]
+ ]
+ },
+ {
+ "input": "&zeta",
+ "description": "Bad named entity: zeta without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zeta"
+ ]
+ ]
+ },
+ {
+ "input": "&zeta;",
+ "description": "Named entity: zeta; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u03b6"
+ ]
+ ]
+ },
+ {
+ "input": "&zfr",
+ "description": "Bad named entity: zfr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zfr"
+ ]
+ ]
+ },
+ {
+ "input": "&zfr;",
+ "description": "Named entity: zfr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd37"
+ ]
+ ]
+ },
+ {
+ "input": "&zhcy",
+ "description": "Bad named entity: zhcy without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zhcy"
+ ]
+ ]
+ },
+ {
+ "input": "&zhcy;",
+ "description": "Named entity: zhcy; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u0436"
+ ]
+ ]
+ },
+ {
+ "input": "&zigrarr",
+ "description": "Bad named entity: zigrarr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zigrarr"
+ ]
+ ]
+ },
+ {
+ "input": "&zigrarr;",
+ "description": "Named entity: zigrarr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u21dd"
+ ]
+ ]
+ },
+ {
+ "input": "&zopf",
+ "description": "Bad named entity: zopf without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zopf"
+ ]
+ ]
+ },
+ {
+ "input": "&zopf;",
+ "description": "Named entity: zopf; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udd6b"
+ ]
+ ]
+ },
+ {
+ "input": "&zscr",
+ "description": "Bad named entity: zscr without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zscr"
+ ]
+ ]
+ },
+ {
+ "input": "&zscr;",
+ "description": "Named entity: zscr; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\ud835\udccf"
+ ]
+ ]
+ },
+ {
+ "input": "&zwj",
+ "description": "Bad named entity: zwj without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zwj"
+ ]
+ ]
+ },
+ {
+ "input": "&zwj;",
+ "description": "Named entity: zwj; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200d"
+ ]
+ ]
+ },
+ {
+ "input": "&zwnj",
+ "description": "Bad named entity: zwnj without a semi-colon",
+ "output": [
+ [
+ "Character",
+ "&zwnj"
+ ]
+ ]
+ },
+ {
+ "input": "&zwnj;",
+ "description": "Named entity: zwnj; with a semi-colon",
+ "output": [
+ [
+ "Character",
+ "\u200c"
+ ]
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/html5lib-tests/tokenizer/numericEntities.test b/tests/html5lib-tests/tokenizer/numericEntities.test
new file mode 100644
index 0000000..085109b
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/numericEntities.test
@@ -0,0 +1,1677 @@
+{"tests": [
+
+{"description": "Invalid unterminated numeric entity character overflow before EOF",
+"input": "&#11111111111",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 14 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 14 }
+]},
+
+{"description": "Invalid unterminated numeric entity character overflow before EOF",
+"input": "&#1111111111",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 13 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 13 }
+]},
+
+{"description": "Invalid unterminated numeric entity character overflow before EOF",
+"input": "&#111111111111",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 15 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 15 }
+]},
+
+{"description": "Invalid unterminated numeric entity character overflow",
+"input": "&#11111111111x",
+"output": [["Character", "\uFFFDx"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 14 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 14 }
+]},
+
+{"description": "Invalid unterminated numeric entity character overflow",
+"input": "&#1111111111x",
+"output": [["Character", "\uFFFDx"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 13 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 13 }
+]},
+
+{"description": "Invalid unterminated numeric entity character overflow",
+"input": "&#111111111111x",
+"output": [["Character", "\uFFFDx"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 15 },
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 15 }
+]},
+
+{"description": "Invalid numeric entity character overflow",
+"input": "&#11111111111;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 15 }
+]},
+
+{"description": "Invalid numeric entity character overflow",
+"input": "&#1111111111;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 14 }
+]},
+
+{"description": "Invalid numeric entity character overflow",
+"input": "&#111111111111;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 16 }
+]},
+
+{"description": "Invalid numeric entity character U+0000",
+"input": "&#x0000;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "null-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0001",
+"input": "&#x0001;",
+"output": [["Character", "\u0001"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0002",
+"input": "&#x0002;",
+"output": [["Character", "\u0002"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+
+{"description": "Invalid numeric entity character U+0003",
+"input": "&#x0003;",
+"output": [["Character", "\u0003"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+
+{"description": "Invalid numeric entity character U+0004",
+"input": "&#x0004;",
+"output": [["Character", "\u0004"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+
+{"description": "Invalid numeric entity character U+0005",
+"input": "&#x0005;",
+"output": [["Character", "\u0005"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+
+{"description": "Invalid numeric entity character U+0006",
+"input": "&#x0006;",
+"output": [["Character", "\u0006"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0007",
+"input": "&#x0007;",
+"output": [["Character", "\u0007"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0008",
+"input": "&#x0008;",
+"output": [["Character", "\u0008"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+000B",
+"input": "&#x000b;",
+"output": [["Character", "\u000b"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+000E",
+"input": "&#x000e;",
+"output": [["Character", "\u000e"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+000F",
+"input": "&#x000f;",
+"output": [["Character", "\u000f"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0010",
+"input": "&#x0010;",
+"output": [["Character", "\u0010"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0011",
+"input": "&#x0011;",
+"output": [["Character", "\u0011"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0012",
+"input": "&#x0012;",
+"output": [["Character", "\u0012"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0013",
+"input": "&#x0013;",
+"output": [["Character", "\u0013"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0014",
+"input": "&#x0014;",
+"output": [["Character", "\u0014"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0015",
+"input": "&#x0015;",
+"output": [["Character", "\u0015"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0016",
+"input": "&#x0016;",
+"output": [["Character", "\u0016"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0017",
+"input": "&#x0017;",
+"output": [["Character", "\u0017"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0018",
+"input": "&#x0018;",
+"output": [["Character", "\u0018"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+0019",
+"input": "&#x0019;",
+"output": [["Character", "\u0019"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001A",
+"input": "&#x001a;",
+"output": [["Character", "\u001a"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001B",
+"input": "&#x001b;",
+"output": [["Character", "\u001b"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001C",
+"input": "&#x001c;",
+"output": [["Character", "\u001c"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001D",
+"input": "&#x001d;",
+"output": [["Character", "\u001d"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001E",
+"input": "&#x001e;",
+"output": [["Character", "\u001e"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+001F",
+"input": "&#x001f;",
+"output": [["Character", "\u001f"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+007F",
+"input": "&#x007f;",
+"output": [["Character", "\u007f"]],
+"errors":[
+ { "code": "control-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+D800",
+"input": "&#xd800;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "surrogate-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+DFFF",
+"input": "&#xdfff;",
+"output": [["Character", "\uFFFD"]],
+"errors":[
+ { "code": "surrogate-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD0",
+"input": "&#xfdd0;",
+"output": [["Character", "\ufdd0"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD1",
+"input": "&#xfdd1;",
+"output": [["Character", "\ufdd1"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD2",
+"input": "&#xfdd2;",
+"output": [["Character", "\ufdd2"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD3",
+"input": "&#xfdd3;",
+"output": [["Character", "\ufdd3"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD4",
+"input": "&#xfdd4;",
+"output": [["Character", "\ufdd4"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD5",
+"input": "&#xfdd5;",
+"output": [["Character", "\ufdd5"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD6",
+"input": "&#xfdd6;",
+"output": [["Character", "\ufdd6"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD7",
+"input": "&#xfdd7;",
+"output": [["Character", "\ufdd7"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD8",
+"input": "&#xfdd8;",
+"output": [["Character", "\ufdd8"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDD9",
+"input": "&#xfdd9;",
+"output": [["Character", "\ufdd9"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDA",
+"input": "&#xfdda;",
+"output": [["Character", "\ufdda"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDB",
+"input": "&#xfddb;",
+"output": [["Character", "\ufddb"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDC",
+"input": "&#xfddc;",
+"output": [["Character", "\ufddc"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDD",
+"input": "&#xfddd;",
+"output": [["Character", "\ufddd"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDE",
+"input": "&#xfdde;",
+"output": [["Character", "\ufdde"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDDF",
+"input": "&#xfddf;",
+"output": [["Character", "\ufddf"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE0",
+"input": "&#xfde0;",
+"output": [["Character", "\ufde0"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE1",
+"input": "&#xfde1;",
+"output": [["Character", "\ufde1"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE2",
+"input": "&#xfde2;",
+"output": [["Character", "\ufde2"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE3",
+"input": "&#xfde3;",
+"output": [["Character", "\ufde3"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE4",
+"input": "&#xfde4;",
+"output": [["Character", "\ufde4"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE5",
+"input": "&#xfde5;",
+"output": [["Character", "\ufde5"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE6",
+"input": "&#xfde6;",
+"output": [["Character", "\ufde6"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE7",
+"input": "&#xfde7;",
+"output": [["Character", "\ufde7"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE8",
+"input": "&#xfde8;",
+"output": [["Character", "\ufde8"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDE9",
+"input": "&#xfde9;",
+"output": [["Character", "\ufde9"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDEA",
+"input": "&#xfdea;",
+"output": [["Character", "\ufdea"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDEB",
+"input": "&#xfdeb;",
+"output": [["Character", "\ufdeb"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDEC",
+"input": "&#xfdec;",
+"output": [["Character", "\ufdec"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDED",
+"input": "&#xfded;",
+"output": [["Character", "\ufded"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDEE",
+"input": "&#xfdee;",
+"output": [["Character", "\ufdee"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FDEF",
+"input": "&#xfdef;",
+"output": [["Character", "\ufdef"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FFFE",
+"input": "&#xfffe;",
+"output": [["Character", "\ufffe"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+FFFF",
+"input": "&#xffff;",
+"output": [["Character", "\uffff"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description": "Invalid numeric entity character U+1FFFE",
+"input": "&#x1fffe;",
+"output": [["Character", "\uD83F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+1FFFF",
+"input": "&#x1ffff;",
+"output": [["Character", "\uD83F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+2FFFE",
+"input": "&#x2fffe;",
+"output": [["Character", "\uD87F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+2FFFF",
+"input": "&#x2ffff;",
+"output": [["Character", "\uD87F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+3FFFE",
+"input": "&#x3fffe;",
+"output": [["Character", "\uD8BF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+3FFFF",
+"input": "&#x3ffff;",
+"output": [["Character", "\uD8BF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+4FFFE",
+"input": "&#x4fffe;",
+"output": [["Character", "\uD8FF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+4FFFF",
+"input": "&#x4ffff;",
+"output": [["Character", "\uD8FF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+5FFFE",
+"input": "&#x5fffe;",
+"output": [["Character", "\uD93F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+5FFFF",
+"input": "&#x5ffff;",
+"output": [["Character", "\uD93F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+6FFFE",
+"input": "&#x6fffe;",
+"output": [["Character", "\uD97F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+6FFFF",
+"input": "&#x6ffff;",
+"output": [["Character", "\uD97F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+7FFFE",
+"input": "&#x7fffe;",
+"output": [["Character", "\uD9BF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+7FFFF",
+"input": "&#x7ffff;",
+"output": [["Character", "\uD9BF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+8FFFE",
+"input": "&#x8fffe;",
+"output": [["Character", "\uD9FF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+8FFFF",
+"input": "&#x8ffff;",
+"output": [["Character", "\uD9FF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+9FFFE",
+"input": "&#x9fffe;",
+"output": [["Character", "\uDA3F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+9FFFF",
+"input": "&#x9ffff;",
+"output": [["Character", "\uDA3F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+AFFFE",
+"input": "&#xafffe;",
+"output": [["Character", "\uDA7F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+AFFFF",
+"input": "&#xaffff;",
+"output": [["Character", "\uDA7F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+BFFFE",
+"input": "&#xbfffe;",
+"output": [["Character", "\uDABF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+BFFFF",
+"input": "&#xbffff;",
+"output": [["Character", "\uDABF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+CFFFE",
+"input": "&#xcfffe;",
+"output": [["Character", "\uDAFF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+CFFFF",
+"input": "&#xcffff;",
+"output": [["Character", "\uDAFF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+DFFFE",
+"input": "&#xdfffe;",
+"output": [["Character", "\uDB3F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+DFFFF",
+"input": "&#xdffff;",
+"output": [["Character", "\uDB3F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+EFFFE",
+"input": "&#xefffe;",
+"output": [["Character", "\uDB7F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+EFFFF",
+"input": "&#xeffff;",
+"output": [["Character", "\uDB7F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+FFFFE",
+"input": "&#xffffe;",
+"output": [["Character", "\uDBBF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+FFFFF",
+"input": "&#xfffff;",
+"output": [["Character", "\uDBBF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 10 }
+]},
+
+{"description": "Invalid numeric entity character U+10FFFE",
+"input": "&#x10fffe;",
+"output": [["Character", "\uDBFF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 11 }
+]},
+
+{"description": "Invalid numeric entity character U+10FFFF",
+"input": "&#x10ffff;",
+"output": [["Character", "\uDBFF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 11 }
+]},
+
+{"description": "Valid numeric entity character U+0009",
+"input": "&#x0009;",
+"output": [["Character", "\u0009"]]},
+
+{"description": "Valid numeric entity character U+000A",
+"input": "&#x000a;",
+"output": [["Character", "\u000A"]]},
+
+{"description": "Valid numeric entity character U+0020",
+"input": "&#x0020;",
+"output": [["Character", "\u0020"]]},
+
+{"description": "Valid numeric entity character U+0021",
+"input": "&#x0021;",
+"output": [["Character", "\u0021"]]},
+
+{"description": "Valid numeric entity character U+0022",
+"input": "&#x0022;",
+"output": [["Character", "\u0022"]]},
+
+{"description": "Valid numeric entity character U+0023",
+"input": "&#x0023;",
+"output": [["Character", "\u0023"]]},
+
+{"description": "Valid numeric entity character U+0024",
+"input": "&#x0024;",
+"output": [["Character", "\u0024"]]},
+
+{"description": "Valid numeric entity character U+0025",
+"input": "&#x0025;",
+"output": [["Character", "\u0025"]]},
+
+{"description": "Valid numeric entity character U+0026",
+"input": "&#x0026;",
+"output": [["Character", "\u0026"]]},
+
+{"description": "Valid numeric entity character U+0027",
+"input": "&#x0027;",
+"output": [["Character", "\u0027"]]},
+
+{"description": "Valid numeric entity character U+0028",
+"input": "&#x0028;",
+"output": [["Character", "\u0028"]]},
+
+{"description": "Valid numeric entity character U+0029",
+"input": "&#x0029;",
+"output": [["Character", "\u0029"]]},
+
+{"description": "Valid numeric entity character U+002A",
+"input": "&#x002a;",
+"output": [["Character", "\u002A"]]},
+
+{"description": "Valid numeric entity character U+002B",
+"input": "&#x002b;",
+"output": [["Character", "\u002B"]]},
+
+{"description": "Valid numeric entity character U+002C",
+"input": "&#x002c;",
+"output": [["Character", "\u002C"]]},
+
+{"description": "Valid numeric entity character U+002D",
+"input": "&#x002d;",
+"output": [["Character", "\u002D"]]},
+
+{"description": "Valid numeric entity character U+002E",
+"input": "&#x002e;",
+"output": [["Character", "\u002E"]]},
+
+{"description": "Valid numeric entity character U+002F",
+"input": "&#x002f;",
+"output": [["Character", "\u002F"]]},
+
+{"description": "Valid numeric entity character U+0030",
+"input": "&#x0030;",
+"output": [["Character", "\u0030"]]},
+
+{"description": "Valid numeric entity character U+0031",
+"input": "&#x0031;",
+"output": [["Character", "\u0031"]]},
+
+{"description": "Valid numeric entity character U+0032",
+"input": "&#x0032;",
+"output": [["Character", "\u0032"]]},
+
+{"description": "Valid numeric entity character U+0033",
+"input": "&#x0033;",
+"output": [["Character", "\u0033"]]},
+
+{"description": "Valid numeric entity character U+0034",
+"input": "&#x0034;",
+"output": [["Character", "\u0034"]]},
+
+{"description": "Valid numeric entity character U+0035",
+"input": "&#x0035;",
+"output": [["Character", "\u0035"]]},
+
+{"description": "Valid numeric entity character U+0036",
+"input": "&#x0036;",
+"output": [["Character", "\u0036"]]},
+
+{"description": "Valid numeric entity character U+0037",
+"input": "&#x0037;",
+"output": [["Character", "\u0037"]]},
+
+{"description": "Valid numeric entity character U+0038",
+"input": "&#x0038;",
+"output": [["Character", "\u0038"]]},
+
+{"description": "Valid numeric entity character U+0039",
+"input": "&#x0039;",
+"output": [["Character", "\u0039"]]},
+
+{"description": "Valid numeric entity character U+003A",
+"input": "&#x003a;",
+"output": [["Character", "\u003A"]]},
+
+{"description": "Valid numeric entity character U+003B",
+"input": "&#x003b;",
+"output": [["Character", "\u003B"]]},
+
+{"description": "Valid numeric entity character U+003C",
+"input": "&#x003c;",
+"output": [["Character", "\u003C"]]},
+
+{"description": "Valid numeric entity character U+003D",
+"input": "&#x003d;",
+"output": [["Character", "\u003D"]]},
+
+{"description": "Valid numeric entity character U+003E",
+"input": "&#x003e;",
+"output": [["Character", "\u003E"]]},
+
+{"description": "Valid numeric entity character U+003F",
+"input": "&#x003f;",
+"output": [["Character", "\u003F"]]},
+
+{"description": "Valid numeric entity character U+0040",
+"input": "&#x0040;",
+"output": [["Character", "\u0040"]]},
+
+{"description": "Valid numeric entity character U+0041",
+"input": "&#x0041;",
+"output": [["Character", "\u0041"]]},
+
+{"description": "Valid numeric entity character U+0042",
+"input": "&#x0042;",
+"output": [["Character", "\u0042"]]},
+
+{"description": "Valid numeric entity character U+0043",
+"input": "&#x0043;",
+"output": [["Character", "\u0043"]]},
+
+{"description": "Valid numeric entity character U+0044",
+"input": "&#x0044;",
+"output": [["Character", "\u0044"]]},
+
+{"description": "Valid numeric entity character U+0045",
+"input": "&#x0045;",
+"output": [["Character", "\u0045"]]},
+
+{"description": "Valid numeric entity character U+0046",
+"input": "&#x0046;",
+"output": [["Character", "\u0046"]]},
+
+{"description": "Valid numeric entity character U+0047",
+"input": "&#x0047;",
+"output": [["Character", "\u0047"]]},
+
+{"description": "Valid numeric entity character U+0048",
+"input": "&#x0048;",
+"output": [["Character", "\u0048"]]},
+
+{"description": "Valid numeric entity character U+0049",
+"input": "&#x0049;",
+"output": [["Character", "\u0049"]]},
+
+{"description": "Valid numeric entity character U+004A",
+"input": "&#x004a;",
+"output": [["Character", "\u004A"]]},
+
+{"description": "Valid numeric entity character U+004B",
+"input": "&#x004b;",
+"output": [["Character", "\u004B"]]},
+
+{"description": "Valid numeric entity character U+004C",
+"input": "&#x004c;",
+"output": [["Character", "\u004C"]]},
+
+{"description": "Valid numeric entity character U+004D",
+"input": "&#x004d;",
+"output": [["Character", "\u004D"]]},
+
+{"description": "Valid numeric entity character U+004E",
+"input": "&#x004e;",
+"output": [["Character", "\u004E"]]},
+
+{"description": "Valid numeric entity character U+004F",
+"input": "&#x004f;",
+"output": [["Character", "\u004F"]]},
+
+{"description": "Valid numeric entity character U+0050",
+"input": "&#x0050;",
+"output": [["Character", "\u0050"]]},
+
+{"description": "Valid numeric entity character U+0051",
+"input": "&#x0051;",
+"output": [["Character", "\u0051"]]},
+
+{"description": "Valid numeric entity character U+0052",
+"input": "&#x0052;",
+"output": [["Character", "\u0052"]]},
+
+{"description": "Valid numeric entity character U+0053",
+"input": "&#x0053;",
+"output": [["Character", "\u0053"]]},
+
+{"description": "Valid numeric entity character U+0054",
+"input": "&#x0054;",
+"output": [["Character", "\u0054"]]},
+
+{"description": "Valid numeric entity character U+0055",
+"input": "&#x0055;",
+"output": [["Character", "\u0055"]]},
+
+{"description": "Valid numeric entity character U+0056",
+"input": "&#x0056;",
+"output": [["Character", "\u0056"]]},
+
+{"description": "Valid numeric entity character U+0057",
+"input": "&#x0057;",
+"output": [["Character", "\u0057"]]},
+
+{"description": "Valid numeric entity character U+0058",
+"input": "&#x0058;",
+"output": [["Character", "\u0058"]]},
+
+{"description": "Valid numeric entity character U+0059",
+"input": "&#x0059;",
+"output": [["Character", "\u0059"]]},
+
+{"description": "Valid numeric entity character U+005A",
+"input": "&#x005a;",
+"output": [["Character", "\u005A"]]},
+
+{"description": "Valid numeric entity character U+005B",
+"input": "&#x005b;",
+"output": [["Character", "\u005B"]]},
+
+{"description": "Valid numeric entity character U+005C",
+"input": "&#x005c;",
+"output": [["Character", "\u005C"]]},
+
+{"description": "Valid numeric entity character U+005D",
+"input": "&#x005d;",
+"output": [["Character", "\u005D"]]},
+
+{"description": "Valid numeric entity character U+005E",
+"input": "&#x005e;",
+"output": [["Character", "\u005E"]]},
+
+{"description": "Valid numeric entity character U+005F",
+"input": "&#x005f;",
+"output": [["Character", "\u005F"]]},
+
+{"description": "Valid numeric entity character U+0060",
+"input": "&#x0060;",
+"output": [["Character", "\u0060"]]},
+
+{"description": "Valid numeric entity character U+0061",
+"input": "&#x0061;",
+"output": [["Character", "\u0061"]]},
+
+{"description": "Valid numeric entity character U+0062",
+"input": "&#x0062;",
+"output": [["Character", "\u0062"]]},
+
+{"description": "Valid numeric entity character U+0063",
+"input": "&#x0063;",
+"output": [["Character", "\u0063"]]},
+
+{"description": "Valid numeric entity character U+0064",
+"input": "&#x0064;",
+"output": [["Character", "\u0064"]]},
+
+{"description": "Valid numeric entity character U+0065",
+"input": "&#x0065;",
+"output": [["Character", "\u0065"]]},
+
+{"description": "Valid numeric entity character U+0066",
+"input": "&#x0066;",
+"output": [["Character", "\u0066"]]},
+
+{"description": "Valid numeric entity character U+0067",
+"input": "&#x0067;",
+"output": [["Character", "\u0067"]]},
+
+{"description": "Valid numeric entity character U+0068",
+"input": "&#x0068;",
+"output": [["Character", "\u0068"]]},
+
+{"description": "Valid numeric entity character U+0069",
+"input": "&#x0069;",
+"output": [["Character", "\u0069"]]},
+
+{"description": "Valid numeric entity character U+006A",
+"input": "&#x006a;",
+"output": [["Character", "\u006A"]]},
+
+{"description": "Valid numeric entity character U+006B",
+"input": "&#x006b;",
+"output": [["Character", "\u006B"]]},
+
+{"description": "Valid numeric entity character U+006C",
+"input": "&#x006c;",
+"output": [["Character", "\u006C"]]},
+
+{"description": "Valid numeric entity character U+006D",
+"input": "&#x006d;",
+"output": [["Character", "\u006D"]]},
+
+{"description": "Valid numeric entity character U+006E",
+"input": "&#x006e;",
+"output": [["Character", "\u006E"]]},
+
+{"description": "Valid numeric entity character U+006F",
+"input": "&#x006f;",
+"output": [["Character", "\u006F"]]},
+
+{"description": "Valid numeric entity character U+0070",
+"input": "&#x0070;",
+"output": [["Character", "\u0070"]]},
+
+{"description": "Valid numeric entity character U+0071",
+"input": "&#x0071;",
+"output": [["Character", "\u0071"]]},
+
+{"description": "Valid numeric entity character U+0072",
+"input": "&#x0072;",
+"output": [["Character", "\u0072"]]},
+
+{"description": "Valid numeric entity character U+0073",
+"input": "&#x0073;",
+"output": [["Character", "\u0073"]]},
+
+{"description": "Valid numeric entity character U+0074",
+"input": "&#x0074;",
+"output": [["Character", "\u0074"]]},
+
+{"description": "Valid numeric entity character U+0075",
+"input": "&#x0075;",
+"output": [["Character", "\u0075"]]},
+
+{"description": "Valid numeric entity character U+0076",
+"input": "&#x0076;",
+"output": [["Character", "\u0076"]]},
+
+{"description": "Valid numeric entity character U+0077",
+"input": "&#x0077;",
+"output": [["Character", "\u0077"]]},
+
+{"description": "Valid numeric entity character U+0078",
+"input": "&#x0078;",
+"output": [["Character", "\u0078"]]},
+
+{"description": "Valid numeric entity character U+0079",
+"input": "&#x0079;",
+"output": [["Character", "\u0079"]]},
+
+{"description": "Valid numeric entity character U+007A",
+"input": "&#x007a;",
+"output": [["Character", "\u007A"]]},
+
+{"description": "Valid numeric entity character U+007B",
+"input": "&#x007b;",
+"output": [["Character", "\u007B"]]},
+
+{"description": "Valid numeric entity character U+007C",
+"input": "&#x007c;",
+"output": [["Character", "\u007C"]]},
+
+{"description": "Valid numeric entity character U+007D",
+"input": "&#x007d;",
+"output": [["Character", "\u007D"]]},
+
+{"description": "Valid numeric entity character U+007E",
+"input": "&#x007e;",
+"output": [["Character", "\u007E"]]},
+
+{"description": "Valid numeric entity character U+00A0",
+"input": "&#x00a0;",
+"output": [["Character", "\u00A0"]]},
+
+{"description": "Valid numeric entity character U+00A1",
+"input": "&#x00a1;",
+"output": [["Character", "\u00A1"]]},
+
+{"description": "Valid numeric entity character U+00A2",
+"input": "&#x00a2;",
+"output": [["Character", "\u00A2"]]},
+
+{"description": "Valid numeric entity character U+00A3",
+"input": "&#x00a3;",
+"output": [["Character", "\u00A3"]]},
+
+{"description": "Valid numeric entity character U+00A4",
+"input": "&#x00a4;",
+"output": [["Character", "\u00A4"]]},
+
+{"description": "Valid numeric entity character U+00A5",
+"input": "&#x00a5;",
+"output": [["Character", "\u00A5"]]},
+
+{"description": "Valid numeric entity character U+00A6",
+"input": "&#x00a6;",
+"output": [["Character", "\u00A6"]]},
+
+{"description": "Valid numeric entity character U+00A7",
+"input": "&#x00a7;",
+"output": [["Character", "\u00A7"]]},
+
+{"description": "Valid numeric entity character U+00A8",
+"input": "&#x00a8;",
+"output": [["Character", "\u00A8"]]},
+
+{"description": "Valid numeric entity character U+00A9",
+"input": "&#x00a9;",
+"output": [["Character", "\u00A9"]]},
+
+{"description": "Valid numeric entity character U+00AA",
+"input": "&#x00aa;",
+"output": [["Character", "\u00AA"]]},
+
+{"description": "Valid numeric entity character U+00AB",
+"input": "&#x00ab;",
+"output": [["Character", "\u00AB"]]},
+
+{"description": "Valid numeric entity character U+00AC",
+"input": "&#x00ac;",
+"output": [["Character", "\u00AC"]]},
+
+{"description": "Valid numeric entity character U+00AD",
+"input": "&#x00ad;",
+"output": [["Character", "\u00AD"]]},
+
+{"description": "Valid numeric entity character U+00AE",
+"input": "&#x00ae;",
+"output": [["Character", "\u00AE"]]},
+
+{"description": "Valid numeric entity character U+00AF",
+"input": "&#x00af;",
+"output": [["Character", "\u00AF"]]},
+
+{"description": "Valid numeric entity character U+00B0",
+"input": "&#x00b0;",
+"output": [["Character", "\u00B0"]]},
+
+{"description": "Valid numeric entity character U+00B1",
+"input": "&#x00b1;",
+"output": [["Character", "\u00B1"]]},
+
+{"description": "Valid numeric entity character U+00B2",
+"input": "&#x00b2;",
+"output": [["Character", "\u00B2"]]},
+
+{"description": "Valid numeric entity character U+00B3",
+"input": "&#x00b3;",
+"output": [["Character", "\u00B3"]]},
+
+{"description": "Valid numeric entity character U+00B4",
+"input": "&#x00b4;",
+"output": [["Character", "\u00B4"]]},
+
+{"description": "Valid numeric entity character U+00B5",
+"input": "&#x00b5;",
+"output": [["Character", "\u00B5"]]},
+
+{"description": "Valid numeric entity character U+00B6",
+"input": "&#x00b6;",
+"output": [["Character", "\u00B6"]]},
+
+{"description": "Valid numeric entity character U+00B7",
+"input": "&#x00b7;",
+"output": [["Character", "\u00B7"]]},
+
+{"description": "Valid numeric entity character U+00B8",
+"input": "&#x00b8;",
+"output": [["Character", "\u00B8"]]},
+
+{"description": "Valid numeric entity character U+00B9",
+"input": "&#x00b9;",
+"output": [["Character", "\u00B9"]]},
+
+{"description": "Valid numeric entity character U+00BA",
+"input": "&#x00ba;",
+"output": [["Character", "\u00BA"]]},
+
+{"description": "Valid numeric entity character U+00BB",
+"input": "&#x00bb;",
+"output": [["Character", "\u00BB"]]},
+
+{"description": "Valid numeric entity character U+00BC",
+"input": "&#x00bc;",
+"output": [["Character", "\u00BC"]]},
+
+{"description": "Valid numeric entity character U+00BD",
+"input": "&#x00bd;",
+"output": [["Character", "\u00BD"]]},
+
+{"description": "Valid numeric entity character U+00BE",
+"input": "&#x00be;",
+"output": [["Character", "\u00BE"]]},
+
+{"description": "Valid numeric entity character U+00BF",
+"input": "&#x00bf;",
+"output": [["Character", "\u00BF"]]},
+
+{"description": "Valid numeric entity character U+00C0",
+"input": "&#x00c0;",
+"output": [["Character", "\u00C0"]]},
+
+{"description": "Valid numeric entity character U+00C1",
+"input": "&#x00c1;",
+"output": [["Character", "\u00C1"]]},
+
+{"description": "Valid numeric entity character U+00C2",
+"input": "&#x00c2;",
+"output": [["Character", "\u00C2"]]},
+
+{"description": "Valid numeric entity character U+00C3",
+"input": "&#x00c3;",
+"output": [["Character", "\u00C3"]]},
+
+{"description": "Valid numeric entity character U+00C4",
+"input": "&#x00c4;",
+"output": [["Character", "\u00C4"]]},
+
+{"description": "Valid numeric entity character U+00C5",
+"input": "&#x00c5;",
+"output": [["Character", "\u00C5"]]},
+
+{"description": "Valid numeric entity character U+00C6",
+"input": "&#x00c6;",
+"output": [["Character", "\u00C6"]]},
+
+{"description": "Valid numeric entity character U+00C7",
+"input": "&#x00c7;",
+"output": [["Character", "\u00C7"]]},
+
+{"description": "Valid numeric entity character U+00C8",
+"input": "&#x00c8;",
+"output": [["Character", "\u00C8"]]},
+
+{"description": "Valid numeric entity character U+00C9",
+"input": "&#x00c9;",
+"output": [["Character", "\u00C9"]]},
+
+{"description": "Valid numeric entity character U+00CA",
+"input": "&#x00ca;",
+"output": [["Character", "\u00CA"]]},
+
+{"description": "Valid numeric entity character U+00CB",
+"input": "&#x00cb;",
+"output": [["Character", "\u00CB"]]},
+
+{"description": "Valid numeric entity character U+00CC",
+"input": "&#x00cc;",
+"output": [["Character", "\u00CC"]]},
+
+{"description": "Valid numeric entity character U+00CD",
+"input": "&#x00cd;",
+"output": [["Character", "\u00CD"]]},
+
+{"description": "Valid numeric entity character U+00CE",
+"input": "&#x00ce;",
+"output": [["Character", "\u00CE"]]},
+
+{"description": "Valid numeric entity character U+00CF",
+"input": "&#x00cf;",
+"output": [["Character", "\u00CF"]]},
+
+{"description": "Valid numeric entity character U+00D0",
+"input": "&#x00d0;",
+"output": [["Character", "\u00D0"]]},
+
+{"description": "Valid numeric entity character U+00D1",
+"input": "&#x00d1;",
+"output": [["Character", "\u00D1"]]},
+
+{"description": "Valid numeric entity character U+00D2",
+"input": "&#x00d2;",
+"output": [["Character", "\u00D2"]]},
+
+{"description": "Valid numeric entity character U+00D3",
+"input": "&#x00d3;",
+"output": [["Character", "\u00D3"]]},
+
+{"description": "Valid numeric entity character U+00D4",
+"input": "&#x00d4;",
+"output": [["Character", "\u00D4"]]},
+
+{"description": "Valid numeric entity character U+00D5",
+"input": "&#x00d5;",
+"output": [["Character", "\u00D5"]]},
+
+{"description": "Valid numeric entity character U+00D6",
+"input": "&#x00d6;",
+"output": [["Character", "\u00D6"]]},
+
+{"description": "Valid numeric entity character U+00D7",
+"input": "&#x00d7;",
+"output": [["Character", "\u00D7"]]},
+
+{"description": "Valid numeric entity character U+00D8",
+"input": "&#x00d8;",
+"output": [["Character", "\u00D8"]]},
+
+{"description": "Valid numeric entity character U+00D9",
+"input": "&#x00d9;",
+"output": [["Character", "\u00D9"]]},
+
+{"description": "Valid numeric entity character U+00DA",
+"input": "&#x00da;",
+"output": [["Character", "\u00DA"]]},
+
+{"description": "Valid numeric entity character U+00DB",
+"input": "&#x00db;",
+"output": [["Character", "\u00DB"]]},
+
+{"description": "Valid numeric entity character U+00DC",
+"input": "&#x00dc;",
+"output": [["Character", "\u00DC"]]},
+
+{"description": "Valid numeric entity character U+00DD",
+"input": "&#x00dd;",
+"output": [["Character", "\u00DD"]]},
+
+{"description": "Valid numeric entity character U+00DE",
+"input": "&#x00de;",
+"output": [["Character", "\u00DE"]]},
+
+{"description": "Valid numeric entity character U+00DF",
+"input": "&#x00df;",
+"output": [["Character", "\u00DF"]]},
+
+{"description": "Valid numeric entity character U+00E0",
+"input": "&#x00e0;",
+"output": [["Character", "\u00E0"]]},
+
+{"description": "Valid numeric entity character U+00E1",
+"input": "&#x00e1;",
+"output": [["Character", "\u00E1"]]},
+
+{"description": "Valid numeric entity character U+00E2",
+"input": "&#x00e2;",
+"output": [["Character", "\u00E2"]]},
+
+{"description": "Valid numeric entity character U+00E3",
+"input": "&#x00e3;",
+"output": [["Character", "\u00E3"]]},
+
+{"description": "Valid numeric entity character U+00E4",
+"input": "&#x00e4;",
+"output": [["Character", "\u00E4"]]},
+
+{"description": "Valid numeric entity character U+00E5",
+"input": "&#x00e5;",
+"output": [["Character", "\u00E5"]]},
+
+{"description": "Valid numeric entity character U+00E6",
+"input": "&#x00e6;",
+"output": [["Character", "\u00E6"]]},
+
+{"description": "Valid numeric entity character U+00E7",
+"input": "&#x00e7;",
+"output": [["Character", "\u00E7"]]},
+
+{"description": "Valid numeric entity character U+00E8",
+"input": "&#x00e8;",
+"output": [["Character", "\u00E8"]]},
+
+{"description": "Valid numeric entity character U+00E9",
+"input": "&#x00e9;",
+"output": [["Character", "\u00E9"]]},
+
+{"description": "Valid numeric entity character U+00EA",
+"input": "&#x00ea;",
+"output": [["Character", "\u00EA"]]},
+
+{"description": "Valid numeric entity character U+00EB",
+"input": "&#x00eb;",
+"output": [["Character", "\u00EB"]]},
+
+{"description": "Valid numeric entity character U+00EC",
+"input": "&#x00ec;",
+"output": [["Character", "\u00EC"]]},
+
+{"description": "Valid numeric entity character U+00ED",
+"input": "&#x00ed;",
+"output": [["Character", "\u00ED"]]},
+
+{"description": "Valid numeric entity character U+00EE",
+"input": "&#x00ee;",
+"output": [["Character", "\u00EE"]]},
+
+{"description": "Valid numeric entity character U+00EF",
+"input": "&#x00ef;",
+"output": [["Character", "\u00EF"]]},
+
+{"description": "Valid numeric entity character U+00F0",
+"input": "&#x00f0;",
+"output": [["Character", "\u00F0"]]},
+
+{"description": "Valid numeric entity character U+00F1",
+"input": "&#x00f1;",
+"output": [["Character", "\u00F1"]]},
+
+{"description": "Valid numeric entity character U+00F2",
+"input": "&#x00f2;",
+"output": [["Character", "\u00F2"]]},
+
+{"description": "Valid numeric entity character U+00F3",
+"input": "&#x00f3;",
+"output": [["Character", "\u00F3"]]},
+
+{"description": "Valid numeric entity character U+00F4",
+"input": "&#x00f4;",
+"output": [["Character", "\u00F4"]]},
+
+{"description": "Valid numeric entity character U+00F5",
+"input": "&#x00f5;",
+"output": [["Character", "\u00F5"]]},
+
+{"description": "Valid numeric entity character U+00F6",
+"input": "&#x00f6;",
+"output": [["Character", "\u00F6"]]},
+
+{"description": "Valid numeric entity character U+00F7",
+"input": "&#x00f7;",
+"output": [["Character", "\u00F7"]]},
+
+{"description": "Valid numeric entity character U+00F8",
+"input": "&#x00f8;",
+"output": [["Character", "\u00F8"]]},
+
+{"description": "Valid numeric entity character U+00F9",
+"input": "&#x00f9;",
+"output": [["Character", "\u00F9"]]},
+
+{"description": "Valid numeric entity character U+00FA",
+"input": "&#x00fa;",
+"output": [["Character", "\u00FA"]]},
+
+{"description": "Valid numeric entity character U+00FB",
+"input": "&#x00fb;",
+"output": [["Character", "\u00FB"]]},
+
+{"description": "Valid numeric entity character U+00FC",
+"input": "&#x00fc;",
+"output": [["Character", "\u00FC"]]},
+
+{"description": "Valid numeric entity character U+00FD",
+"input": "&#x00fd;",
+"output": [["Character", "\u00FD"]]},
+
+{"description": "Valid numeric entity character U+00FE",
+"input": "&#x00fe;",
+"output": [["Character", "\u00FE"]]},
+
+{"description": "Valid numeric entity character U+00FF",
+"input": "&#x00ff;",
+"output": [["Character", "\u00FF"]]},
+
+{"description": "Valid numeric entity character U+D7FF",
+"input": "&#xd7ff;",
+"output": [["Character", "\uD7FF"]]},
+
+{"description": "Valid numeric entity character U+E000",
+"input": "&#xe000;",
+"output": [["Character", "\uE000"]]},
+
+{"description": "Valid numeric entity character U+FDCF",
+"input": "&#xfdcf;",
+"output": [["Character", "\uFDCF"]]},
+
+{"description": "Valid numeric entity character U+FDF0",
+"input": "&#xfdf0;",
+"output": [["Character", "\uFDF0"]]},
+
+{"description": "Valid numeric entity character U+FFFD",
+"input": "&#xfffd;",
+"output": [["Character", "\uFFFD"]]},
+
+{"description": "Valid numeric entity character U+10000",
+"input": "&#x10000;",
+"output": [["Character", "\uD800\uDC00"]]},
+
+{"description": "Valid numeric entity character U+1FFFD",
+"input": "&#x1fffd;",
+"output": [["Character", "\uD83F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+20000",
+"input": "&#x20000;",
+"output": [["Character", "\uD840\uDC00"]]},
+
+{"description": "Valid numeric entity character U+2FFFD",
+"input": "&#x2fffd;",
+"output": [["Character", "\uD87F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+30000",
+"input": "&#x30000;",
+"output": [["Character", "\uD880\uDC00"]]},
+
+{"description": "Valid numeric entity character U+3FFFD",
+"input": "&#x3fffd;",
+"output": [["Character", "\uD8BF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+40000",
+"input": "&#x40000;",
+"output": [["Character", "\uD8C0\uDC00"]]},
+
+{"description": "Valid numeric entity character U+4FFFD",
+"input": "&#x4fffd;",
+"output": [["Character", "\uD8FF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+50000",
+"input": "&#x50000;",
+"output": [["Character", "\uD900\uDC00"]]},
+
+{"description": "Valid numeric entity character U+5FFFD",
+"input": "&#x5fffd;",
+"output": [["Character", "\uD93F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+60000",
+"input": "&#x60000;",
+"output": [["Character", "\uD940\uDC00"]]},
+
+{"description": "Valid numeric entity character U+6FFFD",
+"input": "&#x6fffd;",
+"output": [["Character", "\uD97F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+70000",
+"input": "&#x70000;",
+"output": [["Character", "\uD980\uDC00"]]},
+
+{"description": "Valid numeric entity character U+7FFFD",
+"input": "&#x7fffd;",
+"output": [["Character", "\uD9BF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+80000",
+"input": "&#x80000;",
+"output": [["Character", "\uD9C0\uDC00"]]},
+
+{"description": "Valid numeric entity character U+8FFFD",
+"input": "&#x8fffd;",
+"output": [["Character", "\uD9FF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+90000",
+"input": "&#x90000;",
+"output": [["Character", "\uDA00\uDC00"]]},
+
+{"description": "Valid numeric entity character U+9FFFD",
+"input": "&#x9fffd;",
+"output": [["Character", "\uDA3F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+A0000",
+"input": "&#xa0000;",
+"output": [["Character", "\uDA40\uDC00"]]},
+
+{"description": "Valid numeric entity character U+AFFFD",
+"input": "&#xafffd;",
+"output": [["Character", "\uDA7F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+B0000",
+"input": "&#xb0000;",
+"output": [["Character", "\uDA80\uDC00"]]},
+
+{"description": "Valid numeric entity character U+BFFFD",
+"input": "&#xbfffd;",
+"output": [["Character", "\uDABF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+C0000",
+"input": "&#xc0000;",
+"output": [["Character", "\uDAC0\uDC00"]]},
+
+{"description": "Valid numeric entity character U+CFFFD",
+"input": "&#xcfffd;",
+"output": [["Character", "\uDAFF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+D0000",
+"input": "&#xd0000;",
+"output": [["Character", "\uDB00\uDC00"]]},
+
+{"description": "Valid numeric entity character U+DFFFD",
+"input": "&#xdfffd;",
+"output": [["Character", "\uDB3F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+E0000",
+"input": "&#xe0000;",
+"output": [["Character", "\uDB40\uDC00"]]},
+
+{"description": "Valid numeric entity character U+EFFFD",
+"input": "&#xefffd;",
+"output": [["Character", "\uDB7F\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+F0000",
+"input": "&#xf0000;",
+"output": [["Character", "\uDB80\uDC00"]]},
+
+{"description": "Valid numeric entity character U+FFFFD",
+"input": "&#xffffd;",
+"output": [["Character", "\uDBBF\uDFFD"]]},
+
+{"description": "Valid numeric entity character U+100000",
+"input": "&#x100000;",
+"output": [["Character", "\uDBC0\uDC00"]]},
+
+{"description": "Valid numeric entity character U+10FFFD",
+"input": "&#x10fffd;",
+"output": [["Character", "\uDBFF\uDFFD"]]}
+
+]}
+
+
diff --git a/tests/html5lib-tests/tokenizer/pendingSpecChanges.test b/tests/html5lib-tests/tokenizer/pendingSpecChanges.test
new file mode 100644
index 0000000..191434f
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/pendingSpecChanges.test
@@ -0,0 +1,9 @@
+{"tests": [
+
+{"description":"<!---- >",
+"input":"<!---- >",
+"output":[["Comment","-- >"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]}
+]}
diff --git a/tests/html5lib-tests/tokenizer/test1.test b/tests/html5lib-tests/tokenizer/test1.test
new file mode 100644
index 0000000..cb0eb48
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/test1.test
@@ -0,0 +1,349 @@
+{"tests": [
+
+{"description":"Correct Doctype lowercase",
+"input":"<!DOCTYPE html>",
+"output":[["DOCTYPE", "html", null, null, true]]},
+
+
+{"description":"Correct Doctype uppercase",
+"input":"<!DOCTYPE HTML>",
+"output":[["DOCTYPE", "html", null, null, true]]},
+
+{"description":"Correct Doctype mixed case",
+"input":"<!DOCTYPE HtMl>",
+"output":[["DOCTYPE", "html", null, null, true]]},
+
+{"description":"Correct Doctype case with EOF",
+"input":"<!DOCTYPE HtMl",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 15 }
+]},
+
+{"description":"Truncated doctype start",
+"input":"<!DOC>",
+"output":[["Comment", "DOC"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"Doctype in error",
+"input":"<!DOCTYPE foo>",
+"output":[["DOCTYPE", "foo", null, null, true]]},
+
+{"description":"Single Start Tag",
+"input":"<h>",
+"output":[["StartTag", "h", {}]]},
+
+{"description":"Empty end tag",
+"input":"</>",
+"output":[],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"Empty start tag",
+"input":"<>",
+"output":[["Character", "<>"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"Start Tag w/attribute",
+"input":"<h a='b'>",
+"output":[["StartTag", "h", {"a":"b"}]]},
+
+{"description":"Start Tag w/attribute no quotes",
+"input":"<h a=b>",
+"output":[["StartTag", "h", {"a":"b"}]]},
+
+{"description":"Start/End Tag",
+"input":"<h></h>",
+"output":[["StartTag", "h", {}], ["EndTag", "h"]]},
+
+{"description":"Two unclosed start tags",
+"input":"<p>One<p>Two",
+"output":[["StartTag", "p", {}], ["Character", "One"], ["StartTag", "p", {}], ["Character", "Two"]]},
+
+{"description":"End Tag w/attribute",
+"input":"<h></h a='b'>",
+"output":[["StartTag", "h", {}], ["EndTag", "h"]],
+"errors":[
+ { "code": "end-tag-with-attributes", "line": 1, "col": 13 }
+]},
+
+{"description":"Multiple atts",
+"input":"<h a='b' c='d'>",
+"output":[["StartTag", "h", {"a":"b", "c":"d"}]]},
+
+{"description":"Multiple atts no space",
+"input":"<h a='b'c='d'>",
+"output":[["StartTag", "h", {"a":"b", "c":"d"}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 9 }
+]},
+
+{"description":"Repeated attr",
+ "input":"<h a='b' a='d'>",
+ "output":[["StartTag", "h", {"a":"b"}]],
+ "errors":[
+ { "code": "duplicate-attribute", "line": 1, "col": 11 }
+]},
+
+{"description":"Simple comment",
+ "input":"<!--comment-->",
+ "output":[["Comment", "comment"]]},
+
+{"description":"Comment, Central dash no space",
+ "input":"<!----->",
+ "output":[["Comment", "-"]]},
+
+{"description":"Comment, two central dashes",
+"input":"<!-- --comment -->",
+"output":[["Comment", " --comment "]]},
+
+{"description":"Comment, central less-than bang",
+"input":"<!--<!-->",
+"output":[["Comment", "<!"]]},
+
+{"description":"Unfinished comment",
+"input":"<!--comment",
+"output":[["Comment", "comment"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 12 }
+]},
+
+{"description":"Unfinished comment after start of nested comment",
+"input":"<!-- <!--",
+"output":[["Comment", " <!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 10 }
+]},
+
+{"description":"Start of a comment",
+"input":"<!-",
+"output":[["Comment", "-"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"Short comment",
+"input":"<!-->",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "abrupt-closing-of-empty-comment", "line": 1, "col": 5 }
+]},
+
+{"description":"Short comment two",
+"input":"<!--->",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "abrupt-closing-of-empty-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"Short comment three",
+ "input":"<!---->",
+ "output":[["Comment", ""]]},
+
+{"description":"< in comment",
+"input":"<!-- <test-->",
+"output":[["Comment", " <test"]]},
+
+{"description":"<! in comment",
+"input":"<!-- <!test-->",
+"output":[["Comment", " <!test"]]},
+
+{"description":"<!- in comment",
+"input":"<!-- <!-test-->",
+"output":[["Comment", " <!-test"]]},
+
+{"description":"Nested comment",
+"input":"<!-- <!--test-->",
+"output":[["Comment", " <!--test"]],
+"errors":[
+ { "code": "nested-comment", "line": 1, "col": 10 }
+]},
+
+{"description":"Nested comment with extra <",
+"input":"<!-- <<!--test-->",
+"output":[["Comment", " <<!--test"]],
+"errors":[
+ { "code": "nested-comment", "line": 1, "col": 11 }
+]},
+
+{"description":"< in script data",
+"initialStates":["Script data state"],
+"input":"<test-->",
+"output":[["Character", "<test-->"]]},
+
+{"description":"<! in script data",
+"initialStates":["Script data state"],
+"input":"<!test-->",
+"output":[["Character", "<!test-->"]]},
+
+{"description":"<!- in script data",
+"initialStates":["Script data state"],
+"input":"<!-test-->",
+"output":[["Character", "<!-test-->"]]},
+
+{"description":"Escaped script data",
+"initialStates":["Script data state"],
+"input":"<!--test-->",
+"output":[["Character", "<!--test-->"]]},
+
+{"description":"< in script HTML comment",
+"initialStates":["Script data state"],
+"input":"<!-- < test -->",
+"output":[["Character", "<!-- < test -->"]]},
+
+{"description":"</ in script HTML comment",
+"initialStates":["Script data state"],
+"input":"<!-- </ test -->",
+"output":[["Character", "<!-- </ test -->"]]},
+
+{"description":"Start tag in script HTML comment",
+"initialStates":["Script data state"],
+"input":"<!-- <test> -->",
+"output":[["Character", "<!-- <test> -->"]]},
+
+{"description":"End tag in script HTML comment",
+"initialStates":["Script data state"],
+"input":"<!-- </test> -->",
+"output":[["Character", "<!-- </test> -->"]]},
+
+{"description":"- in script HTML comment double escaped",
+"initialStates":["Script data state"],
+"input":"<!--<script>-</script>-->",
+"output":[["Character", "<!--<script>-</script>-->"]]},
+
+{"description":"-- in script HTML comment double escaped",
+"initialStates":["Script data state"],
+"input":"<!--<script>--</script>-->",
+"output":[["Character", "<!--<script>--</script>-->"]]},
+
+{"description":"--- in script HTML comment double escaped",
+"initialStates":["Script data state"],
+"input":"<!--<script>---</script>-->",
+"output":[["Character", "<!--<script>---</script>-->"]]},
+
+{"description":"- spaced in script HTML comment double escaped",
+"initialStates":["Script data state"],
+"input":"<!--<script> - </script>-->",
+"output":[["Character", "<!--<script> - </script>-->"]]},
+
+{"description":"-- spaced in script HTML comment double escaped",
+"initialStates":["Script data state"],
+"input":"<!--<script> -- </script>-->",
+"output":[["Character", "<!--<script> -- </script>-->"]]},
+
+{"description":"Ampersand EOF",
+"input":"&",
+"output":[["Character", "&"]]},
+
+{"description":"Ampersand ampersand EOF",
+"input":"&&",
+"output":[["Character", "&&"]]},
+
+{"description":"Ampersand space EOF",
+"input":"& ",
+"output":[["Character", "& "]]},
+
+{"description":"Unfinished entity",
+"input":"&f",
+"output":[["Character", "&f"]]},
+
+{"description":"Ampersand, number sign",
+"input":"&#",
+"output":[["Character", "&#"]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 3 }
+]},
+
+{"description":"Unfinished numeric entity",
+"input":"&#x",
+"output":[["Character", "&#x"]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 4 }
+]},
+
+{"description":"Entity with trailing semicolon (1)",
+"input":"I'm &not;it",
+"output":[["Character","I'm \u00ACit"]]},
+
+{"description":"Entity with trailing semicolon (2)",
+"input":"I'm &notin;",
+"output":[["Character","I'm \u2209"]]},
+
+{"description":"Entity without trailing semicolon (1)",
+"input":"I'm &notit",
+"output":[["Character","I'm \u00ACit"]],
+"errors": [
+ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description":"Entity without trailing semicolon (2)",
+"input":"I'm &notin",
+"output":[["Character","I'm \u00ACin"]],
+"errors": [
+ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description":"Partial entity match at end of file",
+"input":"I'm &no",
+"output":[["Character","I'm &no"]]},
+
+{"description":"Non-ASCII character reference name",
+"input":"&\u00AC;",
+"output":[["Character", "&\u00AC;"]]},
+
+{"description":"ASCII decimal entity",
+"input":"&#0036;",
+"output":[["Character","$"]]},
+
+{"description":"ASCII hexadecimal entity",
+"input":"&#x3f;",
+"output":[["Character","?"]]},
+
+{"description":"Hexadecimal entity in attribute",
+"input":"<h a='&#x3f;'></h>",
+"output":[["StartTag", "h", {"a":"?"}], ["EndTag", "h"]]},
+
+{"description":"Entity in attribute without semicolon ending in x",
+"input":"<h a='&notx'>",
+"output":[["StartTag", "h", {"a":"&notx"}]]},
+
+{"description":"Entity in attribute without semicolon ending in 1",
+"input":"<h a='&not1'>",
+"output":[["StartTag", "h", {"a":"&not1"}]]},
+
+{"description":"Entity in attribute without semicolon ending in i",
+"input":"<h a='&noti'>",
+"output":[["StartTag", "h", {"a":"&noti"}]]},
+
+{"description":"Entity in attribute without semicolon",
+"input":"<h a='&COPY'>",
+"output":[["StartTag", "h", {"a":"\u00A9"}]],
+"errors": [
+ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 12 }
+]},
+
+{"description":"Unquoted attribute ending in ampersand",
+"input":"<s o=& t>",
+"output":[["StartTag","s",{"o":"&","t":""}]]},
+
+{"description":"Unquoted attribute at end of tag with final character of &, with tag followed by characters",
+"input":"<a a=a&>foo",
+"output":[["StartTag", "a", {"a":"a&"}], ["Character", "foo"]]},
+
+{"description":"plaintext element",
+ "input":"<plaintext>foobar",
+ "output":[["StartTag","plaintext",{}], ["Character","foobar"]]},
+
+{"description":"Open angled bracket in unquoted attribute value state",
+ "input":"<a a=f<>",
+ "output":[["StartTag", "a", {"a":"f<"}]],
+ "errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/test2.test b/tests/html5lib-tests/tokenizer/test2.test
new file mode 100644
index 0000000..f80f27d
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/test2.test
@@ -0,0 +1,275 @@
+{"tests": [
+
+{"description":"DOCTYPE without name",
+"input":"<!DOCTYPE>",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "missing-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"DOCTYPE without space before name",
+"input":"<!DOCTYPEhtml>",
+"output":[["DOCTYPE", "html", null, null, true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"Incorrect DOCTYPE without a space before name",
+"input":"<!DOCTYPEfoo>",
+"output":[["DOCTYPE", "foo", null, null, true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"DOCTYPE with publicId",
+"input":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML Transitional 4.01//EN\">",
+"output":[["DOCTYPE", "html", "-//W3C//DTD HTML Transitional 4.01//EN", null, true]]},
+
+{"description":"DOCTYPE with EOF after PUBLIC",
+"input":"<!DOCTYPE html PUBLIC",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"DOCTYPE with EOF after PUBLIC '",
+"input":"<!DOCTYPE html PUBLIC '",
+"output":[["DOCTYPE", "html", "", null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 24, "line": 1 }
+]},
+
+{"description":"DOCTYPE with EOF after PUBLIC 'x",
+"input":"<!DOCTYPE html PUBLIC 'x",
+"output":[["DOCTYPE", "html", "x", null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 25, "line": 1 }
+]},
+
+{"description":"DOCTYPE with systemId",
+"input":"<!DOCTYPE html SYSTEM \"-//W3C//DTD HTML Transitional 4.01//EN\">",
+"output":[["DOCTYPE", "html", null, "-//W3C//DTD HTML Transitional 4.01//EN", true]]},
+
+{"description":"DOCTYPE with single-quoted systemId",
+"input":"<!DOCTYPE html SYSTEM '-//W3C//DTD HTML Transitional 4.01//EN'>",
+"output":[["DOCTYPE", "html", null, "-//W3C//DTD HTML Transitional 4.01//EN", true]]},
+
+{"description":"DOCTYPE with publicId and systemId",
+"input":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML Transitional 4.01//EN\" \"-//W3C//DTD HTML Transitional 4.01//EN\">",
+"output":[["DOCTYPE", "html", "-//W3C//DTD HTML Transitional 4.01//EN", "-//W3C//DTD HTML Transitional 4.01//EN", true]]},
+
+{"description":"DOCTYPE with > in double-quoted publicId",
+"input":"<!DOCTYPE html PUBLIC \">x",
+"output":[["DOCTYPE", "html", "", null, false], ["Character", "x"]],
+"errors": [
+ { "code": "abrupt-doctype-public-identifier", "col": 24, "line": 1 }
+]},
+
+{"description":"DOCTYPE with > in single-quoted publicId",
+"input":"<!DOCTYPE html PUBLIC '>x",
+"output":[["DOCTYPE", "html", "", null, false], ["Character", "x"]],
+"errors": [
+ { "code": "abrupt-doctype-public-identifier", "col": 24, "line": 1 }
+]},
+
+{"description":"DOCTYPE with > in double-quoted systemId",
+"input":"<!DOCTYPE html PUBLIC \"foo\" \">x",
+"output":[["DOCTYPE", "html", "foo", "", false], ["Character", "x"]],
+"errors": [
+ { "code": "abrupt-doctype-system-identifier", "col": 30, "line": 1 }
+]},
+
+{"description":"DOCTYPE with > in single-quoted systemId",
+"input":"<!DOCTYPE html PUBLIC 'foo' '>x",
+"output":[["DOCTYPE", "html", "foo", "", false], ["Character", "x"]],
+"errors": [
+ { "code": "abrupt-doctype-system-identifier", "col": 30, "line": 1 }
+]},
+
+{"description":"Incomplete doctype",
+"input":"<!DOCTYPE html ",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 16 }
+]},
+
+{"description":"Numeric entity representing the NUL character",
+"input":"&#0000;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "null-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description":"Hexadecimal entity representing the NUL character",
+"input":"&#x0000;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "null-character-reference", "line": 1, "col": 9 }
+]},
+
+{"description":"Numeric entity representing a codepoint after 1114111 (U+10FFFF)",
+"input":"&#2225222;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 11 }
+]},
+
+{"description":"Hexadecimal entity representing a codepoint after 1114111 (U+10FFFF)",
+"input":"&#x1010FFFF;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 13 }
+]},
+
+{"description":"Hexadecimal entity pair representing a surrogate pair",
+"input":"&#xD869;&#xDED6;",
+"output":[["Character", "\uFFFD\uFFFD"]],
+"errors":[
+ { "code": "surrogate-character-reference", "line": 1, "col": 9 },
+ { "code": "surrogate-character-reference", "line": 1, "col": 17 }
+]},
+
+{"description":"Hexadecimal entity with mixed uppercase and lowercase",
+"input":"&#xaBcD;",
+"output":[["Character", "\uABCD"]]},
+
+{"description":"Entity without a name",
+"input":"&;",
+"output":[["Character", "&;"]]},
+
+{"description":"Unescaped ampersand in attribute value",
+"input":"<h a='&'>",
+"output":[["StartTag", "h", { "a":"&" }]]},
+
+
+{"description":"StartTag containing <",
+"input":"<a<b>",
+"output":[["StartTag", "a<b", { }]]},
+
+{"description":"Non-void element containing trailing /",
+"input":"<h/>",
+"output":[["StartTag","h",{},true]]},
+
+{"description":"Void element with permitted slash",
+"input":"<br/>",
+"output":[["StartTag","br",{},true]]},
+
+{"description":"Void element with permitted slash (with attribute)",
+"input":"<br foo='bar'/>",
+"output":[["StartTag","br",{"foo":"bar"},true]]},
+
+{"description":"StartTag containing /",
+"input":"<h/a='b'>",
+"output":[["StartTag", "h", { "a":"b" }]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"Double-quoted attribute value",
+"input":"<h a=\"b\">",
+"output":[["StartTag", "h", { "a":"b" }]]},
+
+{"description":"Unescaped </",
+"input":"</",
+"output":[["Character", "</"]],
+"errors":[
+ { "code": "eof-before-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"Illegal end tag name",
+"input":"</1>",
+"output":[["Comment", "1"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"Simili processing instruction",
+"input":"<?namespace>",
+"output":[["Comment", "?namespace"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"A bogus comment stops at >, even if preceeded by two dashes",
+"input":"<?foo-->",
+"output":[["Comment", "?foo--"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"Unescaped <",
+"input":"foo < bar",
+"output":[["Character", "foo < bar"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 6 }
+]},
+
+{"description":"Null Byte Replacement",
+"input":"\u0000",
+"output":[["Character", "\u0000"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 1 }
+]},
+
+{"description":"Comment with dash",
+"input":"<!---x",
+"output":[["Comment", "-x"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"Entity + newline",
+"input":"\nx\n&gt;\n",
+"output":[["Character","\nx\n>\n"]]},
+
+{"description":"Start tag with no attributes but space before the greater-than sign",
+"input":"<h >",
+"output":[["StartTag", "h", {}]]},
+
+{"description":"Empty attribute followed by uppercase attribute",
+"input":"<h a B=''>",
+"output":[["StartTag", "h", {"a":"", "b":""}]]},
+
+{"description":"Double-quote after attribute name",
+"input":"<h a \">",
+"output":[["StartTag", "h", {"a":"", "\"":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"Single-quote after attribute name",
+"input":"<h a '>",
+"output":[["StartTag", "h", {"a":"", "'":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"Empty end tag with following characters",
+"input":"a</>bc",
+"output":[["Character", "abc"]],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 4 }
+]},
+
+{"description":"Empty end tag with following tag",
+"input":"a</><b>c",
+"output":[["Character", "a"], ["StartTag", "b", {}], ["Character", "c"]],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 4 }
+]},
+
+{"description":"Empty end tag with following comment",
+"input":"a</><!--b-->c",
+"output":[["Character", "a"], ["Comment", "b"], ["Character", "c"]],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 4 }
+]},
+
+{"description":"Empty end tag with following end tag",
+"input":"a</></b>c",
+"output":[["Character", "a"], ["EndTag", "b"], ["Character", "c"]],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 4 }
+]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/test3.test b/tests/html5lib-tests/tokenizer/test3.test
new file mode 100644
index 0000000..814482c
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/test3.test
@@ -0,0 +1,11233 @@
+{"tests": [
+
+{"description":"[empty]",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"",
+"output":[]},
+
+{"description":"[empty]",
+"initialStates":["CDATA section state"],
+"input":"",
+"output":[],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\\u0009",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\u0009",
+"output":[["Character", "\u0009"]]},
+
+{"description":"\\u0009",
+"initialStates":["CDATA section state"],
+"input":"\u0009",
+"output":[["Character", "\u0009"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\\u000A",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\u000A",
+"output":[["Character", "\u000A"]]},
+
+{"description":"\\u000A",
+"initialStates":["CDATA section state"],
+"input":"\u000A",
+"output":[["Character", "\u000A"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\\u000B",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\u000B",
+"output":[["Character", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description":"\\u000B",
+"initialStates":["CDATA section state"],
+"input":"\u000B",
+"output":[["Character", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 },
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\\u000C",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\u000C",
+"output":[["Character", "\u000C"]]},
+
+{"description":"\\u000C",
+"initialStates":["CDATA section state"],
+"input":"\u000C",
+"output":[["Character", "\u000C"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":" ",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":" ",
+"output":[["Character", " "]]},
+
+{"description":" ",
+"initialStates":["CDATA section state"],
+"input":" ",
+"output":[["Character", " "]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"!",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"!",
+"output":[["Character", "!"]]},
+
+{"description":"!",
+"initialStates":["CDATA section state"],
+"input":"!",
+"output":[["Character", "!"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\"",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\"",
+"output":[["Character", "\""]]},
+
+{"description":"\"",
+"initialStates":["CDATA section state"],
+"input":"\"",
+"output":[["Character", "\""]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"%",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"%",
+"output":[["Character", "%"]]},
+
+{"description":"%",
+"initialStates":["CDATA section state"],
+"input":"%",
+"output":[["Character", "%"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"&",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"&",
+"output":[["Character", "&"]]},
+
+{"description":"&",
+"initialStates":["CDATA section state"],
+"input":"&",
+"output":[["Character", "&"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"'",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"'",
+"output":[["Character", "'"]]},
+
+{"description":"'",
+"initialStates":["CDATA section state"],
+"input":"'",
+"output":[["Character", "'"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":",",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":",",
+"output":[["Character", ","]]},
+
+{"description":",",
+"initialStates":["CDATA section state"],
+"input":",",
+"output":[["Character", ","]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"-",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"-",
+"output":[["Character", "-"]]},
+
+{"description":"-",
+"initialStates":["CDATA section state"],
+"input":"-",
+"output":[["Character", "-"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":".",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":".",
+"output":[["Character", "."]]},
+
+{"description":".",
+"initialStates":["CDATA section state"],
+"input":".",
+"output":[["Character", "."]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"/",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"/",
+"output":[["Character", "/"]]},
+
+{"description":"/",
+"initialStates":["CDATA section state"],
+"input":"/",
+"output":[["Character", "/"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"0",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"0",
+"output":[["Character", "0"]]},
+
+{"description":"0",
+"initialStates":["CDATA section state"],
+"input":"0",
+"output":[["Character", "0"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"1",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"1",
+"output":[["Character", "1"]]},
+
+{"description":"1",
+"initialStates":["CDATA section state"],
+"input":"1",
+"output":[["Character", "1"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"9",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"9",
+"output":[["Character", "9"]]},
+
+{"description":"9",
+"initialStates":["CDATA section state"],
+"input":"9",
+"output":[["Character", "9"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":";",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";",
+"output":[["Character", ";"]]},
+
+{"description":";",
+"initialStates":["CDATA section state"],
+"input":";",
+"output":[["Character", ";"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":";=",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";=",
+"output":[["Character", ";="]]},
+
+{"description":";=",
+"initialStates":["CDATA section state"],
+"input":";=",
+"output":[["Character", ";="]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";>",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";>",
+"output":[["Character", ";>"]]},
+
+{"description":";>",
+"initialStates":["CDATA section state"],
+"input":";>",
+"output":[["Character", ";>"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";?",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";?",
+"output":[["Character", ";?"]]},
+
+{"description":";?",
+"initialStates":["CDATA section state"],
+"input":";?",
+"output":[["Character", ";?"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";@",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";@",
+"output":[["Character", ";@"]]},
+
+{"description":";@",
+"initialStates":["CDATA section state"],
+"input":";@",
+"output":[["Character", ";@"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";A",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";A",
+"output":[["Character", ";A"]]},
+
+{"description":";A",
+"initialStates":["CDATA section state"],
+"input":";A",
+"output":[["Character", ";A"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";B",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";B",
+"output":[["Character", ";B"]]},
+
+{"description":";B",
+"initialStates":["CDATA section state"],
+"input":";B",
+"output":[["Character", ";B"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";Y",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";Y",
+"output":[["Character", ";Y"]]},
+
+{"description":";Y",
+"initialStates":["CDATA section state"],
+"input":";Y",
+"output":[["Character", ";Y"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";Z",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";Z",
+"output":[["Character", ";Z"]]},
+
+{"description":";Z",
+"initialStates":["CDATA section state"],
+"input":";Z",
+"output":[["Character", ";Z"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";`",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";`",
+"output":[["Character", ";`"]]},
+
+{"description":";`",
+"initialStates":["CDATA section state"],
+"input":";`",
+"output":[["Character", ";`"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";a",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";a",
+"output":[["Character", ";a"]]},
+
+{"description":";a",
+"initialStates":["CDATA section state"],
+"input":";a",
+"output":[["Character", ";a"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";b",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";b",
+"output":[["Character", ";b"]]},
+
+{"description":";b",
+"initialStates":["CDATA section state"],
+"input":";b",
+"output":[["Character", ";b"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";y",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";y",
+"output":[["Character", ";y"]]},
+
+{"description":";y",
+"initialStates":["CDATA section state"],
+"input":";y",
+"output":[["Character", ";y"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";z",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";z",
+"output":[["Character", ";z"]]},
+
+{"description":";z",
+"initialStates":["CDATA section state"],
+"input":";z",
+"output":[["Character", ";z"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";{",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";{",
+"output":[["Character", ";{"]]},
+
+{"description":";{",
+"initialStates":["CDATA section state"],
+"input":";{",
+"output":[["Character", ";{"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":";\\uDBC0\\uDC00",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":";\uDBC0\uDC00",
+"output":[["Character", ";\uDBC0\uDC00"]]},
+
+{"description":";\\uDBC0\\uDC00",
+"initialStates":["CDATA section state"],
+"input":";\uDBC0\uDC00",
+"output":[["Character", ";\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 3 }
+]},
+
+{"description":"<",
+"input":"<",
+"output":[["Character", "<"]],
+"errors":[
+ { "code": "eof-before-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\u0000",
+"input":"<\u0000",
+"output":[["Character", "<\u0000"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 },
+ { "code": "unexpected-null-character", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\u0009",
+"input":"<\u0009",
+"output":[["Character", "<\u0009"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\u000A",
+"input":"<\u000A",
+"output":[["Character", "<\u000A"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\u000B",
+"input":"<\u000B",
+"output":[["Character", "<\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 2 },
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\u000C",
+"input":"<\u000C",
+"output":[["Character", "<\u000C"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"< ",
+"input":"< ",
+"output":[["Character", "< "]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<!",
+"input":"<!",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\u0000",
+"input":"<!\u0000",
+"output":[["Comment", "\uFFFD"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\u0009",
+"input":"<!\u0009",
+"output":[["Comment", "\u0009"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\u000A",
+"input":"<!\u000A",
+"output":[["Comment", "\u000A"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\u000B",
+"input":"<!\u000B",
+"output":[["Comment", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 },
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\u000C",
+"input":"<!\u000C",
+"output":[["Comment", "\u000C"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<! ",
+"input":"<! ",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<! \\u0000",
+"input":"<! \u0000",
+"output":[["Comment", " \uFFFD"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 4 }
+]},
+
+{"description":"<!!",
+"input":"<!!",
+"output":[["Comment", "!"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\"",
+"input":"<!\"",
+"output":[["Comment", "\""]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!&",
+"input":"<!&",
+"output":[["Comment", "&"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!'",
+"input":"<!'",
+"output":[["Comment", "'"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!-",
+"input":"<!-",
+"output":[["Comment", "-"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!--",
+"input":"<!--",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 5 }
+]},
+
+{"description":"<!--\\u0000",
+"input":"<!--\u0000",
+"output":[["Comment", "\uFFFD"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 5 },
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--\\u0009",
+"input":"<!--\u0009",
+"output":[["Comment", "\u0009"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--\\u000A",
+"input":"<!--\u000A",
+"output":[["Comment", "\u000A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 2, "col": 1 }
+]},
+
+{"description":"<!--\\u000B",
+"input":"<!--\u000B",
+"output":[["Comment", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 5 },
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--\\u000C",
+"input":"<!--\u000C",
+"output":[["Comment", "\u000C"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!-- ",
+"input":"<!-- ",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!-- \\u0000",
+"input":"<!-- \u0000",
+"output":[["Comment", " \uFFFD"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 6 },
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- \\u0009",
+"input":"<!-- \u0009",
+"output":[["Comment", " \u0009"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- \\u000A",
+"input":"<!-- \u000A",
+"output":[["Comment", " \u000A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 2, "col": 1 }
+]},
+
+{"description":"<!-- \\u000B",
+"input":"<!-- \u000B",
+"output":[["Comment", " \u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 },
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- \\u000C",
+"input":"<!-- \u000C",
+"output":[["Comment", " \u000C"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- ",
+"input":"<!-- ",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- !",
+"input":"<!-- !",
+"output":[["Comment", " !"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- \"",
+"input":"<!-- \"",
+"output":[["Comment", " \""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- &",
+"input":"<!-- &",
+"output":[["Comment", " &"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- '",
+"input":"<!-- '",
+"output":[["Comment", " '"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- ,",
+"input":"<!-- ,",
+"output":[["Comment", " ,"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- -",
+"input":"<!-- -",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- -\\u0000",
+"input":"<!-- -\u0000",
+"output":[["Comment", " -\uFFFD"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 7 },
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -\\u0009",
+"input":"<!-- -\u0009",
+"output":[["Comment", " -\u0009"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -\\u000A",
+"input":"<!-- -\u000A",
+"output":[["Comment", " -\u000A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 2, "col": 1 }
+]},
+
+{"description":"<!-- -\\u000B",
+"input":"<!-- -\u000B",
+"output":[["Comment", " -\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 },
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -\\u000C",
+"input":"<!-- -\u000C",
+"output":[["Comment", " -\u000C"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- - ",
+"input":"<!-- - ",
+"output":[["Comment", " - "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -!",
+"input":"<!-- -!",
+"output":[["Comment", " -!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -\"",
+"input":"<!-- -\"",
+"output":[["Comment", " -\""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -&",
+"input":"<!-- -&",
+"output":[["Comment", " -&"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -'",
+"input":"<!-- -'",
+"output":[["Comment", " -'"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -,",
+"input":"<!-- -,",
+"output":[["Comment", " -,"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- --",
+"input":"<!-- --",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -.",
+"input":"<!-- -.",
+"output":[["Comment", " -."]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -/",
+"input":"<!-- -/",
+"output":[["Comment", " -/"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -0",
+"input":"<!-- -0",
+"output":[["Comment", " -0"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -1",
+"input":"<!-- -1",
+"output":[["Comment", " -1"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -9",
+"input":"<!-- -9",
+"output":[["Comment", " -9"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -<",
+"input":"<!-- -<",
+"output":[["Comment", " -<"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -=",
+"input":"<!-- -=",
+"output":[["Comment", " -="]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- ->",
+"input":"<!-- ->",
+"output":[["Comment", " ->"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -?",
+"input":"<!-- -?",
+"output":[["Comment", " -?"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -@",
+"input":"<!-- -@",
+"output":[["Comment", " -@"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -A",
+"input":"<!-- -A",
+"output":[["Comment", " -A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -B",
+"input":"<!-- -B",
+"output":[["Comment", " -B"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -Y",
+"input":"<!-- -Y",
+"output":[["Comment", " -Y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -Z",
+"input":"<!-- -Z",
+"output":[["Comment", " -Z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -`",
+"input":"<!-- -`",
+"output":[["Comment", " -`"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -a",
+"input":"<!-- -a",
+"output":[["Comment", " -a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -b",
+"input":"<!-- -b",
+"output":[["Comment", " -b"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -y",
+"input":"<!-- -y",
+"output":[["Comment", " -y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -z",
+"input":"<!-- -z",
+"output":[["Comment", " -z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -{",
+"input":"<!-- -{",
+"output":[["Comment", " -{"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-- -\\uDBC0\\uDC00",
+"input":"<!-- -\uDBC0\uDC00",
+"output":[["Comment", " -\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!-- .",
+"input":"<!-- .",
+"output":[["Comment", " ."]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- /",
+"input":"<!-- /",
+"output":[["Comment", " /"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- 0",
+"input":"<!-- 0",
+"output":[["Comment", " 0"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- 1",
+"input":"<!-- 1",
+"output":[["Comment", " 1"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- 9",
+"input":"<!-- 9",
+"output":[["Comment", " 9"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- <",
+"input":"<!-- <",
+"output":[["Comment", " <"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- =",
+"input":"<!-- =",
+"output":[["Comment", " ="]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- >",
+"input":"<!-- >",
+"output":[["Comment", " >"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- ?",
+"input":"<!-- ?",
+"output":[["Comment", " ?"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- @",
+"input":"<!-- @",
+"output":[["Comment", " @"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- A",
+"input":"<!-- A",
+"output":[["Comment", " A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- B",
+"input":"<!-- B",
+"output":[["Comment", " B"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- Y",
+"input":"<!-- Y",
+"output":[["Comment", " Y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- Z",
+"input":"<!-- Z",
+"output":[["Comment", " Z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- `",
+"input":"<!-- `",
+"output":[["Comment", " `"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- a",
+"input":"<!-- a",
+"output":[["Comment", " a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- b",
+"input":"<!-- b",
+"output":[["Comment", " b"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- y",
+"input":"<!-- y",
+"output":[["Comment", " y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- z",
+"input":"<!-- z",
+"output":[["Comment", " z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- {",
+"input":"<!-- {",
+"output":[["Comment", " {"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!-- \\uDBC0\\uDC00",
+"input":"<!-- \uDBC0\uDC00",
+"output":[["Comment", " \uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!--!",
+"input":"<!--!",
+"output":[["Comment", "!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--\"",
+"input":"<!--\"",
+"output":[["Comment", "\""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--&",
+"input":"<!--&",
+"output":[["Comment", "&"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--'",
+"input":"<!--'",
+"output":[["Comment", "'"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--,",
+"input":"<!--,",
+"output":[["Comment", ","]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!---",
+"input":"<!---",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!---\\u0000",
+"input":"<!---\u0000",
+"output":[["Comment", "-\uFFFD"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 6 },
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---\\u0009",
+"input":"<!---\u0009",
+"output":[["Comment", "-\u0009"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---\\u000A",
+"input":"<!---\u000A",
+"output":[["Comment", "-\u000A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 2, "col": 1 }
+]},
+
+{"description":"<!---\\u000B",
+"input":"<!---\u000B",
+"output":[["Comment", "-\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 },
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---\\u000C",
+"input":"<!---\u000C",
+"output":[["Comment", "-\u000C"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!--- ",
+"input":"<!--- ",
+"output":[["Comment", "- "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---!",
+"input":"<!---!",
+"output":[["Comment", "-!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---\"",
+"input":"<!---\"",
+"output":[["Comment", "-\""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---&",
+"input":"<!---&",
+"output":[["Comment", "-&"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---'",
+"input":"<!---'",
+"output":[["Comment", "-'"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---,",
+"input":"<!---,",
+"output":[["Comment", "-,"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!----",
+"input":"<!----",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!----\\u0000",
+"input":"<!----\u0000",
+"output":[["Comment", "--\uFFFD"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 7 },
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----\\u0009",
+"input":"<!----\u0009",
+"output":[["Comment", "--\u0009"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----\\u000A",
+"input":"<!----\u000A",
+"output":[["Comment", "--\u000A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 2, "col": 1 }
+]},
+
+{"description":"<!----\\u000B",
+"input":"<!----\u000B",
+"output":[["Comment", "--\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 },
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----\\u000C",
+"input":"<!----\u000C",
+"output":[["Comment", "--\u000C"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!---- ",
+"input":"<!---- ",
+"output":[["Comment", "-- "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!---- -",
+"input":"<!---- -",
+"output":[["Comment", "-- "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+
+{"description":"<!---- --",
+"input":"<!---- --",
+"output":[["Comment", "-- "]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 10 }
+]},
+
+{"description":"<!---- -->",
+"input":"<!---- -->",
+"output":[["Comment", "-- "]]},
+
+{"description":"<!---- -->",
+"input":"<!---- -->",
+"output":[["Comment", "-- "]]},
+
+{"description":"<!---- a-->",
+"input":"<!---- a-->",
+"output":[["Comment", "-- a"]]},
+
+{"description":"<!----!",
+"input":"<!----!",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----!>",
+"input":"<!----!>",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "incorrectly-closed-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----! >",
+"input":"<!----! >",
+"output":[["Comment", "--! >"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!LF>",
+"input":"<!----!\n>",
+"output":[["Comment", "--!\n>"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!CR>",
+"input":"<!----!\r>",
+"output":[["Comment", "--!\n>"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!CRLF>",
+"input":"<!----!\r\n>",
+"output":[["Comment", "--!\n>"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!a",
+"input":"<!----!a",
+"output":[["Comment", "--!a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!a-",
+"input":"<!----!a-",
+"output":[["Comment", "--!a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 10 }
+]},
+
+{"description":"<!----!a--",
+"input":"<!----!a--",
+"output":[["Comment", "--!a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 11 }
+]},
+
+{"description":"<!----!a-->",
+"input":"<!----!a-->",
+"output":[["Comment", "--!a"]]},
+
+{"description":"<!----!-",
+"input":"<!----!-",
+"output":[["Comment", "--!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!----!--",
+"input":"<!----!--",
+"output":[["Comment", "--!"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 10 }
+]},
+
+{"description":"<!----!-->",
+"input":"<!----!-->",
+"output":[["Comment", "--!"]]},
+
+{"description":"<!----\"",
+"input":"<!----\"",
+"output":[["Comment", "--\""]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----&",
+"input":"<!----&",
+"output":[["Comment", "--&"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----'",
+"input":"<!----'",
+"output":[["Comment", "--'"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----,",
+"input":"<!----,",
+"output":[["Comment", "--,"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!-----",
+"input":"<!-----",
+"output":[["Comment", "-"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----.",
+"input":"<!----.",
+"output":[["Comment", "--."]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----/",
+"input":"<!----/",
+"output":[["Comment", "--/"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----0",
+"input":"<!----0",
+"output":[["Comment", "--0"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----1",
+"input":"<!----1",
+"output":[["Comment", "--1"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----9",
+"input":"<!----9",
+"output":[["Comment", "--9"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----<",
+"input":"<!----<",
+"output":[["Comment", "--<"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----=",
+"input":"<!----=",
+"output":[["Comment", "--="]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!---->",
+"input":"<!---->",
+"output":[["Comment", ""]]},
+
+{"description":"<!----?",
+"input":"<!----?",
+"output":[["Comment", "--?"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----@",
+"input":"<!----@",
+"output":[["Comment", "--@"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----A",
+"input":"<!----A",
+"output":[["Comment", "--A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----B",
+"input":"<!----B",
+"output":[["Comment", "--B"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----Y",
+"input":"<!----Y",
+"output":[["Comment", "--Y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----Z",
+"input":"<!----Z",
+"output":[["Comment", "--Z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----`",
+"input":"<!----`",
+"output":[["Comment", "--`"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----a",
+"input":"<!----a",
+"output":[["Comment", "--a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----b",
+"input":"<!----b",
+"output":[["Comment", "--b"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----y",
+"input":"<!----y",
+"output":[["Comment", "--y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----z",
+"input":"<!----z",
+"output":[["Comment", "--z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----{",
+"input":"<!----{",
+"output":[["Comment", "--{"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!----\\uDBC0\\uDC00",
+"input":"<!----\uDBC0\uDC00",
+"output":[["Comment", "--\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 9 }
+]},
+
+{"description":"<!---.",
+"input":"<!---.",
+"output":[["Comment", "-."]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---/",
+"input":"<!---/",
+"output":[["Comment", "-/"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---0",
+"input":"<!---0",
+"output":[["Comment", "-0"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---1",
+"input":"<!---1",
+"output":[["Comment", "-1"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---9",
+"input":"<!---9",
+"output":[["Comment", "-9"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---<",
+"input":"<!---<",
+"output":[["Comment", "-<"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---=",
+"input":"<!---=",
+"output":[["Comment", "-="]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---?",
+"input":"<!---?",
+"output":[["Comment", "-?"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---@",
+"input":"<!---@",
+"output":[["Comment", "-@"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---A",
+"input":"<!---A",
+"output":[["Comment", "-A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---B",
+"input":"<!---B",
+"output":[["Comment", "-B"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---Y",
+"input":"<!---Y",
+"output":[["Comment", "-Y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---Z",
+"input":"<!---Z",
+"output":[["Comment", "-Z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---`",
+"input":"<!---`",
+"output":[["Comment", "-`"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---a",
+"input":"<!---a",
+"output":[["Comment", "-a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---b",
+"input":"<!---b",
+"output":[["Comment", "-b"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---y",
+"input":"<!---y",
+"output":[["Comment", "-y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---z",
+"input":"<!---z",
+"output":[["Comment", "-z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---{",
+"input":"<!---{",
+"output":[["Comment", "-{"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!---\\uDBC0\\uDC00",
+"input":"<!---\uDBC0\uDC00",
+"output":[["Comment", "-\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 8 }
+]},
+
+{"description":"<!--.",
+"input":"<!--.",
+"output":[["Comment", "."]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--/",
+"input":"<!--/",
+"output":[["Comment", "/"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--0",
+"input":"<!--0",
+"output":[["Comment", "0"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--1",
+"input":"<!--1",
+"output":[["Comment", "1"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--9",
+"input":"<!--9",
+"output":[["Comment", "9"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--<",
+"input":"<!--<",
+"output":[["Comment", "<"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--=",
+"input":"<!--=",
+"output":[["Comment", "="]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--?",
+"input":"<!--?",
+"output":[["Comment", "?"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--@",
+"input":"<!--@",
+"output":[["Comment", "@"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--A",
+"input":"<!--A",
+"output":[["Comment", "A"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--B",
+"input":"<!--B",
+"output":[["Comment", "B"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--Y",
+"input":"<!--Y",
+"output":[["Comment", "Y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--Z",
+"input":"<!--Z",
+"output":[["Comment", "Z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--`",
+"input":"<!--`",
+"output":[["Comment", "`"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--a",
+"input":"<!--a",
+"output":[["Comment", "a"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--b",
+"input":"<!--b",
+"output":[["Comment", "b"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--y",
+"input":"<!--y",
+"output":[["Comment", "y"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--z",
+"input":"<!--z",
+"output":[["Comment", "z"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--{",
+"input":"<!--{",
+"output":[["Comment", "{"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 6 }
+]},
+
+{"description":"<!--\\uDBC0\\uDC00",
+"input":"<!--\uDBC0\uDC00",
+"output":[["Comment", "\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-comment", "line": 1, "col": 7 }
+]},
+
+{"description":"<!/",
+"input":"<!/",
+"output":[["Comment", "/"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!0",
+"input":"<!0",
+"output":[["Comment", "0"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!1",
+"input":"<!1",
+"output":[["Comment", "1"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!9",
+"input":"<!9",
+"output":[["Comment", "9"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!<",
+"input":"<!<",
+"output":[["Comment", "<"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!=",
+"input":"<!=",
+"output":[["Comment", "="]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!>",
+"input":"<!>",
+"output":[["Comment", ""]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!?",
+"input":"<!?",
+"output":[["Comment", "?"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!@",
+"input":"<!@",
+"output":[["Comment", "@"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!A",
+"input":"<!A",
+"output":[["Comment", "A"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!B",
+"input":"<!B",
+"output":[["Comment", "B"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!DOCTYPE",
+"input":"<!DOCTYPE",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 10 }
+]},
+
+{"description":"<!DOCTYPE\\u0000",
+"input":"<!DOCTYPE\u0000",
+"output":[["DOCTYPE", "\uFFFD", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "unexpected-null-character", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\u0008",
+"input":"<!DOCTYPE\u0008",
+"output":[["DOCTYPE", "\u0008", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\u0009",
+"input":"<!DOCTYPE\u0009",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\u000A",
+"input":"<!DOCTYPE\u000A",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE\\u000B",
+"input":"<!DOCTYPE\u000B",
+"output":[["DOCTYPE", "\u000B", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\u000C",
+"input":"<!DOCTYPE\u000C",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\u000D",
+"input":"<!DOCTYPE\u000D",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE\\u001F",
+"input":"<!DOCTYPE\u001F",
+"output":[["DOCTYPE", "\u001F", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE ",
+"input":"<!DOCTYPE ",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE \\u0000",
+"input":"<!DOCTYPE \u0000",
+"output":[["DOCTYPE", "\uFFFD", null, null, false]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\u0008",
+"input":"<!DOCTYPE \u0008",
+"output":[["DOCTYPE", "\u0008", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\u0009",
+"input":"<!DOCTYPE \u0009",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\u000A",
+"input":"<!DOCTYPE \u000A",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE \\u000B",
+"input":"<!DOCTYPE \u000B",
+"output":[["DOCTYPE", "\u000B", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\u000C",
+"input":"<!DOCTYPE \u000C",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\u000D",
+"input":"<!DOCTYPE \u000D",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE \\u001F",
+"input":"<!DOCTYPE \u001F",
+"output":[["DOCTYPE", "\u001F", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE ",
+"input":"<!DOCTYPE ",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE !",
+"input":"<!DOCTYPE !",
+"output":[["DOCTYPE", "!", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \"",
+"input":"<!DOCTYPE \"",
+"output":[["DOCTYPE", "\"", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE &",
+"input":"<!DOCTYPE &",
+"output":[["DOCTYPE", "&", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE '",
+"input":"<!DOCTYPE '",
+"output":[["DOCTYPE", "'", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE -",
+"input":"<!DOCTYPE -",
+"output":[["DOCTYPE", "-", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE /",
+"input":"<!DOCTYPE /",
+"output":[["DOCTYPE", "/", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE 0",
+"input":"<!DOCTYPE 0",
+"output":[["DOCTYPE", "0", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE 1",
+"input":"<!DOCTYPE 1",
+"output":[["DOCTYPE", "1", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE 9",
+"input":"<!DOCTYPE 9",
+"output":[["DOCTYPE", "9", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE <",
+"input":"<!DOCTYPE <",
+"output":[["DOCTYPE", "<", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE =",
+"input":"<!DOCTYPE =",
+"output":[["DOCTYPE", "=", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE >",
+"input":"<!DOCTYPE >",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "missing-doctype-name", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE ?",
+"input":"<!DOCTYPE ?",
+"output":[["DOCTYPE", "?", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE @",
+"input":"<!DOCTYPE @",
+"output":[["DOCTYPE", "@", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE A",
+"input":"<!DOCTYPE A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE B",
+"input":"<!DOCTYPE B",
+"output":[["DOCTYPE", "b", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE Y",
+"input":"<!DOCTYPE Y",
+"output":[["DOCTYPE", "y", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE Z",
+"input":"<!DOCTYPE Z",
+"output":[["DOCTYPE", "z", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE [",
+"input":"<!DOCTYPE [",
+"output":[["DOCTYPE", "[", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE `",
+"input":"<!DOCTYPE `",
+"output":[["DOCTYPE", "`", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE a",
+"input":"<!DOCTYPE a",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE a\\u0000",
+"input":"<!DOCTYPE a\u0000",
+"output":[["DOCTYPE", "a\uFFFD", null, null, false]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 12 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\u0008",
+"input":"<!DOCTYPE a\u0008",
+"output":[["DOCTYPE", "a\u0008", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\u0009",
+"input":"<!DOCTYPE a\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\u000A",
+"input":"<!DOCTYPE a\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE a\\u000B",
+"input":"<!DOCTYPE a\u000B",
+"output":[["DOCTYPE", "a\u000B", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\u000C",
+"input":"<!DOCTYPE a\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\u000D",
+"input":"<!DOCTYPE a\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE a\\u001F",
+"input":"<!DOCTYPE a\u001F",
+"output":[["DOCTYPE", "a\u001F", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a ",
+"input":"<!DOCTYPE a ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \\u0000",
+"input":"<!DOCTYPE a \u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 },
+ { "code": "unexpected-null-character", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \\u0008",
+"input":"<!DOCTYPE a \u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 13 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \\u0009",
+"input":"<!DOCTYPE a \u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE a \\u000A",
+"input":"<!DOCTYPE a \u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE a \\u000B",
+"input":"<!DOCTYPE a \u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 13 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \\u000C",
+"input":"<!DOCTYPE a \u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE a \\u000D",
+"input":"<!DOCTYPE a \u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPE a \\u001F",
+"input":"<!DOCTYPE a \u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 13 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a ",
+"input":"<!DOCTYPE a ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE a !",
+"input":"<!DOCTYPE a !",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \"",
+"input":"<!DOCTYPE a \"",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a &",
+"input":"<!DOCTYPE a &",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a '",
+"input":"<!DOCTYPE a '",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a -",
+"input":"<!DOCTYPE a -",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a /",
+"input":"<!DOCTYPE a /",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a 0",
+"input":"<!DOCTYPE a 0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a 1",
+"input":"<!DOCTYPE a 1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a 9",
+"input":"<!DOCTYPE a 9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a <",
+"input":"<!DOCTYPE a <",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a =",
+"input":"<!DOCTYPE a =",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a >",
+"input":"<!DOCTYPE a >",
+"output":[["DOCTYPE", "a", null, null, true]]},
+
+{"description":"<!DOCTYPE a ?",
+"input":"<!DOCTYPE a ?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a @",
+"input":"<!DOCTYPE a @",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a A",
+"input":"<!DOCTYPE a A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a B",
+"input":"<!DOCTYPE a B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC",
+"input":"<!DOCTYPE a PUBLIC",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u0000",
+"input":"<!DOCTYPE a PUBLIC\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u0008",
+"input":"<!DOCTYPE a PUBLIC\u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u0009",
+"input":"<!DOCTYPE a PUBLIC\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u000A",
+"input":"<!DOCTYPE a PUBLIC\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u000B",
+"input":"<!DOCTYPE a PUBLIC\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u000C",
+"input":"<!DOCTYPE a PUBLIC\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u000D",
+"input":"<!DOCTYPE a PUBLIC\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\u001F",
+"input":"<!DOCTYPE a PUBLIC\u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC ",
+"input":"<!DOCTYPE a PUBLIC ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC!",
+"input":"<!DOCTYPE a PUBLIC!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"",
+"input":"<!DOCTYPE a PUBLIC\"",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\u0000",
+"input":"<!DOCTYPE a PUBLIC\"\u0000",
+"output":[["DOCTYPE", "a", "\uFFFD", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "unexpected-null-character", "col": 20, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\u0009",
+"input":"<!DOCTYPE a PUBLIC\"\u0009",
+"output":[["DOCTYPE", "a", "\u0009", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\u000A",
+"input":"<!DOCTYPE a PUBLIC\"\u000A",
+"output":[["DOCTYPE", "a", "\u000A", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\u000B",
+"input":"<!DOCTYPE a PUBLIC\"\u000B",
+"output":[["DOCTYPE", "a", "\u000B", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\u000C",
+"input":"<!DOCTYPE a PUBLIC\"\u000C",
+"output":[["DOCTYPE", "a", "\u000C", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\" ",
+"input":"<!DOCTYPE a PUBLIC\" ",
+"output":[["DOCTYPE", "a", " ", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"!",
+"input":"<!DOCTYPE a PUBLIC\"!",
+"output":[["DOCTYPE", "a", "!", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\"",
+"input":"<!DOCTYPE a PUBLIC\"\"",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\"\\u0000",
+"input":"<!DOCTYPE a PUBLIC\"\"\u0000",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 },
+ { "code": "unexpected-null-character", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\" \\u0000",
+"input":"<!DOCTYPE a PUBLIC\"\" \u0000",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 22, "line": 1 },
+ { "code": "unexpected-null-character", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"#",
+"input":"<!DOCTYPE a PUBLIC\"#",
+"output":[["DOCTYPE", "a", "#", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"&",
+"input":"<!DOCTYPE a PUBLIC\"&",
+"output":[["DOCTYPE", "a", "&", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"'",
+"input":"<!DOCTYPE a PUBLIC\"'",
+"output":[["DOCTYPE", "a", "'", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"-",
+"input":"<!DOCTYPE a PUBLIC\"-",
+"output":[["DOCTYPE", "a", "-", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"/",
+"input":"<!DOCTYPE a PUBLIC\"/",
+"output":[["DOCTYPE", "a", "/", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"0",
+"input":"<!DOCTYPE a PUBLIC\"0",
+"output":[["DOCTYPE", "a", "0", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"1",
+"input":"<!DOCTYPE a PUBLIC\"1",
+"output":[["DOCTYPE", "a", "1", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"9",
+"input":"<!DOCTYPE a PUBLIC\"9",
+"output":[["DOCTYPE", "a", "9", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"<",
+"input":"<!DOCTYPE a PUBLIC\"<",
+"output":[["DOCTYPE", "a", "<", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"=",
+"input":"<!DOCTYPE a PUBLIC\"=",
+"output":[["DOCTYPE", "a", "=", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\">",
+"input":"<!DOCTYPE a PUBLIC\">",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "abrupt-doctype-public-identifier", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"?",
+"input":"<!DOCTYPE a PUBLIC\"?",
+"output":[["DOCTYPE", "a", "?", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"@",
+"input":"<!DOCTYPE a PUBLIC\"@",
+"output":[["DOCTYPE", "a", "@", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"A",
+"input":"<!DOCTYPE a PUBLIC\"A",
+"output":[["DOCTYPE", "a", "A", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"B",
+"input":"<!DOCTYPE a PUBLIC\"B",
+"output":[["DOCTYPE", "a", "B", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"Y",
+"input":"<!DOCTYPE a PUBLIC\"Y",
+"output":[["DOCTYPE", "a", "Y", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"Z",
+"input":"<!DOCTYPE a PUBLIC\"Z",
+"output":[["DOCTYPE", "a", "Z", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"`",
+"input":"<!DOCTYPE a PUBLIC\"`",
+"output":[["DOCTYPE", "a", "`", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"a",
+"input":"<!DOCTYPE a PUBLIC\"a",
+"output":[["DOCTYPE", "a", "a", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"b",
+"input":"<!DOCTYPE a PUBLIC\"b",
+"output":[["DOCTYPE", "a", "b", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"y",
+"input":"<!DOCTYPE a PUBLIC\"y",
+"output":[["DOCTYPE", "a", "y", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"z",
+"input":"<!DOCTYPE a PUBLIC\"z",
+"output":[["DOCTYPE", "a", "z", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"{",
+"input":"<!DOCTYPE a PUBLIC\"{",
+"output":[["DOCTYPE", "a", "{", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\"\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a PUBLIC\"\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "\uDBC0\uDC00", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC#",
+"input":"<!DOCTYPE a PUBLIC#",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC&",
+"input":"<!DOCTYPE a PUBLIC&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'",
+"input":"<!DOCTYPE a PUBLIC'",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\u0000",
+"input":"<!DOCTYPE a PUBLIC'\u0000",
+"output":[["DOCTYPE", "a", "\uFFFD", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "unexpected-null-character", "col": 20, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\u0009",
+"input":"<!DOCTYPE a PUBLIC'\u0009",
+"output":[["DOCTYPE", "a", "\u0009", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\u000A",
+"input":"<!DOCTYPE a PUBLIC'\u000A",
+"output":[["DOCTYPE", "a", "\u000A", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\u000B",
+"input":"<!DOCTYPE a PUBLIC'\u000B",
+"output":[["DOCTYPE", "a", "\u000B", null, false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\u000C",
+"input":"<!DOCTYPE a PUBLIC'\u000C",
+"output":[["DOCTYPE", "a", "\u000C", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC' ",
+"input":"<!DOCTYPE a PUBLIC' ",
+"output":[["DOCTYPE", "a", " ", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'!",
+"input":"<!DOCTYPE a PUBLIC'!",
+"output":[["DOCTYPE", "a", "!", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\"",
+"input":"<!DOCTYPE a PUBLIC'\"",
+"output":[["DOCTYPE", "a", "\"", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'&",
+"input":"<!DOCTYPE a PUBLIC'&",
+"output":[["DOCTYPE", "a", "&", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''",
+"input":"<!DOCTYPE a PUBLIC''",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u0000",
+"input":"<!DOCTYPE a PUBLIC''\u0000",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u0008",
+"input":"<!DOCTYPE a PUBLIC''\u0008",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u0009",
+"input":"<!DOCTYPE a PUBLIC''\u0009",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u000A",
+"input":"<!DOCTYPE a PUBLIC''\u000A",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u000B",
+"input":"<!DOCTYPE a PUBLIC''\u000B",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code" : "missing-quote-before-doctype-system-identifier", "col": 21, "line" : 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u000C",
+"input":"<!DOCTYPE a PUBLIC''\u000C",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u000D",
+"input":"<!DOCTYPE a PUBLIC''\u000D",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\u001F",
+"input":"<!DOCTYPE a PUBLIC''\u001F",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code" : "missing-quote-before-doctype-system-identifier", "col": 21, "line" : 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'' ",
+"input":"<!DOCTYPE a PUBLIC'' ",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''!",
+"input":"<!DOCTYPE a PUBLIC''!",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\"",
+"input":"<!DOCTYPE a PUBLIC''\"",
+"output":[["DOCTYPE", "a", "", "", false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''#",
+"input":"<!DOCTYPE a PUBLIC''#",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''&",
+"input":"<!DOCTYPE a PUBLIC''&",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'''",
+"input":"<!DOCTYPE a PUBLIC'''",
+"output":[["DOCTYPE", "a", "", "", false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''''\\u0000",
+"input":"<!DOCTYPE a PUBLIC''''\u0000",
+"output":[["DOCTYPE", "a", "", "", true]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 23 },
+ { "code": "unexpected-null-character", "line": 1, "col": 23 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''''x\\u0000",
+"input":"<!DOCTYPE a PUBLIC''''x\u0000",
+"output":[["DOCTYPE", "a", "", "", true]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 23 },
+ { "code": "unexpected-null-character", "line": 1, "col": 24 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'''' \\u0000",
+"input":"<!DOCTYPE a PUBLIC'''' \u0000",
+"output":[["DOCTYPE", "a", "", "", true]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 24 },
+ { "code": "unexpected-null-character", "line": 1, "col": 24 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'''' x\\u0000",
+"input":"<!DOCTYPE a PUBLIC'''' x\u0000",
+"output":[["DOCTYPE", "a", "", "", true]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "col": 21, "line": 1 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 24 },
+ { "code": "unexpected-null-character", "line": 1, "col": 25 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''(",
+"input":"<!DOCTYPE a PUBLIC''(",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''-",
+"input":"<!DOCTYPE a PUBLIC''-",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''/",
+"input":"<!DOCTYPE a PUBLIC''/",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''0",
+"input":"<!DOCTYPE a PUBLIC''0",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''1",
+"input":"<!DOCTYPE a PUBLIC''1",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''9",
+"input":"<!DOCTYPE a PUBLIC''9",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''<",
+"input":"<!DOCTYPE a PUBLIC''<",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''=",
+"input":"<!DOCTYPE a PUBLIC''=",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''>",
+"input":"<!DOCTYPE a PUBLIC''>",
+"output":[["DOCTYPE", "a", "", null, true]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''?",
+"input":"<!DOCTYPE a PUBLIC''?",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''@",
+"input":"<!DOCTYPE a PUBLIC''@",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''A",
+"input":"<!DOCTYPE a PUBLIC''A",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''B",
+"input":"<!DOCTYPE a PUBLIC''B",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''Y",
+"input":"<!DOCTYPE a PUBLIC''Y",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''Z",
+"input":"<!DOCTYPE a PUBLIC''Z",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''`",
+"input":"<!DOCTYPE a PUBLIC''`",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''a",
+"input":"<!DOCTYPE a PUBLIC''a",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''b",
+"input":"<!DOCTYPE a PUBLIC''b",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''y",
+"input":"<!DOCTYPE a PUBLIC''y",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''z",
+"input":"<!DOCTYPE a PUBLIC''z",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''{",
+"input":"<!DOCTYPE a PUBLIC''{",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC''\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a PUBLIC''\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'(",
+"input":"<!DOCTYPE a PUBLIC'(",
+"output":[["DOCTYPE", "a", "(", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'-",
+"input":"<!DOCTYPE a PUBLIC'-",
+"output":[["DOCTYPE", "a", "-", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'/",
+"input":"<!DOCTYPE a PUBLIC'/",
+"output":[["DOCTYPE", "a", "/", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'0",
+"input":"<!DOCTYPE a PUBLIC'0",
+"output":[["DOCTYPE", "a", "0", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'1",
+"input":"<!DOCTYPE a PUBLIC'1",
+"output":[["DOCTYPE", "a", "1", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'9",
+"input":"<!DOCTYPE a PUBLIC'9",
+"output":[["DOCTYPE", "a", "9", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'<",
+"input":"<!DOCTYPE a PUBLIC'<",
+"output":[["DOCTYPE", "a", "<", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'=",
+"input":"<!DOCTYPE a PUBLIC'=",
+"output":[["DOCTYPE", "a", "=", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'>",
+"input":"<!DOCTYPE a PUBLIC'>",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "abrupt-doctype-public-identifier", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'?",
+"input":"<!DOCTYPE a PUBLIC'?",
+"output":[["DOCTYPE", "a", "?", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'@",
+"input":"<!DOCTYPE a PUBLIC'@",
+"output":[["DOCTYPE", "a", "@", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'A",
+"input":"<!DOCTYPE a PUBLIC'A",
+"output":[["DOCTYPE", "a", "A", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'B",
+"input":"<!DOCTYPE a PUBLIC'B",
+"output":[["DOCTYPE", "a", "B", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'Y",
+"input":"<!DOCTYPE a PUBLIC'Y",
+"output":[["DOCTYPE", "a", "Y", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'Z",
+"input":"<!DOCTYPE a PUBLIC'Z",
+"output":[["DOCTYPE", "a", "Z", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'`",
+"input":"<!DOCTYPE a PUBLIC'`",
+"output":[["DOCTYPE", "a", "`", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'a",
+"input":"<!DOCTYPE a PUBLIC'a",
+"output":[["DOCTYPE", "a", "a", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'b",
+"input":"<!DOCTYPE a PUBLIC'b",
+"output":[["DOCTYPE", "a", "b", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'y",
+"input":"<!DOCTYPE a PUBLIC'y",
+"output":[["DOCTYPE", "a", "y", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'z",
+"input":"<!DOCTYPE a PUBLIC'z",
+"output":[["DOCTYPE", "a", "z", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'{",
+"input":"<!DOCTYPE a PUBLIC'{",
+"output":[["DOCTYPE", "a", "{", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC'\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a PUBLIC'\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "\uDBC0\uDC00", null, false]],
+"errors": [
+ { "code": "missing-whitespace-after-doctype-public-keyword", "col": 19, "line": 1 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC(",
+"input":"<!DOCTYPE a PUBLIC(",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC-",
+"input":"<!DOCTYPE a PUBLIC-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC/",
+"input":"<!DOCTYPE a PUBLIC/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC0",
+"input":"<!DOCTYPE a PUBLIC0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC1",
+"input":"<!DOCTYPE a PUBLIC1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC9",
+"input":"<!DOCTYPE a PUBLIC9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC<",
+"input":"<!DOCTYPE a PUBLIC<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC=",
+"input":"<!DOCTYPE a PUBLIC=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC>",
+"input":"<!DOCTYPE a PUBLIC>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC?",
+"input":"<!DOCTYPE a PUBLIC?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC@",
+"input":"<!DOCTYPE a PUBLIC@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICA",
+"input":"<!DOCTYPE a PUBLICA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICB",
+"input":"<!DOCTYPE a PUBLICB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICY",
+"input":"<!DOCTYPE a PUBLICY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICZ",
+"input":"<!DOCTYPE a PUBLICZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC`",
+"input":"<!DOCTYPE a PUBLIC`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICa",
+"input":"<!DOCTYPE a PUBLICa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICb",
+"input":"<!DOCTYPE a PUBLICb",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICy",
+"input":"<!DOCTYPE a PUBLICy",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLICz",
+"input":"<!DOCTYPE a PUBLICz",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC{",
+"input":"<!DOCTYPE a PUBLIC{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a PUBLIC\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a PUBLIC\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-public-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM",
+"input":"<!DOCTYPE a SYSTEM",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u0000",
+"input":"<!DOCTYPE a SYSTEM\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 19, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM \\u0000",
+"input":"<!DOCTYPE a SYSTEM \u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 20, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM x\\u0000",
+"input":"<!DOCTYPE a SYSTEM \u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 20, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u0008",
+"input":"<!DOCTYPE a SYSTEM\u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u0009",
+"input":"<!DOCTYPE a SYSTEM\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u000A",
+"input":"<!DOCTYPE a SYSTEM\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u000B",
+"input":"<!DOCTYPE a SYSTEM\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u000C",
+"input":"<!DOCTYPE a SYSTEM\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u000D",
+"input":"<!DOCTYPE a SYSTEM\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\u001F",
+"input":"<!DOCTYPE a SYSTEM\u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM ",
+"input":"<!DOCTYPE a SYSTEM ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors": [
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM!",
+"input":"<!DOCTYPE a SYSTEM!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "col": 19, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"",
+"input":"<!DOCTYPE a SYSTEM\"",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\u0000",
+"input":"<!DOCTYPE a SYSTEM\"\u0000",
+"output":[["DOCTYPE", "a", null, "\uFFFD", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-null-character", "col": 20, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\u0009",
+"input":"<!DOCTYPE a SYSTEM\"\u0009",
+"output":[["DOCTYPE", "a", null, "\u0009", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\u000A",
+"input":"<!DOCTYPE a SYSTEM\"\u000A",
+"output":[["DOCTYPE", "a", null, "\u000A", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\u000B",
+"input":"<!DOCTYPE a SYSTEM\"\u000B",
+"output":[["DOCTYPE", "a", null, "\u000B", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\u000C",
+"input":"<!DOCTYPE a SYSTEM\"\u000C",
+"output":[["DOCTYPE", "a", null, "\u000C", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\" ",
+"input":"<!DOCTYPE a SYSTEM\" ",
+"output":[["DOCTYPE", "a", null, " ", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"!",
+"input":"<!DOCTYPE a SYSTEM\"!",
+"output":[["DOCTYPE", "a", null, "!", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\"",
+"input":"<!DOCTYPE a SYSTEM\"\"",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"#",
+"input":"<!DOCTYPE a SYSTEM\"#",
+"output":[["DOCTYPE", "a", null, "#", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"&",
+"input":"<!DOCTYPE a SYSTEM\"&",
+"output":[["DOCTYPE", "a", null, "&", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"'",
+"input":"<!DOCTYPE a SYSTEM\"'",
+"output":[["DOCTYPE", "a", null, "'", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"-",
+"input":"<!DOCTYPE a SYSTEM\"-",
+"output":[["DOCTYPE", "a", null, "-", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"/",
+"input":"<!DOCTYPE a SYSTEM\"/",
+"output":[["DOCTYPE", "a", null, "/", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"0",
+"input":"<!DOCTYPE a SYSTEM\"0",
+"output":[["DOCTYPE", "a", null, "0", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"1",
+"input":"<!DOCTYPE a SYSTEM\"1",
+"output":[["DOCTYPE", "a", null, "1", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"9",
+"input":"<!DOCTYPE a SYSTEM\"9",
+"output":[["DOCTYPE", "a", null, "9", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"<",
+"input":"<!DOCTYPE a SYSTEM\"<",
+"output":[["DOCTYPE", "a", null, "<", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"=",
+"input":"<!DOCTYPE a SYSTEM\"=",
+"output":[["DOCTYPE", "a", null, "=", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\">",
+"input":"<!DOCTYPE a SYSTEM\">",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "abrupt-doctype-system-identifier", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"?",
+"input":"<!DOCTYPE a SYSTEM\"?",
+"output":[["DOCTYPE", "a", null, "?", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"@",
+"input":"<!DOCTYPE a SYSTEM\"@",
+"output":[["DOCTYPE", "a", null, "@", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"A",
+"input":"<!DOCTYPE a SYSTEM\"A",
+"output":[["DOCTYPE", "a", null, "A", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"B",
+"input":"<!DOCTYPE a SYSTEM\"B",
+"output":[["DOCTYPE", "a", null, "B", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"Y",
+"input":"<!DOCTYPE a SYSTEM\"Y",
+"output":[["DOCTYPE", "a", null, "Y", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"Z",
+"input":"<!DOCTYPE a SYSTEM\"Z",
+"output":[["DOCTYPE", "a", null, "Z", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"`",
+"input":"<!DOCTYPE a SYSTEM\"`",
+"output":[["DOCTYPE", "a", null, "`", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"a",
+"input":"<!DOCTYPE a SYSTEM\"a",
+"output":[["DOCTYPE", "a", null, "a", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"b",
+"input":"<!DOCTYPE a SYSTEM\"b",
+"output":[["DOCTYPE", "a", null, "b", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"y",
+"input":"<!DOCTYPE a SYSTEM\"y",
+"output":[["DOCTYPE", "a", null, "y", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"z",
+"input":"<!DOCTYPE a SYSTEM\"z",
+"output":[["DOCTYPE", "a", null, "z", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"{",
+"input":"<!DOCTYPE a SYSTEM\"{",
+"output":[["DOCTYPE", "a", null, "{", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\"\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a SYSTEM\"\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "\uDBC0\uDC00", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM#",
+"input":"<!DOCTYPE a SYSTEM#",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM&",
+"input":"<!DOCTYPE a SYSTEM&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'",
+"input":"<!DOCTYPE a SYSTEM'",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\u0000",
+"input":"<!DOCTYPE a SYSTEM'\u0000",
+"output":[["DOCTYPE", "a", null, "\uFFFD", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-null-character", "col": 20, "line": 1 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\u0009",
+"input":"<!DOCTYPE a SYSTEM'\u0009",
+"output":[["DOCTYPE", "a", null, "\u0009", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\u000A",
+"input":"<!DOCTYPE a SYSTEM'\u000A",
+"output":[["DOCTYPE", "a", null, "\u000A", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\u000B",
+"input":"<!DOCTYPE a SYSTEM'\u000B",
+"output":[["DOCTYPE", "a", null, "\u000B", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\u000C",
+"input":"<!DOCTYPE a SYSTEM'\u000C",
+"output":[["DOCTYPE", "a", null, "\u000C", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM' ",
+"input":"<!DOCTYPE a SYSTEM' ",
+"output":[["DOCTYPE", "a", null, " ", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'!",
+"input":"<!DOCTYPE a SYSTEM'!",
+"output":[["DOCTYPE", "a", null, "!", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\"",
+"input":"<!DOCTYPE a SYSTEM'\"",
+"output":[["DOCTYPE", "a", null, "\"", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'&",
+"input":"<!DOCTYPE a SYSTEM'&",
+"output":[["DOCTYPE", "a", null, "&", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''",
+"input":"<!DOCTYPE a SYSTEM''",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u0000",
+"input":"<!DOCTYPE a SYSTEM''\u0000",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u0008",
+"input":"<!DOCTYPE a SYSTEM''\u0008",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u0009",
+"input":"<!DOCTYPE a SYSTEM''\u0009",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u000A",
+"input":"<!DOCTYPE a SYSTEM''\u000A",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u000B",
+"input":"<!DOCTYPE a SYSTEM''\u000B",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code" : "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 21}
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u000C",
+"input":"<!DOCTYPE a SYSTEM''\u000C",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u000D",
+"input":"<!DOCTYPE a SYSTEM''\u000D",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 1, "line": 2 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\u001F",
+"input":"<!DOCTYPE a SYSTEM''\u001F",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 21 },
+ { "code" : "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 21}
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'' ",
+"input":"<!DOCTYPE a SYSTEM'' ",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'' \\u0000",
+"input":"<!DOCTYPE a SYSTEM'' \u0000",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 22, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 22 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'' x\\u0000",
+"input":"<!DOCTYPE a SYSTEM'' x\u0000",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 22, "line": 1 },
+ { "code": "unexpected-null-character", "line": 1, "col": 23 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''!",
+"input":"<!DOCTYPE a SYSTEM''!",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\"",
+"input":"<!DOCTYPE a SYSTEM''\"",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''&",
+"input":"<!DOCTYPE a SYSTEM''&",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'''",
+"input":"<!DOCTYPE a SYSTEM'''",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''-",
+"input":"<!DOCTYPE a SYSTEM''-",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''/",
+"input":"<!DOCTYPE a SYSTEM''/",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''0",
+"input":"<!DOCTYPE a SYSTEM''0",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''1",
+"input":"<!DOCTYPE a SYSTEM''1",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''9",
+"input":"<!DOCTYPE a SYSTEM''9",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''<",
+"input":"<!DOCTYPE a SYSTEM''<",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''=",
+"input":"<!DOCTYPE a SYSTEM''=",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''>",
+"input":"<!DOCTYPE a SYSTEM''>",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''?",
+"input":"<!DOCTYPE a SYSTEM''?",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''@",
+"input":"<!DOCTYPE a SYSTEM''@",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''A",
+"input":"<!DOCTYPE a SYSTEM''A",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''B",
+"input":"<!DOCTYPE a SYSTEM''B",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''Y",
+"input":"<!DOCTYPE a SYSTEM''Y",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''Z",
+"input":"<!DOCTYPE a SYSTEM''Z",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''`",
+"input":"<!DOCTYPE a SYSTEM''`",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''a",
+"input":"<!DOCTYPE a SYSTEM''a",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''b",
+"input":"<!DOCTYPE a SYSTEM''b",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''y",
+"input":"<!DOCTYPE a SYSTEM''y",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''z",
+"input":"<!DOCTYPE a SYSTEM''z",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''{",
+"input":"<!DOCTYPE a SYSTEM''{",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM''\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a SYSTEM''\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'(",
+"input":"<!DOCTYPE a SYSTEM'(",
+"output":[["DOCTYPE", "a", null, "(", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'-",
+"input":"<!DOCTYPE a SYSTEM'-",
+"output":[["DOCTYPE", "a", null, "-", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'/",
+"input":"<!DOCTYPE a SYSTEM'/",
+"output":[["DOCTYPE", "a", null, "/", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'0",
+"input":"<!DOCTYPE a SYSTEM'0",
+"output":[["DOCTYPE", "a", null, "0", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'1",
+"input":"<!DOCTYPE a SYSTEM'1",
+"output":[["DOCTYPE", "a", null, "1", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'9",
+"input":"<!DOCTYPE a SYSTEM'9",
+"output":[["DOCTYPE", "a", null, "9", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'<",
+"input":"<!DOCTYPE a SYSTEM'<",
+"output":[["DOCTYPE", "a", null, "<", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'=",
+"input":"<!DOCTYPE a SYSTEM'=",
+"output":[["DOCTYPE", "a", null, "=", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'>",
+"input":"<!DOCTYPE a SYSTEM'>",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "abrupt-doctype-system-identifier", "col": 20, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'?",
+"input":"<!DOCTYPE a SYSTEM'?",
+"output":[["DOCTYPE", "a", null, "?", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'@",
+"input":"<!DOCTYPE a SYSTEM'@",
+"output":[["DOCTYPE", "a", null, "@", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'A",
+"input":"<!DOCTYPE a SYSTEM'A",
+"output":[["DOCTYPE", "a", null, "A", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'B",
+"input":"<!DOCTYPE a SYSTEM'B",
+"output":[["DOCTYPE", "a", null, "B", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'Y",
+"input":"<!DOCTYPE a SYSTEM'Y",
+"output":[["DOCTYPE", "a", null, "Y", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'Z",
+"input":"<!DOCTYPE a SYSTEM'Z",
+"output":[["DOCTYPE", "a", null, "Z", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'`",
+"input":"<!DOCTYPE a SYSTEM'`",
+"output":[["DOCTYPE", "a", null, "`", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'a",
+"input":"<!DOCTYPE a SYSTEM'a",
+"output":[["DOCTYPE", "a", null, "a", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'b",
+"input":"<!DOCTYPE a SYSTEM'b",
+"output":[["DOCTYPE", "a", null, "b", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'y",
+"input":"<!DOCTYPE a SYSTEM'y",
+"output":[["DOCTYPE", "a", null, "y", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'z",
+"input":"<!DOCTYPE a SYSTEM'z",
+"output":[["DOCTYPE", "a", null, "z", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'{",
+"input":"<!DOCTYPE a SYSTEM'{",
+"output":[["DOCTYPE", "a", null, "{", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 21, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM'\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a SYSTEM'\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "\uDBC0\uDC00", false]],
+"errors":[
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "col": 22, "line": 1 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM(",
+"input":"<!DOCTYPE a SYSTEM(",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM-",
+"input":"<!DOCTYPE a SYSTEM-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM/",
+"input":"<!DOCTYPE a SYSTEM/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM0",
+"input":"<!DOCTYPE a SYSTEM0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM1",
+"input":"<!DOCTYPE a SYSTEM1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM9",
+"input":"<!DOCTYPE a SYSTEM9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM<",
+"input":"<!DOCTYPE a SYSTEM<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM=",
+"input":"<!DOCTYPE a SYSTEM=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM>",
+"input":"<!DOCTYPE a SYSTEM>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM?",
+"input":"<!DOCTYPE a SYSTEM?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM@",
+"input":"<!DOCTYPE a SYSTEM@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMA",
+"input":"<!DOCTYPE a SYSTEMA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMB",
+"input":"<!DOCTYPE a SYSTEMB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMY",
+"input":"<!DOCTYPE a SYSTEMY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMZ",
+"input":"<!DOCTYPE a SYSTEMZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM`",
+"input":"<!DOCTYPE a SYSTEM`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMa",
+"input":"<!DOCTYPE a SYSTEMa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMb",
+"input":"<!DOCTYPE a SYSTEMb",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMy",
+"input":"<!DOCTYPE a SYSTEMy",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEMz",
+"input":"<!DOCTYPE a SYSTEMz",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM{",
+"input":"<!DOCTYPE a SYSTEM{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a SYSTEM\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a SYSTEM\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPE a Y",
+"input":"<!DOCTYPE a Y",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a Z",
+"input":"<!DOCTYPE a Z",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a `",
+"input":"<!DOCTYPE a `",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a",
+"input":"<!DOCTYPE a a",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a\\u0000",
+"input":"<!DOCTYPE a a\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 },
+ { "code": "unexpected-null-character", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE a a\\u0009",
+"input":"<!DOCTYPE a a\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a\\u000A",
+"input":"<!DOCTYPE a a\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a\\u000B",
+"input":"<!DOCTYPE a a\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE a a\\u000C",
+"input":"<!DOCTYPE a a\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a ",
+"input":"<!DOCTYPE a a ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a!",
+"input":"<!DOCTYPE a a!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a\"",
+"input":"<!DOCTYPE a a\"",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a&",
+"input":"<!DOCTYPE a a&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a'",
+"input":"<!DOCTYPE a a'",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a-",
+"input":"<!DOCTYPE a a-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a/",
+"input":"<!DOCTYPE a a/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a0",
+"input":"<!DOCTYPE a a0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a1",
+"input":"<!DOCTYPE a a1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a9",
+"input":"<!DOCTYPE a a9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a<",
+"input":"<!DOCTYPE a a<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a=",
+"input":"<!DOCTYPE a a=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a>",
+"input":"<!DOCTYPE a a>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a?",
+"input":"<!DOCTYPE a a?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a@",
+"input":"<!DOCTYPE a a@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a aA",
+"input":"<!DOCTYPE a aA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a aB",
+"input":"<!DOCTYPE a aB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a aY",
+"input":"<!DOCTYPE a aY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a aZ",
+"input":"<!DOCTYPE a aZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a`",
+"input":"<!DOCTYPE a a`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a aa",
+"input":"<!DOCTYPE a aa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a ab",
+"input":"<!DOCTYPE a ab",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a ay",
+"input":"<!DOCTYPE a ay",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a az",
+"input":"<!DOCTYPE a az",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a{",
+"input":"<!DOCTYPE a a{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a a\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a a\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a b",
+"input":"<!DOCTYPE a b",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a y",
+"input":"<!DOCTYPE a y",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a z",
+"input":"<!DOCTYPE a z",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a {",
+"input":"<!DOCTYPE a {",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a \\uDBC0\\uDC00",
+"input":"<!DOCTYPE a \uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a!",
+"input":"<!DOCTYPE a!",
+"output":[["DOCTYPE", "a!", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\"",
+"input":"<!DOCTYPE a\"",
+"output":[["DOCTYPE", "a\"", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a&",
+"input":"<!DOCTYPE a&",
+"output":[["DOCTYPE", "a&", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a'",
+"input":"<!DOCTYPE a'",
+"output":[["DOCTYPE", "a'", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a-",
+"input":"<!DOCTYPE a-",
+"output":[["DOCTYPE", "a-", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a/",
+"input":"<!DOCTYPE a/",
+"output":[["DOCTYPE", "a/", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a0",
+"input":"<!DOCTYPE a0",
+"output":[["DOCTYPE", "a0", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a1",
+"input":"<!DOCTYPE a1",
+"output":[["DOCTYPE", "a1", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a9",
+"input":"<!DOCTYPE a9",
+"output":[["DOCTYPE", "a9", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a<",
+"input":"<!DOCTYPE a<",
+"output":[["DOCTYPE", "a<", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a=",
+"input":"<!DOCTYPE a=",
+"output":[["DOCTYPE", "a=", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a>",
+"input":"<!DOCTYPE a>",
+"output":[["DOCTYPE", "a", null, null, true]]},
+
+{"description":"<!DOCTYPE a?",
+"input":"<!DOCTYPE a?",
+"output":[["DOCTYPE", "a?", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a@",
+"input":"<!DOCTYPE a@",
+"output":[["DOCTYPE", "a@", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE aA",
+"input":"<!DOCTYPE aA",
+"output":[["DOCTYPE", "aa", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE aB",
+"input":"<!DOCTYPE aB",
+"output":[["DOCTYPE", "ab", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE aY",
+"input":"<!DOCTYPE aY",
+"output":[["DOCTYPE", "ay", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE aZ",
+"input":"<!DOCTYPE aZ",
+"output":[["DOCTYPE", "az", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a[",
+"input":"<!DOCTYPE a[",
+"output":[["DOCTYPE", "a[", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a`",
+"input":"<!DOCTYPE a`",
+"output":[["DOCTYPE", "a`", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE aa",
+"input":"<!DOCTYPE aa",
+"output":[["DOCTYPE", "aa", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE ab",
+"input":"<!DOCTYPE ab",
+"output":[["DOCTYPE", "ab", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE ay",
+"input":"<!DOCTYPE ay",
+"output":[["DOCTYPE", "ay", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE az",
+"input":"<!DOCTYPE az",
+"output":[["DOCTYPE", "az", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a{",
+"input":"<!DOCTYPE a{",
+"output":[["DOCTYPE", "a{", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE a\\uDBC0\\uDC00",
+"input":"<!DOCTYPE a\uDBC0\uDC00",
+"output":[["DOCTYPE", "a\uDBC0\uDC00", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 14 }
+]},
+
+{"description":"<!DOCTYPE b",
+"input":"<!DOCTYPE b",
+"output":[["DOCTYPE", "b", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE y",
+"input":"<!DOCTYPE y",
+"output":[["DOCTYPE", "y", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE z",
+"input":"<!DOCTYPE z",
+"output":[["DOCTYPE", "z", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE {",
+"input":"<!DOCTYPE {",
+"output":[["DOCTYPE", "{", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPE \\uDBC0\\uDC00",
+"input":"<!DOCTYPE \uDBC0\uDC00",
+"output":[["DOCTYPE", "\uDBC0\uDC00", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPE!",
+"input":"<!DOCTYPE!",
+"output":[["DOCTYPE", "!", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\"",
+"input":"<!DOCTYPE\"",
+"output":[["DOCTYPE", "\"", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE&",
+"input":"<!DOCTYPE&",
+"output":[["DOCTYPE", "&", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE'",
+"input":"<!DOCTYPE'",
+"output":[["DOCTYPE", "'", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE-",
+"input":"<!DOCTYPE-",
+"output":[["DOCTYPE", "-", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE/",
+"input":"<!DOCTYPE/",
+"output":[["DOCTYPE", "/", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE0",
+"input":"<!DOCTYPE0",
+"output":[["DOCTYPE", "0", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE1",
+"input":"<!DOCTYPE1",
+"output":[["DOCTYPE", "1", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE9",
+"input":"<!DOCTYPE9",
+"output":[["DOCTYPE", "9", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE<",
+"input":"<!DOCTYPE<",
+"output":[["DOCTYPE", "<", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE=",
+"input":"<!DOCTYPE=",
+"output":[["DOCTYPE", "=", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE>",
+"input":"<!DOCTYPE>",
+"output":[["DOCTYPE", null, null, null, false]],
+"errors":[
+ { "code": "missing-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"<!DOCTYPE?",
+"input":"<!DOCTYPE?",
+"output":[["DOCTYPE", "?", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE@",
+"input":"<!DOCTYPE@",
+"output":[["DOCTYPE", "@", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEA",
+"input":"<!DOCTYPEA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEB",
+"input":"<!DOCTYPEB",
+"output":[["DOCTYPE", "b", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEY",
+"input":"<!DOCTYPEY",
+"output":[["DOCTYPE", "y", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEZ",
+"input":"<!DOCTYPEZ",
+"output":[["DOCTYPE", "z", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE`",
+"input":"<!DOCTYPE`",
+"output":[["DOCTYPE", "`", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEa",
+"input":"<!DOCTYPEa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEa\\u0000",
+"input":"<!DOCTYPEa\u0000",
+"output":[["DOCTYPE", "a\uFFFD", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "unexpected-null-character", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\u0008",
+"input":"<!DOCTYPEa\u0008",
+"output":[["DOCTYPE", "a\u0008", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\u0009",
+"input":"<!DOCTYPEa\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\u000A",
+"input":"<!DOCTYPEa\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa\\u000B",
+"input":"<!DOCTYPEa\u000B",
+"output":[["DOCTYPE", "a\u000B", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\u000C",
+"input":"<!DOCTYPEa\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\u000D",
+"input":"<!DOCTYPEa\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa\\u001F",
+"input":"<!DOCTYPEa\u001F",
+"output":[["DOCTYPE", "a\u001F", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 11 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa ",
+"input":"<!DOCTYPEa ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \\u0000",
+"input":"<!DOCTYPEa \u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 },
+ { "code": "unexpected-null-character", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \\u0008",
+"input":"<!DOCTYPEa \u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \\u0009",
+"input":"<!DOCTYPEa \u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEa \\u000A",
+"input":"<!DOCTYPEa \u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa \\u000B",
+"input":"<!DOCTYPEa \u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \\u000C",
+"input":"<!DOCTYPEa \u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEa \\u000D",
+"input":"<!DOCTYPEa \u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa \\u001F",
+"input":"<!DOCTYPEa \u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 12 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa ",
+"input":"<!DOCTYPEa ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEa !",
+"input":"<!DOCTYPEa !",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \"",
+"input":"<!DOCTYPEa \"",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa &",
+"input":"<!DOCTYPEa &",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa '",
+"input":"<!DOCTYPEa '",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa -",
+"input":"<!DOCTYPEa -",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa /",
+"input":"<!DOCTYPEa /",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa 0",
+"input":"<!DOCTYPEa 0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa 1",
+"input":"<!DOCTYPEa 1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa 9",
+"input":"<!DOCTYPEa 9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa <",
+"input":"<!DOCTYPEa <",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa =",
+"input":"<!DOCTYPEa =",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa >",
+"input":"<!DOCTYPEa >",
+"output":[["DOCTYPE", "a", null, null, true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"<!DOCTYPEa ?",
+"input":"<!DOCTYPEa ?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa @",
+"input":"<!DOCTYPEa @",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa A",
+"input":"<!DOCTYPEa A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa B",
+"input":"<!DOCTYPEa B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC",
+"input":"<!DOCTYPEa PUBLIC",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u0000",
+"input":"<!DOCTYPEa PUBLIC\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u0008",
+"input":"<!DOCTYPEa PUBLIC\u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u0009",
+"input":"<!DOCTYPEa PUBLIC\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u000A",
+"input":"<!DOCTYPEa PUBLIC\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u000B",
+"input":"<!DOCTYPEa PUBLIC\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u000C",
+"input":"<!DOCTYPEa PUBLIC\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u000D",
+"input":"<!DOCTYPEa PUBLIC\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\u001F",
+"input":"<!DOCTYPEa PUBLIC\u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC ",
+"input":"<!DOCTYPEa PUBLIC ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC!",
+"input":"<!DOCTYPEa PUBLIC!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"",
+"input":"<!DOCTYPEa PUBLIC\"",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\u0000",
+"input":"<!DOCTYPEa PUBLIC\"\u0000",
+"output":[["DOCTYPE", "a", "\uFFFD", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\u0009",
+"input":"<!DOCTYPEa PUBLIC\"\u0009",
+"output":[["DOCTYPE", "a", "\u0009", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\u000A",
+"input":"<!DOCTYPEa PUBLIC\"\u000A",
+"output":[["DOCTYPE", "a", "\u000A", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\u000B",
+"input":"<!DOCTYPEa PUBLIC\"\u000B",
+"output":[["DOCTYPE", "a", "\u000B", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\u000C",
+"input":"<!DOCTYPEa PUBLIC\"\u000C",
+"output":[["DOCTYPE", "a", "\u000C", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\" ",
+"input":"<!DOCTYPEa PUBLIC\" ",
+"output":[["DOCTYPE", "a", " ", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"!",
+"input":"<!DOCTYPEa PUBLIC\"!",
+"output":[["DOCTYPE", "a", "!", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\"",
+"input":"<!DOCTYPEa PUBLIC\"\"",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"#",
+"input":"<!DOCTYPEa PUBLIC\"#",
+"output":[["DOCTYPE", "a", "#", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"&",
+"input":"<!DOCTYPEa PUBLIC\"&",
+"output":[["DOCTYPE", "a", "&", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"'",
+"input":"<!DOCTYPEa PUBLIC\"'",
+"output":[["DOCTYPE", "a", "'", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"-",
+"input":"<!DOCTYPEa PUBLIC\"-",
+"output":[["DOCTYPE", "a", "-", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"/",
+"input":"<!DOCTYPEa PUBLIC\"/",
+"output":[["DOCTYPE", "a", "/", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"0",
+"input":"<!DOCTYPEa PUBLIC\"0",
+"output":[["DOCTYPE", "a", "0", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"1",
+"input":"<!DOCTYPEa PUBLIC\"1",
+"output":[["DOCTYPE", "a", "1", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"9",
+"input":"<!DOCTYPEa PUBLIC\"9",
+"output":[["DOCTYPE", "a", "9", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"<",
+"input":"<!DOCTYPEa PUBLIC\"<",
+"output":[["DOCTYPE", "a", "<", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"=",
+"input":"<!DOCTYPEa PUBLIC\"=",
+"output":[["DOCTYPE", "a", "=", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\">",
+"input":"<!DOCTYPEa PUBLIC\">",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "abrupt-doctype-public-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"?",
+"input":"<!DOCTYPEa PUBLIC\"?",
+"output":[["DOCTYPE", "a", "?", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"@",
+"input":"<!DOCTYPEa PUBLIC\"@",
+"output":[["DOCTYPE", "a", "@", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"A",
+"input":"<!DOCTYPEa PUBLIC\"A",
+"output":[["DOCTYPE", "a", "A", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"B",
+"input":"<!DOCTYPEa PUBLIC\"B",
+"output":[["DOCTYPE", "a", "B", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"Y",
+"input":"<!DOCTYPEa PUBLIC\"Y",
+"output":[["DOCTYPE", "a", "Y", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"Z",
+"input":"<!DOCTYPEa PUBLIC\"Z",
+"output":[["DOCTYPE", "a", "Z", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"`",
+"input":"<!DOCTYPEa PUBLIC\"`",
+"output":[["DOCTYPE", "a", "`", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"a",
+"input":"<!DOCTYPEa PUBLIC\"a",
+"output":[["DOCTYPE", "a", "a", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"b",
+"input":"<!DOCTYPEa PUBLIC\"b",
+"output":[["DOCTYPE", "a", "b", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"y",
+"input":"<!DOCTYPEa PUBLIC\"y",
+"output":[["DOCTYPE", "a", "y", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"z",
+"input":"<!DOCTYPEa PUBLIC\"z",
+"output":[["DOCTYPE", "a", "z", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"{",
+"input":"<!DOCTYPEa PUBLIC\"{",
+"output":[["DOCTYPE", "a", "{", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\"\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa PUBLIC\"\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "\uDBC0\uDC00", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC#",
+"input":"<!DOCTYPEa PUBLIC#",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC&",
+"input":"<!DOCTYPEa PUBLIC&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'",
+"input":"<!DOCTYPEa PUBLIC'",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\u0000",
+"input":"<!DOCTYPEa PUBLIC'\u0000",
+"output":[["DOCTYPE", "a", "\uFFFD", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\u0009",
+"input":"<!DOCTYPEa PUBLIC'\u0009",
+"output":[["DOCTYPE", "a", "\u0009", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\u000A",
+"input":"<!DOCTYPEa PUBLIC'\u000A",
+"output":[["DOCTYPE", "a", "\u000A", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\u000B",
+"input":"<!DOCTYPEa PUBLIC'\u000B",
+"output":[["DOCTYPE", "a", "\u000B", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\u000C",
+"input":"<!DOCTYPEa PUBLIC'\u000C",
+"output":[["DOCTYPE", "a", "\u000C", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC' ",
+"input":"<!DOCTYPEa PUBLIC' ",
+"output":[["DOCTYPE", "a", " ", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'!",
+"input":"<!DOCTYPEa PUBLIC'!",
+"output":[["DOCTYPE", "a", "!", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\"",
+"input":"<!DOCTYPEa PUBLIC'\"",
+"output":[["DOCTYPE", "a", "\"", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'&",
+"input":"<!DOCTYPEa PUBLIC'&",
+"output":[["DOCTYPE", "a", "&", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''",
+"input":"<!DOCTYPEa PUBLIC''",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u0000",
+"input":"<!DOCTYPEa PUBLIC''\u0000",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 },
+ { "code": "unexpected-null-character", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u0008",
+"input":"<!DOCTYPEa PUBLIC''\u0008",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u0009",
+"input":"<!DOCTYPEa PUBLIC''\u0009",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u000A",
+"input":"<!DOCTYPEa PUBLIC''\u000A",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u000B",
+"input":"<!DOCTYPEa PUBLIC''\u000B",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u000C",
+"input":"<!DOCTYPEa PUBLIC''\u000C",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u000D",
+"input":"<!DOCTYPEa PUBLIC''\u000D",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\u001F",
+"input":"<!DOCTYPEa PUBLIC''\u001F",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'' ",
+"input":"<!DOCTYPEa PUBLIC'' ",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''!",
+"input":"<!DOCTYPEa PUBLIC''!",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\"",
+"input":"<!DOCTYPEa PUBLIC''\"",
+"output":[["DOCTYPE", "a", "", "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''#",
+"input":"<!DOCTYPEa PUBLIC''#",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''&",
+"input":"<!DOCTYPEa PUBLIC''&",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'''",
+"input":"<!DOCTYPEa PUBLIC'''",
+"output":[["DOCTYPE", "a", "", "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-whitespace-between-doctype-public-and-system-identifiers", "line": 1, "col": 20 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''(",
+"input":"<!DOCTYPEa PUBLIC''(",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''-",
+"input":"<!DOCTYPEa PUBLIC''-",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''/",
+"input":"<!DOCTYPEa PUBLIC''/",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''0",
+"input":"<!DOCTYPEa PUBLIC''0",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''1",
+"input":"<!DOCTYPEa PUBLIC''1",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''9",
+"input":"<!DOCTYPEa PUBLIC''9",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''<",
+"input":"<!DOCTYPEa PUBLIC''<",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''=",
+"input":"<!DOCTYPEa PUBLIC''=",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''>",
+"input":"<!DOCTYPEa PUBLIC''>",
+"output":[["DOCTYPE", "a", "", null, true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''?",
+"input":"<!DOCTYPEa PUBLIC''?",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''@",
+"input":"<!DOCTYPEa PUBLIC''@",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''A",
+"input":"<!DOCTYPEa PUBLIC''A",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''B",
+"input":"<!DOCTYPEa PUBLIC''B",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''Y",
+"input":"<!DOCTYPEa PUBLIC''Y",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''Z",
+"input":"<!DOCTYPEa PUBLIC''Z",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''`",
+"input":"<!DOCTYPEa PUBLIC''`",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''a",
+"input":"<!DOCTYPEa PUBLIC''a",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''b",
+"input":"<!DOCTYPEa PUBLIC''b",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''y",
+"input":"<!DOCTYPEa PUBLIC''y",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''z",
+"input":"<!DOCTYPEa PUBLIC''z",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''{",
+"input":"<!DOCTYPEa PUBLIC''{",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC''\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa PUBLIC''\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'(",
+"input":"<!DOCTYPEa PUBLIC'(",
+"output":[["DOCTYPE", "a", "(", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'-",
+"input":"<!DOCTYPEa PUBLIC'-",
+"output":[["DOCTYPE", "a", "-", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'/",
+"input":"<!DOCTYPEa PUBLIC'/",
+"output":[["DOCTYPE", "a", "/", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'0",
+"input":"<!DOCTYPEa PUBLIC'0",
+"output":[["DOCTYPE", "a", "0", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'1",
+"input":"<!DOCTYPEa PUBLIC'1",
+"output":[["DOCTYPE", "a", "1", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'9",
+"input":"<!DOCTYPEa PUBLIC'9",
+"output":[["DOCTYPE", "a", "9", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'<",
+"input":"<!DOCTYPEa PUBLIC'<",
+"output":[["DOCTYPE", "a", "<", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'=",
+"input":"<!DOCTYPEa PUBLIC'=",
+"output":[["DOCTYPE", "a", "=", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'>",
+"input":"<!DOCTYPEa PUBLIC'>",
+"output":[["DOCTYPE", "a", "", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "abrupt-doctype-public-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'?",
+"input":"<!DOCTYPEa PUBLIC'?",
+"output":[["DOCTYPE", "a", "?", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'@",
+"input":"<!DOCTYPEa PUBLIC'@",
+"output":[["DOCTYPE", "a", "@", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'A",
+"input":"<!DOCTYPEa PUBLIC'A",
+"output":[["DOCTYPE", "a", "A", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'B",
+"input":"<!DOCTYPEa PUBLIC'B",
+"output":[["DOCTYPE", "a", "B", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'Y",
+"input":"<!DOCTYPEa PUBLIC'Y",
+"output":[["DOCTYPE", "a", "Y", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'Z",
+"input":"<!DOCTYPEa PUBLIC'Z",
+"output":[["DOCTYPE", "a", "Z", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'`",
+"input":"<!DOCTYPEa PUBLIC'`",
+"output":[["DOCTYPE", "a", "`", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'a",
+"input":"<!DOCTYPEa PUBLIC'a",
+"output":[["DOCTYPE", "a", "a", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'b",
+"input":"<!DOCTYPEa PUBLIC'b",
+"output":[["DOCTYPE", "a", "b", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'y",
+"input":"<!DOCTYPEa PUBLIC'y",
+"output":[["DOCTYPE", "a", "y", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'z",
+"input":"<!DOCTYPEa PUBLIC'z",
+"output":[["DOCTYPE", "a", "z", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'{",
+"input":"<!DOCTYPEa PUBLIC'{",
+"output":[["DOCTYPE", "a", "{", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC'\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa PUBLIC'\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", "\uDBC0\uDC00", null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-public-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC(",
+"input":"<!DOCTYPEa PUBLIC(",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC-",
+"input":"<!DOCTYPEa PUBLIC-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC/",
+"input":"<!DOCTYPEa PUBLIC/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC0",
+"input":"<!DOCTYPEa PUBLIC0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC1",
+"input":"<!DOCTYPEa PUBLIC1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC9",
+"input":"<!DOCTYPEa PUBLIC9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC<",
+"input":"<!DOCTYPEa PUBLIC<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC=",
+"input":"<!DOCTYPEa PUBLIC=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC>",
+"input":"<!DOCTYPEa PUBLIC>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC?",
+"input":"<!DOCTYPEa PUBLIC?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC@",
+"input":"<!DOCTYPEa PUBLIC@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICA",
+"input":"<!DOCTYPEa PUBLICA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICB",
+"input":"<!DOCTYPEa PUBLICB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICY",
+"input":"<!DOCTYPEa PUBLICY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICZ",
+"input":"<!DOCTYPEa PUBLICZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC`",
+"input":"<!DOCTYPEa PUBLIC`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICa",
+"input":"<!DOCTYPEa PUBLICa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICb",
+"input":"<!DOCTYPEa PUBLICb",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICy",
+"input":"<!DOCTYPEa PUBLICy",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLICz",
+"input":"<!DOCTYPEa PUBLICz",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC{",
+"input":"<!DOCTYPEa PUBLIC{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa PUBLIC\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa PUBLIC\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-public-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM",
+"input":"<!DOCTYPEa SYSTEM",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u0000",
+"input":"<!DOCTYPEa SYSTEM\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u0008",
+"input":"<!DOCTYPEa SYSTEM\u0008",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u0009",
+"input":"<!DOCTYPEa SYSTEM\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u000A",
+"input":"<!DOCTYPEa SYSTEM\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u000B",
+"input":"<!DOCTYPEa SYSTEM\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u000C",
+"input":"<!DOCTYPEa SYSTEM\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u000D",
+"input":"<!DOCTYPEa SYSTEM\u000D",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\u001F",
+"input":"<!DOCTYPEa SYSTEM\u001F",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 18 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM ",
+"input":"<!DOCTYPEa SYSTEM ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM!",
+"input":"<!DOCTYPEa SYSTEM!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"",
+"input":"<!DOCTYPEa SYSTEM\"",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\u0000",
+"input":"<!DOCTYPEa SYSTEM\"\u0000",
+"output":[["DOCTYPE", "a", null, "\uFFFD", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\u0009",
+"input":"<!DOCTYPEa SYSTEM\"\u0009",
+"output":[["DOCTYPE", "a", null, "\u0009", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\u000A",
+"input":"<!DOCTYPEa SYSTEM\"\u000A",
+"output":[["DOCTYPE", "a", null, "\u000A", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\u000B",
+"input":"<!DOCTYPEa SYSTEM\"\u000B",
+"output":[["DOCTYPE", "a", null, "\u000B", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\u000C",
+"input":"<!DOCTYPEa SYSTEM\"\u000C",
+"output":[["DOCTYPE", "a", null, "\u000C", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\" ",
+"input":"<!DOCTYPEa SYSTEM\" ",
+"output":[["DOCTYPE", "a", null, " ", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"!",
+"input":"<!DOCTYPEa SYSTEM\"!",
+"output":[["DOCTYPE", "a", null, "!", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\"",
+"input":"<!DOCTYPEa SYSTEM\"\"",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"#",
+"input":"<!DOCTYPEa SYSTEM\"#",
+"output":[["DOCTYPE", "a", null, "#", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"&",
+"input":"<!DOCTYPEa SYSTEM\"&",
+"output":[["DOCTYPE", "a", null, "&", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"'",
+"input":"<!DOCTYPEa SYSTEM\"'",
+"output":[["DOCTYPE", "a", null, "'", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"-",
+"input":"<!DOCTYPEa SYSTEM\"-",
+"output":[["DOCTYPE", "a", null, "-", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"/",
+"input":"<!DOCTYPEa SYSTEM\"/",
+"output":[["DOCTYPE", "a", null, "/", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"0",
+"input":"<!DOCTYPEa SYSTEM\"0",
+"output":[["DOCTYPE", "a", null, "0", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"1",
+"input":"<!DOCTYPEa SYSTEM\"1",
+"output":[["DOCTYPE", "a", null, "1", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"9",
+"input":"<!DOCTYPEa SYSTEM\"9",
+"output":[["DOCTYPE", "a", null, "9", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"<",
+"input":"<!DOCTYPEa SYSTEM\"<",
+"output":[["DOCTYPE", "a", null, "<", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"=",
+"input":"<!DOCTYPEa SYSTEM\"=",
+"output":[["DOCTYPE", "a", null, "=", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\">",
+"input":"<!DOCTYPEa SYSTEM\">",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "abrupt-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"?",
+"input":"<!DOCTYPEa SYSTEM\"?",
+"output":[["DOCTYPE", "a", null, "?", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"@",
+"input":"<!DOCTYPEa SYSTEM\"@",
+"output":[["DOCTYPE", "a", null, "@", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"A",
+"input":"<!DOCTYPEa SYSTEM\"A",
+"output":[["DOCTYPE", "a", null, "A", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"B",
+"input":"<!DOCTYPEa SYSTEM\"B",
+"output":[["DOCTYPE", "a", null, "B", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"Y",
+"input":"<!DOCTYPEa SYSTEM\"Y",
+"output":[["DOCTYPE", "a", null, "Y", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"Z",
+"input":"<!DOCTYPEa SYSTEM\"Z",
+"output":[["DOCTYPE", "a", null, "Z", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"`",
+"input":"<!DOCTYPEa SYSTEM\"`",
+"output":[["DOCTYPE", "a", null, "`", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"a",
+"input":"<!DOCTYPEa SYSTEM\"a",
+"output":[["DOCTYPE", "a", null, "a", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"b",
+"input":"<!DOCTYPEa SYSTEM\"b",
+"output":[["DOCTYPE", "a", null, "b", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"y",
+"input":"<!DOCTYPEa SYSTEM\"y",
+"output":[["DOCTYPE", "a", null, "y", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"z",
+"input":"<!DOCTYPEa SYSTEM\"z",
+"output":[["DOCTYPE", "a", null, "z", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"{",
+"input":"<!DOCTYPEa SYSTEM\"{",
+"output":[["DOCTYPE", "a", null, "{", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\"\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa SYSTEM\"\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "\uDBC0\uDC00", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM#",
+"input":"<!DOCTYPEa SYSTEM#",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM&",
+"input":"<!DOCTYPEa SYSTEM&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'",
+"input":"<!DOCTYPEa SYSTEM'",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\u0000",
+"input":"<!DOCTYPEa SYSTEM'\u0000",
+"output":[["DOCTYPE", "a", null, "\uFFFD", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-null-character", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\u0009",
+"input":"<!DOCTYPEa SYSTEM'\u0009",
+"output":[["DOCTYPE", "a", null, "\u0009", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\u000A",
+"input":"<!DOCTYPEa SYSTEM'\u000A",
+"output":[["DOCTYPE", "a", null, "\u000A", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\u000B",
+"input":"<!DOCTYPEa SYSTEM'\u000B",
+"output":[["DOCTYPE", "a", null, "\u000B", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 19 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\u000C",
+"input":"<!DOCTYPEa SYSTEM'\u000C",
+"output":[["DOCTYPE", "a", null, "\u000C", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM' ",
+"input":"<!DOCTYPEa SYSTEM' ",
+"output":[["DOCTYPE", "a", null, " ", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'!",
+"input":"<!DOCTYPEa SYSTEM'!",
+"output":[["DOCTYPE", "a", null, "!", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\"",
+"input":"<!DOCTYPEa SYSTEM'\"",
+"output":[["DOCTYPE", "a", null, "\"", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'&",
+"input":"<!DOCTYPEa SYSTEM'&",
+"output":[["DOCTYPE", "a", null, "&", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''",
+"input":"<!DOCTYPEa SYSTEM''",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u0000",
+"input":"<!DOCTYPEa SYSTEM''\u0000",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 },
+ { "code": "unexpected-null-character", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u0008",
+"input":"<!DOCTYPEa SYSTEM''\u0008",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u0009",
+"input":"<!DOCTYPEa SYSTEM''\u0009",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u000A",
+"input":"<!DOCTYPEa SYSTEM''\u000A",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u000B",
+"input":"<!DOCTYPEa SYSTEM''\u000B",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u000C",
+"input":"<!DOCTYPEa SYSTEM''\u000C",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u000D",
+"input":"<!DOCTYPEa SYSTEM''\u000D",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\u001F",
+"input":"<!DOCTYPEa SYSTEM''\u001F",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 20 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'' ",
+"input":"<!DOCTYPEa SYSTEM'' ",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''!",
+"input":"<!DOCTYPEa SYSTEM''!",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\"",
+"input":"<!DOCTYPEa SYSTEM''\"",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''&",
+"input":"<!DOCTYPEa SYSTEM''&",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'''",
+"input":"<!DOCTYPEa SYSTEM'''",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''-",
+"input":"<!DOCTYPEa SYSTEM''-",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''/",
+"input":"<!DOCTYPEa SYSTEM''/",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''0",
+"input":"<!DOCTYPEa SYSTEM''0",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''1",
+"input":"<!DOCTYPEa SYSTEM''1",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''9",
+"input":"<!DOCTYPEa SYSTEM''9",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''<",
+"input":"<!DOCTYPEa SYSTEM''<",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''=",
+"input":"<!DOCTYPEa SYSTEM''=",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''>",
+"input":"<!DOCTYPEa SYSTEM''>",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''?",
+"input":"<!DOCTYPEa SYSTEM''?",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''@",
+"input":"<!DOCTYPEa SYSTEM''@",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''A",
+"input":"<!DOCTYPEa SYSTEM''A",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''B",
+"input":"<!DOCTYPEa SYSTEM''B",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''Y",
+"input":"<!DOCTYPEa SYSTEM''Y",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''Z",
+"input":"<!DOCTYPEa SYSTEM''Z",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''`",
+"input":"<!DOCTYPEa SYSTEM''`",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''a",
+"input":"<!DOCTYPEa SYSTEM''a",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''b",
+"input":"<!DOCTYPEa SYSTEM''b",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''y",
+"input":"<!DOCTYPEa SYSTEM''y",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''z",
+"input":"<!DOCTYPEa SYSTEM''z",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''{",
+"input":"<!DOCTYPEa SYSTEM''{",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM''\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa SYSTEM''\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "", true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "unexpected-character-after-doctype-system-identifier", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'(",
+"input":"<!DOCTYPEa SYSTEM'(",
+"output":[["DOCTYPE", "a", null, "(", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'-",
+"input":"<!DOCTYPEa SYSTEM'-",
+"output":[["DOCTYPE", "a", null, "-", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'/",
+"input":"<!DOCTYPEa SYSTEM'/",
+"output":[["DOCTYPE", "a", null, "/", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'0",
+"input":"<!DOCTYPEa SYSTEM'0",
+"output":[["DOCTYPE", "a", null, "0", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'1",
+"input":"<!DOCTYPEa SYSTEM'1",
+"output":[["DOCTYPE", "a", null, "1", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'9",
+"input":"<!DOCTYPEa SYSTEM'9",
+"output":[["DOCTYPE", "a", null, "9", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'<",
+"input":"<!DOCTYPEa SYSTEM'<",
+"output":[["DOCTYPE", "a", null, "<", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'=",
+"input":"<!DOCTYPEa SYSTEM'=",
+"output":[["DOCTYPE", "a", null, "=", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'>",
+"input":"<!DOCTYPEa SYSTEM'>",
+"output":[["DOCTYPE", "a", null, "", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "abrupt-doctype-system-identifier", "line": 1, "col": 19 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'?",
+"input":"<!DOCTYPEa SYSTEM'?",
+"output":[["DOCTYPE", "a", null, "?", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'@",
+"input":"<!DOCTYPEa SYSTEM'@",
+"output":[["DOCTYPE", "a", null, "@", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'A",
+"input":"<!DOCTYPEa SYSTEM'A",
+"output":[["DOCTYPE", "a", null, "A", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'B",
+"input":"<!DOCTYPEa SYSTEM'B",
+"output":[["DOCTYPE", "a", null, "B", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'Y",
+"input":"<!DOCTYPEa SYSTEM'Y",
+"output":[["DOCTYPE", "a", null, "Y", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'Z",
+"input":"<!DOCTYPEa SYSTEM'Z",
+"output":[["DOCTYPE", "a", null, "Z", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'`",
+"input":"<!DOCTYPEa SYSTEM'`",
+"output":[["DOCTYPE", "a", null, "`", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'a",
+"input":"<!DOCTYPEa SYSTEM'a",
+"output":[["DOCTYPE", "a", null, "a", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'b",
+"input":"<!DOCTYPEa SYSTEM'b",
+"output":[["DOCTYPE", "a", null, "b", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'y",
+"input":"<!DOCTYPEa SYSTEM'y",
+"output":[["DOCTYPE", "a", null, "y", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'z",
+"input":"<!DOCTYPEa SYSTEM'z",
+"output":[["DOCTYPE", "a", null, "z", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'{",
+"input":"<!DOCTYPEa SYSTEM'{",
+"output":[["DOCTYPE", "a", null, "{", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 20 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM'\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa SYSTEM'\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, "\uDBC0\uDC00", false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-whitespace-after-doctype-system-keyword", "line": 1, "col": 18 },
+ { "code": "eof-in-doctype", "line": 1, "col": 21 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM(",
+"input":"<!DOCTYPEa SYSTEM(",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM-",
+"input":"<!DOCTYPEa SYSTEM-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM/",
+"input":"<!DOCTYPEa SYSTEM/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM0",
+"input":"<!DOCTYPEa SYSTEM0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM1",
+"input":"<!DOCTYPEa SYSTEM1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM9",
+"input":"<!DOCTYPEa SYSTEM9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM<",
+"input":"<!DOCTYPEa SYSTEM<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM=",
+"input":"<!DOCTYPEa SYSTEM=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM>",
+"input":"<!DOCTYPEa SYSTEM>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM?",
+"input":"<!DOCTYPEa SYSTEM?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM@",
+"input":"<!DOCTYPEa SYSTEM@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMA",
+"input":"<!DOCTYPEa SYSTEMA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMB",
+"input":"<!DOCTYPEa SYSTEMB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMY",
+"input":"<!DOCTYPEa SYSTEMY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMZ",
+"input":"<!DOCTYPEa SYSTEMZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM`",
+"input":"<!DOCTYPEa SYSTEM`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMa",
+"input":"<!DOCTYPEa SYSTEMa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMb",
+"input":"<!DOCTYPEa SYSTEMb",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMy",
+"input":"<!DOCTYPEa SYSTEMy",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEMz",
+"input":"<!DOCTYPEa SYSTEMz",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM{",
+"input":"<!DOCTYPEa SYSTEM{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa SYSTEM\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa SYSTEM\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "missing-quote-before-doctype-system-identifier", "line": 1, "col": 18 }
+]},
+
+{"description":"<!DOCTYPEa Y",
+"input":"<!DOCTYPEa Y",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa Z",
+"input":"<!DOCTYPEa Z",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa `",
+"input":"<!DOCTYPEa `",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a",
+"input":"<!DOCTYPEa a",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a\\u0000",
+"input":"<!DOCTYPEa a\u0000",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 },
+ { "code": "unexpected-null-character", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEa a\\u0009",
+"input":"<!DOCTYPEa a\u0009",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a\\u000A",
+"input":"<!DOCTYPEa a\u000A",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a\\u000B",
+"input":"<!DOCTYPEa a\u000B",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEa a\\u000C",
+"input":"<!DOCTYPEa a\u000C",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a ",
+"input":"<!DOCTYPEa a ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a!",
+"input":"<!DOCTYPEa a!",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a\"",
+"input":"<!DOCTYPEa a\"",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a&",
+"input":"<!DOCTYPEa a&",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a'",
+"input":"<!DOCTYPEa a'",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a-",
+"input":"<!DOCTYPEa a-",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a/",
+"input":"<!DOCTYPEa a/",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a0",
+"input":"<!DOCTYPEa a0",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a1",
+"input":"<!DOCTYPEa a1",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a9",
+"input":"<!DOCTYPEa a9",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a<",
+"input":"<!DOCTYPEa a<",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a=",
+"input":"<!DOCTYPEa a=",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a>",
+"input":"<!DOCTYPEa a>",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a?",
+"input":"<!DOCTYPEa a?",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a@",
+"input":"<!DOCTYPEa a@",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa aA",
+"input":"<!DOCTYPEa aA",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa aB",
+"input":"<!DOCTYPEa aB",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa aY",
+"input":"<!DOCTYPEa aY",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa aZ",
+"input":"<!DOCTYPEa aZ",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a`",
+"input":"<!DOCTYPEa a`",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa aa",
+"input":"<!DOCTYPEa aa",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa ab",
+"input":"<!DOCTYPEa ab",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa ay",
+"input":"<!DOCTYPEa ay",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa az",
+"input":"<!DOCTYPEa az",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a{",
+"input":"<!DOCTYPEa a{",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa a\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa a\uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa b",
+"input":"<!DOCTYPEa b",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa y",
+"input":"<!DOCTYPEa y",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa z",
+"input":"<!DOCTYPEa z",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa {",
+"input":"<!DOCTYPEa {",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa \\uDBC0\\uDC00",
+"input":"<!DOCTYPEa \uDBC0\uDC00",
+"output":[["DOCTYPE", "a", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa!",
+"input":"<!DOCTYPEa!",
+"output":[["DOCTYPE", "a!", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\"",
+"input":"<!DOCTYPEa\"",
+"output":[["DOCTYPE", "a\"", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa&",
+"input":"<!DOCTYPEa&",
+"output":[["DOCTYPE", "a&", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa'",
+"input":"<!DOCTYPEa'",
+"output":[["DOCTYPE", "a'", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa-",
+"input":"<!DOCTYPEa-",
+"output":[["DOCTYPE", "a-", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa/",
+"input":"<!DOCTYPEa/",
+"output":[["DOCTYPE", "a/", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa0",
+"input":"<!DOCTYPEa0",
+"output":[["DOCTYPE", "a0", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa1",
+"input":"<!DOCTYPEa1",
+"output":[["DOCTYPE", "a1", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa9",
+"input":"<!DOCTYPEa9",
+"output":[["DOCTYPE", "a9", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa<",
+"input":"<!DOCTYPEa<",
+"output":[["DOCTYPE", "a<", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa=",
+"input":"<!DOCTYPEa=",
+"output":[["DOCTYPE", "a=", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa>",
+"input":"<!DOCTYPEa>",
+"output":[["DOCTYPE", "a", null, null, true]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 }
+]},
+
+{"description":"<!DOCTYPEa?",
+"input":"<!DOCTYPEa?",
+"output":[["DOCTYPE", "a?", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa@",
+"input":"<!DOCTYPEa@",
+"output":[["DOCTYPE", "a@", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaA",
+"input":"<!DOCTYPEaA",
+"output":[["DOCTYPE", "aa", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaB",
+"input":"<!DOCTYPEaB",
+"output":[["DOCTYPE", "ab", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaY",
+"input":"<!DOCTYPEaY",
+"output":[["DOCTYPE", "ay", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaZ",
+"input":"<!DOCTYPEaZ",
+"output":[["DOCTYPE", "az", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa[",
+"input":"<!DOCTYPEa[",
+"output":[["DOCTYPE", "a[", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa`",
+"input":"<!DOCTYPEa`",
+"output":[["DOCTYPE", "a`", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaa",
+"input":"<!DOCTYPEaa",
+"output":[["DOCTYPE", "aa", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEab",
+"input":"<!DOCTYPEab",
+"output":[["DOCTYPE", "ab", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEay",
+"input":"<!DOCTYPEay",
+"output":[["DOCTYPE", "ay", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEaz",
+"input":"<!DOCTYPEaz",
+"output":[["DOCTYPE", "az", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa{",
+"input":"<!DOCTYPEa{",
+"output":[["DOCTYPE", "a{", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!DOCTYPEa\\uDBC0\\uDC00",
+"input":"<!DOCTYPEa\uDBC0\uDC00",
+"output":[["DOCTYPE", "a\uDBC0\uDC00", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 13 }
+]},
+
+{"description":"<!DOCTYPEb",
+"input":"<!DOCTYPEb",
+"output":[["DOCTYPE", "b", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEy",
+"input":"<!DOCTYPEy",
+"output":[["DOCTYPE", "y", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPEz",
+"input":"<!DOCTYPEz",
+"output":[["DOCTYPE", "z", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE{",
+"input":"<!DOCTYPE{",
+"output":[["DOCTYPE", "{", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 11 }
+]},
+
+{"description":"<!DOCTYPE\\uDBC0\\uDC00",
+"input":"<!DOCTYPE\uDBC0\uDC00",
+"output":[["DOCTYPE", "\uDBC0\uDC00", null, null, false]],
+"errors":[
+ { "code": "missing-whitespace-before-doctype-name", "line": 1, "col": 10 },
+ { "code": "eof-in-doctype", "line": 1, "col": 12 }
+]},
+
+{"description":"<!Y",
+"input":"<!Y",
+"output":[["Comment", "Y"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!Z",
+"input":"<!Z",
+"output":[["Comment", "Z"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!`",
+"input":"<!`",
+"output":[["Comment", "`"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!a",
+"input":"<!a",
+"output":[["Comment", "a"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!b",
+"input":"<!b",
+"output":[["Comment", "b"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!y",
+"input":"<!y",
+"output":[["Comment", "y"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!z",
+"input":"<!z",
+"output":[["Comment", "z"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!{",
+"input":"<!{",
+"output":[["Comment", "{"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<!\\uDBC0\\uDC00",
+"input":"<!\uDBC0\uDC00",
+"output":[["Comment", "\uDBC0\uDC00"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 }
+]},
+
+{"description":"<\"",
+"input":"<\"",
+"output":[["Character", "<\""]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<&",
+"input":"<&",
+"output":[["Character", "<&"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<'",
+"input":"<'",
+"output":[["Character", "<'"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<-",
+"input":"<-",
+"output":[["Character", "<-"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<.",
+"input":"<.",
+"output":[["Character", "<."]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"</",
+"input":"</",
+"output":[["Character", "</"]],
+"errors":[
+ { "code": "eof-before-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\u0000",
+"input":"</\u0000",
+"output":[["Comment", "\uFFFD"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\u0009",
+"input":"</\u0009",
+"output":[["Comment", "\u0009"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\u000A",
+"input":"</\u000A",
+"output":[["Comment", "\u000A"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\u000B",
+"input":"</\u000B",
+"output":[["Comment", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 },
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\u000C",
+"input":"</\u000C",
+"output":[["Comment", "\u000C"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</ ",
+"input":"</ ",
+"output":[["Comment", " "]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</ \\u0000",
+"input":"</ \u0000",
+"output":[["Comment", " \uFFFD"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 4 }
+]},
+
+{"description":"</!",
+"input":"</!",
+"output":[["Comment", "!"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\"",
+"input":"</\"",
+"output":[["Comment", "\""]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</&",
+"input":"</&",
+"output":[["Comment", "&"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</'",
+"input":"</'",
+"output":[["Comment", "'"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</-",
+"input":"</-",
+"output":[["Comment", "-"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"<//",
+"input":"<//",
+"output":[["Comment", "/"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</0",
+"input":"</0",
+"output":[["Comment", "0"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</1",
+"input":"</1",
+"output":[["Comment", "1"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</9",
+"input":"</9",
+"output":[["Comment", "9"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</<",
+"input":"</<",
+"output":[["Comment", "<"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</=",
+"input":"</=",
+"output":[["Comment", "="]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</>",
+"input":"</>",
+"output":[],
+"errors":[
+ { "code": "missing-end-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</?",
+"input":"</?",
+"output":[["Comment", "?"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</@",
+"input":"</@",
+"output":[["Comment", "@"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</A>",
+"input":"</A>",
+"output":[["EndTag", "a"]]},
+
+{"description":"</B>",
+"input":"</B>",
+"output":[["EndTag", "b"]]},
+
+{"description":"</Y>",
+"input":"</Y>",
+"output":[["EndTag", "y"]]},
+
+{"description":"</Z>",
+"input":"</Z>",
+"output":[["EndTag", "z"]]},
+
+{"description":"</[",
+"input":"</[",
+"output":[["Comment", "["]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</`",
+"input":"</`",
+"output":[["Comment", "`"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</a>",
+"input":"</a>",
+"output":[["EndTag", "a"]]},
+
+{"description":"</b>",
+"input":"</b>",
+"output":[["EndTag", "b"]]},
+
+{"description":"</y>",
+"input":"</y>",
+"output":[["EndTag", "y"]]},
+
+{"description":"</z>",
+"input":"</z>",
+"output":[["EndTag", "z"]]},
+
+{"description":"</{",
+"input":"</{",
+"output":[["Comment", "{"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"</\\uDBC0\\uDC00",
+"input":"</\uDBC0\uDC00",
+"output":[["Comment", "\uDBC0\uDC00"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"<0",
+"input":"<0",
+"output":[["Character", "<0"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<1",
+"input":"<1",
+"output":[["Character", "<1"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<9",
+"input":"<9",
+"output":[["Character", "<9"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<<",
+"input":"<<",
+"output":[["Character", "<<"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 },
+ { "code": "eof-before-tag-name", "line": 1, "col": 3 }
+]},
+
+{"description":"<=",
+"input":"<=",
+"output":[["Character", "<="]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<>",
+"input":"<>",
+"output":[["Character", "<>"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?",
+"input":"<?",
+"output":[["Comment", "?"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?\\u0000",
+"input":"<?\u0000",
+"output":[["Comment", "?\uFFFD"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 },
+ { "code": "unexpected-null-character", "line": 1, "col": 3 }
+]},
+
+{"description":"<?\\u0009",
+"input":"<?\u0009",
+"output":[["Comment", "?\u0009"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?\\u000A",
+"input":"<?\u000A",
+"output":[["Comment", "?\u000A"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?\\u000B",
+"input":"<?\u000B",
+"output":[["Comment", "?\u000B"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 }
+]},
+
+{"description":"<?\\u000C",
+"input":"<?\u000C",
+"output":[["Comment", "?\u000C"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<? ",
+"input":"<? ",
+"output":[["Comment", "? "]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<? \\u0000",
+"input":"<? \u0000",
+"output":[["Comment", "? \uFFFD"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 },
+ { "code": "unexpected-null-character", "line": 1, "col": 4 }
+]},
+
+{"description":"<?!",
+"input":"<?!",
+"output":[["Comment", "?!"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?\"",
+"input":"<?\"",
+"output":[["Comment", "?\""]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?&",
+"input":"<?&",
+"output":[["Comment", "?&"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?'",
+"input":"<?'",
+"output":[["Comment", "?'"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?-",
+"input":"<?-",
+"output":[["Comment", "?-"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?/",
+"input":"<?/",
+"output":[["Comment", "?/"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?0",
+"input":"<?0",
+"output":[["Comment", "?0"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?1",
+"input":"<?1",
+"output":[["Comment", "?1"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?9",
+"input":"<?9",
+"output":[["Comment", "?9"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?<",
+"input":"<?<",
+"output":[["Comment", "?<"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?=",
+"input":"<?=",
+"output":[["Comment", "?="]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?>",
+"input":"<?>",
+"output":[["Comment", "?"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<??",
+"input":"<??",
+"output":[["Comment", "??"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?@",
+"input":"<?@",
+"output":[["Comment", "?@"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?A",
+"input":"<?A",
+"output":[["Comment", "?A"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?B",
+"input":"<?B",
+"output":[["Comment", "?B"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?Y",
+"input":"<?Y",
+"output":[["Comment", "?Y"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?Z",
+"input":"<?Z",
+"output":[["Comment", "?Z"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?`",
+"input":"<?`",
+"output":[["Comment", "?`"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?a",
+"input":"<?a",
+"output":[["Comment", "?a"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?b",
+"input":"<?b",
+"output":[["Comment", "?b"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?y",
+"input":"<?y",
+"output":[["Comment", "?y"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?z",
+"input":"<?z",
+"output":[["Comment", "?z"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?{",
+"input":"<?{",
+"output":[["Comment", "?{"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<?\\uDBC0\\uDC00",
+"input":"<?\uDBC0\uDC00",
+"output":[["Comment", "?\uDBC0\uDC00"]],
+"errors":[
+ { "code": "unexpected-question-mark-instead-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<@",
+"input":"<@",
+"output":[["Character", "<@"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<A>",
+"input":"<A>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<B>",
+"input":"<B>",
+"output":[["StartTag", "b", {}]]},
+
+{"description":"<Y>",
+"input":"<Y>",
+"output":[["StartTag", "y", {}]]},
+
+{"description":"<Z>",
+"input":"<Z>",
+"output":[["StartTag", "z", {}]]},
+
+{"description":"<[",
+"input":"<[",
+"output":[["Character", "<["]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<`",
+"input":"<`",
+"output":[["Character", "<`"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<a>",
+"input":"<a>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a\\u0000>",
+"input":"<a\u0000>",
+"output":[["StartTag", "a\uFFFD", {}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 3 }
+]},
+
+{"description":"<a\\u0008>",
+"input":"<a\u0008>",
+"output":[["StartTag", "a\u0008", {}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 }
+]},
+
+{"description":"<a\\u0009>",
+"input":"<a\u0009>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a\\u000A>",
+"input":"<a\u000A>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a\\u000B>",
+"input":"<a\u000B>",
+"output":[["StartTag", "a\u000B", {}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 }
+]},
+
+{"description":"<a\\u000C>",
+"input":"<a\u000C>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a\\u000D>",
+"input":"<a\u000D>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a\\u001F>",
+"input":"<a\u001F>",
+"output":[["StartTag", "a\u001F", {}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 3 }
+]},
+
+{"description":"<a >",
+"input":"<a >",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a \\u0000>",
+"input":"<a \u0000>",
+"output":[["StartTag", "a", {"\uFFFD":""}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 4 }
+]},
+
+{"description":"<a \\u0008>",
+"input":"<a \u0008>",
+"output":[["StartTag", "a", {"\u0008":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 4 }
+]},
+
+{"description":"<a \\u0009>",
+"input":"<a \u0009>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a \\u000A>",
+"input":"<a \u000A>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a \\u000B>",
+"input":"<a \u000B>",
+"output":[["StartTag", "a", {"\u000B":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 4 }
+]},
+
+{"description":"<a \\u000C>",
+"input":"<a \u000C>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a \\u000D>",
+"input":"<a \u000D>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a \\u001F>",
+"input":"<a \u001F>",
+"output":[["StartTag", "a", {"\u001F":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 4 }
+]},
+
+{"description":"<a >",
+"input":"<a >",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a !>",
+"input":"<a !>",
+"output":[["StartTag", "a", {"!":""}]]},
+
+{"description":"<a \">",
+"input":"<a \">",
+"output":[["StartTag", "a", {"\"":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a #>",
+"input":"<a #>",
+"output":[["StartTag", "a", {"#":""}]]},
+
+{"description":"<a &>",
+"input":"<a &>",
+"output":[["StartTag", "a", {"&":""}]]},
+
+{"description":"<a '>",
+"input":"<a '>",
+"output":[["StartTag", "a", {"'":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a (>",
+"input":"<a (>",
+"output":[["StartTag", "a", {"(":""}]]},
+
+{"description":"<a ->",
+"input":"<a ->",
+"output":[["StartTag", "a", {"-":""}]]},
+
+{"description":"<a .>",
+"input":"<a .>",
+"output":[["StartTag", "a", {".":""}]]},
+
+{"description":"<a />",
+"input":"<a />",
+"output":[["StartTag", "a", {}, true]]},
+
+{"description":"<a 0>",
+"input":"<a 0>",
+"output":[["StartTag", "a", {"0":""}]]},
+
+{"description":"<a 1>",
+"input":"<a 1>",
+"output":[["StartTag", "a", {"1":""}]]},
+
+{"description":"<a 9>",
+"input":"<a 9>",
+"output":[["StartTag", "a", {"9":""}]]},
+
+{"description":"<a <>",
+"input":"<a <>",
+"output":[["StartTag", "a", {"<":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a =>",
+"input":"<a =>",
+"output":[["StartTag", "a", {"=":""}]],
+"errors":[
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a >",
+"input":"<a >",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a ?>",
+"input":"<a ?>",
+"output":[["StartTag", "a", {"?":""}]]},
+
+{"description":"<a @>",
+"input":"<a @>",
+"output":[["StartTag", "a", {"@":""}]]},
+
+{"description":"<a A>",
+"input":"<a A>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a B>",
+"input":"<a B>",
+"output":[["StartTag", "a", {"b":""}]]},
+
+{"description":"<a Y>",
+"input":"<a Y>",
+"output":[["StartTag", "a", {"y":""}]]},
+
+{"description":"<a Z>",
+"input":"<a Z>",
+"output":[["StartTag", "a", {"z":""}]]},
+
+{"description":"<a [>",
+"input":"<a [>",
+"output":[["StartTag", "a", {"[":""}]]},
+
+{"description":"<a `>",
+"input":"<a `>",
+"output":[["StartTag", "a", {"`":""}]]},
+
+{"description":"<a a>",
+"input":"<a a>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a\\u0000>",
+"input":"<a a\u0000>",
+"output":[["StartTag", "a", {"a\uFFFD":""}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a\\u0008>",
+"input":"<a a\u0008>",
+"output":[["StartTag", "a", {"a\u0008":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a\\u0009>",
+"input":"<a a\u0009>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a\\u000A>",
+"input":"<a a\u000A>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a\\u000B>",
+"input":"<a a\u000B>",
+"output":[["StartTag", "a", {"a\u000B":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a\\u000C>",
+"input":"<a a\u000C>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a\\u000D>",
+"input":"<a a\u000D>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a\\u001F>",
+"input":"<a a\u001F>",
+"output":[["StartTag", "a", {"a\u001F":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a >",
+"input":"<a a >",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a \\u0000>",
+"input":"<a a \u0000>",
+"output":[["StartTag", "a", {"a":"", "\uFFFD":""}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a \\u0008>",
+"input":"<a a \u0008>",
+"output":[["StartTag", "a", {"a":"", "\u0008":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a \\u0009>",
+"input":"<a a \u0009>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a \\u000A>",
+"input":"<a a \u000A>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a \\u000B>",
+"input":"<a a \u000B>",
+"output":[["StartTag", "a", {"a":"", "\u000B":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a \\u000C>",
+"input":"<a a \u000C>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a \\u000D>",
+"input":"<a a \u000D>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a \\u001F>",
+"input":"<a a \u001F>",
+"output":[["StartTag", "a", {"a":"", "\u001F":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a >",
+"input":"<a a >",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a !>",
+"input":"<a a !>",
+"output":[["StartTag", "a", {"a":"", "!":""}]]},
+
+{"description":"<a a \">",
+"input":"<a a \">",
+"output":[["StartTag", "a", {"a":"", "\"":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a #>",
+"input":"<a a #>",
+"output":[["StartTag", "a", {"a":"", "#":""}]]},
+
+{"description":"<a a &>",
+"input":"<a a &>",
+"output":[["StartTag", "a", {"a":"", "&":""}]]},
+
+{"description":"<a a '>",
+"input":"<a a '>",
+"output":[["StartTag", "a", {"a":"", "'":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a (>",
+"input":"<a a (>",
+"output":[["StartTag", "a", {"a":"", "(":""}]]},
+
+{"description":"<a a ->",
+"input":"<a a ->",
+"output":[["StartTag", "a", {"a":"", "-":""}]]},
+
+{"description":"<a a .>",
+"input":"<a a .>",
+"output":[["StartTag", "a", {"a":"", ".":""}]]},
+
+{"description":"<a a />",
+"input":"<a a />",
+"output":[["StartTag", "a", {"a":""}, true]]},
+
+{"description":"<a a 0>",
+"input":"<a a 0>",
+"output":[["StartTag", "a", {"a":"", "0":""}]]},
+
+{"description":"<a a 1>",
+"input":"<a a 1>",
+"output":[["StartTag", "a", {"a":"", "1":""}]]},
+
+{"description":"<a a 9>",
+"input":"<a a 9>",
+"output":[["StartTag", "a", {"a":"", "9":""}]]},
+
+{"description":"<a a <>",
+"input":"<a a <>",
+"output":[["StartTag", "a", {"a":"", "<":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a =>",
+"input":"<a a =>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a >",
+"input":"<a a >",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a ?>",
+"input":"<a a ?>",
+"output":[["StartTag", "a", {"a":"", "?":""}]]},
+
+{"description":"<a a @>",
+"input":"<a a @>",
+"output":[["StartTag", "a", {"a":"", "@":""}]]},
+
+{"description":"<a a A>",
+"input":"<a a A>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "duplicate-attribute", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a B>",
+"input":"<a a B>",
+"output":[["StartTag", "a", {"a":"", "b":""}]]},
+
+{"description":"<a a Y>",
+"input":"<a a Y>",
+"output":[["StartTag", "a", {"a":"", "y":""}]]},
+
+{"description":"<a a Z>",
+"input":"<a a Z>",
+"output":[["StartTag", "a", {"a":"", "z":""}]]},
+
+{"description":"<a a [>",
+"input":"<a a [>",
+"output":[["StartTag", "a", {"a":"", "[":""}]]},
+
+{"description":"<a a `>",
+"input":"<a a `>",
+"output":[["StartTag", "a", {"a":"", "`":""}]]},
+
+{"description":"<a a a>",
+"input":"<a a a>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "duplicate-attribute", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a b>",
+"input":"<a a b>",
+"output":[["StartTag", "a", {"a":"", "b":""}]]},
+
+{"description":"<a a y>",
+"input":"<a a y>",
+"output":[["StartTag", "a", {"a":"", "y":""}]]},
+
+{"description":"<a a z>",
+"input":"<a a z>",
+"output":[["StartTag", "a", {"a":"", "z":""}]]},
+
+{"description":"<a a {>",
+"input":"<a a {>",
+"output":[["StartTag", "a", {"a":"", "{":""}]]},
+
+{"description":"<a a \\uDBC0\\uDC00>",
+"input":"<a a \uDBC0\uDC00>",
+"output":[["StartTag", "a", {"a":"", "\uDBC0\uDC00":""}]]},
+
+{"description":"<a a!>",
+"input":"<a a!>",
+"output":[["StartTag", "a", {"a!":""}]]},
+
+{"description":"<a a\">",
+"input":"<a a\">",
+"output":[["StartTag", "a", {"a\"":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a#>",
+"input":"<a a#>",
+"output":[["StartTag", "a", {"a#":""}]]},
+
+{"description":"<a a&>",
+"input":"<a a&>",
+"output":[["StartTag", "a", {"a&":""}]]},
+
+{"description":"<a a'>",
+"input":"<a a'>",
+"output":[["StartTag", "a", {"a'":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a(>",
+"input":"<a a(>",
+"output":[["StartTag", "a", {"a(":""}]]},
+
+{"description":"<a a->",
+"input":"<a a->",
+"output":[["StartTag", "a", {"a-":""}]]},
+
+{"description":"<a a.>",
+"input":"<a a.>",
+"output":[["StartTag", "a", {"a.":""}]]},
+
+{"description":"<a a/>",
+"input":"<a a/>",
+"output":[["StartTag", "a", {"a":""}, true]]},
+
+{"description":"<a a0>",
+"input":"<a a0>",
+"output":[["StartTag", "a", {"a0":""}]]},
+
+{"description":"<a a1>",
+"input":"<a a1>",
+"output":[["StartTag", "a", {"a1":""}]]},
+
+{"description":"<a a9>",
+"input":"<a a9>",
+"output":[["StartTag", "a", {"a9":""}]]},
+
+{"description":"<a a<>",
+"input":"<a a<>",
+"output":[["StartTag", "a", {"a<":""}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 5 }
+]},
+
+{"description":"<a a=>",
+"input":"<a a=>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=\\u0000>",
+"input":"<a a=\u0000>",
+"output":[["StartTag", "a", {"a":"\uFFFD"}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=\\u0008>",
+"input":"<a a=\u0008>",
+"output":[["StartTag", "a", {"a":"\u0008"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=\\u0009>",
+"input":"<a a=\u0009>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=\\u000A>",
+"input":"<a a=\u000A>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 2, "col": 1 }
+]},
+
+{"description":"<a a=\\u000B>",
+"input":"<a a=\u000B>",
+"output":[["StartTag", "a", {"a":"\u000B"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=\\u000C>",
+"input":"<a a=\u000C>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=\\u000D>",
+"input":"<a a=\u000D>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 2, "col": 1 }
+]},
+
+{"description":"<a a=\\u001F>",
+"input":"<a a=\u001F>",
+"output":[["StartTag", "a", {"a":"\u001F"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a= >",
+"input":"<a a= >",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=!>",
+"input":"<a a=!>",
+"output":[["StartTag", "a", {"a":"!"}]]},
+
+{"description":"<a a=\"\">",
+"input":"<a a=\"\">",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=\"\\u0000\">",
+"input":"<a a=\"\u0000\">",
+"output":[["StartTag", "a", {"a":"\uFFFD"}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=\"\\u0009\">",
+"input":"<a a=\"\u0009\">",
+"output":[["StartTag", "a", {"a":"\u0009"}]]},
+
+{"description":"<a a=\"\\u000A\">",
+"input":"<a a=\"\u000A\">",
+"output":[["StartTag", "a", {"a":"\u000A"}]]},
+
+{"description":"<a a=\"\\u000B\">",
+"input":"<a a=\"\u000B\">",
+"output":[["StartTag", "a", {"a":"\u000B"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=\"\\u000C\">",
+"input":"<a a=\"\u000C\">",
+"output":[["StartTag", "a", {"a":"\u000C"}]]},
+
+{"description":"<a a=\" \">",
+"input":"<a a=\" \">",
+"output":[["StartTag", "a", {"a":" "}]]},
+
+{"description":"<a a=\"!\">",
+"input":"<a a=\"!\">",
+"output":[["StartTag", "a", {"a":"!"}]]},
+
+{"description":"<a a=\"\">",
+"input":"<a a=\"\">",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=\"#\">",
+"input":"<a a=\"#\">",
+"output":[["StartTag", "a", {"a":"#"}]]},
+
+{"description":"<a a=\"%\">",
+"input":"<a a=\"%\">",
+"output":[["StartTag", "a", {"a":"%"}]]},
+
+{"description":"<a a=\"&\">",
+"input":"<a a=\"&\">",
+"output":[["StartTag", "a", {"a":"&"}]]},
+
+{"description":"<a a=\"'\">",
+"input":"<a a=\"'\">",
+"output":[["StartTag", "a", {"a":"'"}]]},
+
+{"description":"<a a=\"-\">",
+"input":"<a a=\"-\">",
+"output":[["StartTag", "a", {"a":"-"}]]},
+
+{"description":"<a a=\"/\">",
+"input":"<a a=\"/\">",
+"output":[["StartTag", "a", {"a":"/"}]]},
+
+{"description":"<a a=\"0\">",
+"input":"<a a=\"0\">",
+"output":[["StartTag", "a", {"a":"0"}]]},
+
+{"description":"<a a=\"1\">",
+"input":"<a a=\"1\">",
+"output":[["StartTag", "a", {"a":"1"}]]},
+
+{"description":"<a a=\"9\">",
+"input":"<a a=\"9\">",
+"output":[["StartTag", "a", {"a":"9"}]]},
+
+{"description":"<a a=\"<\">",
+"input":"<a a=\"<\">",
+"output":[["StartTag", "a", {"a":"<"}]]},
+
+{"description":"<a a=\"=\">",
+"input":"<a a=\"=\">",
+"output":[["StartTag", "a", {"a":"="}]]},
+
+{"description":"<a a=\">\">",
+"input":"<a a=\">\">",
+"output":[["StartTag", "a", {"a":">"}]]},
+
+{"description":"<a a=\"?\">",
+"input":"<a a=\"?\">",
+"output":[["StartTag", "a", {"a":"?"}]]},
+
+{"description":"<a a=\"@\">",
+"input":"<a a=\"@\">",
+"output":[["StartTag", "a", {"a":"@"}]]},
+
+{"description":"<a a=\"A\">",
+"input":"<a a=\"A\">",
+"output":[["StartTag", "a", {"a":"A"}]]},
+
+{"description":"<a a=\"B\">",
+"input":"<a a=\"B\">",
+"output":[["StartTag", "a", {"a":"B"}]]},
+
+{"description":"<a a=\"Y\">",
+"input":"<a a=\"Y\">",
+"output":[["StartTag", "a", {"a":"Y"}]]},
+
+{"description":"<a a=\"Z\">",
+"input":"<a a=\"Z\">",
+"output":[["StartTag", "a", {"a":"Z"}]]},
+
+{"description":"<a a=\"`\">",
+"input":"<a a=\"`\">",
+"output":[["StartTag", "a", {"a":"`"}]]},
+
+{"description":"<a a=\"a\">",
+"input":"<a a=\"a\">",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=\"b\">",
+"input":"<a a=\"b\">",
+"output":[["StartTag", "a", {"a":"b"}]]},
+
+{"description":"<a a=\"y\">",
+"input":"<a a=\"y\">",
+"output":[["StartTag", "a", {"a":"y"}]]},
+
+{"description":"<a a=\"z\">",
+"input":"<a a=\"z\">",
+"output":[["StartTag", "a", {"a":"z"}]]},
+
+{"description":"<a a=\"{\">",
+"input":"<a a=\"{\">",
+"output":[["StartTag", "a", {"a":"{"}]]},
+
+{"description":"<a a=\"\\uDBC0\\uDC00\">",
+"input":"<a a=\"\uDBC0\uDC00\">",
+"output":[["StartTag", "a", {"a":"\uDBC0\uDC00"}]]},
+
+{"description":"<a a=#>",
+"input":"<a a=#>",
+"output":[["StartTag", "a", {"a":"#"}]]},
+
+{"description":"<a a=%>",
+"input":"<a a=%>",
+"output":[["StartTag", "a", {"a":"%"}]]},
+
+{"description":"<a a=&>",
+"input":"<a a=&>",
+"output":[["StartTag", "a", {"a":"&"}]]},
+
+{"description":"<a a=''>",
+"input":"<a a=''>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a='\\u0000'>",
+"input":"<a a='\u0000'>",
+"output":[["StartTag", "a", {"a":"\uFFFD"}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a='\\u0009'>",
+"input":"<a a='\u0009'>",
+"output":[["StartTag", "a", {"a":"\u0009"}]]},
+
+{"description":"<a a='\\u000A'>",
+"input":"<a a='\u000A'>",
+"output":[["StartTag", "a", {"a":"\u000A"}]]},
+
+{"description":"<a a='\\u000B'>",
+"input":"<a a='\u000B'>",
+"output":[["StartTag", "a", {"a":"\u000B"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a='\\u000C'>",
+"input":"<a a='\u000C'>",
+"output":[["StartTag", "a", {"a":"\u000C"}]]},
+
+{"description":"<a a=' '>",
+"input":"<a a=' '>",
+"output":[["StartTag", "a", {"a":" "}]]},
+
+{"description":"<a a='!'>",
+"input":"<a a='!'>",
+"output":[["StartTag", "a", {"a":"!"}]]},
+
+{"description":"<a a='\"'>",
+"input":"<a a='\"'>",
+"output":[["StartTag", "a", {"a":"\""}]]},
+
+{"description":"<a a='%'>",
+"input":"<a a='%'>",
+"output":[["StartTag", "a", {"a":"%"}]]},
+
+{"description":"<a a='&'>",
+"input":"<a a='&'>",
+"output":[["StartTag", "a", {"a":"&"}]]},
+
+{"description":"<a a=''>",
+"input":"<a a=''>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''\\u0000>",
+"input":"<a a=''\u0000>",
+"output":[["StartTag", "a", {"a":"", "\uFFFD":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "unexpected-null-character", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''\\u0008>",
+"input":"<a a=''\u0008>",
+"output":[["StartTag", "a", {"a":"", "\u0008":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 8 },
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''\\u0009>",
+"input":"<a a=''\u0009>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''\\u000A>",
+"input":"<a a=''\u000A>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''\\u000B>",
+"input":"<a a=''\u000B>",
+"output":[["StartTag", "a", {"a":"", "\u000B":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 8 },
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''\\u000C>",
+"input":"<a a=''\u000C>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''\\u000D>",
+"input":"<a a=''\u000D>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''\\u001F>",
+"input":"<a a=''\u001F>",
+"output":[["StartTag", "a", {"a":"", "\u001F":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 8 },
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a='' >",
+"input":"<a a='' >",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''!>",
+"input":"<a a=''!>",
+"output":[["StartTag", "a", {"a":"", "!":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''\">",
+"input":"<a a=''\">",
+"output":[["StartTag", "a", {"a":"", "\"":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''&>",
+"input":"<a a=''&>",
+"output":[["StartTag", "a", {"a":"", "&":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a='''>",
+"input":"<a a='''>",
+"output":[["StartTag", "a", {"a":"", "'":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''->",
+"input":"<a a=''->",
+"output":[["StartTag", "a", {"a":"", "-":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''.>",
+"input":"<a a=''.>",
+"output":[["StartTag", "a", {"a":"", ".":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''/>",
+"input":"<a a=''/>",
+"output":[["StartTag", "a", {"a":""}, true]]},
+
+{"description":"<a a=''0>",
+"input":"<a a=''0>",
+"output":[["StartTag", "a", {"a":"", "0":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''1>",
+"input":"<a a=''1>",
+"output":[["StartTag", "a", {"a":"", "1":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''9>",
+"input":"<a a=''9>",
+"output":[["StartTag", "a", {"a":"", "9":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''<>",
+"input":"<a a=''<>",
+"output":[["StartTag", "a", {"a":"", "<":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''=>",
+"input":"<a a=''=>",
+"output":[["StartTag", "a", {"a":"", "=":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''>",
+"input":"<a a=''>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a=''?>",
+"input":"<a a=''?>",
+"output":[["StartTag", "a", {"a":"", "?":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''@>",
+"input":"<a a=''@>",
+"output":[["StartTag", "a", {"a":"", "@":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''A>",
+"input":"<a a=''A>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "duplicate-attribute", "line": 1, "col": 9 }
+]},
+
+{"description":"<a a=''B>",
+"input":"<a a=''B>",
+"output":[["StartTag", "a", {"a":"", "b":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''Y>",
+"input":"<a a=''Y>",
+"output":[["StartTag", "a", {"a":"", "y":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''Z>",
+"input":"<a a=''Z>",
+"output":[["StartTag", "a", {"a":"", "z":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''`>",
+"input":"<a a=''`>",
+"output":[["StartTag", "a", {"a":"", "`":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''a>",
+"input":"<a a=''a>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 },
+ { "code": "duplicate-attribute", "line": 1, "col": 9 }
+]},
+
+{"description":"<a a=''b>",
+"input":"<a a=''b>",
+"output":[["StartTag", "a", {"a":"", "b":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''y>",
+"input":"<a a=''y>",
+"output":[["StartTag", "a", {"a":"", "y":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''z>",
+"input":"<a a=''z>",
+"output":[["StartTag", "a", {"a":"", "z":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''{>",
+"input":"<a a=''{>",
+"output":[["StartTag", "a", {"a":"", "{":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a=''\\uDBC0\\uDC00>",
+"input":"<a a=''\uDBC0\uDC00>",
+"output":[["StartTag", "a", {"a":"", "\uDBC0\uDC00":""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"<a a='('>",
+"input":"<a a='('>",
+"output":[["StartTag", "a", {"a":"("}]]},
+
+{"description":"<a a='-'>",
+"input":"<a a='-'>",
+"output":[["StartTag", "a", {"a":"-"}]]},
+
+{"description":"<a a='/'>",
+"input":"<a a='/'>",
+"output":[["StartTag", "a", {"a":"/"}]]},
+
+{"description":"<a a='0'>",
+"input":"<a a='0'>",
+"output":[["StartTag", "a", {"a":"0"}]]},
+
+{"description":"<a a='1'>",
+"input":"<a a='1'>",
+"output":[["StartTag", "a", {"a":"1"}]]},
+
+{"description":"<a a='9'>",
+"input":"<a a='9'>",
+"output":[["StartTag", "a", {"a":"9"}]]},
+
+{"description":"<a a='<'>",
+"input":"<a a='<'>",
+"output":[["StartTag", "a", {"a":"<"}]]},
+
+{"description":"<a a='='>",
+"input":"<a a='='>",
+"output":[["StartTag", "a", {"a":"="}]]},
+
+{"description":"<a a='>'>",
+"input":"<a a='>'>",
+"output":[["StartTag", "a", {"a":">"}]]},
+
+{"description":"<a a='?'>",
+"input":"<a a='?'>",
+"output":[["StartTag", "a", {"a":"?"}]]},
+
+{"description":"<a a='@'>",
+"input":"<a a='@'>",
+"output":[["StartTag", "a", {"a":"@"}]]},
+
+{"description":"<a a='A'>",
+"input":"<a a='A'>",
+"output":[["StartTag", "a", {"a":"A"}]]},
+
+{"description":"<a a='B'>",
+"input":"<a a='B'>",
+"output":[["StartTag", "a", {"a":"B"}]]},
+
+{"description":"<a a='Y'>",
+"input":"<a a='Y'>",
+"output":[["StartTag", "a", {"a":"Y"}]]},
+
+{"description":"<a a='Z'>",
+"input":"<a a='Z'>",
+"output":[["StartTag", "a", {"a":"Z"}]]},
+
+{"description":"<a a='`'>",
+"input":"<a a='`'>",
+"output":[["StartTag", "a", {"a":"`"}]]},
+
+{"description":"<a a='a'>",
+"input":"<a a='a'>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a='b'>",
+"input":"<a a='b'>",
+"output":[["StartTag", "a", {"a":"b"}]]},
+
+{"description":"<a a='y'>",
+"input":"<a a='y'>",
+"output":[["StartTag", "a", {"a":"y"}]]},
+
+{"description":"<a a='z'>",
+"input":"<a a='z'>",
+"output":[["StartTag", "a", {"a":"z"}]]},
+
+{"description":"<a a='{'>",
+"input":"<a a='{'>",
+"output":[["StartTag", "a", {"a":"{"}]]},
+
+{"description":"<a a='\\uDBC0\\uDC00'>",
+"input":"<a a='\uDBC0\uDC00'>",
+"output":[["StartTag", "a", {"a":"\uDBC0\uDC00"}]]},
+
+{"description":"<a a=(>",
+"input":"<a a=(>",
+"output":[["StartTag", "a", {"a":"("}]]},
+
+{"description":"<a a=->",
+"input":"<a a=->",
+"output":[["StartTag", "a", {"a":"-"}]]},
+
+{"description":"<a a=/>",
+"input":"<a a=/>",
+"output":[["StartTag", "a", {"a":"/"}]]},
+
+{"description":"<a a=0>",
+"input":"<a a=0>",
+"output":[["StartTag", "a", {"a":"0"}]]},
+
+{"description":"<a a=1>",
+"input":"<a a=1>",
+"output":[["StartTag", "a", {"a":"1"}]]},
+
+{"description":"<a a=9>",
+"input":"<a a=9>",
+"output":[["StartTag", "a", {"a":"9"}]]},
+
+{"description":"<a a=<>",
+"input":"<a a=<>",
+"output":[["StartTag", "a", {"a":"<"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a==>",
+"input":"<a a==>",
+"output":[["StartTag", "a", {"a":"="}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=>",
+"input":"<a a=>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "missing-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=?>",
+"input":"<a a=?>",
+"output":[["StartTag", "a", {"a":"?"}]]},
+
+{"description":"<a a=@>",
+"input":"<a a=@>",
+"output":[["StartTag", "a", {"a":"@"}]]},
+
+{"description":"<a a=A>",
+"input":"<a a=A>",
+"output":[["StartTag", "a", {"a":"A"}]]},
+
+{"description":"<a a=B>",
+"input":"<a a=B>",
+"output":[["StartTag", "a", {"a":"B"}]]},
+
+{"description":"<a a=Y>",
+"input":"<a a=Y>",
+"output":[["StartTag", "a", {"a":"Y"}]]},
+
+{"description":"<a a=Z>",
+"input":"<a a=Z>",
+"output":[["StartTag", "a", {"a":"Z"}]]},
+
+{"description":"<a a=`>",
+"input":"<a a=`>",
+"output":[["StartTag", "a", {"a":"`"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"<a a=a>",
+"input":"<a a=a>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a\\u0000>",
+"input":"<a a=a\u0000>",
+"output":[["StartTag", "a", {"a":"a\uFFFD"}]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a\\u0008>",
+"input":"<a a=a\u0008>",
+"output":[["StartTag", "a", {"a":"a\u0008"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a\\u0009>",
+"input":"<a a=a\u0009>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a\\u000A>",
+"input":"<a a=a\u000A>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a\\u000B>",
+"input":"<a a=a\u000B>",
+"output":[["StartTag", "a", {"a":"a\u000B"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a\\u000C>",
+"input":"<a a=a\u000C>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a\\u000D>",
+"input":"<a a=a\u000D>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a\\u001F>",
+"input":"<a a=a\u001F>",
+"output":[["StartTag", "a", {"a":"a\u001F"}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a >",
+"input":"<a a=a >",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a!>",
+"input":"<a a=a!>",
+"output":[["StartTag", "a", {"a":"a!"}]]},
+
+{"description":"<a a=a\">",
+"input":"<a a=a\">",
+"output":[["StartTag", "a", {"a":"a\""}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a#>",
+"input":"<a a=a#>",
+"output":[["StartTag", "a", {"a":"a#"}]]},
+
+{"description":"<a a=a%>",
+"input":"<a a=a%>",
+"output":[["StartTag", "a", {"a":"a%"}]]},
+
+{"description":"<a a=a&>",
+"input":"<a a=a&>",
+"output":[["StartTag", "a", {"a":"a&"}]]},
+
+{"description":"<a a=a'>",
+"input":"<a a=a'>",
+"output":[["StartTag", "a", {"a":"a'"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a(>",
+"input":"<a a=a(>",
+"output":[["StartTag", "a", {"a":"a("}]]},
+
+{"description":"<a a=a->",
+"input":"<a a=a->",
+"output":[["StartTag", "a", {"a":"a-"}]]},
+
+{"description":"<a a=a/>",
+"input":"<a a=a/>",
+"output":[["StartTag", "a", {"a":"a/"}]]},
+
+{"description":"<a a=a0>",
+"input":"<a a=a0>",
+"output":[["StartTag", "a", {"a":"a0"}]]},
+
+{"description":"<a a=a1>",
+"input":"<a a=a1>",
+"output":[["StartTag", "a", {"a":"a1"}]]},
+
+{"description":"<a a=a9>",
+"input":"<a a=a9>",
+"output":[["StartTag", "a", {"a":"a9"}]]},
+
+{"description":"<a a=a<>",
+"input":"<a a=a<>",
+"output":[["StartTag", "a", {"a":"a<"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a=>",
+"input":"<a a=a=>",
+"output":[["StartTag", "a", {"a":"a="}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=a>",
+"input":"<a a=a>",
+"output":[["StartTag", "a", {"a":"a"}]]},
+
+{"description":"<a a=a?>",
+"input":"<a a=a?>",
+"output":[["StartTag", "a", {"a":"a?"}]]},
+
+{"description":"<a a=a@>",
+"input":"<a a=a@>",
+"output":[["StartTag", "a", {"a":"a@"}]]},
+
+{"description":"<a a=aA>",
+"input":"<a a=aA>",
+"output":[["StartTag", "a", {"a":"aA"}]]},
+
+{"description":"<a a=aB>",
+"input":"<a a=aB>",
+"output":[["StartTag", "a", {"a":"aB"}]]},
+
+{"description":"<a a=aY>",
+"input":"<a a=aY>",
+"output":[["StartTag", "a", {"a":"aY"}]]},
+
+{"description":"<a a=aZ>",
+"input":"<a a=aZ>",
+"output":[["StartTag", "a", {"a":"aZ"}]]},
+
+{"description":"<a a=a`>",
+"input":"<a a=a`>",
+"output":[["StartTag", "a", {"a":"a`"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"<a a=aa>",
+"input":"<a a=aa>",
+"output":[["StartTag", "a", {"a":"aa"}]]},
+
+{"description":"<a a=ab>",
+"input":"<a a=ab>",
+"output":[["StartTag", "a", {"a":"ab"}]]},
+
+{"description":"<a a=ay>",
+"input":"<a a=ay>",
+"output":[["StartTag", "a", {"a":"ay"}]]},
+
+{"description":"<a a=az>",
+"input":"<a a=az>",
+"output":[["StartTag", "a", {"a":"az"}]]},
+
+{"description":"<a a=a{>",
+"input":"<a a=a{>",
+"output":[["StartTag", "a", {"a":"a{"}]]},
+
+{"description":"<a a=a\\uDBC0\\uDC00>",
+"input":"<a a=a\uDBC0\uDC00>",
+"output":[["StartTag", "a", {"a":"a\uDBC0\uDC00"}]]},
+
+{"description":"<a a=b>",
+"input":"<a a=b>",
+"output":[["StartTag", "a", {"a":"b"}]]},
+
+{"description":"<a a=y>",
+"input":"<a a=y>",
+"output":[["StartTag", "a", {"a":"y"}]]},
+
+{"description":"<a a=z>",
+"input":"<a a=z>",
+"output":[["StartTag", "a", {"a":"z"}]]},
+
+{"description":"<a a={>",
+"input":"<a a={>",
+"output":[["StartTag", "a", {"a":"{"}]]},
+
+{"description":"<a a=\\uDBC0\\uDC00>",
+"input":"<a a=\uDBC0\uDC00>",
+"output":[["StartTag", "a", {"a":"\uDBC0\uDC00"}]]},
+
+{"description":"<a a>",
+"input":"<a a>",
+"output":[["StartTag", "a", {"a":""}]]},
+
+{"description":"<a a?>",
+"input":"<a a?>",
+"output":[["StartTag", "a", {"a?":""}]]},
+
+{"description":"<a a@>",
+"input":"<a a@>",
+"output":[["StartTag", "a", {"a@":""}]]},
+
+{"description":"<a aA>",
+"input":"<a aA>",
+"output":[["StartTag", "a", {"aa":""}]]},
+
+{"description":"<a aB>",
+"input":"<a aB>",
+"output":[["StartTag", "a", {"ab":""}]]},
+
+{"description":"<a aY>",
+"input":"<a aY>",
+"output":[["StartTag", "a", {"ay":""}]]},
+
+{"description":"<a aZ>",
+"input":"<a aZ>",
+"output":[["StartTag", "a", {"az":""}]]},
+
+{"description":"<a a[>",
+"input":"<a a[>",
+"output":[["StartTag", "a", {"a[":""}]]},
+
+{"description":"<a a`>",
+"input":"<a a`>",
+"output":[["StartTag", "a", {"a`":""}]]},
+
+{"description":"<a aa>",
+"input":"<a aa>",
+"output":[["StartTag", "a", {"aa":""}]]},
+
+{"description":"<a ab>",
+"input":"<a ab>",
+"output":[["StartTag", "a", {"ab":""}]]},
+
+{"description":"<a ay>",
+"input":"<a ay>",
+"output":[["StartTag", "a", {"ay":""}]]},
+
+{"description":"<a az>",
+"input":"<a az>",
+"output":[["StartTag", "a", {"az":""}]]},
+
+{"description":"<a a{>",
+"input":"<a a{>",
+"output":[["StartTag", "a", {"a{":""}]]},
+
+{"description":"<a a\\uDBC0\\uDC00>",
+"input":"<a a\uDBC0\uDC00>",
+"output":[["StartTag", "a", {"a\uDBC0\uDC00":""}]]},
+
+{"description":"<a b>",
+"input":"<a b>",
+"output":[["StartTag", "a", {"b":""}]]},
+
+{"description":"<a y>",
+"input":"<a y>",
+"output":[["StartTag", "a", {"y":""}]]},
+
+{"description":"<a z>",
+"input":"<a z>",
+"output":[["StartTag", "a", {"z":""}]]},
+
+{"description":"<a {>",
+"input":"<a {>",
+"output":[["StartTag", "a", {"{":""}]]},
+
+{"description":"<a \\uDBC0\\uDC00>",
+"input":"<a \uDBC0\uDC00>",
+"output":[["StartTag", "a", {"\uDBC0\uDC00":""}]]},
+
+{"description":"<a!>",
+"input":"<a!>",
+"output":[["StartTag", "a!", {}]]},
+
+{"description":"<a\">",
+"input":"<a\">",
+"output":[["StartTag", "a\"", {}]]},
+
+{"description":"<a&>",
+"input":"<a&>",
+"output":[["StartTag", "a&", {}]]},
+
+{"description":"<a'>",
+"input":"<a'>",
+"output":[["StartTag", "a'", {}]]},
+
+{"description":"<a->",
+"input":"<a->",
+"output":[["StartTag", "a-", {}]]},
+
+{"description":"<a.>",
+"input":"<a.>",
+"output":[["StartTag", "a.", {}]]},
+
+{"description":"<a/>",
+"input":"<a/>",
+"output":[["StartTag", "a", {}, true]]},
+
+{"description":"<a/\\u0000>",
+"input":"<a/\u0000>",
+"output":[["StartTag", "a", {"\uFFFD":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-null-character", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\\u0009>",
+"input":"<a/\u0009>",
+"output":[["StartTag", "a", {}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\\u000A>",
+"input":"<a/\u000A>",
+"output":[["StartTag", "a", {}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\\u000B>",
+"input":"<a/\u000B>",
+"output":[["StartTag", "a", {"\u000B":""}]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 4 },
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\\u000C>",
+"input":"<a/\u000C>",
+"output":[["StartTag", "a", {}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/ >",
+"input":"<a/ >",
+"output":[["StartTag", "a", {}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/!>",
+"input":"<a/!>",
+"output":[["StartTag", "a", {"!":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\">",
+"input":"<a/\">",
+"output":[["StartTag", "a", {"\"":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/&>",
+"input":"<a/&>",
+"output":[["StartTag", "a", {"&":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/'>",
+"input":"<a/'>",
+"output":[["StartTag", "a", {"'":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/->",
+"input":"<a/->",
+"output":[["StartTag", "a", {"-":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a//>",
+"input":"<a//>",
+"output":[["StartTag", "a", {}, true]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/0>",
+"input":"<a/0>",
+"output":[["StartTag", "a", {"0":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/1>",
+"input":"<a/1>",
+"output":[["StartTag", "a", {"1":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/9>",
+"input":"<a/9>",
+"output":[["StartTag", "a", {"9":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/<>",
+"input":"<a/<>",
+"output":[["StartTag", "a", {"<":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/=>",
+"input":"<a/=>",
+"output":[["StartTag", "a", {"=":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/>",
+"input":"<a/>",
+"output":[["StartTag", "a", {}, true]]},
+
+{"description":"<a/?>",
+"input":"<a/?>",
+"output":[["StartTag", "a", {"?":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/@>",
+"input":"<a/@>",
+"output":[["StartTag", "a", {"@":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/A>",
+"input":"<a/A>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/B>",
+"input":"<a/B>",
+"output":[["StartTag", "a", {"b":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/Y>",
+"input":"<a/Y>",
+"output":[["StartTag", "a", {"y":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/Z>",
+"input":"<a/Z>",
+"output":[["StartTag", "a", {"z":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/`>",
+"input":"<a/`>",
+"output":[["StartTag", "a", {"`":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/a>",
+"input":"<a/a>",
+"output":[["StartTag", "a", {"a":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/b>",
+"input":"<a/b>",
+"output":[["StartTag", "a", {"b":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/y>",
+"input":"<a/y>",
+"output":[["StartTag", "a", {"y":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/z>",
+"input":"<a/z>",
+"output":[["StartTag", "a", {"z":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/{>",
+"input":"<a/{>",
+"output":[["StartTag", "a", {"{":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a/\\uDBC0\\uDC00>",
+"input":"<a/\uDBC0\uDC00>",
+"output":[["StartTag", "a", {"\uDBC0\uDC00":""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"<a0>",
+"input":"<a0>",
+"output":[["StartTag", "a0", {}]]},
+
+{"description":"<a1>",
+"input":"<a1>",
+"output":[["StartTag", "a1", {}]]},
+
+{"description":"<a9>",
+"input":"<a9>",
+"output":[["StartTag", "a9", {}]]},
+
+{"description":"<a<>",
+"input":"<a<>",
+"output":[["StartTag", "a<", {}]]},
+
+{"description":"<a=>",
+"input":"<a=>",
+"output":[["StartTag", "a=", {}]]},
+
+{"description":"<a>",
+"input":"<a>",
+"output":[["StartTag", "a", {}]]},
+
+{"description":"<a?>",
+"input":"<a?>",
+"output":[["StartTag", "a?", {}]]},
+
+{"description":"<a@>",
+"input":"<a@>",
+"output":[["StartTag", "a@", {}]]},
+
+{"description":"<aA>",
+"input":"<aA>",
+"output":[["StartTag", "aa", {}]]},
+
+{"description":"<aB>",
+"input":"<aB>",
+"output":[["StartTag", "ab", {}]]},
+
+{"description":"<aY>",
+"input":"<aY>",
+"output":[["StartTag", "ay", {}]]},
+
+{"description":"<aZ>",
+"input":"<aZ>",
+"output":[["StartTag", "az", {}]]},
+
+{"description":"<a[>",
+"input":"<a[>",
+"output":[["StartTag", "a[", {}]]},
+
+{"description":"<a`>",
+"input":"<a`>",
+"output":[["StartTag", "a`", {}]]},
+
+{"description":"<aa>",
+"input":"<aa>",
+"output":[["StartTag", "aa", {}]]},
+
+{"description":"<ab>",
+"input":"<ab>",
+"output":[["StartTag", "ab", {}]]},
+
+{"description":"<ay>",
+"input":"<ay>",
+"output":[["StartTag", "ay", {}]]},
+
+{"description":"<az>",
+"input":"<az>",
+"output":[["StartTag", "az", {}]]},
+
+{"description":"<a{>",
+"input":"<a{>",
+"output":[["StartTag", "a{", {}]]},
+
+{"description":"<a\\uDBC0\\uDC00>",
+"input":"<a\uDBC0\uDC00>",
+"output":[["StartTag", "a\uDBC0\uDC00", {}]]},
+
+{"description":"<b>",
+"input":"<b>",
+"output":[["StartTag", "b", {}]]},
+
+{"description":"<y>",
+"input":"<y>",
+"output":[["StartTag", "y", {}]]},
+
+{"description":"<z>",
+"input":"<z>",
+"output":[["StartTag", "z", {}]]},
+
+{"description":"<{",
+"input":"<{",
+"output":[["Character", "<{"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"<\\uDBC0\\uDC00",
+"input":"<\uDBC0\uDC00",
+"output":[["Character", "<\uDBC0\uDC00"]],
+"errors":[
+ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 }
+]},
+
+{"description":"=",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"=",
+"output":[["Character", "="]]},
+
+{"description":"=",
+"initialStates":["CDATA section state"],
+"input":"=",
+"output":[["Character", "="]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":">",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":">",
+"output":[["Character", ">"]]},
+
+{"description":">",
+"initialStates":["CDATA section state"],
+"input":">",
+"output":[["Character", ">"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"?",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"?",
+"output":[["Character", "?"]]},
+
+{"description":"?",
+"initialStates":["CDATA section state"],
+"input":"?",
+"output":[["Character", "?"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"@",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"@",
+"output":[["Character", "@"]]},
+
+{"description":"@",
+"initialStates":["CDATA section state"],
+"input":"@",
+"output":[["Character", "@"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"A",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"A",
+"output":[["Character", "A"]]},
+
+{"description":"A",
+"initialStates":["CDATA section state"],
+"input":"A",
+"output":[["Character", "A"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"B",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"B",
+"output":[["Character", "B"]]},
+
+{"description":"B",
+"initialStates":["CDATA section state"],
+"input":"B",
+"output":[["Character", "B"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"Y",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"Y",
+"output":[["Character", "Y"]]},
+
+{"description":"Y",
+"initialStates":["CDATA section state"],
+"input":"Y",
+"output":[["Character", "Y"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"Z",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"Z",
+"output":[["Character", "Z"]]},
+
+{"description":"Z",
+"initialStates":["CDATA section state"],
+"input":"Z",
+"output":[["Character", "Z"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"`",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"`",
+"output":[["Character", "`"]]},
+
+{"description":"`",
+"initialStates":["CDATA section state"],
+"input":"`",
+"output":[["Character", "`"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"a",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"a",
+"output":[["Character", "a"]]},
+
+{"description":"a",
+"initialStates":["CDATA section state"],
+"input":"a",
+"output":[["Character", "a"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"b",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"b",
+"output":[["Character", "b"]]},
+
+{"description":"b",
+"initialStates":["CDATA section state"],
+"input":"b",
+"output":[["Character", "b"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"y",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"y",
+"output":[["Character", "y"]]},
+
+{"description":"y",
+"initialStates":["CDATA section state"],
+"input":"y",
+"output":[["Character", "y"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"z",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"z",
+"output":[["Character", "z"]]},
+
+{"description":"z",
+"initialStates":["CDATA section state"],
+"input":"z",
+"output":[["Character", "z"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"{",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"{",
+"output":[["Character", "{"]]},
+
+{"description":"{",
+"initialStates":["CDATA section state"],
+"input":"{",
+"output":[["Character", "{"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]},
+
+{"description":"\\uDBC0\\uDC00",
+"initialStates":["Data state", "PLAINTEXT state", "RCDATA state", "RAWTEXT state", "Script data state"],
+"input":"\uDBC0\uDC00",
+"output":[["Character", "\uDBC0\uDC00"]]},
+
+{"description":"\\uDBC0\\uDC00",
+"initialStates":["CDATA section state"],
+"input":"\uDBC0\uDC00",
+"output":[["Character", "\uDBC0\uDC00"]],
+"errors":[
+ { "code": "eof-in-cdata", "line": 1, "col": 2 }
+]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/test4.test b/tests/html5lib-tests/tokenizer/test4.test
new file mode 100644
index 0000000..8963c74
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/test4.test
@@ -0,0 +1,532 @@
+{"tests": [
+
+{"description":"< in attribute name",
+"input":"<z/0 <>",
+"output":[["StartTag", "z", {"0": "", "<": ""}]],
+"errors":[
+ { "code": "unexpected-solidus-in-tag", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 7 }
+]},
+
+{"description":"< in unquoted attribute value",
+"input":"<z x=<>",
+"output":[["StartTag", "z", {"x": "<"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"= in unquoted attribute value",
+"input":"<z z=z=z>",
+"output":[["StartTag", "z", {"z": "z=z"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"= attribute",
+"input":"<z =>",
+"output":[["StartTag", "z", {"=": ""}]],
+"errors":[
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 }
+]},
+
+{"description":"== attribute",
+"input":"<z ==>",
+"output":[["StartTag", "z", {"=": ""}]],
+"errors":[
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 },
+ { "code": "missing-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"=== attribute",
+"input":"<z ===>",
+"output":[["StartTag", "z", {"=": "="}]],
+"errors":[
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 }
+]},
+
+{"description":"==== attribute",
+"input":"<z ====>",
+"output":[["StartTag", "z", {"=": "=="}]],
+"errors":[
+ { "code": "unexpected-equals-sign-before-attribute-name", "line": 1, "col": 4 },
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 6 },
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 }
+]},
+
+{"description":"\" after ampersand in double-quoted attribute value",
+"input":"<z z=\"&\">",
+"output":[["StartTag", "z", {"z": "&"}]]},
+
+{"description":"' after ampersand in double-quoted attribute value",
+"input":"<z z=\"&'\">",
+"output":[["StartTag", "z", {"z": "&'"}]]},
+
+{"description":"' after ampersand in single-quoted attribute value",
+"input":"<z z='&'>",
+"output":[["StartTag", "z", {"z": "&"}]]},
+
+{"description":"\" after ampersand in single-quoted attribute value",
+"input":"<z z='&\"'>",
+"output":[["StartTag", "z", {"z": "&\""}]]},
+
+{"description":"Text after bogus character reference",
+"input":"<z z='&xlink_xmlns;'>bar<z>",
+"output":[["StartTag","z",{"z":"&xlink_xmlns;"}],["Character","bar"],["StartTag","z",{}]]},
+
+{"description":"Text after hex character reference",
+"input":"<z z='&#x0020; foo'>bar<z>",
+"output":[["StartTag","z",{"z":" foo"}],["Character","bar"],["StartTag","z",{}]]},
+
+{"description":"Attribute name starting with \"",
+"input":"<foo \"='bar'>",
+"output":[["StartTag", "foo", {"\"": "bar"}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"Attribute name starting with '",
+"input":"<foo '='bar'>",
+"output":[["StartTag", "foo", {"'": "bar"}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 6 }
+]},
+
+{"description":"Attribute name containing \"",
+"input":"<foo a\"b='bar'>",
+"output":[["StartTag", "foo", {"a\"b": "bar"}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 7 }
+]},
+
+{"description":"Attribute name containing '",
+"input":"<foo a'b='bar'>",
+"output":[["StartTag", "foo", {"a'b": "bar"}]],
+"errors":[
+ { "code": "unexpected-character-in-attribute-name", "line": 1, "col": 7 }
+]},
+
+{"description":"Unquoted attribute value containing '",
+"input":"<foo a=b'c>",
+"output":[["StartTag", "foo", {"a": "b'c"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 9 }
+]},
+
+
+{"description":"Unquoted attribute value containing \"",
+"input":"<foo a=b\"c>",
+"output":[["StartTag", "foo", {"a": "b\"c"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 9 }
+]},
+
+{"description":"Double-quoted attribute value not followed by whitespace",
+"input":"<foo a=\"b\"c>",
+"output":[["StartTag", "foo", {"a": "b", "c": ""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 11 }
+]},
+
+{"description":"Single-quoted attribute value not followed by whitespace",
+"input":"<foo a='b'c>",
+"output":[["StartTag", "foo", {"a": "b", "c": ""}]],
+"errors":[
+ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 11 }
+]},
+
+{"description":"Quoted attribute followed by permitted /",
+"input":"<br a='b'/>",
+"output":[["StartTag","br",{"a":"b"},true]]},
+
+{"description":"Quoted attribute followed by non-permitted /",
+"input":"<bar a='b'/>",
+"output":[["StartTag","bar",{"a":"b"},true]]},
+
+{"description":"CR EOF after doctype name",
+"input":"<!doctype html \r",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "eof-in-doctype", "line": 2, "col": 1 }
+]},
+
+{"description":"CR EOF in tag name",
+"input":"<z\r",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 2, "col": 1 }
+]},
+
+{"description":"Slash EOF in tag name",
+"input":"<z/",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"Zero hex numeric entity",
+"input":"&#x0",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 5 },
+ { "code": "null-character-reference", "line": 1, "col": 5 }
+]},
+
+{"description":"Zero decimal numeric entity",
+"input":"&#0",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "missing-semicolon-after-character-reference", "line": 1, "col": 4 },
+ { "code": "null-character-reference", "line": 1, "col": 4 }
+]},
+
+{"description":"Zero-prefixed hex numeric entity",
+"input":"&#x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041;",
+"output":[["Character", "A"]]},
+
+{"description":"Zero-prefixed decimal numeric entity",
+"input":"&#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065;",
+"output":[["Character", "A"]]},
+
+{"description":"Empty hex numeric entities",
+"input":"&#x &#X ",
+"output":[["Character", "&#x &#X "]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 4 },
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 8 }
+]},
+
+{"description":"Invalid digit in hex numeric entity",
+"input":"&#xZ",
+"output":[["Character", "&#xZ"]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 4 }
+]},
+
+{"description":"Empty decimal numeric entities",
+"input":"&# &#; ",
+"output":[["Character", "&# &#; "]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 3 },
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 6 }
+]},
+
+{"description":"Invalid digit in decimal numeric entity",
+"input":"&#A",
+"output":[["Character", "&#A"]],
+"errors":[
+ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 3 }
+]},
+
+{"description":"Non-BMP numeric entity",
+"input":"&#x10000;",
+"output":[["Character", "\uD800\uDC00"]]},
+
+{"description":"Maximum non-BMP numeric entity",
+"input":"&#X10FFFF;",
+"output":[["Character", "\uDBFF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-character-reference", "line": 1, "col": 11 }
+]},
+
+
+{"description":"Above maximum numeric entity",
+"input":"&#x110000;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 11 }
+]},
+
+{"description":"32-bit hex numeric entity",
+"input":"&#x80000041;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 13 }
+]},
+
+{"description":"33-bit hex numeric entity",
+"input":"&#x100000041;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 14 }
+]},
+
+{"description":"33-bit decimal numeric entity",
+"input":"&#4294967361;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 14 }
+]},
+
+{"description":"65-bit hex numeric entity",
+"input":"&#x10000000000000041;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 22 }
+]},
+
+{"description":"65-bit decimal numeric entity",
+"input":"&#18446744073709551681;",
+"output":[["Character", "\uFFFD"]],
+"errors":[
+ { "code": "character-reference-outside-unicode-range", "line": 1, "col": 24 }
+]},
+
+{"description":"Surrogate code point edge cases",
+"input":"&#xD7FF;&#xD800;&#xD801;&#xDFFE;&#xDFFF;&#xE000;",
+"output":[["Character", "\uD7FF\uFFFD\uFFFD\uFFFD\uFFFD\uE000"]],
+"errors":[
+ { "code": "surrogate-character-reference", "line": 1, "col": 17 },
+ { "code": "surrogate-character-reference", "line": 1, "col": 25 },
+ { "code": "surrogate-character-reference", "line": 1, "col": 33 },
+ { "code": "surrogate-character-reference", "line": 1, "col": 41 }
+]},
+
+{"description":"Uppercase start tag name",
+"input":"<X>",
+"output":[["StartTag", "x", {}]]},
+
+{"description":"Uppercase end tag name",
+"input":"</X>",
+"output":[["EndTag", "x"]]},
+
+{"description":"Uppercase attribute name",
+"input":"<x X>",
+"output":[["StartTag", "x", { "x":"" }]]},
+
+{"description":"Tag/attribute name case edge values",
+"input":"<x@AZ[`az{ @AZ[`az{>",
+"output":[["StartTag", "x@az[`az{", { "@az[`az{":"" }]]},
+
+{"description":"Duplicate different-case attributes",
+"input":"<x x=1 x=2 X=3>",
+"output":[["StartTag", "x", { "x":"1" }]],
+"errors":[
+ { "code": "duplicate-attribute", "line": 1, "col": 9 },
+ { "code": "duplicate-attribute", "line": 1, "col": 13 }
+]},
+
+{"description":"Uppercase close tag attributes",
+"input":"</x X>",
+"output":[["EndTag", "x"]],
+"errors":[
+ { "code": "end-tag-with-attributes", "line": 1, "col": 6 }
+]},
+
+{"description":"Duplicate close tag attributes",
+"input":"</x x x>",
+"output":[["EndTag", "x"]],
+"errors":[
+ { "code": "duplicate-attribute", "line": 1, "col": 8 },
+ { "code": "end-tag-with-attributes", "line": 1, "col": 8 }
+]},
+
+{"description":"Permitted slash",
+"input":"<br/>",
+"output":[["StartTag","br",{},true]]},
+
+{"description":"Non-permitted slash",
+"input":"<xr/>",
+"output":[["StartTag","xr",{},true]]},
+
+{"description":"Permitted slash but in close tag",
+"input":"</br/>",
+"output":[["EndTag", "br"]],
+"errors":[
+ { "code": "end-tag-with-trailing-solidus", "line": 1, "col": 6 }
+]},
+
+{"description":"Doctype public case-sensitivity (1)",
+"input":"<!DoCtYpE HtMl PuBlIc \"AbC\" \"XyZ\">",
+"output":[["DOCTYPE", "html", "AbC", "XyZ", true]]},
+
+{"description":"Doctype public case-sensitivity (2)",
+"input":"<!dOcTyPe hTmL pUbLiC \"aBc\" \"xYz\">",
+"output":[["DOCTYPE", "html", "aBc", "xYz", true]]},
+
+{"description":"Doctype system case-sensitivity (1)",
+"input":"<!DoCtYpE HtMl SyStEm \"XyZ\">",
+"output":[["DOCTYPE", "html", null, "XyZ", true]]},
+
+{"description":"Doctype system case-sensitivity (2)",
+"input":"<!dOcTyPe hTmL sYsTeM \"xYz\">",
+"output":[["DOCTYPE", "html", null, "xYz", true]]},
+
+{"description":"U+0000 in lookahead region after non-matching character",
+"input":"<!doc>\u0000",
+"output":[["Comment", "doc"], ["Character", "\u0000"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 7 }
+]},
+
+{"description":"U+0000 in lookahead region",
+"input":"<!doc\u0000",
+"output":[["Comment", "doc\uFFFD"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "unexpected-null-character", "line": 1, "col": 6 }
+]},
+
+{"description":"U+0080 in lookahead region",
+"input":"<!doc\u0080",
+"output":[["Comment", "doc\u0080"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "control-character-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"U+FDD1 in lookahead region",
+"input":"<!doc\uFDD1",
+"output":[["Comment", "doc\uFDD1"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"U+1FFFF in lookahead region",
+"input":"<!doc\uD83F\uDFFF",
+"output":[["Comment", "doc\uD83F\uDFFF"]],
+"errors":[
+ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 },
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 6 }
+]},
+
+{"description":"CR followed by non-LF",
+"input":"\r?",
+"output":[["Character", "\n?"]]},
+
+{"description":"CR at EOF",
+"input":"\r",
+"output":[["Character", "\n"]]},
+
+{"description":"LF at EOF",
+"input":"\n",
+"output":[["Character", "\n"]]},
+
+{"description":"CR LF",
+"input":"\r\n",
+"output":[["Character", "\n"]]},
+
+{"description":"CR CR",
+"input":"\r\r",
+"output":[["Character", "\n\n"]]},
+
+{"description":"LF LF",
+"input":"\n\n",
+"output":[["Character", "\n\n"]]},
+
+{"description":"LF CR",
+"input":"\n\r",
+"output":[["Character", "\n\n"]]},
+
+{"description":"text CR CR CR text",
+"input":"text\r\r\rtext",
+"output":[["Character", "text\n\n\ntext"]]},
+
+{"description":"Doctype publik",
+"input":"<!DOCTYPE html PUBLIK \"AbC\" \"XyZ\">",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 16 }
+]},
+
+{"description":"Doctype publi",
+"input":"<!DOCTYPE html PUBLI",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 16 }
+]},
+
+{"description":"Doctype sistem",
+"input":"<!DOCTYPE html SISTEM \"AbC\">",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 16 }
+]},
+
+{"description":"Doctype sys",
+"input":"<!DOCTYPE html SYS",
+"output":[["DOCTYPE", "html", null, null, false]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 16 }
+]},
+
+{"description":"Doctype html x>text",
+"input":"<!DOCTYPE html x>text",
+"output":[["DOCTYPE", "html", null, null, false], ["Character", "text"]],
+"errors":[
+ { "code": "invalid-character-sequence-after-doctype-name", "line": 1, "col": 16 }
+]},
+
+{"description":"Grave accent in unquoted attribute",
+"input":"<a a=aa`>",
+"output":[["StartTag", "a", {"a":"aa`"}]],
+"errors":[
+ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 8 }
+]},
+
+{"description":"EOF in tag name state ",
+"input":"<a",
+"output":[],
+"errors": [
+ { "code": "eof-in-tag", "line": 1, "col": 3 }
+]},
+
+{"description":"EOF in before attribute name state",
+"input":"<a ",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 4 }
+]},
+
+{"description":"EOF in attribute name state",
+"input":"<a a",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 5 }
+]},
+
+{"description":"EOF in after attribute name state",
+"input":"<a a ",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 6 }
+]},
+
+{"description":"EOF in before attribute value state",
+"input":"<a a =",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 7 }
+]},
+
+{"description":"EOF in attribute value (double quoted) state",
+"input":"<a a =\"a",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 9 }
+]},
+
+{"description":"EOF in attribute value (single quoted) state",
+"input":"<a a ='a",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 9 }
+]},
+
+{"description":"EOF in attribute value (unquoted) state",
+"input":"<a a =a",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 8 }
+]},
+
+{"description":"EOF in after attribute value state",
+"input":"<a a ='a'",
+"output":[],
+"errors":[
+ { "code": "eof-in-tag", "line": 1, "col": 10 }
+]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/unicodeChars.test b/tests/html5lib-tests/tokenizer/unicodeChars.test
new file mode 100644
index 0000000..49a8098
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/unicodeChars.test
@@ -0,0 +1,1577 @@
+{"tests": [
+
+{"description": "Invalid Unicode character U+0001",
+"input": "\u0001",
+"output": [["Character", "\u0001"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0002",
+"input": "\u0002",
+"output": [["Character", "\u0002"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0003",
+"input": "\u0003",
+"output": [["Character", "\u0003"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0004",
+"input": "\u0004",
+"output": [["Character", "\u0004"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0005",
+"input": "\u0005",
+"output": [["Character", "\u0005"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0006",
+"input": "\u0006",
+"output": [["Character", "\u0006"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0007",
+"input": "\u0007",
+"output": [["Character", "\u0007"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0008",
+"input": "\u0008",
+"output": [["Character", "\u0008"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+000B",
+"input": "\u000B",
+"output": [["Character", "\u000B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+000E",
+"input": "\u000E",
+"output": [["Character", "\u000E"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+000F",
+"input": "\u000F",
+"output": [["Character", "\u000F"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0010",
+"input": "\u0010",
+"output": [["Character", "\u0010"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0011",
+"input": "\u0011",
+"output": [["Character", "\u0011"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0012",
+"input": "\u0012",
+"output": [["Character", "\u0012"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0013",
+"input": "\u0013",
+"output": [["Character", "\u0013"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0014",
+"input": "\u0014",
+"output": [["Character", "\u0014"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0015",
+"input": "\u0015",
+"output": [["Character", "\u0015"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0016",
+"input": "\u0016",
+"output": [["Character", "\u0016"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0017",
+"input": "\u0017",
+"output": [["Character", "\u0017"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0018",
+"input": "\u0018",
+"output": [["Character", "\u0018"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+0019",
+"input": "\u0019",
+"output": [["Character", "\u0019"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001A",
+"input": "\u001A",
+"output": [["Character", "\u001A"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001B",
+"input": "\u001B",
+"output": [["Character", "\u001B"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001C",
+"input": "\u001C",
+"output": [["Character", "\u001C"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001D",
+"input": "\u001D",
+"output": [["Character", "\u001D"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001E",
+"input": "\u001E",
+"output": [["Character", "\u001E"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+001F",
+"input": "\u001F",
+"output": [["Character", "\u001F"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+007F",
+"input": "\u007F",
+"output": [["Character", "\u007F"]],
+"errors":[
+ { "code": "control-character-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD0",
+"input": "\uFDD0",
+"output": [["Character", "\uFDD0"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD1",
+"input": "\uFDD1",
+"output": [["Character", "\uFDD1"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD2",
+"input": "\uFDD2",
+"output": [["Character", "\uFDD2"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD3",
+"input": "\uFDD3",
+"output": [["Character", "\uFDD3"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD4",
+"input": "\uFDD4",
+"output": [["Character", "\uFDD4"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD5",
+"input": "\uFDD5",
+"output": [["Character", "\uFDD5"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD6",
+"input": "\uFDD6",
+"output": [["Character", "\uFDD6"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD7",
+"input": "\uFDD7",
+"output": [["Character", "\uFDD7"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD8",
+"input": "\uFDD8",
+"output": [["Character", "\uFDD8"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDD9",
+"input": "\uFDD9",
+"output": [["Character", "\uFDD9"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDA",
+"input": "\uFDDA",
+"output": [["Character", "\uFDDA"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDB",
+"input": "\uFDDB",
+"output": [["Character", "\uFDDB"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDC",
+"input": "\uFDDC",
+"output": [["Character", "\uFDDC"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDD",
+"input": "\uFDDD",
+"output": [["Character", "\uFDDD"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDE",
+"input": "\uFDDE",
+"output": [["Character", "\uFDDE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDDF",
+"input": "\uFDDF",
+"output": [["Character", "\uFDDF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE0",
+"input": "\uFDE0",
+"output": [["Character", "\uFDE0"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE1",
+"input": "\uFDE1",
+"output": [["Character", "\uFDE1"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE2",
+"input": "\uFDE2",
+"output": [["Character", "\uFDE2"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE3",
+"input": "\uFDE3",
+"output": [["Character", "\uFDE3"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE4",
+"input": "\uFDE4",
+"output": [["Character", "\uFDE4"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE5",
+"input": "\uFDE5",
+"output": [["Character", "\uFDE5"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE6",
+"input": "\uFDE6",
+"output": [["Character", "\uFDE6"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE7",
+"input": "\uFDE7",
+"output": [["Character", "\uFDE7"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE8",
+"input": "\uFDE8",
+"output": [["Character", "\uFDE8"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDE9",
+"input": "\uFDE9",
+"output": [["Character", "\uFDE9"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDEA",
+"input": "\uFDEA",
+"output": [["Character", "\uFDEA"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDEB",
+"input": "\uFDEB",
+"output": [["Character", "\uFDEB"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDEC",
+"input": "\uFDEC",
+"output": [["Character", "\uFDEC"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDED",
+"input": "\uFDED",
+"output": [["Character", "\uFDED"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDEE",
+"input": "\uFDEE",
+"output": [["Character", "\uFDEE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FDEF",
+"input": "\uFDEF",
+"output": [["Character", "\uFDEF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FFFE",
+"input": "\uFFFE",
+"output": [["Character", "\uFFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FFFF",
+"input": "\uFFFF",
+"output": [["Character", "\uFFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+1FFFE",
+"input": "\uD83F\uDFFE",
+"output": [["Character", "\uD83F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+1FFFF",
+"input": "\uD83F\uDFFF",
+"output": [["Character", "\uD83F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+2FFFE",
+"input": "\uD87F\uDFFE",
+"output": [["Character", "\uD87F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+2FFFF",
+"input": "\uD87F\uDFFF",
+"output": [["Character", "\uD87F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+3FFFE",
+"input": "\uD8BF\uDFFE",
+"output": [["Character", "\uD8BF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+3FFFF",
+"input": "\uD8BF\uDFFF",
+"output": [["Character", "\uD8BF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+4FFFE",
+"input": "\uD8FF\uDFFE",
+"output": [["Character", "\uD8FF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+4FFFF",
+"input": "\uD8FF\uDFFF",
+"output": [["Character", "\uD8FF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+5FFFE",
+"input": "\uD93F\uDFFE",
+"output": [["Character", "\uD93F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+5FFFF",
+"input": "\uD93F\uDFFF",
+"output": [["Character", "\uD93F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+6FFFE",
+"input": "\uD97F\uDFFE",
+"output": [["Character", "\uD97F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+6FFFF",
+"input": "\uD97F\uDFFF",
+"output": [["Character", "\uD97F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+7FFFE",
+"input": "\uD9BF\uDFFE",
+"output": [["Character", "\uD9BF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+7FFFF",
+"input": "\uD9BF\uDFFF",
+"output": [["Character", "\uD9BF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+8FFFE",
+"input": "\uD9FF\uDFFE",
+"output": [["Character", "\uD9FF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+8FFFF",
+"input": "\uD9FF\uDFFF",
+"output": [["Character", "\uD9FF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+9FFFE",
+"input": "\uDA3F\uDFFE",
+"output": [["Character", "\uDA3F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+9FFFF",
+"input": "\uDA3F\uDFFF",
+"output": [["Character", "\uDA3F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+AFFFE",
+"input": "\uDA7F\uDFFE",
+"output": [["Character", "\uDA7F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+AFFFF",
+"input": "\uDA7F\uDFFF",
+"output": [["Character", "\uDA7F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+BFFFE",
+"input": "\uDABF\uDFFE",
+"output": [["Character", "\uDABF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+BFFFF",
+"input": "\uDABF\uDFFF",
+"output": [["Character", "\uDABF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+CFFFE",
+"input": "\uDAFF\uDFFE",
+"output": [["Character", "\uDAFF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+CFFFF",
+"input": "\uDAFF\uDFFF",
+"output": [["Character", "\uDAFF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+DFFFE",
+"input": "\uDB3F\uDFFE",
+"output": [["Character", "\uDB3F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+DFFFF",
+"input": "\uDB3F\uDFFF",
+"output": [["Character", "\uDB3F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+EFFFE",
+"input": "\uDB7F\uDFFE",
+"output": [["Character", "\uDB7F\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+EFFFF",
+"input": "\uDB7F\uDFFF",
+"output": [["Character", "\uDB7F\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FFFFE",
+"input": "\uDBBF\uDFFE",
+"output": [["Character", "\uDBBF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+FFFFF",
+"input": "\uDBBF\uDFFF",
+"output": [["Character", "\uDBBF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+10FFFE",
+"input": "\uDBFF\uDFFE",
+"output": [["Character", "\uDBFF\uDFFE"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+10FFFF",
+"input": "\uDBFF\uDFFF",
+"output": [["Character", "\uDBFF\uDFFF"]],
+"errors":[
+ { "code": "noncharacter-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Valid Unicode character U+0009",
+"input": "\u0009",
+"output": [["Character", "\u0009"]]},
+
+{"description": "Valid Unicode character U+000A",
+"input": "\u000A",
+"output": [["Character", "\u000A"]]},
+
+{"description": "Valid Unicode character U+0020",
+"input": "\u0020",
+"output": [["Character", "\u0020"]]},
+
+{"description": "Valid Unicode character U+0021",
+"input": "\u0021",
+"output": [["Character", "\u0021"]]},
+
+{"description": "Valid Unicode character U+0022",
+"input": "\u0022",
+"output": [["Character", "\u0022"]]},
+
+{"description": "Valid Unicode character U+0023",
+"input": "\u0023",
+"output": [["Character", "\u0023"]]},
+
+{"description": "Valid Unicode character U+0024",
+"input": "\u0024",
+"output": [["Character", "\u0024"]]},
+
+{"description": "Valid Unicode character U+0025",
+"input": "\u0025",
+"output": [["Character", "\u0025"]]},
+
+{"description": "Valid Unicode character U+0026",
+"input": "\u0026",
+"output": [["Character", "\u0026"]]},
+
+{"description": "Valid Unicode character U+0027",
+"input": "\u0027",
+"output": [["Character", "\u0027"]]},
+
+{"description": "Valid Unicode character U+0028",
+"input": "\u0028",
+"output": [["Character", "\u0028"]]},
+
+{"description": "Valid Unicode character U+0029",
+"input": "\u0029",
+"output": [["Character", "\u0029"]]},
+
+{"description": "Valid Unicode character U+002A",
+"input": "\u002A",
+"output": [["Character", "\u002A"]]},
+
+{"description": "Valid Unicode character U+002B",
+"input": "\u002B",
+"output": [["Character", "\u002B"]]},
+
+{"description": "Valid Unicode character U+002C",
+"input": "\u002C",
+"output": [["Character", "\u002C"]]},
+
+{"description": "Valid Unicode character U+002D",
+"input": "\u002D",
+"output": [["Character", "\u002D"]]},
+
+{"description": "Valid Unicode character U+002E",
+"input": "\u002E",
+"output": [["Character", "\u002E"]]},
+
+{"description": "Valid Unicode character U+002F",
+"input": "\u002F",
+"output": [["Character", "\u002F"]]},
+
+{"description": "Valid Unicode character U+0030",
+"input": "\u0030",
+"output": [["Character", "\u0030"]]},
+
+{"description": "Valid Unicode character U+0031",
+"input": "\u0031",
+"output": [["Character", "\u0031"]]},
+
+{"description": "Valid Unicode character U+0032",
+"input": "\u0032",
+"output": [["Character", "\u0032"]]},
+
+{"description": "Valid Unicode character U+0033",
+"input": "\u0033",
+"output": [["Character", "\u0033"]]},
+
+{"description": "Valid Unicode character U+0034",
+"input": "\u0034",
+"output": [["Character", "\u0034"]]},
+
+{"description": "Valid Unicode character U+0035",
+"input": "\u0035",
+"output": [["Character", "\u0035"]]},
+
+{"description": "Valid Unicode character U+0036",
+"input": "\u0036",
+"output": [["Character", "\u0036"]]},
+
+{"description": "Valid Unicode character U+0037",
+"input": "\u0037",
+"output": [["Character", "\u0037"]]},
+
+{"description": "Valid Unicode character U+0038",
+"input": "\u0038",
+"output": [["Character", "\u0038"]]},
+
+{"description": "Valid Unicode character U+0039",
+"input": "\u0039",
+"output": [["Character", "\u0039"]]},
+
+{"description": "Valid Unicode character U+003A",
+"input": "\u003A",
+"output": [["Character", "\u003A"]]},
+
+{"description": "Valid Unicode character U+003B",
+"input": "\u003B",
+"output": [["Character", "\u003B"]]},
+
+{"description": "Valid Unicode character U+003D",
+"input": "\u003D",
+"output": [["Character", "\u003D"]]},
+
+{"description": "Valid Unicode character U+003E",
+"input": "\u003E",
+"output": [["Character", "\u003E"]]},
+
+{"description": "Valid Unicode character U+003F",
+"input": "\u003F",
+"output": [["Character", "\u003F"]]},
+
+{"description": "Valid Unicode character U+0040",
+"input": "\u0040",
+"output": [["Character", "\u0040"]]},
+
+{"description": "Valid Unicode character U+0041",
+"input": "\u0041",
+"output": [["Character", "\u0041"]]},
+
+{"description": "Valid Unicode character U+0042",
+"input": "\u0042",
+"output": [["Character", "\u0042"]]},
+
+{"description": "Valid Unicode character U+0043",
+"input": "\u0043",
+"output": [["Character", "\u0043"]]},
+
+{"description": "Valid Unicode character U+0044",
+"input": "\u0044",
+"output": [["Character", "\u0044"]]},
+
+{"description": "Valid Unicode character U+0045",
+"input": "\u0045",
+"output": [["Character", "\u0045"]]},
+
+{"description": "Valid Unicode character U+0046",
+"input": "\u0046",
+"output": [["Character", "\u0046"]]},
+
+{"description": "Valid Unicode character U+0047",
+"input": "\u0047",
+"output": [["Character", "\u0047"]]},
+
+{"description": "Valid Unicode character U+0048",
+"input": "\u0048",
+"output": [["Character", "\u0048"]]},
+
+{"description": "Valid Unicode character U+0049",
+"input": "\u0049",
+"output": [["Character", "\u0049"]]},
+
+{"description": "Valid Unicode character U+004A",
+"input": "\u004A",
+"output": [["Character", "\u004A"]]},
+
+{"description": "Valid Unicode character U+004B",
+"input": "\u004B",
+"output": [["Character", "\u004B"]]},
+
+{"description": "Valid Unicode character U+004C",
+"input": "\u004C",
+"output": [["Character", "\u004C"]]},
+
+{"description": "Valid Unicode character U+004D",
+"input": "\u004D",
+"output": [["Character", "\u004D"]]},
+
+{"description": "Valid Unicode character U+004E",
+"input": "\u004E",
+"output": [["Character", "\u004E"]]},
+
+{"description": "Valid Unicode character U+004F",
+"input": "\u004F",
+"output": [["Character", "\u004F"]]},
+
+{"description": "Valid Unicode character U+0050",
+"input": "\u0050",
+"output": [["Character", "\u0050"]]},
+
+{"description": "Valid Unicode character U+0051",
+"input": "\u0051",
+"output": [["Character", "\u0051"]]},
+
+{"description": "Valid Unicode character U+0052",
+"input": "\u0052",
+"output": [["Character", "\u0052"]]},
+
+{"description": "Valid Unicode character U+0053",
+"input": "\u0053",
+"output": [["Character", "\u0053"]]},
+
+{"description": "Valid Unicode character U+0054",
+"input": "\u0054",
+"output": [["Character", "\u0054"]]},
+
+{"description": "Valid Unicode character U+0055",
+"input": "\u0055",
+"output": [["Character", "\u0055"]]},
+
+{"description": "Valid Unicode character U+0056",
+"input": "\u0056",
+"output": [["Character", "\u0056"]]},
+
+{"description": "Valid Unicode character U+0057",
+"input": "\u0057",
+"output": [["Character", "\u0057"]]},
+
+{"description": "Valid Unicode character U+0058",
+"input": "\u0058",
+"output": [["Character", "\u0058"]]},
+
+{"description": "Valid Unicode character U+0059",
+"input": "\u0059",
+"output": [["Character", "\u0059"]]},
+
+{"description": "Valid Unicode character U+005A",
+"input": "\u005A",
+"output": [["Character", "\u005A"]]},
+
+{"description": "Valid Unicode character U+005B",
+"input": "\u005B",
+"output": [["Character", "\u005B"]]},
+
+{"description": "Valid Unicode character U+005C",
+"input": "\u005C",
+"output": [["Character", "\u005C"]]},
+
+{"description": "Valid Unicode character U+005D",
+"input": "\u005D",
+"output": [["Character", "\u005D"]]},
+
+{"description": "Valid Unicode character U+005E",
+"input": "\u005E",
+"output": [["Character", "\u005E"]]},
+
+{"description": "Valid Unicode character U+005F",
+"input": "\u005F",
+"output": [["Character", "\u005F"]]},
+
+{"description": "Valid Unicode character U+0060",
+"input": "\u0060",
+"output": [["Character", "\u0060"]]},
+
+{"description": "Valid Unicode character U+0061",
+"input": "\u0061",
+"output": [["Character", "\u0061"]]},
+
+{"description": "Valid Unicode character U+0062",
+"input": "\u0062",
+"output": [["Character", "\u0062"]]},
+
+{"description": "Valid Unicode character U+0063",
+"input": "\u0063",
+"output": [["Character", "\u0063"]]},
+
+{"description": "Valid Unicode character U+0064",
+"input": "\u0064",
+"output": [["Character", "\u0064"]]},
+
+{"description": "Valid Unicode character U+0065",
+"input": "\u0065",
+"output": [["Character", "\u0065"]]},
+
+{"description": "Valid Unicode character U+0066",
+"input": "\u0066",
+"output": [["Character", "\u0066"]]},
+
+{"description": "Valid Unicode character U+0067",
+"input": "\u0067",
+"output": [["Character", "\u0067"]]},
+
+{"description": "Valid Unicode character U+0068",
+"input": "\u0068",
+"output": [["Character", "\u0068"]]},
+
+{"description": "Valid Unicode character U+0069",
+"input": "\u0069",
+"output": [["Character", "\u0069"]]},
+
+{"description": "Valid Unicode character U+006A",
+"input": "\u006A",
+"output": [["Character", "\u006A"]]},
+
+{"description": "Valid Unicode character U+006B",
+"input": "\u006B",
+"output": [["Character", "\u006B"]]},
+
+{"description": "Valid Unicode character U+006C",
+"input": "\u006C",
+"output": [["Character", "\u006C"]]},
+
+{"description": "Valid Unicode character U+006D",
+"input": "\u006D",
+"output": [["Character", "\u006D"]]},
+
+{"description": "Valid Unicode character U+006E",
+"input": "\u006E",
+"output": [["Character", "\u006E"]]},
+
+{"description": "Valid Unicode character U+006F",
+"input": "\u006F",
+"output": [["Character", "\u006F"]]},
+
+{"description": "Valid Unicode character U+0070",
+"input": "\u0070",
+"output": [["Character", "\u0070"]]},
+
+{"description": "Valid Unicode character U+0071",
+"input": "\u0071",
+"output": [["Character", "\u0071"]]},
+
+{"description": "Valid Unicode character U+0072",
+"input": "\u0072",
+"output": [["Character", "\u0072"]]},
+
+{"description": "Valid Unicode character U+0073",
+"input": "\u0073",
+"output": [["Character", "\u0073"]]},
+
+{"description": "Valid Unicode character U+0074",
+"input": "\u0074",
+"output": [["Character", "\u0074"]]},
+
+{"description": "Valid Unicode character U+0075",
+"input": "\u0075",
+"output": [["Character", "\u0075"]]},
+
+{"description": "Valid Unicode character U+0076",
+"input": "\u0076",
+"output": [["Character", "\u0076"]]},
+
+{"description": "Valid Unicode character U+0077",
+"input": "\u0077",
+"output": [["Character", "\u0077"]]},
+
+{"description": "Valid Unicode character U+0078",
+"input": "\u0078",
+"output": [["Character", "\u0078"]]},
+
+{"description": "Valid Unicode character U+0079",
+"input": "\u0079",
+"output": [["Character", "\u0079"]]},
+
+{"description": "Valid Unicode character U+007A",
+"input": "\u007A",
+"output": [["Character", "\u007A"]]},
+
+{"description": "Valid Unicode character U+007B",
+"input": "\u007B",
+"output": [["Character", "\u007B"]]},
+
+{"description": "Valid Unicode character U+007C",
+"input": "\u007C",
+"output": [["Character", "\u007C"]]},
+
+{"description": "Valid Unicode character U+007D",
+"input": "\u007D",
+"output": [["Character", "\u007D"]]},
+
+{"description": "Valid Unicode character U+007E",
+"input": "\u007E",
+"output": [["Character", "\u007E"]]},
+
+{"description": "Valid Unicode character U+00A0",
+"input": "\u00A0",
+"output": [["Character", "\u00A0"]]},
+
+{"description": "Valid Unicode character U+00A1",
+"input": "\u00A1",
+"output": [["Character", "\u00A1"]]},
+
+{"description": "Valid Unicode character U+00A2",
+"input": "\u00A2",
+"output": [["Character", "\u00A2"]]},
+
+{"description": "Valid Unicode character U+00A3",
+"input": "\u00A3",
+"output": [["Character", "\u00A3"]]},
+
+{"description": "Valid Unicode character U+00A4",
+"input": "\u00A4",
+"output": [["Character", "\u00A4"]]},
+
+{"description": "Valid Unicode character U+00A5",
+"input": "\u00A5",
+"output": [["Character", "\u00A5"]]},
+
+{"description": "Valid Unicode character U+00A6",
+"input": "\u00A6",
+"output": [["Character", "\u00A6"]]},
+
+{"description": "Valid Unicode character U+00A7",
+"input": "\u00A7",
+"output": [["Character", "\u00A7"]]},
+
+{"description": "Valid Unicode character U+00A8",
+"input": "\u00A8",
+"output": [["Character", "\u00A8"]]},
+
+{"description": "Valid Unicode character U+00A9",
+"input": "\u00A9",
+"output": [["Character", "\u00A9"]]},
+
+{"description": "Valid Unicode character U+00AA",
+"input": "\u00AA",
+"output": [["Character", "\u00AA"]]},
+
+{"description": "Valid Unicode character U+00AB",
+"input": "\u00AB",
+"output": [["Character", "\u00AB"]]},
+
+{"description": "Valid Unicode character U+00AC",
+"input": "\u00AC",
+"output": [["Character", "\u00AC"]]},
+
+{"description": "Valid Unicode character U+00AD",
+"input": "\u00AD",
+"output": [["Character", "\u00AD"]]},
+
+{"description": "Valid Unicode character U+00AE",
+"input": "\u00AE",
+"output": [["Character", "\u00AE"]]},
+
+{"description": "Valid Unicode character U+00AF",
+"input": "\u00AF",
+"output": [["Character", "\u00AF"]]},
+
+{"description": "Valid Unicode character U+00B0",
+"input": "\u00B0",
+"output": [["Character", "\u00B0"]]},
+
+{"description": "Valid Unicode character U+00B1",
+"input": "\u00B1",
+"output": [["Character", "\u00B1"]]},
+
+{"description": "Valid Unicode character U+00B2",
+"input": "\u00B2",
+"output": [["Character", "\u00B2"]]},
+
+{"description": "Valid Unicode character U+00B3",
+"input": "\u00B3",
+"output": [["Character", "\u00B3"]]},
+
+{"description": "Valid Unicode character U+00B4",
+"input": "\u00B4",
+"output": [["Character", "\u00B4"]]},
+
+{"description": "Valid Unicode character U+00B5",
+"input": "\u00B5",
+"output": [["Character", "\u00B5"]]},
+
+{"description": "Valid Unicode character U+00B6",
+"input": "\u00B6",
+"output": [["Character", "\u00B6"]]},
+
+{"description": "Valid Unicode character U+00B7",
+"input": "\u00B7",
+"output": [["Character", "\u00B7"]]},
+
+{"description": "Valid Unicode character U+00B8",
+"input": "\u00B8",
+"output": [["Character", "\u00B8"]]},
+
+{"description": "Valid Unicode character U+00B9",
+"input": "\u00B9",
+"output": [["Character", "\u00B9"]]},
+
+{"description": "Valid Unicode character U+00BA",
+"input": "\u00BA",
+"output": [["Character", "\u00BA"]]},
+
+{"description": "Valid Unicode character U+00BB",
+"input": "\u00BB",
+"output": [["Character", "\u00BB"]]},
+
+{"description": "Valid Unicode character U+00BC",
+"input": "\u00BC",
+"output": [["Character", "\u00BC"]]},
+
+{"description": "Valid Unicode character U+00BD",
+"input": "\u00BD",
+"output": [["Character", "\u00BD"]]},
+
+{"description": "Valid Unicode character U+00BE",
+"input": "\u00BE",
+"output": [["Character", "\u00BE"]]},
+
+{"description": "Valid Unicode character U+00BF",
+"input": "\u00BF",
+"output": [["Character", "\u00BF"]]},
+
+{"description": "Valid Unicode character U+00C0",
+"input": "\u00C0",
+"output": [["Character", "\u00C0"]]},
+
+{"description": "Valid Unicode character U+00C1",
+"input": "\u00C1",
+"output": [["Character", "\u00C1"]]},
+
+{"description": "Valid Unicode character U+00C2",
+"input": "\u00C2",
+"output": [["Character", "\u00C2"]]},
+
+{"description": "Valid Unicode character U+00C3",
+"input": "\u00C3",
+"output": [["Character", "\u00C3"]]},
+
+{"description": "Valid Unicode character U+00C4",
+"input": "\u00C4",
+"output": [["Character", "\u00C4"]]},
+
+{"description": "Valid Unicode character U+00C5",
+"input": "\u00C5",
+"output": [["Character", "\u00C5"]]},
+
+{"description": "Valid Unicode character U+00C6",
+"input": "\u00C6",
+"output": [["Character", "\u00C6"]]},
+
+{"description": "Valid Unicode character U+00C7",
+"input": "\u00C7",
+"output": [["Character", "\u00C7"]]},
+
+{"description": "Valid Unicode character U+00C8",
+"input": "\u00C8",
+"output": [["Character", "\u00C8"]]},
+
+{"description": "Valid Unicode character U+00C9",
+"input": "\u00C9",
+"output": [["Character", "\u00C9"]]},
+
+{"description": "Valid Unicode character U+00CA",
+"input": "\u00CA",
+"output": [["Character", "\u00CA"]]},
+
+{"description": "Valid Unicode character U+00CB",
+"input": "\u00CB",
+"output": [["Character", "\u00CB"]]},
+
+{"description": "Valid Unicode character U+00CC",
+"input": "\u00CC",
+"output": [["Character", "\u00CC"]]},
+
+{"description": "Valid Unicode character U+00CD",
+"input": "\u00CD",
+"output": [["Character", "\u00CD"]]},
+
+{"description": "Valid Unicode character U+00CE",
+"input": "\u00CE",
+"output": [["Character", "\u00CE"]]},
+
+{"description": "Valid Unicode character U+00CF",
+"input": "\u00CF",
+"output": [["Character", "\u00CF"]]},
+
+{"description": "Valid Unicode character U+00D0",
+"input": "\u00D0",
+"output": [["Character", "\u00D0"]]},
+
+{"description": "Valid Unicode character U+00D1",
+"input": "\u00D1",
+"output": [["Character", "\u00D1"]]},
+
+{"description": "Valid Unicode character U+00D2",
+"input": "\u00D2",
+"output": [["Character", "\u00D2"]]},
+
+{"description": "Valid Unicode character U+00D3",
+"input": "\u00D3",
+"output": [["Character", "\u00D3"]]},
+
+{"description": "Valid Unicode character U+00D4",
+"input": "\u00D4",
+"output": [["Character", "\u00D4"]]},
+
+{"description": "Valid Unicode character U+00D5",
+"input": "\u00D5",
+"output": [["Character", "\u00D5"]]},
+
+{"description": "Valid Unicode character U+00D6",
+"input": "\u00D6",
+"output": [["Character", "\u00D6"]]},
+
+{"description": "Valid Unicode character U+00D7",
+"input": "\u00D7",
+"output": [["Character", "\u00D7"]]},
+
+{"description": "Valid Unicode character U+00D8",
+"input": "\u00D8",
+"output": [["Character", "\u00D8"]]},
+
+{"description": "Valid Unicode character U+00D9",
+"input": "\u00D9",
+"output": [["Character", "\u00D9"]]},
+
+{"description": "Valid Unicode character U+00DA",
+"input": "\u00DA",
+"output": [["Character", "\u00DA"]]},
+
+{"description": "Valid Unicode character U+00DB",
+"input": "\u00DB",
+"output": [["Character", "\u00DB"]]},
+
+{"description": "Valid Unicode character U+00DC",
+"input": "\u00DC",
+"output": [["Character", "\u00DC"]]},
+
+{"description": "Valid Unicode character U+00DD",
+"input": "\u00DD",
+"output": [["Character", "\u00DD"]]},
+
+{"description": "Valid Unicode character U+00DE",
+"input": "\u00DE",
+"output": [["Character", "\u00DE"]]},
+
+{"description": "Valid Unicode character U+00DF",
+"input": "\u00DF",
+"output": [["Character", "\u00DF"]]},
+
+{"description": "Valid Unicode character U+00E0",
+"input": "\u00E0",
+"output": [["Character", "\u00E0"]]},
+
+{"description": "Valid Unicode character U+00E1",
+"input": "\u00E1",
+"output": [["Character", "\u00E1"]]},
+
+{"description": "Valid Unicode character U+00E2",
+"input": "\u00E2",
+"output": [["Character", "\u00E2"]]},
+
+{"description": "Valid Unicode character U+00E3",
+"input": "\u00E3",
+"output": [["Character", "\u00E3"]]},
+
+{"description": "Valid Unicode character U+00E4",
+"input": "\u00E4",
+"output": [["Character", "\u00E4"]]},
+
+{"description": "Valid Unicode character U+00E5",
+"input": "\u00E5",
+"output": [["Character", "\u00E5"]]},
+
+{"description": "Valid Unicode character U+00E6",
+"input": "\u00E6",
+"output": [["Character", "\u00E6"]]},
+
+{"description": "Valid Unicode character U+00E7",
+"input": "\u00E7",
+"output": [["Character", "\u00E7"]]},
+
+{"description": "Valid Unicode character U+00E8",
+"input": "\u00E8",
+"output": [["Character", "\u00E8"]]},
+
+{"description": "Valid Unicode character U+00E9",
+"input": "\u00E9",
+"output": [["Character", "\u00E9"]]},
+
+{"description": "Valid Unicode character U+00EA",
+"input": "\u00EA",
+"output": [["Character", "\u00EA"]]},
+
+{"description": "Valid Unicode character U+00EB",
+"input": "\u00EB",
+"output": [["Character", "\u00EB"]]},
+
+{"description": "Valid Unicode character U+00EC",
+"input": "\u00EC",
+"output": [["Character", "\u00EC"]]},
+
+{"description": "Valid Unicode character U+00ED",
+"input": "\u00ED",
+"output": [["Character", "\u00ED"]]},
+
+{"description": "Valid Unicode character U+00EE",
+"input": "\u00EE",
+"output": [["Character", "\u00EE"]]},
+
+{"description": "Valid Unicode character U+00EF",
+"input": "\u00EF",
+"output": [["Character", "\u00EF"]]},
+
+{"description": "Valid Unicode character U+00F0",
+"input": "\u00F0",
+"output": [["Character", "\u00F0"]]},
+
+{"description": "Valid Unicode character U+00F1",
+"input": "\u00F1",
+"output": [["Character", "\u00F1"]]},
+
+{"description": "Valid Unicode character U+00F2",
+"input": "\u00F2",
+"output": [["Character", "\u00F2"]]},
+
+{"description": "Valid Unicode character U+00F3",
+"input": "\u00F3",
+"output": [["Character", "\u00F3"]]},
+
+{"description": "Valid Unicode character U+00F4",
+"input": "\u00F4",
+"output": [["Character", "\u00F4"]]},
+
+{"description": "Valid Unicode character U+00F5",
+"input": "\u00F5",
+"output": [["Character", "\u00F5"]]},
+
+{"description": "Valid Unicode character U+00F6",
+"input": "\u00F6",
+"output": [["Character", "\u00F6"]]},
+
+{"description": "Valid Unicode character U+00F7",
+"input": "\u00F7",
+"output": [["Character", "\u00F7"]]},
+
+{"description": "Valid Unicode character U+00F8",
+"input": "\u00F8",
+"output": [["Character", "\u00F8"]]},
+
+{"description": "Valid Unicode character U+00F9",
+"input": "\u00F9",
+"output": [["Character", "\u00F9"]]},
+
+{"description": "Valid Unicode character U+00FA",
+"input": "\u00FA",
+"output": [["Character", "\u00FA"]]},
+
+{"description": "Valid Unicode character U+00FB",
+"input": "\u00FB",
+"output": [["Character", "\u00FB"]]},
+
+{"description": "Valid Unicode character U+00FC",
+"input": "\u00FC",
+"output": [["Character", "\u00FC"]]},
+
+{"description": "Valid Unicode character U+00FD",
+"input": "\u00FD",
+"output": [["Character", "\u00FD"]]},
+
+{"description": "Valid Unicode character U+00FE",
+"input": "\u00FE",
+"output": [["Character", "\u00FE"]]},
+
+{"description": "Valid Unicode character U+00FF",
+"input": "\u00FF",
+"output": [["Character", "\u00FF"]]},
+
+{"description": "Valid Unicode character U+D7FF",
+"input": "\uD7FF",
+"output": [["Character", "\uD7FF"]]},
+
+{"description": "Valid Unicode character U+E000",
+"input": "\uE000",
+"output": [["Character", "\uE000"]]},
+
+{"description": "Valid Unicode character U+FDCF",
+"input": "\uFDCF",
+"output": [["Character", "\uFDCF"]]},
+
+{"description": "Valid Unicode character U+FDF0",
+"input": "\uFDF0",
+"output": [["Character", "\uFDF0"]]},
+
+{"description": "Valid Unicode character U+FFFD",
+"input": "\uFFFD",
+"output": [["Character", "\uFFFD"]]},
+
+{"description": "Valid Unicode character U+10000",
+"input": "\uD800\uDC00",
+"output": [["Character", "\uD800\uDC00"]]},
+
+{"description": "Valid Unicode character U+1FFFD",
+"input": "\uD83F\uDFFD",
+"output": [["Character", "\uD83F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+20000",
+"input": "\uD840\uDC00",
+"output": [["Character", "\uD840\uDC00"]]},
+
+{"description": "Valid Unicode character U+2FFFD",
+"input": "\uD87F\uDFFD",
+"output": [["Character", "\uD87F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+30000",
+"input": "\uD880\uDC00",
+"output": [["Character", "\uD880\uDC00"]]},
+
+{"description": "Valid Unicode character U+3FFFD",
+"input": "\uD8BF\uDFFD",
+"output": [["Character", "\uD8BF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+40000",
+"input": "\uD8C0\uDC00",
+"output": [["Character", "\uD8C0\uDC00"]]},
+
+{"description": "Valid Unicode character U+4FFFD",
+"input": "\uD8FF\uDFFD",
+"output": [["Character", "\uD8FF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+50000",
+"input": "\uD900\uDC00",
+"output": [["Character", "\uD900\uDC00"]]},
+
+{"description": "Valid Unicode character U+5FFFD",
+"input": "\uD93F\uDFFD",
+"output": [["Character", "\uD93F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+60000",
+"input": "\uD940\uDC00",
+"output": [["Character", "\uD940\uDC00"]]},
+
+{"description": "Valid Unicode character U+6FFFD",
+"input": "\uD97F\uDFFD",
+"output": [["Character", "\uD97F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+70000",
+"input": "\uD980\uDC00",
+"output": [["Character", "\uD980\uDC00"]]},
+
+{"description": "Valid Unicode character U+7FFFD",
+"input": "\uD9BF\uDFFD",
+"output": [["Character", "\uD9BF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+80000",
+"input": "\uD9C0\uDC00",
+"output": [["Character", "\uD9C0\uDC00"]]},
+
+{"description": "Valid Unicode character U+8FFFD",
+"input": "\uD9FF\uDFFD",
+"output": [["Character", "\uD9FF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+90000",
+"input": "\uDA00\uDC00",
+"output": [["Character", "\uDA00\uDC00"]]},
+
+{"description": "Valid Unicode character U+9FFFD",
+"input": "\uDA3F\uDFFD",
+"output": [["Character", "\uDA3F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+A0000",
+"input": "\uDA40\uDC00",
+"output": [["Character", "\uDA40\uDC00"]]},
+
+{"description": "Valid Unicode character U+AFFFD",
+"input": "\uDA7F\uDFFD",
+"output": [["Character", "\uDA7F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+B0000",
+"input": "\uDA80\uDC00",
+"output": [["Character", "\uDA80\uDC00"]]},
+
+{"description": "Valid Unicode character U+BFFFD",
+"input": "\uDABF\uDFFD",
+"output": [["Character", "\uDABF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+C0000",
+"input": "\uDAC0\uDC00",
+"output": [["Character", "\uDAC0\uDC00"]]},
+
+{"description": "Valid Unicode character U+CFFFD",
+"input": "\uDAFF\uDFFD",
+"output": [["Character", "\uDAFF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+D0000",
+"input": "\uDB00\uDC00",
+"output": [["Character", "\uDB00\uDC00"]]},
+
+{"description": "Valid Unicode character U+DFFFD",
+"input": "\uDB3F\uDFFD",
+"output": [["Character", "\uDB3F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+E0000",
+"input": "\uDB40\uDC00",
+"output": [["Character", "\uDB40\uDC00"]]},
+
+{"description": "Valid Unicode character U+EFFFD",
+"input": "\uDB7F\uDFFD",
+"output": [["Character", "\uDB7F\uDFFD"]]},
+
+{"description": "Valid Unicode character U+F0000",
+"input": "\uDB80\uDC00",
+"output": [["Character", "\uDB80\uDC00"]]},
+
+{"description": "Valid Unicode character U+FFFFD",
+"input": "\uDBBF\uDFFD",
+"output": [["Character", "\uDBBF\uDFFD"]]},
+
+{"description": "Valid Unicode character U+100000",
+"input": "\uDBC0\uDC00",
+"output": [["Character", "\uDBC0\uDC00"]]},
+
+{"description": "Valid Unicode character U+10FFFD",
+"input": "\uDBFF\uDFFD",
+"output": [["Character", "\uDBFF\uDFFD"]]}
+
+]}
diff --git a/tests/html5lib-tests/tokenizer/unicodeCharsProblematic.test b/tests/html5lib-tests/tokenizer/unicodeCharsProblematic.test
new file mode 100644
index 0000000..3ddb96c
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/unicodeCharsProblematic.test
@@ -0,0 +1,41 @@
+{"tests" : [
+{"description": "Invalid Unicode character U+DFFF",
+"doubleEscaped":true,
+"input": "\\uDFFF",
+"output":[["Character", "\\uDFFF"]],
+"errors":[
+ { "code": "surrogate-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+D800",
+"doubleEscaped":true,
+"input": "\\uD800",
+"output":[["Character", "\\uD800"]],
+"errors":[
+ { "code": "surrogate-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description": "Invalid Unicode character U+DFFF with valid preceding character",
+"doubleEscaped":true,
+"input": "a\\uDFFF",
+"output":[["Character", "a\\uDFFF"]],
+"errors":[
+ { "code": "surrogate-in-input-stream", "line": 1, "col": 2 }
+]},
+
+{"description": "Invalid Unicode character U+D800 with valid following character",
+"doubleEscaped":true,
+"input": "\\uD800a",
+"output":[["Character", "\\uD800a"]],
+"errors":[
+ { "code": "surrogate-in-input-stream", "line": 1, "col": 1 }
+]},
+
+{"description":"CR followed by U+0000",
+"input":"\r\u0000",
+"output":[["Character", "\n\u0000"]],
+"errors":[
+ { "code": "unexpected-null-character", "line": 2, "col": 1 }
+]}
+]
+} \ No newline at end of file
diff --git a/tests/html5lib-tests/tokenizer/xmlViolation.test b/tests/html5lib-tests/tokenizer/xmlViolation.test
new file mode 100644
index 0000000..da6159e
--- /dev/null
+++ b/tests/html5lib-tests/tokenizer/xmlViolation.test
@@ -0,0 +1,20 @@
+{"xmlViolationTests": [
+
+{"description":"Non-XML character",
+"input":"a\uFFFFb",
+"output":[["Character","a\uFFFDb"]]},
+
+{"description":"Non-XML space",
+"input":"a\u000Cb",
+"output":[["Character","a b"]]},
+
+{"description":"Double hyphen in comment",
+"input":"<!-- foo -- bar -->",
+"output":[["Comment"," foo - - bar "]]},
+
+{"description":"FF between attributes",
+"input":"<a b=''\u000Cc=''>",
+"output":[["StartTag","a",{"b":"","c":""}]]}
+]}
+
+
diff --git a/tests/html5lib-tests/tree-construction/README.md b/tests/html5lib-tests/tree-construction/README.md
new file mode 100644
index 0000000..4737a3a
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/README.md
@@ -0,0 +1,108 @@
+Tree Construction Tests
+=======================
+
+Each file containing tree construction tests consists of any number of
+tests separated by two newlines (LF) and a single newline before the end
+of the file. For instance:
+
+ [TEST]LF
+ LF
+ [TEST]LF
+ LF
+ [TEST]LF
+
+Where [TEST] is the following format:
+
+Each test must begin with a string "\#data" followed by a newline (LF).
+All subsequent lines until a line that says "\#errors" are the test data
+and must be passed to the system being tested unchanged, except with the
+final newline (on the last line) removed.
+
+Then there must be a line that says "\#errors". It must be followed by
+one line per parse error that a conformant checker would return. It
+doesn't matter what those lines are, although they can't be
+"\#new-errors", "\#document-fragment", "\#document", "\#script-off",
+"\#script-on", or empty, the only thing that matters is that there be
+the right number of parse errors.
+
+Then there \*may\* be a line that says "\#new-errors", which works like
+the "\#errors" section adding more errors to the expected number of
+errors.
+
+Then there \*may\* be a line that says "\#document-fragment", which must
+be followed by a newline (LF), followed by a string of characters that
+indicates the context element, followed by a newline (LF). If the string
+of characters starts with "svg ", the context element is in the SVG
+namespace and the substring after "svg " is the local name. If the
+string of characters starts with "math ", the context element is in the
+MathML namespace and the substring after "math " is the local name.
+Otherwise, the context element is in the HTML namespace and the string
+is the local name. If this line is present the "\#data" must be parsed
+using the HTML fragment parsing algorithm with the context element as
+context.
+
+Then there \*may\* be a line that says "\#script-off" or
+"\#script-on". If a line that says "\#script-off" is present, the
+parser must set the scripting flag to disabled. If a line that says
+"\#script-on" is present, it must set it to enabled. Otherwise, the
+test should be run in both modes.
+
+Then there must be a line that says "\#document", which must be followed
+by a dump of the tree of the parsed DOM. Each node must be represented
+by a single line. Each line must start with "| ", followed by two spaces
+per parent node that the node has before the root document node.
+
+- Element nodes must be represented by a "`<`" then the *tag name
+ string* "`>`", and all the attributes must be given, sorted
+ lexicographically by UTF-16 code unit according to their *attribute
+ name string*, on subsequent lines, as if they were children of the
+ element node.
+- Attribute nodes must have the *attribute name string*, then an "="
+ sign, then the attribute value in double quotes (").
+- Text nodes must be the string, in double quotes. Newlines aren't
+ escaped.
+- Comments must be "`<`" then "`!-- `" then the data then "` -->`".
+- DOCTYPEs must be "`<!DOCTYPE `" then the name then if either of the
+ system id or public id is non-empty a space, public id in
+ double-quotes, another space an the system id in double-quotes, and
+ then in any case "`>`".
+- Processing instructions must be "`<?`", then the target, then a
+ space, then the data and then "`>`". (The HTML parser cannot emit
+ processing instructions, but scripts can, and the WebVTT to DOM
+ rules can emit them.)
+- Template contents are represented by the string "content" with the
+ children below it.
+
+The *tag name string* is the local name prefixed by a namespace
+designator. For the HTML namespace, the namespace designator is the
+empty string, i.e. there's no prefix. For the SVG namespace, the
+namespace designator is "svg ". For the MathML namespace, the namespace
+designator is "math ".
+
+The *attribute name string* is the local name prefixed by a namespace
+designator. For no namespace, the namespace designator is the empty
+string, i.e. there's no prefix. For the XLink namespace, the namespace
+designator is "xlink ". For the XML namespace, the namespace designator
+is "xml ". For the XMLNS namespace, the namespace designator is "xmlns
+". Note the difference between "xlink:href" which is an attribute in no
+namespace with the local name "xlink:href" and "xlink href" which is an
+attribute in the xlink namespace with the local name "href".
+
+If there is also a "\#document-fragment" the bit following "\#document"
+must be a representation of the HTML fragment serialization for the
+context element given by "\#document-fragment".
+
+For example:
+
+ #data
+ <p>One<p>Two
+ #errors
+ 3: Missing document type declaration
+ #document
+ | <html>
+ | <head>
+ | <body>
+ | <p>
+ | "One"
+ | <p>
+ | "Two"
diff --git a/tests/html5lib-tests/tree-construction/adoption01.dat b/tests/html5lib-tests/tree-construction/adoption01.dat
new file mode 100644
index 0000000..38f98ef
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/adoption01.dat
@@ -0,0 +1,354 @@
+#data
+<a><p></a></p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,10): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <p>
+| <a>
+
+#data
+<a>1<p>2</a>3</p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,12): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <p>
+| <a>
+| "2"
+| "3"
+
+#data
+<a>1<button>2</a>3</button>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,17): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <button>
+| <a>
+| "2"
+| "3"
+
+#data
+<a>1<b>2</a>3</b>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,12): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <b>
+| "2"
+| <b>
+| "3"
+
+#data
+<a>1<div>2<div>3</a>4</div>5</div>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,20): adoption-agency-1.3
+(1,20): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <div>
+| <a>
+| "2"
+| <div>
+| <a>
+| "3"
+| "4"
+| "5"
+
+#data
+<table><a>1<p>2</a>3</p>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,10): unexpected-start-tag-implies-table-voodoo
+(1,11): unexpected-character-implies-table-voodoo
+(1,14): unexpected-start-tag-implies-table-voodoo
+(1,15): unexpected-character-implies-table-voodoo
+(1,19): unexpected-end-tag-implies-table-voodoo
+(1,19): adoption-agency-1.3
+(1,20): unexpected-character-implies-table-voodoo
+(1,24): unexpected-end-tag-implies-table-voodoo
+(1,24): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <p>
+| <a>
+| "2"
+| "3"
+| <table>
+
+#data
+<b><b><a><p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,16): adoption-agency-1.3
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <b>
+| <a>
+| <p>
+| <a>
+
+#data
+<b><a><b><p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,16): adoption-agency-1.3
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <a>
+| <b>
+| <b>
+| <p>
+| <a>
+
+#data
+<a><b><b><p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,16): adoption-agency-1.3
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <b>
+| <b>
+| <b>
+| <p>
+| <a>
+
+#data
+<p>1<s id="A">2<b id="B">3</p>4</s>5</b>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,30): unexpected-end-tag
+(1,35): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| "1"
+| <s>
+| id="A"
+| "2"
+| <b>
+| id="B"
+| "3"
+| <s>
+| id="A"
+| <b>
+| id="B"
+| "4"
+| <b>
+| id="B"
+| "5"
+
+#data
+<table><a>1<td>2</td>3</table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,10): unexpected-start-tag-implies-table-voodoo
+(1,11): unexpected-character-implies-table-voodoo
+(1,15): unexpected-cell-in-table-body
+(1,30): unexpected-implied-end-tag-in-table-view
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "1"
+| <a>
+| "3"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "2"
+
+#data
+<table>A<td>B</td>C</table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,8): unexpected-character-implies-table-voodoo
+(1,12): unexpected-cell-in-table-body
+(1,22): unexpected-character-implies-table-voodoo
+#document
+| <html>
+| <head>
+| <body>
+| "AC"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "B"
+
+#data
+<a><svg><tr><input></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,23): unexpected-end-tag
+(1,23): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <svg svg>
+| <svg tr>
+| <svg input>
+
+#data
+<div><a><b><div><div><div><div><div><div><div><div><div><div></a>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): adoption-agency-1.3
+(1,65): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <a>
+| <b>
+| <b>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <a>
+| <div>
+| <div>
+
+#data
+<div><a><b><u><i><code><div></a>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,32): adoption-agency-1.3
+(1,32): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <a>
+| <b>
+| <u>
+| <i>
+| <code>
+| <u>
+| <i>
+| <code>
+| <div>
+| <a>
+
+#data
+<b><b><b><b>x</b></b></b></b>y
+#errors
+(1,3): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <b>
+| <b>
+| <b>
+| "x"
+| "y"
+
+#data
+<p><b><b><b><b><p>x
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,18): unexpected-end-tag
+(1,19): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <b>
+| <b>
+| <b>
+| <p>
+| <b>
+| <b>
+| <b>
+| "x"
+
+#data
+<b><em><foo><foob><fooc><aside></b></em>
+#errors
+(1,35): adoption-agency-1.3
+(1,40): adoption-agency-1.3
+(1,40): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| <b>
+| <em>
+| <foo>
+| <foob>
+| <fooc>
+| <aside>
+| <b>
diff --git a/tests/html5lib-tests/tree-construction/adoption02.dat b/tests/html5lib-tests/tree-construction/adoption02.dat
new file mode 100644
index 0000000..e54d803
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/adoption02.dat
@@ -0,0 +1,39 @@
+#data
+<b>1<i>2<p>3</b>4
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,16): adoption-agency-1.3
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "1"
+| <i>
+| "2"
+| <i>
+| <p>
+| <b>
+| "3"
+| "4"
+
+#data
+<a><div><style></style><address><a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,35): unexpected-start-tag-implies-end-tag
+(1,35): adoption-agency-1.3
+(1,35): adoption-agency-1.3
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <div>
+| <a>
+| <style>
+| <address>
+| <a>
+| <a>
diff --git a/tests/html5lib-tests/tree-construction/blocks.dat b/tests/html5lib-tests/tree-construction/blocks.dat
new file mode 100644
index 0000000..a1a9c75
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/blocks.dat
@@ -0,0 +1,695 @@
+#data
+<!doctype html><p>foo<address>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <address>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><address><p>foo</address>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <address>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<article>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <article>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><article><p>foo</article>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <article>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<aside>bar<p>baz
+#errors
+(1,37): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <aside>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><aside><p>foo</aside>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <aside>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<blockquote>bar<p>baz
+#errors
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <blockquote>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><blockquote><p>foo</blockquote>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <blockquote>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<center>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <center>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><center><p>foo</center>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <center>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<details>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <details>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><details><p>foo</details>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <details>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<dialog>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <dialog>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><dialog><p>foo</dialog>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dialog>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<dir>bar<p>baz
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <dir>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><dir><p>foo</dir>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dir>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<div>bar<p>baz
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <div>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><div><p>foo</div>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<dl>bar<p>baz
+#errors
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <dl>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><dl><p>foo</dl>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dl>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<fieldset>bar<p>baz
+#errors
+(1,40): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <fieldset>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><fieldset><p>foo</fieldset>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <fieldset>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<figcaption>bar<p>baz
+#errors
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <figcaption>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><figcaption><p>foo</figcaption>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <figcaption>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<figure>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <figure>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><figure><p>foo</figure>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <figure>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<footer>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <footer>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><footer><p>foo</footer>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <footer>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<header>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <header>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><header><p>foo</header>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <header>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<hgroup>bar<p>baz
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <hgroup>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><hgroup><p>foo</hgroup>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <hgroup>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<listing>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <listing>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><listing><p>foo</listing>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <listing>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<menu>bar<p>baz
+#errors
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <menu>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><menu><p>foo</menu>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menu>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<nav>bar<p>baz
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <nav>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><nav><p>foo</nav>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <nav>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<ol>bar<p>baz
+#errors
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <ol>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><ol><p>foo</ol>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ol>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<pre>bar<p>baz
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <pre>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><pre><p>foo</pre>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<section>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <section>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><section><p>foo</section>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <section>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<summary>bar<p>baz
+#errors
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <summary>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><summary><p>foo</summary>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <summary>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!doctype html><p>foo<ul>bar<p>baz
+#errors
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <ul>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><ul><p>foo</ul>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ul>
+| <p>
+| "foo"
+| "bar"
diff --git a/tests/html5lib-tests/tree-construction/comments01.dat b/tests/html5lib-tests/tree-construction/comments01.dat
new file mode 100644
index 0000000..4b9ff95
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/comments01.dat
@@ -0,0 +1,217 @@
+#data
+FOO<!-- BAR -->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -->
+| "BAZ"
+
+#data
+FOO<!-- BAR --!>BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,15): unexpected-bang-after-double-dash-in-comment
+#new-errors
+(1:16) incorrectly-closed-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -->
+| "BAZ"
+
+#data
+FOO<!-- BAR --! >BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1:21) eof-in-comment
+#new-errors
+(1:21) eof-in-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR --! >BAZ -->
+
+#data
+FOO<!-- BAR --!
+>BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(2:5) eof-in-comment
+#new-errors
+(2:5) eof-in-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR --!
+>BAZ -->
+
+#data
+FOO<!-- BAR -- >BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,21): eof-in-comment
+#new-errors
+(1:22) eof-in-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -- >BAZ -->
+
+#data
+FOO<!-- BAR -- <QUX> -- MUX -->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -- <QUX> -- MUX -->
+| "BAZ"
+
+#data
+FOO<!-- BAR -- <QUX> -- MUX --!>BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,31): unexpected-bang-after-double-dash-in-comment
+#new-errors
+(1:32) incorrectly-closed-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -- <QUX> -- MUX -->
+| "BAZ"
+
+#data
+FOO<!-- BAR -- <QUX> -- MUX -- >BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,35): eof-in-comment
+#new-errors
+(1:36) eof-in-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- BAR -- <QUX> -- MUX -- >BAZ -->
+
+#data
+FOO<!---->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- -->
+| "BAZ"
+
+#data
+FOO<!--->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,9): incorrect-comment
+#new-errors
+(1:9) abrupt-closing-of-empty-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- -->
+| "BAZ"
+
+#data
+FOO<!-->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,8): incorrect-comment
+#new-errors
+(1:8) abrupt-closing-of-empty-comment
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- -->
+| "BAZ"
+
+#data
+<?xml version="1.0">Hi
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,22): expected-doctype-but-got-chars
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?xml version="1.0" -->
+| <html>
+| <head>
+| <body>
+| "Hi"
+
+#data
+<?xml version="1.0">
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,20): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?xml version="1.0" -->
+| <html>
+| <head>
+| <body>
+
+#data
+<?xml version
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,13): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?xml version -->
+| <html>
+| <head>
+| <body>
+
+#data
+FOO<!----->BAZ
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <!-- - -->
+| "BAZ"
+
+#data
+<html><!-- comment --><title>Comment before head</title>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <!-- comment -->
+| <head>
+| <title>
+| "Comment before head"
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/doctype01.dat b/tests/html5lib-tests/tree-construction/doctype01.dat
new file mode 100644
index 0000000..9efdaf7
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/doctype01.dat
@@ -0,0 +1,474 @@
+#data
+<!DOCTYPE html>Hello
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!dOctYpE HtMl>Hello
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPEhtml>Hello
+#errors
+(1,9): need-space-after-doctype
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE>Hello
+#errors
+(1,10): expected-doctype-name-but-got-right-bracket
+(1,10): unknown-doctype
+#new-errors
+(1:10) missing-doctype-name
+#document
+| <!DOCTYPE >
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE >Hello
+#errors
+(1,11): expected-doctype-name-but-got-right-bracket
+(1,11): unknown-doctype
+#new-errors
+(1:11) missing-doctype-name
+#document
+| <!DOCTYPE >
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato>Hello
+#errors
+(1,17): unknown-doctype
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato >Hello
+#errors
+(1,18): unknown-doctype
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato taco>Hello
+#errors
+(1,17): expected-space-or-right-bracket-in-doctype
+(1,22): unknown-doctype
+#new-errors
+(1:18) invalid-character-sequence-after-doctype-name
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato taco "ddd>Hello
+#errors
+(1,17): expected-space-or-right-bracket-in-doctype
+(1,27): unknown-doctype
+#new-errors
+(1:18) invalid-character-sequence-after-doctype-name
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato sYstEM>Hello
+#errors
+(1,24): unexpected-char-in-doctype
+(1,24): unknown-doctype
+#new-errors
+(1:24) missing-doctype-system-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato sYstEM >Hello
+#errors
+(1,28): unexpected-char-in-doctype
+(1,28): unknown-doctype
+#new-errors
+(1:28) missing-doctype-system-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato sYstEM ggg>Hello
+#errors
+(1,34): unexpected-char-in-doctype
+(1,37): unknown-doctype
+#new-errors
+(1:34) missing-quote-before-doctype-system-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato SYSTEM taco >Hello
+#errors
+(1,25): unexpected-char-in-doctype
+(1,31): unknown-doctype
+#new-errors
+(1:25) missing-quote-before-doctype-system-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato SYSTEM 'taco"'>Hello
+#errors
+(1,32): unknown-doctype
+#document
+| <!DOCTYPE potato "" "taco"">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato SYSTEM "taco">Hello
+#errors
+(1,31): unknown-doctype
+#document
+| <!DOCTYPE potato "" "taco">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato SYSTEM "tai'co">Hello
+#errors
+(1,33): unknown-doctype
+#document
+| <!DOCTYPE potato "" "tai'co">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato SYSTEMtaco "ddd">Hello
+#errors
+(1,24): unexpected-char-in-doctype
+(1,34): unknown-doctype
+#new-errors
+(1:24) missing-quote-before-doctype-system-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato grass SYSTEM taco>Hello
+#errors
+(1,17): expected-space-or-right-bracket-in-doctype
+(1,35): unknown-doctype
+#new-errors
+(1:18) invalid-character-sequence-after-doctype-name
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato pUbLIc>Hello
+#errors
+(1,24): unexpected-end-of-doctype
+(1,24): unknown-doctype
+#new-errors
+(1:24) missing-doctype-public-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato pUbLIc >Hello
+#errors
+(1,25): unexpected-end-of-doctype
+(1,25): unknown-doctype
+#new-errors
+(1:25) missing-doctype-public-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato pUbLIcgoof>Hello
+#errors
+(1,24): unexpected-char-in-doctype
+(1,28): unknown-doctype
+#new-errors
+(1:24) missing-quote-before-doctype-public-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato PUBLIC goof>Hello
+#errors
+(1,25): unexpected-char-in-doctype
+(1,29): unknown-doctype
+#new-errors
+(1:25) missing-quote-before-doctype-public-identifier
+#document
+| <!DOCTYPE potato>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato PUBLIC "go'of">Hello
+#errors
+(1,32): unknown-doctype
+#document
+| <!DOCTYPE potato "go'of" "">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato PUBLIC 'go'of'>Hello
+#errors
+(1,29): unexpected-char-in-doctype
+(1,32): unknown-doctype
+#new-errors
+(1:29) missing-quote-before-doctype-system-identifier
+#document
+| <!DOCTYPE potato "go" "">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato PUBLIC 'go:hh of' >Hello
+#errors
+(1,38): unknown-doctype
+#document
+| <!DOCTYPE potato "go:hh of" "">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE potato PUBLIC "W3C-//dfdf" SYSTEM ggg>Hello
+#errors
+(1,38): unexpected-char-in-doctype
+(1,48): unknown-doctype
+#new-errors
+(1:38) missing-quote-before-doctype-system-identifier
+#document
+| <!DOCTYPE potato "W3C-//dfdf" "">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">Hello
+#errors
+(2,43): unknown-doctype
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE ...>Hello
+#errors
+(1,14): unknown-doctype
+#document
+| <!DOCTYPE ...>
+| <html>
+| <head>
+| <body>
+| "Hello"
+
+#data
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+#errors
+(2,58): unknown-doctype
+#document
+| <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+#errors
+(2,54): unknown-doctype
+#document
+| <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE root-element [SYSTEM OR PUBLIC FPI] "uri" [
+<!-- internal declarations -->
+]>
+#errors
+(1,23): expected-space-or-right-bracket-in-doctype
+(2,30): unknown-doctype
+#new-errors
+(1:24) invalid-character-sequence-after-doctype-name
+#document
+| <!DOCTYPE root-element>
+| <html>
+| <head>
+| <body>
+| "]>"
+
+#data
+<!DOCTYPE html PUBLIC
+ "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
+ "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
+#errors
+(3,53): unknown-doctype
+#document
+| <!DOCTYPE html "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE HTML SYSTEM "http://www.w3.org/DTD/HTML4-strict.dtd"><body><b>Mine!</b></body>
+#errors
+(1,63): unknown-doctype
+#document
+| <!DOCTYPE html "" "http://www.w3.org/DTD/HTML4-strict.dtd">
+| <html>
+| <head>
+| <body>
+| <b>
+| "Mine!"
+
+#data
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
+#errors
+(1,50): unexpected-char-in-doctype
+(1,89): unknown-doctype
+#new-errors
+(1:50) missing-whitespace-between-doctype-public-and-system-identifiers
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'http://www.w3.org/TR/html4/strict.dtd'>
+#errors
+(1,50): unexpected-char-in-doctype
+(1,89): unknown-doctype
+#new-errors
+(1:50) missing-whitespace-between-doctype-public-and-system-identifiers
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN"'http://www.w3.org/TR/html4/strict.dtd'>
+#errors
+(1,21): unexpected-char-in-doctype
+(1,49): unexpected-char-in-doctype
+(1,88): unknown-doctype
+#new-errors
+(1:22) missing-whitespace-after-doctype-public-keyword
+(1:49) missing-whitespace-between-doctype-public-and-system-identifiers
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE HTML PUBLIC'-//W3C//DTD HTML 4.01//EN''http://www.w3.org/TR/html4/strict.dtd'>
+#errors
+(1,21): unexpected-char-in-doctype
+(1,49): unexpected-char-in-doctype
+(1,88): unknown-doctype
+#new-errors
+(1:22) missing-whitespace-after-doctype-public-keyword
+(1:49) missing-whitespace-between-doctype-public-and-system-identifiers
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+| <html>
+| <head>
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/domjs-unsafe.dat b/tests/html5lib-tests/tree-construction/domjs-unsafe.dat
new file mode 100644
index 0000000..0a1b10f
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/domjs-unsafe.dat
Binary files differ
diff --git a/tests/html5lib-tests/tree-construction/entities01.dat b/tests/html5lib-tests/tree-construction/entities01.dat
new file mode 100644
index 0000000..9bacebe
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/entities01.dat
@@ -0,0 +1,943 @@
+#data
+FOO&gt;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO>BAR"
+
+#data
+FOO&gtBAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,6): named-entity-without-semicolon
+#new-errors
+(1:7) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO>BAR"
+
+#data
+FOO&gt BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,6): named-entity-without-semicolon
+#new-errors
+(1:7) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO> BAR"
+
+#data
+FOO&gt;;;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO>;;BAR"
+
+#data
+I'm &notit; I tell you
+#errors
+(1,4): expected-doctype-but-got-chars
+(1,9): named-entity-without-semicolon
+#new-errors
+(1:9) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "I'm ¬it; I tell you"
+
+#data
+I'm &notin; I tell you
+#errors
+(1,4): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "I'm ∉ I tell you"
+
+#data
+&ammmp;
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,7): unknown-named-character-reference
+#new-errors
+(1:7) unknown-named-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&ammmp;"
+
+#data
+&ammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmp;
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,950): unknown-named-character-reference
+#new-errors
+(1:950) unknown-named-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&ammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmp;"
+
+#data
+FOO& BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO& BAR"
+
+#data
+FOO&<BAR>
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,9): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&"
+| <bar>
+
+#data
+FOO&&&&gt;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&&&>BAR"
+
+#data
+FOO&#41;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO)BAR"
+
+#data
+FOO&#x41;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOOABAR"
+
+#data
+FOO&#X41;BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOOABAR"
+
+#data
+FOO&#BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,5): expected-numeric-entity
+#new-errors
+(1:6) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&#BAR"
+
+#data
+FOO&#ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,5): expected-numeric-entity
+#new-errors
+(1:6) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&#ZOO"
+
+#data
+FOO&#xBAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,7): expected-numeric-entity
+#new-errors
+(1:9) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOºR"
+
+#data
+FOO&#xZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,6): expected-numeric-entity
+#new-errors
+(1:7) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&#xZOO"
+
+#data
+FOO&#XZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,6): expected-numeric-entity
+#new-errors
+(1:7) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO&#XZOO"
+
+#data
+FOO&#41BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,7): numeric-entity-without-semicolon
+#new-errors
+(1:8) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO)BAR"
+
+#data
+FOO&#x41BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,10): numeric-entity-without-semicolon
+#new-errors
+(1:11) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO䆺R"
+
+#data
+FOO&#x41ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,8): numeric-entity-without-semicolon
+#new-errors
+(1:9) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOAZOO"
+
+#data
+FOO&#x0000;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) null-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#x0078;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOOxZOO"
+
+#data
+FOO&#x0079;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOOyZOO"
+
+#data
+FOO&#x0080;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO€ZOO"
+
+#data
+FOO&#x0081;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÂZOO"
+
+#data
+FOO&#x0082;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO‚ZOO"
+
+#data
+FOO&#x0083;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÆ’ZOO"
+
+#data
+FOO&#x0084;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO„ZOO"
+
+#data
+FOO&#x0085;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO…ZOO"
+
+#data
+FOO&#x0086;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO†ZOO"
+
+#data
+FOO&#x0087;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO‡ZOO"
+
+#data
+FOO&#x0088;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOˆZOO"
+
+#data
+FOO&#x0089;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO‰ZOO"
+
+#data
+FOO&#x008A;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÅ ZOO"
+
+#data
+FOO&#x008B;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO‹ZOO"
+
+#data
+FOO&#x008C;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÅ’ZOO"
+
+#data
+FOO&#x008D;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÂZOO"
+
+#data
+FOO&#x008E;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOŽZOO"
+
+#data
+FOO&#x008F;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÂZOO"
+
+#data
+FOO&#x0090;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÂZOO"
+
+#data
+FOO&#x0091;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO‘ZOO"
+
+#data
+FOO&#x0092;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO’ZOO"
+
+#data
+FOO&#x0093;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO“ZOO"
+
+#data
+FOO&#x0094;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOâ€ZOO"
+
+#data
+FOO&#x0095;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO•ZOO"
+
+#data
+FOO&#x0096;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO–ZOO"
+
+#data
+FOO&#x0097;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO—ZOO"
+
+#data
+FOO&#x0098;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOËœZOO"
+
+#data
+FOO&#x0099;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOâ„¢ZOO"
+
+#data
+FOO&#x009A;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÅ¡ZOO"
+
+#data
+FOO&#x009B;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO›ZOO"
+
+#data
+FOO&#x009C;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÅ“ZOO"
+
+#data
+FOO&#x009D;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOÂZOO"
+
+#data
+FOO&#x009E;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOžZOO"
+
+#data
+FOO&#x009F;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) control-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOŸZOO"
+
+#data
+FOO&#x00A0;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO ZOO"
+
+#data
+FOO&#xD7FF;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO퟿ZOO"
+
+#data
+FOO&#xD800;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) surrogate-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#xD801;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) surrogate-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#xDFFE;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) surrogate-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#xDFFF;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,11): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:12) surrogate-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#xE000;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOOZOO"
+
+#data
+FOO&#x10FFFE;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:14) noncharacter-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOô¿¾ZOO"
+
+#data
+FOO&#x1087D4;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO􈟔ZOO"
+
+#data
+FOO&#x10FFFF;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:14) noncharacter-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "FOOô¿¿ZOO"
+
+#data
+FOO&#x110000;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:14) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#xFFFFFF;ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:14) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#11111111111
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+(1,13): eof-in-numeric-entity
+#new-errors
+(1:17) missing-semicolon-after-character-reference
+(1:17) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�"
+
+#data
+FOO&#1111111111
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+(1,13): eof-in-numeric-entity
+#new-errors
+(1:16) missing-semicolon-after-character-reference
+(1:16) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�"
+
+#data
+FOO&#111111111111
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,13): illegal-codepoint-for-numeric-entity
+(1,13): eof-in-numeric-entity
+#new-errors
+(1:18) missing-semicolon-after-character-reference
+(1:18) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�"
+
+#data
+FOO&#11111111111ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,16): numeric-entity-without-semicolon
+(1,16): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:17) missing-semicolon-after-character-reference
+(1:17) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#1111111111ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,15): numeric-entity-without-semicolon
+(1,15): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:16) missing-semicolon-after-character-reference
+(1:16) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
+
+#data
+FOO&#111111111111ZOO
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,17): numeric-entity-without-semicolon
+(1,17): illegal-codepoint-for-numeric-entity
+#new-errors
+(1:18) missing-semicolon-after-character-reference
+(1:18) character-reference-outside-unicode-range
+#document
+| <html>
+| <head>
+| <body>
+| "FOO�ZOO"
diff --git a/tests/html5lib-tests/tree-construction/entities02.dat b/tests/html5lib-tests/tree-construction/entities02.dat
new file mode 100644
index 0000000..74965a3
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/entities02.dat
@@ -0,0 +1,309 @@
+#data
+<div bar="ZZ&gt;YY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ>YY"
+
+#data
+<div bar="ZZ&"></div>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&"
+
+#data
+<div bar='ZZ&'></div>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&"
+
+#data
+<div bar=ZZ&></div>
+#errors
+(1,13): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&"
+
+#data
+<div bar="ZZ&gt=YY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&gt=YY"
+
+#data
+<div bar="ZZ&gt0YY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&gt0YY"
+
+#data
+<div bar="ZZ&gt9YY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&gt9YY"
+
+#data
+<div bar="ZZ&gtaYY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&gtaYY"
+
+#data
+<div bar="ZZ&gtZYY"></div>
+#errors
+(1,20): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&gtZYY"
+
+#data
+<div bar="ZZ&gt YY"></div>
+#errors
+(1,15): named-entity-without-semicolon
+(1,20): expected-doctype-but-got-start-tag
+#new-errors
+(1:16) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ> YY"
+
+#data
+<div bar="ZZ&gt"></div>
+#errors
+(1,15): named-entity-without-semicolon
+(1,17): expected-doctype-but-got-start-tag
+#new-errors
+(1:16) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ>"
+
+#data
+<div bar='ZZ&gt'></div>
+#errors
+(1,15): named-entity-without-semicolon
+(1,17): expected-doctype-but-got-start-tag
+#new-errors
+(1:16) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ>"
+
+#data
+<div bar=ZZ&gt></div>
+#errors
+(1,14): named-entity-without-semicolon
+(1,15): expected-doctype-but-got-start-tag
+#new-errors
+(1:15) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ>"
+
+#data
+<div bar="ZZ&pound_id=23"></div>
+#errors
+(1,18): named-entity-without-semicolon
+(1,26): expected-doctype-but-got-start-tag
+#new-errors
+(1:19) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ£_id=23"
+
+#data
+<div bar="ZZ&prod_id=23"></div>
+#errors
+(1,25): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&prod_id=23"
+
+#data
+<div bar="ZZ&pound;_id=23"></div>
+#errors
+(1,27): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ£_id=23"
+
+#data
+<div bar="ZZ&prod;_id=23"></div>
+#errors
+(1,26): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZâˆ_id=23"
+
+#data
+<div bar="ZZ&pound=23"></div>
+#errors
+(1,23): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&pound=23"
+
+#data
+<div bar="ZZ&prod=23"></div>
+#errors
+(1,22): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| bar="ZZ&prod=23"
+
+#data
+<div>ZZ&pound_id=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,13): named-entity-without-semicolon
+#new-errors
+(1:14) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZ£_id=23"
+
+#data
+<div>ZZ&prod_id=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZ&prod_id=23"
+
+#data
+<div>ZZ&pound;_id=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZ£_id=23"
+
+#data
+<div>ZZ&prod;_id=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZâˆ_id=23"
+
+#data
+<div>ZZ&pound=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,13): named-entity-without-semicolon
+#new-errors
+(1:14) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZ£=23"
+
+#data
+<div>ZZ&prod=23</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZ&prod=23"
+
+#data
+<div>ZZ&AElig=</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:14) missing-semicolon-after-character-reference
+#new-errors
+(1:14) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "ZZÆ="
diff --git a/tests/html5lib-tests/tree-construction/foreign-fragment.dat b/tests/html5lib-tests/tree-construction/foreign-fragment.dat
new file mode 100644
index 0000000..448d9c8
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/foreign-fragment.dat
@@ -0,0 +1,653 @@
+#data
+<nobr>X
+#errors
+6: HTML start tag “nobr†in a foreign namespace context.
+7: End of file seen and there were open elements.
+#document-fragment
+svg path
+#document
+| <nobr>
+| "X"
+
+#data
+<font color></font>X
+#errors
+12: HTML start tag “font†in a foreign namespace context.
+#document-fragment
+svg path
+#document
+| <font>
+| color=""
+| "X"
+
+#data
+<font></font>X
+#errors
+#document-fragment
+svg path
+#document
+| <svg font>
+| "X"
+
+#data
+<g></path>X
+#errors
+10: End tag “path†did not match the name of the current open element (“gâ€).
+11: End of file seen and there were open elements.
+#document-fragment
+svg path
+#document
+| <svg g>
+| "X"
+
+#data
+</path>X
+#errors
+5: Stray end tag “pathâ€.
+#document-fragment
+svg path
+#document
+| "X"
+
+#data
+</foreignObject>X
+#errors
+5: Stray end tag “foreignobjectâ€.
+#document-fragment
+svg foreignObject
+#document
+| "X"
+
+#data
+</desc>X
+#errors
+5: Stray end tag “descâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+</title>X
+#errors
+5: Stray end tag “titleâ€.
+#document-fragment
+svg title
+#document
+| "X"
+
+#data
+</svg>X
+#errors
+5: Stray end tag “svgâ€.
+#document-fragment
+svg svg
+#document
+| "X"
+
+#data
+</mfenced>X
+#errors
+5: Stray end tag “mfencedâ€.
+#document-fragment
+math mfenced
+#document
+| "X"
+
+#data
+</malignmark>X
+#errors
+5: Stray end tag “malignmarkâ€.
+#document-fragment
+math malignmark
+#document
+| "X"
+
+#data
+</math>X
+#errors
+5: Stray end tag “mathâ€.
+#document-fragment
+math math
+#document
+| "X"
+
+#data
+</annotation-xml>X
+#errors
+5: Stray end tag “annotation-xmlâ€.
+#document-fragment
+math annotation-xml
+#document
+| "X"
+
+#data
+</mtext>X
+#errors
+5: Stray end tag “mtextâ€.
+#document-fragment
+math mtext
+#document
+| "X"
+
+#data
+</mi>X
+#errors
+5: Stray end tag “miâ€.
+#document-fragment
+math mi
+#document
+| "X"
+
+#data
+</mo>X
+#errors
+5: Stray end tag “moâ€.
+#document-fragment
+math mo
+#document
+| "X"
+
+#data
+</mn>X
+#errors
+5: Stray end tag “mnâ€.
+#document-fragment
+math mn
+#document
+| "X"
+
+#data
+</ms>X
+#errors
+5: Stray end tag “msâ€.
+#document-fragment
+math ms
+#document
+| "X"
+
+#data
+<b></b><mglyph/><i></i><malignmark/><u></u><ms/>X
+#errors
+51: Self-closing syntax (“/>â€) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
+52: End of file seen and there were open elements.
+#new-errors
+(1:44-1:49) non-void-html-element-start-tag-with-trailing-solidus
+#document-fragment
+math ms
+#document
+| <b>
+| <math mglyph>
+| <i>
+| <math malignmark>
+| <u>
+| <ms>
+| "X"
+
+#data
+<malignmark></malignmark>
+#errors
+#document-fragment
+math ms
+#document
+| <math malignmark>
+
+#data
+<div></div>
+#errors
+#document-fragment
+math ms
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math ms
+#document
+| <figure>
+
+#data
+<b></b><mglyph/><i></i><malignmark/><u></u><mn/>X
+#errors
+51: Self-closing syntax (“/>â€) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
+52: End of file seen and there were open elements.
+#new-errors
+(1:44-1:49) non-void-html-element-start-tag-with-trailing-solidus
+#document-fragment
+math mn
+#document
+| <b>
+| <math mglyph>
+| <i>
+| <math malignmark>
+| <u>
+| <mn>
+| "X"
+
+#data
+<malignmark></malignmark>
+#errors
+#document-fragment
+math mn
+#document
+| <math malignmark>
+
+#data
+<div></div>
+#errors
+#document-fragment
+math mn
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math mn
+#document
+| <figure>
+
+#data
+<b></b><mglyph/><i></i><malignmark/><u></u><mo/>X
+#errors
+51: Self-closing syntax (“/>â€) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
+52: End of file seen and there were open elements.
+#new-errors
+(1:44-1:49) non-void-html-element-start-tag-with-trailing-solidus
+#document-fragment
+math mo
+#document
+| <b>
+| <math mglyph>
+| <i>
+| <math malignmark>
+| <u>
+| <mo>
+| "X"
+
+#data
+<malignmark></malignmark>
+#errors
+#document-fragment
+math mo
+#document
+| <math malignmark>
+
+#data
+<div></div>
+#errors
+#document-fragment
+math mo
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math mo
+#document
+| <figure>
+
+#data
+<b></b><mglyph/><i></i><malignmark/><u></u><mi/>X
+#errors
+51: Self-closing syntax (“/>â€) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
+52: End of file seen and there were open elements.
+#new-errors
+(1:44-1:49) non-void-html-element-start-tag-with-trailing-solidus
+#document-fragment
+math mi
+#document
+| <b>
+| <math mglyph>
+| <i>
+| <math malignmark>
+| <u>
+| <mi>
+| "X"
+
+#data
+<malignmark></malignmark>
+#errors
+#document-fragment
+math mi
+#document
+| <math malignmark>
+
+#data
+<div></div>
+#errors
+#document-fragment
+math mi
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math mi
+#document
+| <figure>
+
+#data
+<b></b><mglyph/><i></i><malignmark/><u></u><mtext/>X
+#errors
+51: Self-closing syntax (“/>â€) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
+52: End of file seen and there were open elements.
+#new-errors
+(1:44-1:52) non-void-html-element-start-tag-with-trailing-solidus
+#document-fragment
+math mtext
+#document
+| <b>
+| <math mglyph>
+| <i>
+| <math malignmark>
+| <u>
+| <mtext>
+| "X"
+
+#data
+<malignmark></malignmark>
+#errors
+#document-fragment
+math mtext
+#document
+| <math malignmark>
+
+#data
+<div></div>
+#errors
+#document-fragment
+math mtext
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math mtext
+#document
+| <figure>
+
+#data
+<div></div>
+#errors
+5: HTML start tag “div†in a foreign namespace context.
+#document-fragment
+math annotation-xml
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math annotation-xml
+#document
+| <math figure>
+
+#data
+<div></div>
+#errors
+5: HTML start tag “div†in a foreign namespace context.
+#document-fragment
+math math
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+math math
+#document
+| <math figure>
+
+#data
+<div></div>
+#errors
+#document-fragment
+svg foreignObject
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+svg foreignObject
+#document
+| <figure>
+
+#data
+<div></div>
+#errors
+#document-fragment
+svg title
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+svg title
+#document
+| <figure>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+svg desc
+#document
+| <figure>
+
+#data
+<div><h1>X</h1></div>
+#errors
+5: HTML start tag “div†in a foreign namespace context.
+#document-fragment
+svg svg
+#document
+| <div>
+| <h1>
+| "X"
+
+#data
+<div></div>
+#errors
+5: HTML start tag “div†in a foreign namespace context.
+#document-fragment
+svg svg
+#document
+| <div>
+
+#data
+<div></div>
+#errors
+#document-fragment
+svg desc
+#document
+| <div>
+
+#data
+<figure></figure>
+#errors
+#document-fragment
+svg desc
+#document
+| <figure>
+
+#data
+<plaintext><foo>
+#errors
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+svg desc
+#document
+| <plaintext>
+| "<foo>"
+
+#data
+<frameset>X
+#errors
+6: Stray start tag “framesetâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<head>X
+#errors
+6: Stray start tag “headâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<body>X
+#errors
+6: Stray start tag “bodyâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<html>X
+#errors
+6: Stray start tag “htmlâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<html class="foo">X
+#errors
+6: Stray start tag “htmlâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<body class="foo">X
+#errors
+6: Stray start tag “bodyâ€.
+#document-fragment
+svg desc
+#document
+| "X"
+
+#data
+<svg><p>
+#errors
+8: HTML start tag “p†in a foreign namespace context.
+#document-fragment
+div
+#document
+| <svg svg>
+| <p>
+
+#data
+<p>
+#errors
+3: HTML start tag “p†in a foreign namespace context.
+#document-fragment
+svg svg
+#document
+| <p>
+
+#data
+<svg></p><foo>
+#errors
+9: HTML end tag “p†in a foreign namespace context.
+(1:6) Unexpected </p> from in body insertion mode
+(1:15) Unexpected EOF
+#document-fragment
+div
+#document
+| <svg svg>
+| <p>
+| <foo>
+
+#data
+<svg></br><foo>
+#errors
+10: HTML end tag “br†in a foreign namespace context.
+(1:6) Unexpected </br> from in body insertion mode
+(1:16) Unexpected EOF
+#document-fragment
+div
+#document
+| <svg svg>
+| <br>
+| <foo>
+
+#data
+</p><foo>
+#errors
+4: HTML end tag “p†in a foreign namespace context.
+(1:1) Unexpected </p> from in body insertion mode
+(1:10) Unexpected EOF
+#document-fragment
+svg svg
+#document
+| <p>
+| <svg foo>
+
+#data
+</br><foo>
+#errors
+5: HTML end tag “br†in a foreign namespace context.
+(1:1) Unexpected </br> from in body insertion mode
+(1:11) Unexpected EOF
+#document-fragment
+svg svg
+#document
+| <br>
+| <svg foo>
+
+#data
+<body><foo>
+#errors
+6: HTML start tag “body†in a foreign namespace context.
+(1:1) Unexpected <body> from in body insertion mode
+(1:12) Unexpected EOF
+#document-fragment
+svg svg
+#document
+| <svg foo>
+
+#data
+<p><foo>
+#errors
+3: HTML start tag “p†in a foreign namespace context.
+(1:9) Unexpected EOF
+#document-fragment
+svg svg
+#document
+| <p>
+| <foo>
+
+#data
+<p></p><foo>
+#errors
+3: HTML start tag “p†in a foreign namespace context.
+(1:13) Unexpected EOF
+#document-fragment
+svg svg
+#document
+| <p>
+| <svg foo>
diff --git a/tests/html5lib-tests/tree-construction/html5test-com.dat b/tests/html5lib-tests/tree-construction/html5test-com.dat
new file mode 100644
index 0000000..48d0bf9
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/html5test-com.dat
@@ -0,0 +1,301 @@
+#data
+<div<div>
+#errors
+(1,9): expected-doctype-but-got-start-tag
+(1,9): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div<div>
+
+#data
+<div foo<bar=''>
+#errors
+(1,9): invalid-character-in-attribute-name
+(1,16): expected-doctype-but-got-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#new-errors
+(1:9) unexpected-character-in-attribute-name
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| foo<bar=""
+
+#data
+<div foo=`bar`>
+#errors
+(1,10): equals-in-unquoted-attribute-value
+(1,14): unexpected-character-in-unquoted-attribute-value
+(1,15): expected-doctype-but-got-start-tag
+(1,15): expected-closing-tag-but-got-eof
+#new-errors
+(1:10) unexpected-character-in-unquoted-attribute-value
+(1:14) unexpected-character-in-unquoted-attribute-value
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| foo="`bar`"
+
+#data
+<div \"foo=''>
+#errors
+(1,7): invalid-character-in-attribute-name
+(1,14): expected-doctype-but-got-start-tag
+(1,14): expected-closing-tag-but-got-eof
+#new-errors
+(1:7) unexpected-character-in-attribute-name
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| \"foo=""
+
+#data
+<a href='\nbar'></a>
+#errors
+(1,16): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| href="\nbar"
+
+#data
+<!DOCTYPE html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+&lang;&rang;
+#errors
+(1,6): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "⟨⟩"
+
+#data
+&apos;
+#errors
+(1,6): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "'"
+
+#data
+&ImaginaryI;
+#errors
+(1,12): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "â…ˆ"
+
+#data
+&Kopf;
+#errors
+(1,6): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "ð•‚"
+
+#data
+&notinva;
+#errors
+(1,9): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "∉"
+
+#data
+<?import namespace="foo" implementation="#bar">
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,47): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?import namespace="foo" implementation="#bar" -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!--foo--bar-->
+#errors
+(1,15): expected-doctype-but-got-eof
+#document
+| <!-- foo--bar -->
+| <html>
+| <head>
+| <body>
+
+#data
+<![CDATA[x]]>
+#errors
+(1,2): expected-dashes-or-doctype
+(1,13): expected-doctype-but-got-eof
+#new-errors
+(1:9) cdata-in-html-content
+#document
+| <!-- [CDATA[x]] -->
+| <html>
+| <head>
+| <body>
+
+#data
+<textarea><!--</textarea>--></textarea>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,39): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<!--"
+| "-->"
+
+#data
+<textarea><!--</textarea>-->
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<!--"
+| "-->"
+
+#data
+<style><!--</style>--></style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,30): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--"
+| <body>
+| "-->"
+
+#data
+<style><!--</style>-->
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--"
+| <body>
+| "-->"
+
+#data
+<ul><li>A </li> <li>B</li></ul>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ul>
+| <li>
+| "A "
+| " "
+| <li>
+| "B"
+
+#data
+<table><form><input type=hidden><input></form><div></div></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,13): unexpected-form-in-table
+(1,32): unexpected-hidden-input-in-table
+(1,39): unexpected-start-tag-implies-table-voodoo
+(1,46): unexpected-end-tag-implies-table-voodoo
+(1,46): unexpected-end-tag
+(1,51): unexpected-start-tag-implies-table-voodoo
+(1,57): unexpected-end-tag-implies-table-voodoo
+#document
+| <html>
+| <head>
+| <body>
+| <input>
+| <div>
+| <table>
+| <form>
+| <input>
+| type="hidden"
+
+#data
+<i>A<b>B<p></i>C</b>D
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,15): adoption-agency-1.3
+(1,20): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <i>
+| "A"
+| <b>
+| "B"
+| <b>
+| <p>
+| <b>
+| <i>
+| "C"
+| "D"
+
+#data
+<div></div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+
+#data
+<svg></svg>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<math></math>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
diff --git a/tests/html5lib-tests/tree-construction/inbody01.dat b/tests/html5lib-tests/tree-construction/inbody01.dat
new file mode 100644
index 0000000..10f6520
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/inbody01.dat
@@ -0,0 +1,54 @@
+#data
+<button>1</foo>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,15): unexpected-end-tag
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <button>
+| "1"
+
+#data
+<foo>1<p>2</foo>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,16): unexpected-end-tag
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| "1"
+| <p>
+| "2"
+
+#data
+<dd>1</foo>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <dd>
+| "1"
+
+#data
+<foo>1<dd>2</foo>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,17): unexpected-end-tag
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| "1"
+| <dd>
+| "2"
diff --git a/tests/html5lib-tests/tree-construction/isindex.dat b/tests/html5lib-tests/tree-construction/isindex.dat
new file mode 100644
index 0000000..733f82e
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/isindex.dat
@@ -0,0 +1,49 @@
+#data
+<isindex>
+#errors
+(1,9): expected-doctype-but-got-start-tag
+(1,9): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <isindex>
+
+#data
+<isindex name="A" action="B" prompt="C" foo="D">
+#errors
+(1,48): expected-doctype-but-got-start-tag
+(1,48): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <isindex>
+| action="B"
+| foo="D"
+| name="A"
+| prompt="C"
+
+#data
+<form><isindex>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <form>
+| <isindex>
+
+#data
+<!doctype html><isindex>x</isindex>x
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <isindex>
+| "x"
+| "x"
diff --git a/tests/html5lib-tests/tree-construction/main-element.dat b/tests/html5lib-tests/tree-construction/main-element.dat
new file mode 100644
index 0000000..4b103bb
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/main-element.dat
@@ -0,0 +1,46 @@
+#data
+<!doctype html><p>foo<main>bar<p>baz
+#errors
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <main>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!doctype html><main><p>foo</main>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <main>
+| <p>
+| "foo"
+| "bar"
+
+#data
+<!DOCTYPE html>xxx<svg><x><g><a><main><b>
+#errors
+ * (1,42) unexpected HTML-like start tag token in foreign content
+ * (1,42) unexpected end of file
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "xxx"
+| <svg svg>
+| <svg x>
+| <svg g>
+| <svg a>
+| <svg main>
+| <b>
diff --git a/tests/html5lib-tests/tree-construction/math.dat b/tests/html5lib-tests/tree-construction/math.dat
new file mode 100644
index 0000000..d6a8ae5
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/math.dat
@@ -0,0 +1,104 @@
+#data
+<math><tr><td><mo><tr>
+#errors
+(1,22): unexpected-start-tag
+(1,23): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <math math>
+| <math tr>
+| <math td>
+| <math mo>
+
+#data
+<math><tr><td><mo><tr>
+#errors
+(1,6): foster-parenting-start-tag
+(1,22): expected-tr-in-table-scope
+(1,23): expected-closing-tag-but-got-eof
+#document-fragment
+tr
+#document
+| <math math>
+| <math tr>
+| <math td>
+| <math mo>
+
+#data
+<math><thead><mo><tbody>
+#errors
+(1,6): foster-parenting-start-tag
+(1,24): expected-table-part-in-table-scope
+(1,25): expected-closing-tag-but-got-eof
+#document-fragment
+thead
+#document
+| <math math>
+| <math thead>
+| <math mo>
+
+#data
+<math><tfoot><mo><tbody>
+#errors
+(1,6): foster-parenting-start-tag
+(1,24): expected-table-part-in-table-scope
+(1,25): expected-closing-tag-but-got-eof
+#document-fragment
+tfoot
+#document
+| <math math>
+| <math tfoot>
+| <math mo>
+
+#data
+<math><tbody><mo><tfoot>
+#errors
+(1,6): foster-parenting-start-tag
+(1,24): expected-table-part-in-table-scope
+(1,25): expected-closing-tag-but-got-eof
+#document-fragment
+tbody
+#document
+| <math math>
+| <math tbody>
+| <math mo>
+
+#data
+<math><tbody><mo></table>
+#errors
+(1,6): foster-parenting-start-tag
+(1,25): unexpected-end-tag-in-math
+(1,26): expected-closing-tag-but-got-eof
+#document-fragment
+tbody
+#document
+| <math math>
+| <math tbody>
+| <math mo>
+
+#data
+<math><thead><mo></table>
+#errors
+(1,6): foster-parenting-start-tag
+(1,25): unexpected-end-tag-in-math
+(1,26): expected-closing-tag-but-got-eof
+#document-fragment
+tbody
+#document
+| <math math>
+| <math thead>
+| <math mo>
+
+#data
+<math><tfoot><mo></table>
+#errors
+(1,6): foster-parenting-start-tag
+(1,25): unexpected-end-tag-in-math
+(1,26): expected-closing-tag-but-got-eof
+#document-fragment
+tbody
+#document
+| <math math>
+| <math tfoot>
+| <math mo>
diff --git a/tests/html5lib-tests/tree-construction/menuitem-element.dat b/tests/html5lib-tests/tree-construction/menuitem-element.dat
new file mode 100644
index 0000000..fb13c3c
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/menuitem-element.dat
@@ -0,0 +1,240 @@
+#data
+<menuitem>
+#errors
+10: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>â€.
+10: End of file seen and there were open elements.
+#document
+| <html>
+| <head>
+| <body>
+| <menuitem>
+
+#data
+</menuitem>
+#errors
+11: End tag seen without seeing a doctype first. Expected “<!DOCTYPE html>â€.
+11: Stray end tag “menuitemâ€.
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><body><menuitem>A
+#errors
+32: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| "A"
+
+#data
+<!DOCTYPE html><body><menuitem>A<menuitem>B
+#errors
+43: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| "A"
+| <menuitem>
+| "B"
+
+#data
+<!DOCTYPE html><body><menuitem>A<menu>B</menu>
+#errors
+46: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| "A"
+| <menu>
+| "B"
+
+#data
+<!DOCTYPE html><body><menuitem>A<hr>B
+#errors
+37: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| "A"
+| <hr>
+| "B"
+
+#data
+<!DOCTYPE html><li><menuitem><li>
+#errors
+33: End tag “li†implied, but there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <li>
+| <menuitem>
+| <li>
+
+#data
+<!DOCTYPE html><menuitem><p></menuitem>x
+#errors
+39: Stray end tag “menuitemâ€.
+40: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| <p>
+| "x"
+
+#data
+<!DOCTYPE html><p><b></p><menuitem>
+#errors
+25: End tag “p†seen, but there were open elements.
+35: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <b>
+| <menuitem>
+
+#data
+<!DOCTYPE html><menuitem><asdf></menuitem>x
+#errors
+42: End tag “menuitem†seen, but there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| <asdf>
+| "x"
+
+#data
+<!DOCTYPE html></menuitem>
+#errors
+26: Stray end tag “menuitemâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><html></menuitem>
+#errors
+26: Stray end tag “menuitemâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><head></menuitem>
+#errors
+26: Stray end tag “menuitemâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><select><menuitem></select>
+#errors
+33: Stray start tag “menuitemâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!DOCTYPE html><option><menuitem>
+#errors
+33: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <option>
+| <menuitem>
+
+#data
+<!DOCTYPE html><menuitem><option>
+#errors
+33: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| <option>
+
+#data
+<!DOCTYPE html><menuitem></body>
+#errors
+32: End tag for “body†seen, but there were unclosed elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+
+#data
+<!DOCTYPE html><menuitem></html>
+#errors
+32: End tag for “html†seen, but there were unclosed elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+
+#data
+<!DOCTYPE html><menuitem><p>
+#errors
+28: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| <p>
+
+#data
+<!DOCTYPE html><menuitem><li>
+#errors
+29: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <menuitem>
+| <li>
diff --git a/tests/html5lib-tests/tree-construction/namespace-sensitivity.dat b/tests/html5lib-tests/tree-construction/namespace-sensitivity.dat
new file mode 100644
index 0000000..050dca7
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/namespace-sensitivity.dat
@@ -0,0 +1,22 @@
+#data
+<body><table><tr><td><svg><td><foreignObject><span></td>Foo
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,56): unexpected-end-tag
+(1,60): foster-parenting-character
+(1,60): foster-parenting-character
+(1,60): foster-parenting-character
+(1,60): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| "Foo"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg td>
+| <svg foreignObject>
+| <span>
diff --git a/tests/html5lib-tests/tree-construction/noscript01.dat b/tests/html5lib-tests/tree-construction/noscript01.dat
new file mode 100644
index 0000000..ec3496c
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/noscript01.dat
@@ -0,0 +1,237 @@
+#data
+<head><noscript><!doctype html><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 31 Unexpected DOCTYPE. Ignored.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><html class="foo"><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 34 html needs to be the first start tag.
+#script-off
+#document
+| <html>
+| class="foo"
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript></noscript>
+#errors
+(1,6): expected-doctype-but-got-tag
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
+
+#data
+<head><noscript> </noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| " "
+| <body>
+
+#data
+<head><noscript><!--foo--></noscript>
+#errors
+(1,6): expected-doctype-but-got-tag
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><basefont><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <basefont>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><bgsound><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <bgsound>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><link><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <link>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><meta><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <meta>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><noframes>XXX</noscript></noframes></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <noframes>
+| "XXX</noscript>"
+| <body>
+
+#data
+<head><noscript><style>XXX</style></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <style>
+| "XXX"
+| <body>
+
+#data
+<head><noscript></br><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 21 Element br not allowed in a inhead-noscript context
+Line: 1 Col: 21 Unexpected end tag (br). Treated as br element.
+Line: 1 Col: 42 Unexpected end tag (noscript). Ignored.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
+| <br>
+| <!-- foo -->
+
+#data
+<head><noscript><head class="foo"><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 34 Unexpected start tag (head).
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><noscript class="foo"><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 34 Unexpected start tag (noscript).
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript></p><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 20 Unexpected end tag (p). Ignored.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- foo -->
+| <body>
+
+#data
+<head><noscript><p><!--foo--></noscript>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 19 Element p not allowed in a inhead-noscript context
+Line: 1 Col: 40 Unexpected end tag (noscript). Ignored.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
+| <p>
+| <!-- foo -->
+
+#data
+<head><noscript>XXX<!--foo--></noscript></head>
+#errors
+Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+Line: 1 Col: 19 Unexpected non-space character. Expected inhead-noscript content
+Line: 1 Col: 30 Unexpected end tag (noscript). Ignored.
+Line: 1 Col: 37 Unexpected end tag (head). Ignored.
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
+| "XXX"
+| <!-- foo -->
+
+#data
+<head><noscript>
+#errors
+(1,6): expected-doctype-but-got-tag
+(1,6): eof-in-head-noscript
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/pending-spec-changes-plain-text-unsafe.dat b/tests/html5lib-tests/tree-construction/pending-spec-changes-plain-text-unsafe.dat
new file mode 100644
index 0000000..2c546d4
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/pending-spec-changes-plain-text-unsafe.dat
Binary files differ
diff --git a/tests/html5lib-tests/tree-construction/pending-spec-changes.dat b/tests/html5lib-tests/tree-construction/pending-spec-changes.dat
new file mode 100644
index 0000000..1647d7f
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/pending-spec-changes.dat
@@ -0,0 +1,46 @@
+#data
+<input type="hidden"><frameset>
+#errors
+(1,21): expected-doctype-but-got-start-tag
+(1,31): unexpected-start-tag
+(1,31): eof-in-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><table><caption><svg>foo</table>bar
+#errors
+(1,47): unexpected-end-tag
+(1,47): end-table-tag-in-caption
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <svg svg>
+| "foo"
+| "bar"
+
+#data
+<table><tr><td><svg><desc><td></desc><circle>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,30): unexpected-cell-end-tag
+(1,37): unexpected-end-tag
+(1,45): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg desc>
+| <td>
+| <circle>
diff --git a/tests/html5lib-tests/tree-construction/plain-text-unsafe.dat b/tests/html5lib-tests/tree-construction/plain-text-unsafe.dat
new file mode 100644
index 0000000..e904eff
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/plain-text-unsafe.dat
Binary files differ
diff --git a/tests/html5lib-tests/tree-construction/ruby.dat b/tests/html5lib-tests/tree-construction/ruby.dat
new file mode 100644
index 0000000..f4e5e4e
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/ruby.dat
@@ -0,0 +1,302 @@
+#data
+<html><ruby>a<rb>b<rb></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rb>
+
+#data
+<html><ruby>a<rb>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rb>b<rtc></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rtc>
+
+#data
+<html><ruby>a<rb>b<rp></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rp>
+
+#data
+<html><ruby>a<rb>b<span></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,31): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <span>
+
+#data
+<html><ruby>a<rt>b<rb></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <rb>
+
+#data
+<html><ruby>a<rt>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rt>b<rtc></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <rtc>
+
+#data
+<html><ruby>a<rt>b<rp></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <rp>
+
+#data
+<html><ruby>a<rt>b<span></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,31): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <span>
+
+#data
+<html><ruby>a<rtc>b<rb></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <rb>
+
+#data
+<html><ruby>a<rtc>b<rt>c<rt>d</ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <rt>
+| "c"
+| <rt>
+| "d"
+
+#data
+<html><ruby>a<rtc>b<rtc></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <rtc>
+
+#data
+<html><ruby>a<rtc>b<rp></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <rp>
+
+#data
+<html><ruby>a<rtc>b<span></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,32): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <span>
+
+#data
+<html><ruby>a<rp>b<rb></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <rb>
+
+#data
+<html><ruby>a<rp>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rp>b<rtc></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <rtc>
+
+#data
+<html><ruby>a<rp>b<rp></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <rp>
+
+#data
+<html><ruby>a<rp>b<span></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,31): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <span>
+
+#data
+<html><ruby><rtc><ruby>a<rb>b<rt></ruby></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <rtc>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rt>
diff --git a/tests/html5lib-tests/tree-construction/scriptdata01.dat b/tests/html5lib-tests/tree-construction/scriptdata01.dat
new file mode 100644
index 0000000..e570858
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/scriptdata01.dat
@@ -0,0 +1,385 @@
+#data
+FOO<script>'Hello'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'Hello'"
+| "BAR"
+
+#data
+FOO<script></script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "BAR"
+
+#data
+FOO<script></script >BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "BAR"
+
+#data
+FOO<script></script/>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,21): self-closing-flag-on-end-tag
+#new-errors
+(1:21) end-tag-with-trailing-solidus
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "BAR"
+
+#data
+FOO<script></script/ >BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,20): unexpected-character-after-solidus-in-tag
+#new-errors
+(1:21) unexpected-solidus-in-tag
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "BAR"
+
+#data
+FOO<script type="text/plain"></scriptx>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,42): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "</scriptx>BAR"
+
+#data
+FOO<script></script foo=">" dd>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,31): attributes-in-end-tag
+#new-errors
+(1:31) end-tag-with-attributes
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "BAR"
+
+#data
+FOO<script>'<'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<'"
+| "BAR"
+
+#data
+FOO<script>'<!'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!'"
+| "BAR"
+
+#data
+FOO<script>'<!-'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-'"
+| "BAR"
+
+#data
+FOO<script>'<!--'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!--'"
+| "BAR"
+
+#data
+FOO<script>'<!---'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!---'"
+| "BAR"
+
+#data
+FOO<script>'<!-->'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-->'"
+| "BAR"
+
+#data
+FOO<script>'<!-->'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-->'"
+| "BAR"
+
+#data
+FOO<script>'<!-- potato'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-- potato'"
+| "BAR"
+
+#data
+FOO<script>'<!-- <sCrIpt'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-- <sCrIpt'"
+| "BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt>'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,56): expected-script-data-but-got-eof
+(1,56): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:57) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt>'</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt> -'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,58): expected-script-data-but-got-eof
+(1,58): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:59) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt> -'</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt> --'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,59): expected-script-data-but-got-eof
+(1,59): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:60) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt> --'</script>BAR"
+
+#data
+FOO<script>'<!-- <sCrIpt> -->'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "'<!-- <sCrIpt> -->'"
+| "BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt> --!>'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,61): expected-script-data-but-got-eof
+(1,61): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:62) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt> --!>'</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt> -- >'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,61): expected-script-data-but-got-eof
+(1,61): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:62) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt> -- >'</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt '</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,56): expected-script-data-but-got-eof
+(1,56): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:57) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt '</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt/'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+(1,56): expected-script-data-but-got-eof
+(1,56): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:57) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt/'</script>BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt\'</script>BAR
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt\'"
+| "BAR"
+
+#data
+FOO<script type="text/plain">'<!-- <sCrIpt/'</script>BAR</script>QUX
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| type="text/plain"
+| "'<!-- <sCrIpt/'</script>BAR"
+| "QUX"
+
+#data
+FOO<script><!--<script>-></script>--></script>QUX
+#errors
+(1,3): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "FOO"
+| <script>
+| "<!--<script>-></script>-->"
+| "QUX"
diff --git a/tests/html5lib-tests/tree-construction/scripted/adoption01.dat b/tests/html5lib-tests/tree-construction/scripted/adoption01.dat
new file mode 100644
index 0000000..5cc0f07
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/scripted/adoption01.dat
@@ -0,0 +1,16 @@
+#data
+<p><b id="A"><script>document.getElementById("A").id = "B"</script></p>TEXT</b>
+#errors
+#script-on
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| id="B"
+| <script>
+| "document.getElementById("A").id = "B""
+| <b>
+| id="A"
+| "TEXT"
diff --git a/tests/html5lib-tests/tree-construction/scripted/ark.dat b/tests/html5lib-tests/tree-construction/scripted/ark.dat
new file mode 100644
index 0000000..feebead
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/scripted/ark.dat
@@ -0,0 +1,27 @@
+#data
+<p><font size=4><font size=4><font size=4><script>document.getElementsByTagName("font")[2].setAttribute("size", "5");</script><font size=4><p>X
+#errors
+#script-on
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="5"
+| <script>
+| "document.getElementsByTagName("font")[2].setAttribute("size", "5");"
+| <font>
+| size="4"
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| "X"
diff --git a/tests/html5lib-tests/tree-construction/scripted/webkit01.dat b/tests/html5lib-tests/tree-construction/scripted/webkit01.dat
new file mode 100644
index 0000000..3e71c1b
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/scripted/webkit01.dat
@@ -0,0 +1,30 @@
+#data
+1<script>document.write("2")</script>3
+#errors
+#script-on
+#document
+| <html>
+| <head>
+| <body>
+| "1"
+| <script>
+| "document.write("2")"
+| "23"
+
+#data
+1<script>document.write("<script>document.write('2')</scr"+ "ipt><script>document.write('3')</scr" + "ipt>")</script>4
+#errors
+#script-on
+#document
+| <html>
+| <head>
+| <body>
+| "1"
+| <script>
+| "document.write("<script>document.write('2')</scr"+ "ipt><script>document.write('3')</scr" + "ipt>")"
+| <script>
+| "document.write('2')"
+| "2"
+| <script>
+| "document.write('3')"
+| "34"
diff --git a/tests/html5lib-tests/tree-construction/svg.dat b/tests/html5lib-tests/tree-construction/svg.dat
new file mode 100644
index 0000000..a452e7a
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/svg.dat
@@ -0,0 +1,104 @@
+#data
+<svg><tr><td><title><tr>
+#errors
+(1:21) Unexpected <tr> tag
+(1:25) Unexpected EOF
+#document-fragment
+td
+#document
+| <svg svg>
+| <svg tr>
+| <svg td>
+| <svg title>
+
+#data
+<svg><tr><td><title><tr>
+#errors
+(1:1) Unexpected <svg> tag
+(1:21) Unexpected <tr> tag
+(1:25) Unexpected EOF
+#document-fragment
+tr
+#document
+| <svg svg>
+| <svg tr>
+| <svg td>
+| <svg title>
+
+#data
+<svg><thead><title><tbody>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected <tbody> tag
+(1:27) Unexpected EOF
+#document-fragment
+thead
+#document
+| <svg svg>
+| <svg thead>
+| <svg title>
+
+#data
+<svg><tfoot><title><tbody>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected <tbody> tag
+(1:27) Unexpected EOF
+#document-fragment
+tfoot
+#document
+| <svg svg>
+| <svg tfoot>
+| <svg title>
+
+#data
+<svg><tbody><title><tfoot>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected <tfoot> tag
+(1:27) Unexpected EOF
+#document-fragment
+tbody
+#document
+| <svg svg>
+| <svg tbody>
+| <svg title>
+
+#data
+<svg><tbody><title></table>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected </table> tag
+(1:28) Unexpected EOF
+#document-fragment
+tbody
+#document
+| <svg svg>
+| <svg tbody>
+| <svg title>
+
+#data
+<svg><thead><title></table>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected </table> tag
+(1:28) Unexpected EOF
+#document-fragment
+tbody
+#document
+| <svg svg>
+| <svg thead>
+| <svg title>
+
+#data
+<svg><tfoot><title></table>
+#errors
+(1:1) Unexpected <svg> tag
+(1:20) Unexpected </table> tag
+(1:28) Unexpected EOF
+#document-fragment
+tbody
+#document
+| <svg svg>
+| <svg tfoot>
+| <svg title>
diff --git a/tests/html5lib-tests/tree-construction/tables01.dat b/tests/html5lib-tests/tree-construction/tables01.dat
new file mode 100644
index 0000000..f0caaa3
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tables01.dat
@@ -0,0 +1,286 @@
+#data
+<table><th>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,11): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <th>
+
+#data
+<table><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,11): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><col foo='bar'>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,22): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <col>
+| foo="bar"
+
+#data
+<table><colgroup></html>foo
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,24): unexpected-end-tag
+(1,27): foster-parenting-character-in-table
+(1,27): foster-parenting-character-in-table
+(1,27): foster-parenting-character-in-table
+(1,27): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| "foo"
+| <table>
+| <colgroup>
+
+#data
+<table></table><p>foo
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <p>
+| "foo"
+
+#data
+<table></body></caption></col></colgroup></html></tbody></td></tfoot></th></thead></tr><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,14): unexpected-end-tag
+(1,24): unexpected-end-tag
+(1,30): unexpected-end-tag
+(1,41): unexpected-end-tag
+(1,48): unexpected-end-tag
+(1,56): unexpected-end-tag
+(1,61): unexpected-end-tag
+(1,69): unexpected-end-tag
+(1,74): unexpected-end-tag
+(1,82): unexpected-end-tag
+(1,87): unexpected-end-tag
+(1,91): unexpected-cell-in-table-body
+(1,91): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><select><option>3</select></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-implies-table-voodoo
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| "3"
+| <table>
+
+#data
+<table><select><table></table></select></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-implies-table-voodoo
+(1,22): unexpected-table-element-start-tag-in-select-in-table
+(1,22): unexpected-start-tag-implies-end-tag
+(1,39): unexpected-end-tag
+(1,47): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <table>
+| <table>
+
+#data
+<table><select></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-implies-table-voodoo
+(1,23): unexpected-table-element-end-tag-in-select-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <table>
+
+#data
+<table><select><option>A<tr><td>B</td></tr></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-implies-table-voodoo
+(1,28): unexpected-table-element-start-tag-in-select-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| "A"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "B"
+
+#data
+<table><td></body></caption></col></colgroup></html>foo
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,18): unexpected-end-tag
+(1,28): unexpected-end-tag
+(1,34): unexpected-end-tag
+(1,45): unexpected-end-tag
+(1,52): unexpected-end-tag
+(1,55): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "foo"
+
+#data
+<table><td>A</table>B
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "A"
+| "B"
+
+#data
+<table><tr><caption>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <caption>
+
+#data
+<table><tr></body></caption></col></colgroup></html></td></th><td>foo
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,18): unexpected-end-tag-in-table-row
+(1,28): unexpected-end-tag-in-table-row
+(1,34): unexpected-end-tag-in-table-row
+(1,45): unexpected-end-tag-in-table-row
+(1,52): unexpected-end-tag-in-table-row
+(1,57): unexpected-end-tag-in-table-row
+(1,62): unexpected-end-tag-in-table-row
+(1,69): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "foo"
+
+#data
+<table><td><tr>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,15): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <tr>
+
+#data
+<table><td><button><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,23): unexpected-cell-end-tag
+(1,23): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <button>
+| <td>
+
+#data
+<table><tr><td><svg><desc><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,30): unexpected-cell-end-tag
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg desc>
+| <td>
diff --git a/tests/html5lib-tests/tree-construction/template.dat b/tests/html5lib-tests/tree-construction/template.dat
new file mode 100644
index 0000000..2d97183
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/template.dat
@@ -0,0 +1,1613 @@
+#data
+<body><template>Hello</template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| "Hello"
+
+#data
+<template>Hello</template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <template>
+| content
+| "Hello"
+| <body>
+
+#data
+<template></template><div></div>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <body>
+| <div>
+
+#data
+<html><template>Hello</template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <template>
+| content
+| "Hello"
+| <body>
+
+#data
+<head><template><div></div></template></head>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <div>
+| <body>
+
+#data
+<div><template><div><span></template><b>
+#errors
+ * (1,6) missing DOCTYPE
+ * (1,38) mismatched template end tag
+ * (1,41) unexpected end of file
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <template>
+| content
+| <div>
+| <span>
+| <b>
+
+#data
+<div><template></div>Hello
+#errors
+ * (1,6) missing DOCTYPE
+ * (1,22) unexpected token in template
+ * (1,27) unexpected end of file in template
+ * (1,27) unexpected end of file
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <template>
+| content
+| "Hello"
+
+#data
+<div></template></div>
+#errors
+ * (1,6) missing DOCTYPE
+ * (1,17) unexpected template end tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+
+#data
+<table><template></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+
+#data
+<table><template></template></div>
+#errors
+ * (1,8) missing DOCTYPE
+ * (1,35) unexpected token in table - foster parenting
+ * (1,35) unexpected end tag
+ * (1,35) unexpected end of file
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+
+#data
+<table><div><template></template></div>
+#errors
+ * (1,8) missing DOCTYPE
+ * (1,13) unexpected token in table - foster parenting
+ * (1,40) unexpected token in table - foster parenting
+ * (1,40) unexpected end of file
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <template>
+| content
+| <table>
+
+#data
+<table><template></template><div></div>
+#errors
+no doctype
+bad div in table
+bad /div in table
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <table>
+| <template>
+| content
+
+#data
+<table> <template></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| " "
+| <template>
+| content
+
+#data
+<table><tbody><template></template></tbody>
+#errors
+no doctype
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <template>
+| content
+
+#data
+<table><tbody><template></tbody></template>
+#errors
+no doctype
+bad /tbody
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <template>
+| content
+
+#data
+<table><tbody><template></template></tbody></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <template>
+| content
+
+#data
+<table><thead><template></template></thead>
+#errors
+no doctype
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <thead>
+| <template>
+| content
+
+#data
+<table><tfoot><template></template></tfoot>
+#errors
+no doctype
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tfoot>
+| <template>
+| content
+
+#data
+<select><template></template></select>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <template>
+| content
+
+#data
+<select><template><option></option></template></select>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <template>
+| content
+| <option>
+
+#data
+<template><option></option></select><option></option></template>
+#errors
+no doctype
+bad /select
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <option>
+| <option>
+| <body>
+
+#data
+<select><template></template><option></select>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <template>
+| content
+| <option>
+
+#data
+<select><option><template></template></select>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <template>
+| content
+
+#data
+<select><template>
+#errors
+no doctype
+eof in template
+eof in select
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <template>
+| content
+
+#data
+<select><option></option><template>
+#errors
+no doctype
+eof in template
+eof in select
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <template>
+| content
+
+#data
+<select><option></option><template><option>
+#errors
+no doctype
+eof in template
+eof in select
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <template>
+| content
+| <option>
+
+#data
+<table><thead><template><td></template></table>
+#errors
+ * (1,8) missing DOCTYPE
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <thead>
+| <template>
+| content
+| <td>
+
+#data
+<table><template><thead></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <thead>
+
+#data
+<body><table><template><td></tr><div></template></table>
+#errors
+no doctype
+bad </tr>
+missing </div>
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <td>
+| <div>
+
+#data
+<table><template><thead></template></thead></table>
+#errors
+no doctype
+bad /thead after /template
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <thead>
+
+#data
+<table><thead><template><tr></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <thead>
+| <template>
+| content
+| <tr>
+
+#data
+<table><template><tr></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <tr>
+
+#data
+<table><tr><template><td>
+#errors
+no doctype
+eof in template
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <template>
+| content
+| <td>
+
+#data
+<table><template><tr><template><td></template></tr></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <tr>
+| <template>
+| content
+| <td>
+
+#data
+<table><template><tr><template><td></td></template></tr></template></table>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <tr>
+| <template>
+| content
+| <td>
+
+#data
+<table><template><td></template>
+#errors
+no doctype
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <template>
+| content
+| <td>
+
+#data
+<body><template><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+
+#data
+<body><template><template><tr></tr></template><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <template>
+| content
+| <tr>
+| <td>
+
+#data
+<table><colgroup><template><col>
+#errors
+no doctype
+eof in template
+eof in table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <template>
+| content
+| <col>
+
+#data
+<frameset><template><frame></frame></template></frameset>
+#errors
+ * (1,11) missing DOCTYPE
+ * (1,21) unexpected start tag token
+ * (1,36) unexpected end tag token
+ * (1,47) unexpected end tag token
+#document
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<template><frame></frame></frameset><frame></frame></template>
+#errors
+ * (1,11) missing DOCTYPE
+ * (1,18) unexpected start tag
+ * (1,26) unexpected end tag
+ * (1,37) unexpected end tag
+ * (1,44) unexpected start tag
+ * (1,52) unexpected end tag
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <body>
+
+#data
+<template><div><frameset><span></span></div><span></span></template>
+#errors
+no doctype
+bad frameset
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <div>
+| <span>
+| <span>
+| <body>
+
+#data
+<body><template><div><frameset><span></span></div><span></span></template></body>
+#errors
+no doctype
+bad frameset
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <div>
+| <span>
+| <span>
+
+#data
+<body><template><script>var i = 1;</script><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <script>
+| "var i = 1;"
+| <td>
+
+#data
+<body><template><tr><div></div></tr></template>
+#errors
+no doctype
+foster-parented div
+foster-parented /div
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <div>
+
+#data
+<body><template><tr></tr><td></td></template>
+#errors
+no doctype
+unexpected <td>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <tr>
+| <td>
+
+#data
+<body><template><td></td></tr><td></td></template>
+#errors
+no doctype
+bad </tr>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+| <td>
+
+#data
+<body><template><td></td><tbody><td></td></template>
+#errors
+no doctype
+bad <tbody>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+| <td>
+
+#data
+<body><template><td></td><caption></caption><td></td></template>
+#errors
+ * (1,7) missing DOCTYPE
+ * (1,35) unexpected start tag in table row
+ * (1,45) unexpected end tag in table row
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+| <td>
+
+#data
+<body><template><td></td><colgroup></caption><td></td></template>
+#errors
+ * (1,7) missing DOCTYPE
+ * (1,36) unexpected start tag in table row
+ * (1,46) unexpected end tag in table row
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+| <td>
+
+#data
+<body><template><td></td></table><td></td></template>
+#errors
+no doctype
+bad </table>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <td>
+| <td>
+
+#data
+<body><template><tr></tr><tbody><tr></tr></template>
+#errors
+no doctype
+bad <tbody>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <tr>
+
+#data
+<body><template><tr></tr><caption><tr></tr></template>
+#errors
+no doctype
+bad <caption>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <tr>
+
+#data
+<body><template><tr></tr></table><tr></tr></template>
+#errors
+no doctype
+bad </table>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <tr>
+
+#data
+<body><template><thead></thead><caption></caption><tbody></tbody></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <thead>
+| <caption>
+| <tbody>
+
+#data
+<body><template><thead></thead></table><tbody></tbody></template></body>
+#errors
+no doctype
+bad </table>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <thead>
+| <tbody>
+
+#data
+<body><template><div><tr></tr></div></template>
+#errors
+no doctype
+bad tr
+bad /tr
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <div>
+
+#data
+<body><template><em>Hello</em></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <em>
+| "Hello"
+
+#data
+<body><template><!--comment--></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <!-- comment -->
+
+#data
+<body><template><style></style><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <style>
+| <td>
+
+#data
+<body><template><meta><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <meta>
+| <td>
+
+#data
+<body><template><link><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <link>
+| <td>
+
+#data
+<body><template><template><tr></tr></template><td></td></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <template>
+| content
+| <tr>
+| <td>
+
+#data
+<body><table><colgroup><template><col></col></template></colgroup></table></body>
+#errors
+no doctype
+bad /col
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <template>
+| content
+| <col>
+
+#data
+<body a=b><template><div></div><body c=d><div></div></body></template></body>
+#errors
+no doctype
+bad <body>
+bad </body>
+#document
+| <html>
+| <head>
+| <body>
+| a="b"
+| <template>
+| content
+| <div>
+| <div>
+
+#data
+<html a=b><template><div><html b=c><span></template>
+#errors
+no doctype
+bad <html>
+missing end tags in template
+#document
+| <html>
+| a="b"
+| <head>
+| <template>
+| content
+| <div>
+| <span>
+| <body>
+
+#data
+<html a=b><template><col></col><html b=c><col></col></template>
+#errors
+no doctype
+bad /col
+bad html
+bad /col
+#document
+| <html>
+| a="b"
+| <head>
+| <template>
+| content
+| <col>
+| <col>
+| <body>
+
+#data
+<html a=b><template><frame></frame><html b=c><frame></frame></template>
+#errors
+no doctype
+bad frame
+bad /frame
+bad html
+bad frame
+bad /frame
+#document
+| <html>
+| a="b"
+| <head>
+| <template>
+| content
+| <body>
+
+#data
+<body><template><tr></tr><template></template><td></td></template>
+#errors
+no doctype
+unexpected <td>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <tr>
+| <template>
+| content
+| <tr>
+| <td>
+
+#data
+<body><template><thead></thead><template><tr></tr></template><tr></tr><tfoot></tfoot></template>
+#errors
+no doctype
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <thead>
+| <template>
+| content
+| <tr>
+| <tbody>
+| <tr>
+| <tfoot>
+
+#data
+<body><template><template><b><template></template></template>text</template>
+#errors
+no doctype
+missing </b>
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <template>
+| content
+| <b>
+| <template>
+| content
+| "text"
+
+#data
+<body><template><col><colgroup>
+#errors
+no doctype
+bad colgroup
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><col></colgroup>
+#errors
+no doctype
+bogus /colgroup
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><col><colgroup></template></body>
+#errors
+no doctype
+bad colgroup
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><col><div>
+#errors
+ * (1,7) missing DOCTYPE
+ * (1,27) unexpected token
+ * (1,27) unexpected end of file in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><col></div>
+#errors
+no doctype
+bad /div
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><col>Hello
+#errors
+no doctype
+(1,27): foster-parenting-character
+(1,27): foster-parenting-character
+(1,27): foster-parenting-character
+(1,27): foster-parenting-character
+(1,27): foster-parenting-character
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <col>
+
+#data
+<body><template><i><menu>Foo</i>
+#errors
+no doctype
+mising /menu
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <i>
+| <menu>
+| <i>
+| "Foo"
+
+#data
+<body><template></div><div>Foo</div><template></template><tr></tr>
+#errors
+no doctype
+bogus /div
+bogus tr
+bogus /tr
+eof in template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+| <div>
+| "Foo"
+| <template>
+| content
+
+#data
+<body><div><template></div><tr><td>Foo</td></tr></template>
+#errors
+ * (1,7) missing DOCTYPE
+ * (1,28) unexpected token in template
+ * (1,60) unexpected end of file
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <template>
+| content
+| <tr>
+| <td>
+| "Foo"
+
+#data
+<template></figcaption><sub><table></table>
+#errors
+no doctype
+bad /figcaption
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <sub>
+| <table>
+| <body>
+
+#data
+<template><template>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <body>
+
+#data
+<template><div>
+#errors
+no doctype
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <div>
+| <body>
+
+#data
+<template><template><div>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <div>
+| <body>
+
+#data
+<template><template><table>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <table>
+| <body>
+
+#data
+<template><template><tbody>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <tbody>
+| <body>
+
+#data
+<template><template><tr>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <tr>
+| <body>
+
+#data
+<template><template><td>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <td>
+| <body>
+
+#data
+<template><template><caption>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <caption>
+| <body>
+
+#data
+<template><template><colgroup>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <colgroup>
+| <body>
+
+#data
+<template><template><col>
+#errors
+no doctype
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <col>
+| <body>
+
+#data
+<template><template><tbody><select>
+#errors
+ * (1,11) missing DOCTYPE
+ * (1,36) unexpected token in table - foster parenting
+ * (1,36) unexpected end of file in template
+ * (1,36) unexpected end of file in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <tbody>
+| <select>
+| <body>
+
+#data
+<template><template><table>Foo
+#errors
+no doctype
+foster-parenting text F
+foster-parenting text o
+foster-parenting text o
+eof
+eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| "Foo"
+| <table>
+| <body>
+
+#data
+<template><template><frame>
+#errors
+no doctype
+bad tag
+eof
+eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <body>
+
+#data
+<template><template><script>var i
+#errors
+no doctype
+eof in script
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <script>
+| "var i"
+| <body>
+
+#data
+<template><template><style>var i
+#errors
+no doctype
+eof in style
+eof in template
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <template>
+| content
+| <style>
+| "var i"
+| <body>
+
+#data
+<template><table></template><body><span>Foo
+#errors
+no doctype
+missing /table
+bad eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <table>
+| <body>
+| <span>
+| "Foo"
+
+#data
+<template><td></template><body><span>Foo
+#errors
+no doctype
+bad eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <td>
+| <body>
+| <span>
+| "Foo"
+
+#data
+<template><object></template><body><span>Foo
+#errors
+no doctype
+missing /object
+bad eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <object>
+| <body>
+| <span>
+| "Foo"
+
+#data
+<template><svg><template>
+#errors
+no doctype
+eof in template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <svg svg>
+| <svg template>
+| <body>
+
+#data
+<template><svg><foo><template><foreignObject><div></template><div>
+#errors
+no doctype
+ugly template closure
+bad eof
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <svg svg>
+| <svg foo>
+| <svg template>
+| <svg foreignObject>
+| <div>
+| <body>
+| <div>
+
+#data
+<dummy><template><span></dummy>
+#errors
+no doctype
+bad end tag </dummy>
+eof in template
+eof in dummy
+#document
+| <html>
+| <head>
+| <body>
+| <dummy>
+| <template>
+| content
+| <span>
+
+#data
+<body><table><tr><td><select><template>Foo</template><caption>A</table>
+#errors
+no doctype
+(1,62): unexpected-caption-in-select-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <select>
+| <template>
+| content
+| "Foo"
+| <caption>
+| "A"
+
+#data
+<body></body><template>
+#errors
+no doctype
+(1,23): template-after-body
+(1,24): eof-in-template
+#document
+| <html>
+| <head>
+| <body>
+| <template>
+| content
+
+#data
+<head></head><template>
+#errors
+no doctype
+(1,23): template-after-head
+(1,24): eof-in-template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <body>
+
+#data
+<head></head><template>Foo</template>
+#errors
+no doctype
+(1,23): template-after-head
+#document
+| <html>
+| <head>
+| <template>
+| content
+| "Foo"
+| <body>
+
+#data
+<!DOCTYPE HTML><dummy><table><template><table><template><table><script>
+#errors
+eof script
+eof template
+eof template
+eof table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dummy>
+| <table>
+| <template>
+| content
+| <table>
+| <template>
+| content
+| <table>
+| <script>
+
+#data
+<template><a><table><a>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,23): foster-parenting-start-tag
+(1,23): unexpected-start-tag
+(1,23): formatting-element-not-in-scope
+(1,24): eof-in-template
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <a>
+| <a>
+| <table>
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/tests1.dat b/tests/html5lib-tests/tree-construction/tests1.dat
new file mode 100644
index 0000000..86632de
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests1.dat
@@ -0,0 +1,1987 @@
+#data
+Test
+#errors
+(1,0): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "Test"
+
+#data
+<p>One<p>Two
+#errors
+(1,3): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| "One"
+| <p>
+| "Two"
+
+#data
+Line1<br>Line2<br>Line3<br>Line4
+#errors
+(1,0): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "Line1"
+| <br>
+| "Line2"
+| <br>
+| "Line3"
+| <br>
+| "Line4"
+
+#data
+<html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<head>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head></head>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head></head><body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head></head><body></body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head><body></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><head><body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<html><body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<head></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+</head>
+#errors
+(1,7): expected-doctype-but-got-end-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+</body>
+#errors
+(1,7): expected-doctype-but-got-end-tag element.
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+</html>
+#errors
+(1,7): expected-doctype-but-got-end-tag element.
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<b><table><td><i></table>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,25): unexpected-cell-end-tag
+(1,25): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <i>
+
+#data
+<b><table><td></b><i></table>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,18): unexpected-end-tag
+(1,29): unexpected-cell-end-tag
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <i>
+| "X"
+
+#data
+<h1>Hello<h2>World
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,13): unexpected-start-tag
+(1,18): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <h1>
+| "Hello"
+| <h2>
+| "World"
+
+#data
+<a><p>X<a>Y</a>Z</p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,10): unexpected-start-tag-implies-end-tag
+(1,10): adoption-agency-1.3
+(1,24): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <p>
+| <a>
+| "X"
+| <a>
+| "Y"
+| "Z"
+
+#data
+<b><button>foo</b>bar
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,18): adoption-agency-1.3
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <button>
+| <b>
+| "foo"
+| "bar"
+
+#data
+<!DOCTYPE html><span><button>foo</span>bar
+#errors
+(1,39): unexpected-end-tag
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <span>
+| <button>
+| "foobar"
+
+#data
+<p><b><div><marquee></p></b></div>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+(1,24): unexpected-end-tag
+(1,28): unexpected-end-tag
+(1,34): end-tag-too-early
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <div>
+| <b>
+| <marquee>
+| <p>
+| "X"
+
+#data
+<script><div></script></div><title><p></title><p><p>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,28): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<div>"
+| <title>
+| "<p>"
+| <body>
+| <p>
+| <p>
+
+#data
+<!--><div>--<!-->
+#errors
+(1,5): incorrect-comment
+(1,10): expected-doctype-but-got-start-tag
+(1,17): incorrect-comment
+(1,17): expected-closing-tag-but-got-eof
+#new-errors
+(1:5) abrupt-closing-of-empty-comment
+(1:17) abrupt-closing-of-empty-comment
+#document
+| <!-- -->
+| <html>
+| <head>
+| <body>
+| <div>
+| "--"
+| <!-- -->
+
+#data
+<p><hr></p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <hr>
+| <p>
+
+#data
+<select><b><option><select><option></b></select>X
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): unexpected-start-tag-in-select
+(1,27): unexpected-select-in-select
+(1,39): unexpected-end-tag
+(1,48): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <option>
+| "X"
+
+#data
+<a><table><td><a><table></table><a></tr><a></table><b>X</b>C<a>Y
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,35): unexpected-start-tag-implies-end-tag
+(1,40): unexpected-cell-end-tag
+(1,43): unexpected-start-tag-implies-table-voodoo
+(1,43): unexpected-start-tag-implies-end-tag
+(1,43): unexpected-end-tag
+(1,63): unexpected-start-tag-implies-end-tag
+(1,64): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <a>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <a>
+| <table>
+| <a>
+| <a>
+| <b>
+| "X"
+| "C"
+| <a>
+| "Y"
+
+#data
+<a X>0<b>1<a Y>2
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-implies-end-tag
+(1,15): adoption-agency-1.3
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| x=""
+| "0"
+| <b>
+| "1"
+| <b>
+| <a>
+| y=""
+| "2"
+
+#data
+<!-----><font><div>hello<table>excite!<b>me!<th><i>please!</tr><!--X-->
+#errors
+(1,14): expected-doctype-but-got-start-tag
+(1,41): unexpected-start-tag-implies-table-voodoo
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): foster-parenting-character-in-table
+(1,48): unexpected-cell-in-table-body
+(1,63): unexpected-cell-end-tag
+(1,71): eof-in-table
+#document
+| <!-- - -->
+| <html>
+| <head>
+| <body>
+| <font>
+| <div>
+| "helloexcite!"
+| <b>
+| "me!"
+| <table>
+| <tbody>
+| <tr>
+| <th>
+| <i>
+| "please!"
+| <!-- X -->
+
+#data
+<!DOCTYPE html><li>hello<li>world<ul>how<li>do</ul>you</body><!--do-->
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <li>
+| "hello"
+| <li>
+| "world"
+| <ul>
+| "how"
+| <li>
+| "do"
+| "you"
+| <!-- do -->
+
+#data
+<!DOCTYPE html>A<option>B<optgroup>C<select>D</option>E
+#errors
+(1,54): unexpected-end-tag-in-select
+(1,55): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+| <option>
+| "B"
+| <optgroup>
+| "C"
+| <select>
+| "DE"
+
+#data
+<
+#errors
+(1,1): expected-tag-name
+(1,1): expected-doctype-but-got-chars
+#new-errors
+(1:2) eof-before-tag-name
+#document
+| <html>
+| <head>
+| <body>
+| "<"
+
+#data
+<#
+#errors
+(1,1): expected-tag-name
+(1,1): expected-doctype-but-got-chars
+#new-errors
+(1:2) invalid-first-character-of-tag-name
+#document
+| <html>
+| <head>
+| <body>
+| "<#"
+
+#data
+</
+#errors
+(1,2): expected-closing-tag-but-got-eof
+(1,2): expected-doctype-but-got-chars
+#new-errors
+(1:3) eof-before-tag-name
+#document
+| <html>
+| <head>
+| <body>
+| "</"
+
+#data
+</#
+#errors
+(1,2): expected-closing-tag-but-got-char
+(1,3): expected-doctype-but-got-eof
+#new-errors
+(1:3) invalid-first-character-of-tag-name
+#document
+| <!-- # -->
+| <html>
+| <head>
+| <body>
+
+#data
+<?
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,2): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ? -->
+| <html>
+| <head>
+| <body>
+
+#data
+<?#
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,3): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?# -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!
+#errors
+(1,2): expected-dashes-or-doctype
+(1,2): expected-doctype-but-got-eof
+#new-errors
+(1:3) incorrectly-opened-comment
+#document
+| <!-- -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!#
+#errors
+(1,2): expected-dashes-or-doctype
+(1,3): expected-doctype-but-got-eof
+#new-errors
+(1:3) incorrectly-opened-comment
+#document
+| <!-- # -->
+| <html>
+| <head>
+| <body>
+
+#data
+<?COMMENT?>
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,11): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?COMMENT? -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!COMMENT>
+#errors
+(1,2): expected-dashes-or-doctype
+(1,10): expected-doctype-but-got-eof
+#new-errors
+(1:3) incorrectly-opened-comment
+#document
+| <!-- COMMENT -->
+| <html>
+| <head>
+| <body>
+
+#data
+</ COMMENT >
+#errors
+(1,2): expected-closing-tag-but-got-char
+(1,12): expected-doctype-but-got-eof
+#new-errors
+(1:3) invalid-first-character-of-tag-name
+#document
+| <!-- COMMENT -->
+| <html>
+| <head>
+| <body>
+
+#data
+<?COM--MENT?>
+#errors
+(1,1): expected-tag-name-but-got-question-mark
+(1,13): expected-doctype-but-got-eof
+#new-errors
+(1:2) unexpected-question-mark-instead-of-tag-name
+#document
+| <!-- ?COM--MENT? -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!COM--MENT>
+#errors
+(1,2): expected-dashes-or-doctype
+(1,12): expected-doctype-but-got-eof
+#new-errors
+(1:3) incorrectly-opened-comment
+#document
+| <!-- COM--MENT -->
+| <html>
+| <head>
+| <body>
+
+#data
+</ COM--MENT >
+#errors
+(1,2): expected-closing-tag-but-got-char
+(1,14): expected-doctype-but-got-eof
+#new-errors
+(1:3) invalid-first-character-of-tag-name
+#document
+| <!-- COM--MENT -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><style> EOF
+#errors
+(1,26): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| " EOF"
+| <body>
+
+#data
+<!DOCTYPE html><script> <!-- </script> --> </script> EOF
+#errors
+(1,52): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| " <!-- "
+| " "
+| <body>
+| "--> EOF"
+
+#data
+<b><p></b>TEST
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,10): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <p>
+| <b>
+| "TEST"
+
+#data
+<p id=a><b><p id=b></b>TEST
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,19): unexpected-end-tag
+(1,23): adoption-agency-1.2
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| id="a"
+| <b>
+| <p>
+| id="b"
+| "TEST"
+
+#data
+<b id=a><p><b id=b></p></b>TEST
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,23): unexpected-end-tag
+(1,27): adoption-agency-1.2
+(1,31): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| id="a"
+| <p>
+| <b>
+| id="b"
+| "TEST"
+
+#data
+<!DOCTYPE html><title>U-test</title><body><div><p>Test<u></p></div></body>
+#errors
+(1,61): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "U-test"
+| <body>
+| <div>
+| <p>
+| "Test"
+| <u>
+
+#data
+<!DOCTYPE html><font><table></font></table></font>
+#errors
+(1,35): unexpected-end-tag-implies-table-voodoo
+(1,35): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <font>
+| <table>
+
+#data
+<font><p>hello<b>cruel</font>world
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,29): adoption-agency-1.3
+(1,29): adoption-agency-1.3
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <font>
+| <p>
+| <font>
+| "hello"
+| <b>
+| "cruel"
+| <b>
+| "world"
+
+#data
+<b>Test</i>Test
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "TestTest"
+
+#data
+<b>A<cite>B<div>C
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "A"
+| <cite>
+| "B"
+| <div>
+| "C"
+
+#data
+<b>A<cite>B<div>C</cite>D
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,24): unexpected-end-tag
+(1,25): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "A"
+| <cite>
+| "B"
+| <div>
+| "CD"
+
+#data
+<b>A<cite>B<div>C</b>D
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,21): adoption-agency-1.3
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "A"
+| <cite>
+| "B"
+| <div>
+| <b>
+| "C"
+| "D"
+
+#data
+
+#errors
+(1,0): expected-doctype-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<DIV>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,5): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+
+#data
+<DIV> abc
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,9): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc"
+
+#data
+<DIV> abc <B>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,13): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+
+#data
+<DIV> abc <B> def
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def"
+
+#data
+<DIV> abc <B> def <I>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+
+#data
+<DIV> abc <B> def <I> ghi
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,25): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi"
+
+#data
+<DIV> abc <B> def <I> ghi <P>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <p>
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <p>
+| " jkl"
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <b>
+| " jkl "
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B> mno
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <b>
+| " jkl "
+| " mno"
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,47): adoption-agency-1.3
+(1,47): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <i>
+| <b>
+| " jkl "
+| " mno "
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,47): adoption-agency-1.3
+(1,51): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <i>
+| <b>
+| " jkl "
+| " mno "
+| " pqr"
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,47): adoption-agency-1.3
+(1,56): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <i>
+| <b>
+| " jkl "
+| " mno "
+| " pqr "
+
+#data
+<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P> stu
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,38): adoption-agency-1.3
+(1,47): adoption-agency-1.3
+(1,60): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| " abc "
+| <b>
+| " def "
+| <i>
+| " ghi "
+| <i>
+| <p>
+| <i>
+| <b>
+| " jkl "
+| " mno "
+| " pqr "
+| " stu"
+
+#data
+<test attribute---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+#errors
+(1,1040): expected-doctype-but-got-start-tag
+(1,1040): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <test>
+| attribute----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------=""
+
+#data
+<a href="blah">aba<table><a href="foo">br<tr><td></td></tr>x</table>aoe
+#errors
+(1,15): expected-doctype-but-got-start-tag
+(1,39): unexpected-start-tag-implies-table-voodoo
+(1,39): unexpected-start-tag-implies-end-tag
+(1,39): unexpected-end-tag
+(1,45): foster-parenting-character-in-table
+(1,45): foster-parenting-character-in-table
+(1,68): foster-parenting-character-in-table
+(1,71): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| href="blah"
+| "aba"
+| <a>
+| href="foo"
+| "br"
+| <a>
+| href="foo"
+| "x"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <a>
+| href="foo"
+| "aoe"
+
+#data
+<a href="blah">aba<table><tr><td><a href="foo">br</td></tr>x</table>aoe
+#errors
+(1,15): expected-doctype-but-got-start-tag
+(1,54): unexpected-cell-end-tag
+(1,68): unexpected text in table
+(1,71): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| href="blah"
+| "abax"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <a>
+| href="foo"
+| "br"
+| "aoe"
+
+#data
+<table><a href="blah">aba<tr><td><a href="foo">br</td></tr>x</table>aoe
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,22): unexpected-start-tag-implies-table-voodoo
+(1,29): foster-parenting-character-in-table
+(1,29): foster-parenting-character-in-table
+(1,29): foster-parenting-character-in-table
+(1,54): unexpected-cell-end-tag
+(1,68): foster-parenting-character-in-table
+(1,71): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| href="blah"
+| "aba"
+| <a>
+| href="blah"
+| "x"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <a>
+| href="foo"
+| "br"
+| <a>
+| href="blah"
+| "aoe"
+
+#data
+<a href=a>aa<marquee>aa<a href=b>bb</marquee>aa
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,45): end-tag-too-early
+(1,47): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| href="a"
+| "aa"
+| <marquee>
+| "aa"
+| <a>
+| href="b"
+| "bb"
+| "aa"
+
+#data
+<wbr><strike><code></strike><code><strike></code>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,28): adoption-agency-1.3
+(1,49): adoption-agency-1.3
+(1,49): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <wbr>
+| <strike>
+| <code>
+| <code>
+| <code>
+| <strike>
+
+#data
+<!DOCTYPE html><spacer>foo
+#errors
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <spacer>
+| "foo"
+
+#data
+<title><meta></title><link><title><meta></title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| "<meta>"
+| <link>
+| <title>
+| "<meta>"
+| <body>
+
+#data
+<style><!--</style><meta><script>--><link></script>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--"
+| <meta>
+| <script>
+| "--><link>"
+| <body>
+
+#data
+<head><meta></head><link>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,25): unexpected-start-tag-out-of-my-head
+#document
+| <html>
+| <head>
+| <meta>
+| <link>
+| <body>
+
+#data
+<table><tr><tr><td><td><span><th><span>X</table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,33): unexpected-cell-end-tag
+(1,48): unexpected-cell-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <tr>
+| <td>
+| <td>
+| <span>
+| <th>
+| <span>
+| "X"
+
+#data
+<body><body><base><link><meta><title><p></title><body><p></body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,12): unexpected-start-tag
+(1,54): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <base>
+| <link>
+| <meta>
+| <title>
+| "<p>"
+| <p>
+
+#data
+<textarea><p></textarea>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<p>"
+
+#data
+<p><image></p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,10): unexpected-start-tag-treated-as
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <img>
+
+#data
+<a><table><a></table><p><a><div><a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,13): unexpected-start-tag-implies-table-voodoo
+(1,13): unexpected-start-tag-implies-end-tag
+(1,13): adoption-agency-1.3
+(1,27): unexpected-start-tag-implies-end-tag
+(1,27): adoption-agency-1.2
+(1,32): unexpected-end-tag
+(1,35): unexpected-start-tag-implies-end-tag
+(1,35): adoption-agency-1.2
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <a>
+| <table>
+| <p>
+| <a>
+| <div>
+| <a>
+
+#data
+<head></p><meta><p>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,10): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <meta>
+| <body>
+| <p>
+
+#data
+<head></html><meta><p>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,19): expected-eof-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <meta>
+| <p>
+
+#data
+<b><table><td><i></table>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,25): unexpected-cell-end-tag
+(1,25): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <i>
+
+#data
+<b><table><td></b><i></table>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,18): unexpected-end-tag
+(1,29): unexpected-cell-end-tag
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <i>
+
+#data
+<h1><h2>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,8): unexpected-start-tag
+(1,8): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <h1>
+| <h2>
+
+#data
+<a><p><a></a></p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,9): unexpected-start-tag-implies-end-tag
+(1,9): adoption-agency-1.3
+(1,21): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <p>
+| <a>
+| <a>
+
+#data
+<b><button></b></button></b>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,15): adoption-agency-1.3
+(1,28): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <button>
+| <b>
+
+#data
+<p><b><div><marquee></p></b></div>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+(1,24): unexpected-end-tag
+(1,28): unexpected-end-tag
+(1,34): end-tag-too-early
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <div>
+| <b>
+| <marquee>
+| <p>
+
+#data
+<script></script></div><title></title><p><p>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,23): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <script>
+| <title>
+| <body>
+| <p>
+| <p>
+
+#data
+<p><hr></p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <hr>
+| <p>
+
+#data
+<select><b><option><select><option></b></select>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): unexpected-start-tag-in-select
+(1,27): unexpected-select-in-select
+(1,39): unexpected-end-tag
+(1,48): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <option>
+
+#data
+<html><head><title></title><body></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| <body>
+
+#data
+<a><table><td><a><table></table><a></tr><a></table><a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-cell-in-table-body
+(1,35): unexpected-start-tag-implies-end-tag
+(1,40): unexpected-cell-end-tag
+(1,43): unexpected-start-tag-implies-table-voodoo
+(1,43): unexpected-start-tag-implies-end-tag
+(1,43): unexpected-end-tag
+(1,54): unexpected-start-tag-implies-end-tag
+(1,54): adoption-agency-1.2
+(1,54): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <a>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <a>
+| <table>
+| <a>
+| <a>
+
+#data
+<ul><li></li><div><li></div><li><li><div><li><address><li><b><em></b><li></ul>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,45): end-tag-too-early
+(1,58): end-tag-too-early
+(1,69): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <ul>
+| <li>
+| <div>
+| <li>
+| <li>
+| <li>
+| <div>
+| <li>
+| <address>
+| <li>
+| <b>
+| <em>
+| <li>
+
+#data
+<ul><li><ul></li><li>a</li></ul></li></ul>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,17): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ul>
+| <li>
+| <ul>
+| <li>
+| "a"
+
+#data
+<frameset><frame><frameset><frame></frameset><noframes></noframes></frameset>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+| <frame>
+| <frameset>
+| <frame>
+| <noframes>
+
+#data
+<h1><table><td><h3></table><h3></h1>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,15): unexpected-cell-in-table-body
+(1,27): unexpected-cell-end-tag
+(1,31): unexpected-start-tag
+(1,36): end-tag-too-early
+#document
+| <html>
+| <head>
+| <body>
+| <h1>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <h3>
+| <h3>
+
+#data
+<table><colgroup><col><colgroup><col><col><col><colgroup><col><col><thead><tr><td></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <col>
+| <colgroup>
+| <col>
+| <col>
+| <col>
+| <colgroup>
+| <col>
+| <col>
+| <thead>
+| <tr>
+| <td>
+
+#data
+<table><col><tbody><col><tr><col><td><col></table><col>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,37): unexpected-cell-in-table-body
+(1,55): unexpected-start-tag-ignored
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <col>
+| <tbody>
+| <colgroup>
+| <col>
+| <tbody>
+| <tr>
+| <colgroup>
+| <col>
+| <tbody>
+| <tr>
+| <td>
+| <colgroup>
+| <col>
+
+#data
+<table><colgroup><tbody><colgroup><tr><colgroup><td><colgroup></table><colgroup>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,52): unexpected-cell-in-table-body
+(1,80): unexpected-start-tag-ignored
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+| <tbody>
+| <colgroup>
+| <tbody>
+| <tr>
+| <colgroup>
+| <tbody>
+| <tr>
+| <td>
+| <colgroup>
+
+#data
+</strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>
+#errors
+(1,9): expected-doctype-but-got-end-tag
+(1,9): unexpected-end-tag-before-html
+(1,13): unexpected-end-tag-before-html
+(1,18): unexpected-end-tag-before-html
+(1,22): unexpected-end-tag-before-html
+(1,26): unexpected-end-tag-before-html
+(1,35): unexpected-end-tag-before-html
+(1,39): unexpected-end-tag-before-html
+(1,47): unexpected-end-tag-before-html
+(1,52): unexpected-end-tag-before-html
+(1,58): unexpected-end-tag-before-html
+(1,64): unexpected-end-tag-before-html
+(1,72): unexpected-end-tag-before-html
+(1,79): unexpected-end-tag-before-html
+(1,88): unexpected-end-tag-before-html
+(1,93): unexpected-end-tag-before-html
+(1,98): unexpected-end-tag-before-html
+(1,103): unexpected-end-tag-before-html
+(1,108): unexpected-end-tag-before-html
+(1,113): unexpected-end-tag-before-html
+(1,118): unexpected-end-tag-before-html
+(1,130): unexpected-end-tag-after-body
+(1,130): unexpected-end-tag-treated-as
+(1,134): unexpected-end-tag
+(1,140): unexpected-end-tag
+(1,148): unexpected-end-tag
+(1,155): unexpected-end-tag
+(1,163): unexpected-end-tag
+(1,172): unexpected-end-tag
+(1,180): unexpected-end-tag
+(1,185): unexpected-end-tag
+(1,190): unexpected-end-tag
+(1,195): unexpected-end-tag
+(1,203): unexpected-end-tag
+(1,210): unexpected-end-tag
+(1,217): unexpected-end-tag
+(1,225): unexpected-end-tag
+(1,230): unexpected-end-tag
+(1,238): unexpected-end-tag
+(1,244): unexpected-end-tag
+(1,251): unexpected-end-tag
+(1,258): unexpected-end-tag
+(1,269): unexpected-end-tag
+(1,279): unexpected-end-tag
+(1,287): unexpected-end-tag
+(1,296): unexpected-end-tag
+(1,300): unexpected-end-tag
+(1,305): unexpected-end-tag
+(1,310): unexpected-end-tag
+(1,320): unexpected-end-tag
+(1,331): unexpected-end-tag
+(1,339): unexpected-end-tag
+(1,347): unexpected-end-tag
+(1,355): unexpected-end-tag
+(1,365): end-tag-too-early
+(1,378): end-tag-too-early
+(1,387): end-tag-too-early
+(1,393): end-tag-too-early
+(1,399): end-tag-too-early
+(1,404): end-tag-too-early
+(1,415): end-tag-too-early
+(1,425): end-tag-too-early
+(1,432): end-tag-too-early
+(1,437): end-tag-too-early
+(1,442): end-tag-too-early
+(1,447): unexpected-end-tag
+(1,454): unexpected-end-tag
+(1,460): unexpected-end-tag
+(1,467): unexpected-end-tag
+(1,476): end-tag-too-early
+(1,486): end-tag-too-early
+(1,495): end-tag-too-early
+(1,513): expected-eof-but-got-end-tag
+(1,513): unexpected-end-tag
+(1,520): unexpected-end-tag
+(1,529): unexpected-end-tag
+(1,537): unexpected-end-tag
+(1,547): unexpected-end-tag
+(1,557): unexpected-end-tag
+(1,568): unexpected-end-tag
+(1,579): unexpected-end-tag
+(1,590): unexpected-end-tag
+(1,599): unexpected-end-tag
+(1,611): unexpected-end-tag
+(1,622): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <br>
+| <p>
+
+#data
+<table><tr></strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,20): unexpected-end-tag-implies-table-voodoo
+(1,20): unexpected-end-tag
+(1,24): unexpected-end-tag-implies-table-voodoo
+(1,24): unexpected-end-tag
+(1,29): unexpected-end-tag-implies-table-voodoo
+(1,29): unexpected-end-tag
+(1,33): unexpected-end-tag-implies-table-voodoo
+(1,33): unexpected-end-tag
+(1,37): unexpected-end-tag-implies-table-voodoo
+(1,37): unexpected-end-tag
+(1,46): unexpected-end-tag-implies-table-voodoo
+(1,46): unexpected-end-tag
+(1,50): unexpected-end-tag-implies-table-voodoo
+(1,50): unexpected-end-tag
+(1,58): unexpected-end-tag-implies-table-voodoo
+(1,58): unexpected-end-tag
+(1,63): unexpected-end-tag-implies-table-voodoo
+(1,63): unexpected-end-tag
+(1,69): unexpected-end-tag-implies-table-voodoo
+(1,69): end-tag-too-early
+(1,75): unexpected-end-tag-implies-table-voodoo
+(1,75): unexpected-end-tag
+(1,83): unexpected-end-tag-implies-table-voodoo
+(1,83): unexpected-end-tag
+(1,90): unexpected-end-tag-implies-table-voodoo
+(1,90): unexpected-end-tag
+(1,99): unexpected-end-tag-implies-table-voodoo
+(1,99): unexpected-end-tag
+(1,104): unexpected-end-tag-implies-table-voodoo
+(1,104): end-tag-too-early
+(1,109): unexpected-end-tag-implies-table-voodoo
+(1,109): end-tag-too-early
+(1,114): unexpected-end-tag-implies-table-voodoo
+(1,114): end-tag-too-early
+(1,119): unexpected-end-tag-implies-table-voodoo
+(1,119): end-tag-too-early
+(1,124): unexpected-end-tag-implies-table-voodoo
+(1,124): end-tag-too-early
+(1,129): unexpected-end-tag-implies-table-voodoo
+(1,129): end-tag-too-early
+(1,136): unexpected-end-tag-in-table-row
+(1,141): unexpected-end-tag-implies-table-voodoo
+(1,141): unexpected-end-tag-treated-as
+(1,145): unexpected-end-tag-implies-table-voodoo
+(1,145): unexpected-end-tag
+(1,151): unexpected-end-tag-implies-table-voodoo
+(1,151): unexpected-end-tag
+(1,159): unexpected-end-tag-implies-table-voodoo
+(1,159): unexpected-end-tag
+(1,166): unexpected-end-tag-implies-table-voodoo
+(1,166): unexpected-end-tag
+(1,174): unexpected-end-tag-implies-table-voodoo
+(1,174): unexpected-end-tag
+(1,183): unexpected-end-tag-implies-table-voodoo
+(1,183): unexpected-end-tag
+(1,196): unexpected-end-tag
+(1,201): unexpected-end-tag
+(1,206): unexpected-end-tag
+(1,214): unexpected-end-tag
+(1,221): unexpected-end-tag
+(1,228): unexpected-end-tag
+(1,236): unexpected-end-tag
+(1,241): unexpected-end-tag
+(1,249): unexpected-end-tag
+(1,255): unexpected-end-tag
+(1,262): unexpected-end-tag
+(1,269): unexpected-end-tag
+(1,280): unexpected-end-tag
+(1,290): unexpected-end-tag
+(1,298): unexpected-end-tag
+(1,307): unexpected-end-tag
+(1,311): unexpected-end-tag
+(1,316): unexpected-end-tag
+(1,321): unexpected-end-tag
+(1,331): unexpected-end-tag
+(1,342): unexpected-end-tag
+(1,350): unexpected-end-tag
+(1,358): unexpected-end-tag
+(1,366): unexpected-end-tag
+(1,376): end-tag-too-early
+(1,389): end-tag-too-early
+(1,398): end-tag-too-early
+(1,404): end-tag-too-early
+(1,410): end-tag-too-early
+(1,415): end-tag-too-early
+(1,426): end-tag-too-early
+(1,436): end-tag-too-early
+(1,443): end-tag-too-early
+(1,448): end-tag-too-early
+(1,453): end-tag-too-early
+(1,458): unexpected-end-tag
+(1,465): unexpected-end-tag
+(1,471): unexpected-end-tag
+(1,478): unexpected-end-tag
+(1,487): end-tag-too-early
+(1,497): end-tag-too-early
+(1,506): end-tag-too-early
+(1,524): expected-eof-but-got-end-tag
+(1,524): unexpected-end-tag
+(1,531): unexpected-end-tag
+(1,540): unexpected-end-tag
+(1,548): unexpected-end-tag
+(1,558): unexpected-end-tag
+(1,568): unexpected-end-tag
+(1,579): unexpected-end-tag
+(1,590): unexpected-end-tag
+(1,601): unexpected-end-tag
+(1,610): unexpected-end-tag
+(1,622): unexpected-end-tag
+(1,633): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <br>
+| <table>
+| <tbody>
+| <tr>
+| <p>
+
+#data
+<frameset>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,10): eof-in-frameset
+#document
+| <html>
+| <head>
+| <frameset>
diff --git a/tests/html5lib-tests/tree-construction/tests10.dat b/tests/html5lib-tests/tree-construction/tests10.dat
new file mode 100644
index 0000000..f84e2d5
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests10.dat
@@ -0,0 +1,849 @@
+#data
+<!DOCTYPE html><svg></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<!DOCTYPE html><svg></svg><![CDATA[a]]>
+#errors
+(1,28) expected-dashes-or-doctype
+#new-errors
+(1:35) cdata-in-html-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <!-- [CDATA[a]] -->
+
+#data
+<!DOCTYPE html><body><svg></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<!DOCTYPE html><body><select><svg></svg></select>
+#errors
+(1,34) unexpected-start-tag-in-select
+(1,40) unexpected-end-tag-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!DOCTYPE html><body><select><option><svg></svg></option></select>
+#errors
+(1,42) unexpected-start-tag-in-select
+(1,48) unexpected-end-tag-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+
+#data
+<!DOCTYPE html><body><table><svg></svg></table>
+#errors
+(1,33) foster-parenting-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <table>
+
+#data
+<!DOCTYPE html><body><table><svg><g>foo</g></svg></table>
+#errors
+(1,33) foster-parenting-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <table>
+
+#data
+<!DOCTYPE html><body><table><svg><g>foo</g><g>bar</g></svg></table>
+#errors
+(1,33) foster-parenting-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <table>
+
+#data
+<!DOCTYPE html><body><table><tbody><svg><g>foo</g><g>bar</g></svg></tbody></table>
+#errors
+(1,40) foster-parenting-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <table>
+| <tbody>
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><svg><g>foo</g><g>bar</g></svg></tr></tbody></table>
+#errors
+(1,44) foster-parenting-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg></td></tr></tbody></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg><p>baz</td></tr></tbody></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g></svg><p>baz</caption></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+#errors
+(1,65) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g>baz</table><p>quux
+#errors
+(1,73) unexpected-end-tag
+(1,73) expected-one-end-tag-but-got-another
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| "baz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><colgroup><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+#errors
+(1,43) foster-parenting-start-tag svg
+(1,66) unexpected HTML-like start tag token in foreign content
+(1,66) foster-parenting-start-tag
+(1,67) foster-parenting-character
+(1,68) foster-parenting-character
+(1,69) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+| <table>
+| <colgroup>
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><tr><td><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+#errors
+(1,49) unexpected-start-tag-in-select
+(1,52) unexpected-start-tag-in-select
+(1,59) unexpected-end-tag-in-select
+(1,62) unexpected-start-tag-in-select
+(1,69) unexpected-end-tag-in-select
+(1,72) unexpected-start-tag-in-select
+(1,83) unexpected-table-element-end-tag-in-select-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <select>
+| "foobarbaz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+#errors
+(1,36) unexpected-start-tag-implies-table-voodoo
+(1,41) unexpected-start-tag-in-select
+(1,44) unexpected-start-tag-in-select
+(1,51) unexpected-end-tag-in-select
+(1,54) unexpected-start-tag-in-select
+(1,61) unexpected-end-tag-in-select
+(1,64) unexpected-start-tag-in-select
+(1,75) unexpected-table-element-end-tag-in-select-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "foobarbaz"
+| <table>
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body></body></html><svg><g>foo</g><g>bar</g><p>baz
+#errors
+(1,40) expected-eof-but-got-start-tag
+(1,63) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body></body><svg><g>foo</g><g>bar</g><p>baz
+#errors
+(1,33) unexpected-start-tag-after-body
+(1,56) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg g>
+| "foo"
+| <svg g>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><frameset><svg><g></g><g></g><p><span>
+#errors
+(1,30) unexpected-start-tag-in-frameset
+(1,33) unexpected-start-tag-in-frameset
+(1,37) unexpected-end-tag-in-frameset
+(1,40) unexpected-start-tag-in-frameset
+(1,44) unexpected-end-tag-in-frameset
+(1,47) unexpected-start-tag-in-frameset
+(1,53) unexpected-start-tag-in-frameset
+(1,53) eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><frameset></frameset><svg><g></g><g></g><p><span>
+#errors
+(1,41) unexpected-start-tag-after-frameset
+(1,44) unexpected-start-tag-after-frameset
+(1,48) unexpected-end-tag-after-frameset
+(1,51) unexpected-start-tag-after-frameset
+(1,55) unexpected-end-tag-after-frameset
+(1,58) unexpected-start-tag-after-frameset
+(1,64) unexpected-start-tag-after-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><body xlink:href=foo><svg xlink:href=foo></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| <svg svg>
+| xlink href="foo"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo></g></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <svg svg>
+| <svg g>
+| xlink href="foo"
+| xml lang="en"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo /></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <svg svg>
+| <svg g>
+| xlink href="foo"
+| xml lang="en"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo />bar</svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <svg svg>
+| <svg g>
+| xlink href="foo"
+| xml lang="en"
+| "bar"
+
+#data
+<svg></path>
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,12) unexpected-end-tag
+(1,12) unexpected-end-tag
+(1,12) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<div><svg></div>a
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,16) unexpected-end-tag
+(1,16) end-tag-too-early
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| "a"
+
+#data
+<div><svg><path></div>a
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,22) unexpected-end-tag
+(1,22) end-tag-too-early
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| <svg path>
+| "a"
+
+#data
+<div><svg><path></svg><path>
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,22) unexpected-end-tag
+(1,28) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| <svg path>
+| <path>
+
+#data
+<div><svg><path><foreignObject><math></div>a
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,43) unexpected-end-tag
+(1,43) end-tag-too-early
+(1,44) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| <svg path>
+| <svg foreignObject>
+| <math math>
+| "a"
+
+#data
+<div><svg><path><foreignObject><p></div>a
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,40) end-tag-too-early
+(1,41) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| <svg path>
+| <svg foreignObject>
+| <p>
+| "a"
+
+#data
+<!DOCTYPE html><svg><desc><div><svg><ul>a
+#errors
+(1,40) unexpected-html-element-in-foreign-content
+(1,41) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg desc>
+| <div>
+| <svg svg>
+| <ul>
+| "a"
+
+#data
+<!DOCTYPE html><svg><desc><svg><ul>a
+#errors
+(1,35) unexpected-html-element-in-foreign-content
+(1,36) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg desc>
+| <svg svg>
+| <ul>
+| "a"
+
+#data
+<!DOCTYPE html><p><svg><desc><p>
+#errors
+(1,32) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <svg svg>
+| <svg desc>
+| <p>
+
+#data
+<!DOCTYPE html><p><svg><title><p>
+#errors
+(1,33) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <svg svg>
+| <svg title>
+| <p>
+
+#data
+<div><svg><path><foreignObject><p></foreignObject><p>
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,50) unexpected-end-tag
+(1,53) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <svg svg>
+| <svg path>
+| <svg foreignObject>
+| <p>
+| <p>
+
+#data
+<math><mi><div><object><div><span></span></div></object></div></mi><mi>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,71) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| <div>
+| <object>
+| <div>
+| <span>
+| <math mi>
+
+#data
+<math><mi><svg><foreignObject><div><div></div></div></foreignObject></svg></mi><mi>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,83) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| <svg svg>
+| <svg foreignObject>
+| <div>
+| <div>
+| <math mi>
+
+#data
+<svg><script></script><path>
+#errors
+(1,5) expected-doctype-but-got-start-tag
+(1,28) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg script>
+| <svg path>
+
+#data
+<table><svg></svg><tr>
+#errors
+(1,7) expected-doctype-but-got-start-tag
+(1,12) unexpected-start-tag-implies-table-voodoo
+(1,22) eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<math><mi><mglyph>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,18) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| <math mglyph>
+
+#data
+<math><mi><malignmark>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,22) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| <math malignmark>
+
+#data
+<math><mo><mglyph>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,18) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mo>
+| <math mglyph>
+
+#data
+<math><mo><malignmark>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,22) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mo>
+| <math malignmark>
+
+#data
+<math><mn><mglyph>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,18) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mn>
+| <math mglyph>
+
+#data
+<math><mn><malignmark>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,22) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mn>
+| <math malignmark>
+
+#data
+<math><ms><mglyph>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,18) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math ms>
+| <math mglyph>
+
+#data
+<math><ms><malignmark>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,22) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math ms>
+| <math malignmark>
+
+#data
+<math><mtext><mglyph>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,21) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mtext>
+| <math mglyph>
+
+#data
+<math><mtext><malignmark>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,25) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mtext>
+| <math malignmark>
+
+#data
+<math><annotation-xml><svg></svg></annotation-xml><mi>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,54) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <svg svg>
+| <math mi>
+
+#data
+<math><annotation-xml><svg><foreignObject><div><math><mi></mi></math><span></span></div></foreignObject><path></path></svg></annotation-xml><mi>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,144) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <svg svg>
+| <svg foreignObject>
+| <div>
+| <math math>
+| <math mi>
+| <span>
+| <svg path>
+| <math mi>
+
+#data
+<math><annotation-xml><svg><foreignObject><math><mi><svg></svg></mi><mo></mo></math><span></span></foreignObject><path></path></svg></annotation-xml><mi>
+#errors
+(1,6) expected-doctype-but-got-start-tag
+(1,153) expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <svg svg>
+| <svg foreignObject>
+| <math math>
+| <math mi>
+| <svg svg>
+| <math mo>
+| <span>
+| <svg path>
+| <math mi>
diff --git a/tests/html5lib-tests/tree-construction/tests11.dat b/tests/html5lib-tests/tree-construction/tests11.dat
new file mode 100644
index 0000000..b9901e7
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests11.dat
@@ -0,0 +1,523 @@
+#data
+<!DOCTYPE html><body><svg attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' diffuseConstant='' edgeMode='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelector='' yChannelSelector='' zoomAndPan=''></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| attributeName=""
+| attributeType=""
+| baseFrequency=""
+| baseProfile=""
+| calcMode=""
+| clipPathUnits=""
+| diffuseConstant=""
+| edgeMode=""
+| filterUnits=""
+| glyphRef=""
+| gradientTransform=""
+| gradientUnits=""
+| kernelMatrix=""
+| kernelUnitLength=""
+| keyPoints=""
+| keySplines=""
+| keyTimes=""
+| lengthAdjust=""
+| limitingConeAngle=""
+| markerHeight=""
+| markerUnits=""
+| markerWidth=""
+| maskContentUnits=""
+| maskUnits=""
+| numOctaves=""
+| pathLength=""
+| patternContentUnits=""
+| patternTransform=""
+| patternUnits=""
+| pointsAtX=""
+| pointsAtY=""
+| pointsAtZ=""
+| preserveAlpha=""
+| preserveAspectRatio=""
+| primitiveUnits=""
+| refX=""
+| refY=""
+| repeatCount=""
+| repeatDur=""
+| requiredExtensions=""
+| requiredFeatures=""
+| specularConstant=""
+| specularExponent=""
+| spreadMethod=""
+| startOffset=""
+| stdDeviation=""
+| stitchTiles=""
+| surfaceScale=""
+| systemLanguage=""
+| tableValues=""
+| targetX=""
+| targetY=""
+| textLength=""
+| viewBox=""
+| viewTarget=""
+| xChannelSelector=""
+| yChannelSelector=""
+| zoomAndPan=""
+
+#data
+<!DOCTYPE html><BODY><SVG ATTRIBUTENAME='' ATTRIBUTETYPE='' BASEFREQUENCY='' BASEPROFILE='' CALCMODE='' CLIPPATHUNITS='' DIFFUSECONSTANT='' EDGEMODE='' FILTERUNITS='' GLYPHREF='' GRADIENTTRANSFORM='' GRADIENTUNITS='' KERNELMATRIX='' KERNELUNITLENGTH='' KEYPOINTS='' KEYSPLINES='' KEYTIMES='' LENGTHADJUST='' LIMITINGCONEANGLE='' MARKERHEIGHT='' MARKERUNITS='' MARKERWIDTH='' MASKCONTENTUNITS='' MASKUNITS='' NUMOCTAVES='' PATHLENGTH='' PATTERNCONTENTUNITS='' PATTERNTRANSFORM='' PATTERNUNITS='' POINTSATX='' POINTSATY='' POINTSATZ='' PRESERVEALPHA='' PRESERVEASPECTRATIO='' PRIMITIVEUNITS='' REFX='' REFY='' REPEATCOUNT='' REPEATDUR='' REQUIREDEXTENSIONS='' REQUIREDFEATURES='' SPECULARCONSTANT='' SPECULAREXPONENT='' SPREADMETHOD='' STARTOFFSET='' STDDEVIATION='' STITCHTILES='' SURFACESCALE='' SYSTEMLANGUAGE='' TABLEVALUES='' TARGETX='' TARGETY='' TEXTLENGTH='' VIEWBOX='' VIEWTARGET='' XCHANNELSELECTOR='' YCHANNELSELECTOR='' ZOOMANDPAN=''></SVG>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| attributeName=""
+| attributeType=""
+| baseFrequency=""
+| baseProfile=""
+| calcMode=""
+| clipPathUnits=""
+| diffuseConstant=""
+| edgeMode=""
+| filterUnits=""
+| glyphRef=""
+| gradientTransform=""
+| gradientUnits=""
+| kernelMatrix=""
+| kernelUnitLength=""
+| keyPoints=""
+| keySplines=""
+| keyTimes=""
+| lengthAdjust=""
+| limitingConeAngle=""
+| markerHeight=""
+| markerUnits=""
+| markerWidth=""
+| maskContentUnits=""
+| maskUnits=""
+| numOctaves=""
+| pathLength=""
+| patternContentUnits=""
+| patternTransform=""
+| patternUnits=""
+| pointsAtX=""
+| pointsAtY=""
+| pointsAtZ=""
+| preserveAlpha=""
+| preserveAspectRatio=""
+| primitiveUnits=""
+| refX=""
+| refY=""
+| repeatCount=""
+| repeatDur=""
+| requiredExtensions=""
+| requiredFeatures=""
+| specularConstant=""
+| specularExponent=""
+| spreadMethod=""
+| startOffset=""
+| stdDeviation=""
+| stitchTiles=""
+| surfaceScale=""
+| systemLanguage=""
+| tableValues=""
+| targetX=""
+| targetY=""
+| textLength=""
+| viewBox=""
+| viewTarget=""
+| xChannelSelector=""
+| yChannelSelector=""
+| zoomAndPan=""
+
+#data
+<!DOCTYPE html><body><svg attributename='' attributetype='' basefrequency='' baseprofile='' calcmode='' clippathunits='' diffuseconstant='' edgemode='' filterunits='' filterres='' glyphref='' gradienttransform='' gradientunits='' kernelmatrix='' kernelunitlength='' keypoints='' keysplines='' keytimes='' lengthadjust='' limitingconeangle='' markerheight='' markerunits='' markerwidth='' maskcontentunits='' maskunits='' numoctaves='' pathlength='' patterncontentunits='' patterntransform='' patternunits='' pointsatx='' pointsaty='' pointsatz='' preservealpha='' preserveaspectratio='' primitiveunits='' refx='' refy='' repeatcount='' repeatdur='' requiredextensions='' requiredfeatures='' specularconstant='' specularexponent='' spreadmethod='' startoffset='' stddeviation='' stitchtiles='' surfacescale='' systemlanguage='' tablevalues='' targetx='' targety='' textlength='' viewbox='' viewtarget='' xchannelselector='' ychannelselector='' zoomandpan=''></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| attributeName=""
+| attributeType=""
+| baseFrequency=""
+| baseProfile=""
+| calcMode=""
+| clipPathUnits=""
+| diffuseConstant=""
+| edgeMode=""
+| filterUnits=""
+| filterres=""
+| glyphRef=""
+| gradientTransform=""
+| gradientUnits=""
+| kernelMatrix=""
+| kernelUnitLength=""
+| keyPoints=""
+| keySplines=""
+| keyTimes=""
+| lengthAdjust=""
+| limitingConeAngle=""
+| markerHeight=""
+| markerUnits=""
+| markerWidth=""
+| maskContentUnits=""
+| maskUnits=""
+| numOctaves=""
+| pathLength=""
+| patternContentUnits=""
+| patternTransform=""
+| patternUnits=""
+| pointsAtX=""
+| pointsAtY=""
+| pointsAtZ=""
+| preserveAlpha=""
+| preserveAspectRatio=""
+| primitiveUnits=""
+| refX=""
+| refY=""
+| repeatCount=""
+| repeatDur=""
+| requiredExtensions=""
+| requiredFeatures=""
+| specularConstant=""
+| specularExponent=""
+| spreadMethod=""
+| startOffset=""
+| stdDeviation=""
+| stitchTiles=""
+| surfaceScale=""
+| systemLanguage=""
+| tableValues=""
+| targetX=""
+| targetY=""
+| textLength=""
+| viewBox=""
+| viewTarget=""
+| xChannelSelector=""
+| yChannelSelector=""
+| zoomAndPan=""
+
+#data
+<!DOCTYPE html><body><math attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' diffuseConstant='' edgeMode='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelector='' yChannelSelector='' zoomAndPan=''></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| attributename=""
+| attributetype=""
+| basefrequency=""
+| baseprofile=""
+| calcmode=""
+| clippathunits=""
+| diffuseconstant=""
+| edgemode=""
+| filterunits=""
+| glyphref=""
+| gradienttransform=""
+| gradientunits=""
+| kernelmatrix=""
+| kernelunitlength=""
+| keypoints=""
+| keysplines=""
+| keytimes=""
+| lengthadjust=""
+| limitingconeangle=""
+| markerheight=""
+| markerunits=""
+| markerwidth=""
+| maskcontentunits=""
+| maskunits=""
+| numoctaves=""
+| pathlength=""
+| patterncontentunits=""
+| patterntransform=""
+| patternunits=""
+| pointsatx=""
+| pointsaty=""
+| pointsatz=""
+| preservealpha=""
+| preserveaspectratio=""
+| primitiveunits=""
+| refx=""
+| refy=""
+| repeatcount=""
+| repeatdur=""
+| requiredextensions=""
+| requiredfeatures=""
+| specularconstant=""
+| specularexponent=""
+| spreadmethod=""
+| startoffset=""
+| stddeviation=""
+| stitchtiles=""
+| surfacescale=""
+| systemlanguage=""
+| tablevalues=""
+| targetx=""
+| targety=""
+| textlength=""
+| viewbox=""
+| viewtarget=""
+| xchannelselector=""
+| ychannelselector=""
+| zoomandpan=""
+
+#data
+<!DOCTYPE html><body><svg contentScriptType='' contentStyleType='' externalResourcesRequired='' filterRes=''></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| contentscripttype=""
+| contentstyletype=""
+| externalresourcesrequired=""
+| filterres=""
+
+#data
+<!DOCTYPE html><body><svg CONTENTSCRIPTTYPE='' CONTENTSTYLETYPE='' EXTERNALRESOURCESREQUIRED='' FILTERRES=''></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| contentscripttype=""
+| contentstyletype=""
+| externalresourcesrequired=""
+| filterres=""
+
+#data
+<!DOCTYPE html><body><svg contentscripttype='' contentstyletype='' externalresourcesrequired='' filterres=''></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| contentscripttype=""
+| contentstyletype=""
+| externalresourcesrequired=""
+| filterres=""
+
+#data
+<!DOCTYPE html><body><math contentScriptType='' contentStyleType='' externalResourcesRequired='' filterRes=''></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| contentscripttype=""
+| contentstyletype=""
+| externalresourcesrequired=""
+| filterres=""
+
+#data
+<!DOCTYPE html><body><svg><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg altGlyph>
+| <svg altGlyphDef>
+| <svg altGlyphItem>
+| <svg animateColor>
+| <svg animateMotion>
+| <svg animateTransform>
+| <svg clipPath>
+| <svg feBlend>
+| <svg feColorMatrix>
+| <svg feComponentTransfer>
+| <svg feComposite>
+| <svg feConvolveMatrix>
+| <svg feDiffuseLighting>
+| <svg feDisplacementMap>
+| <svg feDistantLight>
+| <svg feFlood>
+| <svg feFuncA>
+| <svg feFuncB>
+| <svg feFuncG>
+| <svg feFuncR>
+| <svg feGaussianBlur>
+| <svg feImage>
+| <svg feMerge>
+| <svg feMergeNode>
+| <svg feMorphology>
+| <svg feOffset>
+| <svg fePointLight>
+| <svg feSpecularLighting>
+| <svg feSpotLight>
+| <svg feTile>
+| <svg feTurbulence>
+| <svg foreignObject>
+| <svg glyphRef>
+| <svg linearGradient>
+| <svg radialGradient>
+| <svg textPath>
+
+#data
+<!DOCTYPE html><body><svg><altglyph /><altglyphdef /><altglyphitem /><animatecolor /><animatemotion /><animatetransform /><clippath /><feblend /><fecolormatrix /><fecomponenttransfer /><fecomposite /><feconvolvematrix /><fediffuselighting /><fedisplacementmap /><fedistantlight /><feflood /><fefunca /><fefuncb /><fefuncg /><fefuncr /><fegaussianblur /><feimage /><femerge /><femergenode /><femorphology /><feoffset /><fepointlight /><fespecularlighting /><fespotlight /><fetile /><feturbulence /><foreignobject /><glyphref /><lineargradient /><radialgradient /><textpath /></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg altGlyph>
+| <svg altGlyphDef>
+| <svg altGlyphItem>
+| <svg animateColor>
+| <svg animateMotion>
+| <svg animateTransform>
+| <svg clipPath>
+| <svg feBlend>
+| <svg feColorMatrix>
+| <svg feComponentTransfer>
+| <svg feComposite>
+| <svg feConvolveMatrix>
+| <svg feDiffuseLighting>
+| <svg feDisplacementMap>
+| <svg feDistantLight>
+| <svg feFlood>
+| <svg feFuncA>
+| <svg feFuncB>
+| <svg feFuncG>
+| <svg feFuncR>
+| <svg feGaussianBlur>
+| <svg feImage>
+| <svg feMerge>
+| <svg feMergeNode>
+| <svg feMorphology>
+| <svg feOffset>
+| <svg fePointLight>
+| <svg feSpecularLighting>
+| <svg feSpotLight>
+| <svg feTile>
+| <svg feTurbulence>
+| <svg foreignObject>
+| <svg glyphRef>
+| <svg linearGradient>
+| <svg radialGradient>
+| <svg textPath>
+
+#data
+<!DOCTYPE html><BODY><SVG><ALTGLYPH /><ALTGLYPHDEF /><ALTGLYPHITEM /><ANIMATECOLOR /><ANIMATEMOTION /><ANIMATETRANSFORM /><CLIPPATH /><FEBLEND /><FECOLORMATRIX /><FECOMPONENTTRANSFER /><FECOMPOSITE /><FECONVOLVEMATRIX /><FEDIFFUSELIGHTING /><FEDISPLACEMENTMAP /><FEDISTANTLIGHT /><FEFLOOD /><FEFUNCA /><FEFUNCB /><FEFUNCG /><FEFUNCR /><FEGAUSSIANBLUR /><FEIMAGE /><FEMERGE /><FEMERGENODE /><FEMORPHOLOGY /><FEOFFSET /><FEPOINTLIGHT /><FESPECULARLIGHTING /><FESPOTLIGHT /><FETILE /><FETURBULENCE /><FOREIGNOBJECT /><GLYPHREF /><LINEARGRADIENT /><RADIALGRADIENT /><TEXTPATH /></SVG>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg altGlyph>
+| <svg altGlyphDef>
+| <svg altGlyphItem>
+| <svg animateColor>
+| <svg animateMotion>
+| <svg animateTransform>
+| <svg clipPath>
+| <svg feBlend>
+| <svg feColorMatrix>
+| <svg feComponentTransfer>
+| <svg feComposite>
+| <svg feConvolveMatrix>
+| <svg feDiffuseLighting>
+| <svg feDisplacementMap>
+| <svg feDistantLight>
+| <svg feFlood>
+| <svg feFuncA>
+| <svg feFuncB>
+| <svg feFuncG>
+| <svg feFuncR>
+| <svg feGaussianBlur>
+| <svg feImage>
+| <svg feMerge>
+| <svg feMergeNode>
+| <svg feMorphology>
+| <svg feOffset>
+| <svg fePointLight>
+| <svg feSpecularLighting>
+| <svg feSpotLight>
+| <svg feTile>
+| <svg feTurbulence>
+| <svg foreignObject>
+| <svg glyphRef>
+| <svg linearGradient>
+| <svg radialGradient>
+| <svg textPath>
+
+#data
+<!DOCTYPE html><body><math><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math altglyph>
+| <math altglyphdef>
+| <math altglyphitem>
+| <math animatecolor>
+| <math animatemotion>
+| <math animatetransform>
+| <math clippath>
+| <math feblend>
+| <math fecolormatrix>
+| <math fecomponenttransfer>
+| <math fecomposite>
+| <math feconvolvematrix>
+| <math fediffuselighting>
+| <math fedisplacementmap>
+| <math fedistantlight>
+| <math feflood>
+| <math fefunca>
+| <math fefuncb>
+| <math fefuncg>
+| <math fefuncr>
+| <math fegaussianblur>
+| <math feimage>
+| <math femerge>
+| <math femergenode>
+| <math femorphology>
+| <math feoffset>
+| <math fepointlight>
+| <math fespecularlighting>
+| <math fespotlight>
+| <math fetile>
+| <math feturbulence>
+| <math foreignobject>
+| <math glyphref>
+| <math lineargradient>
+| <math radialgradient>
+| <math textpath>
+
+#data
+<!DOCTYPE html><body><svg><solidColor /></svg>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg solidcolor>
diff --git a/tests/html5lib-tests/tree-construction/tests12.dat b/tests/html5lib-tests/tree-construction/tests12.dat
new file mode 100644
index 0000000..63107d2
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests12.dat
@@ -0,0 +1,62 @@
+#data
+<!DOCTYPE html><body><p>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+| <math math>
+| <math mtext>
+| <i>
+| "baz"
+| <math annotation-xml>
+| <svg svg>
+| <svg desc>
+| <b>
+| "eggs"
+| <svg g>
+| <svg foreignObject>
+| <p>
+| "spam"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <img>
+| <svg g>
+| "quux"
+| "bar"
+
+#data
+<!DOCTYPE html><body>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "foo"
+| <math math>
+| <math mtext>
+| <i>
+| "baz"
+| <math annotation-xml>
+| <svg svg>
+| <svg desc>
+| <b>
+| "eggs"
+| <svg g>
+| <svg foreignObject>
+| <p>
+| "spam"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <img>
+| <svg g>
+| "quux"
+| "bar"
diff --git a/tests/html5lib-tests/tree-construction/tests14.dat b/tests/html5lib-tests/tree-construction/tests14.dat
new file mode 100644
index 0000000..a08b764
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests14.dat
@@ -0,0 +1,75 @@
+#data
+<!DOCTYPE html><html><body><xyz:abc></xyz:abc>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <xyz:abc>
+
+#data
+<!DOCTYPE html><html><body><xyz:abc></xyz:abc><span></span>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <xyz:abc>
+| <span>
+
+#data
+<!DOCTYPE html><html><html abc:def=gh><xyz:abc></xyz:abc>
+#errors
+(1,38): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| abc:def="gh"
+| <head>
+| <body>
+| <xyz:abc>
+
+#data
+<!DOCTYPE html><html xml:lang=bar><html xml:lang=foo>
+#errors
+(1,53): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| xml:lang="bar"
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><html 123=456>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| 123="456"
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><html 123=456><html 789=012>
+#errors
+(1,43): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| 123="456"
+| 789="012"
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><html><body 789=012>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| 789="012"
diff --git a/tests/html5lib-tests/tree-construction/tests15.dat b/tests/html5lib-tests/tree-construction/tests15.dat
new file mode 100644
index 0000000..93d06a8
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests15.dat
@@ -0,0 +1,216 @@
+#data
+<!DOCTYPE html><p><b><i><u></p> <p>X
+#errors
+(1,31): unexpected-end-tag
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <i>
+| <u>
+| <b>
+| <i>
+| <u>
+| " "
+| <p>
+| "X"
+
+#data
+<p><b><i><u></p>
+<p>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,16): unexpected-end-tag
+(2,4): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| <i>
+| <u>
+| <b>
+| <i>
+| <u>
+| "
+"
+| <p>
+| "X"
+
+#data
+<!doctype html></html> <head>
+#errors
+(1,29): expected-eof-but-got-start-tag
+(1,29): unexpected-start-tag-ignored
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " "
+
+#data
+<!doctype html></body><meta>
+#errors
+(1,28): unexpected-start-tag-after-body
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <meta>
+
+#data
+<html></html><!-- foo -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <!-- foo -->
+
+#data
+<!doctype html></body><title>X</title>
+#errors
+(1,29): unexpected-start-tag-after-body
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <title>
+| "X"
+
+#data
+<!doctype html><table> X<meta></table>
+#errors
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+(1,30): foster-parenting-start-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " X"
+| <meta>
+| <table>
+
+#data
+<!doctype html><table> x</table>
+#errors
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " x"
+| <table>
+
+#data
+<!doctype html><table> x </table>
+#errors
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+(1,25): foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " x "
+| <table>
+
+#data
+<!doctype html><table><tr> x</table>
+#errors
+(1,27): foster-parenting-character
+(1,28): foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " x"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><table>X<style> <tr>x </style> </table>
+#errors
+(1,23): foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+| <table>
+| <style>
+| " <tr>x "
+| " "
+
+#data
+<!doctype html><div><table><a>foo</a> <tr><td>bar</td> </tr></table></div>
+#errors
+(1,30): foster-parenting-start-tag
+(1,31): foster-parenting-character
+(1,32): foster-parenting-character
+(1,33): foster-parenting-character
+(1,37): foster-parenting-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| <a>
+| "foo"
+| <table>
+| " "
+| <tbody>
+| <tr>
+| <td>
+| "bar"
+| " "
+
+#data
+<frame></frame></frame><frameset><frame><frameset><frame></frameset><noframes></frameset><noframes>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,7): unexpected-start-tag-ignored
+(1,15): unexpected-end-tag
+(1,23): unexpected-end-tag
+(1,33): unexpected-start-tag
+(1,99): expected-named-closing-tag-but-got-eof
+(1,99): eof-in-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+| <frame>
+| <frameset>
+| <frame>
+| <noframes>
+| "</frameset><noframes>"
+
+#data
+<!DOCTYPE html><object></html>
+#errors
+(1,30): expected-body-in-scope
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <object>
diff --git a/tests/html5lib-tests/tree-construction/tests16.dat b/tests/html5lib-tests/tree-construction/tests16.dat
new file mode 100644
index 0000000..05f34c1
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests16.dat
@@ -0,0 +1,2602 @@
+#data
+<!doctype html><script>
+#errors
+(1,23): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<!doctype html><script>a
+#errors
+(1,24): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "a"
+| <body>
+
+#data
+<!doctype html><script><
+#errors
+(1,24): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<"
+| <body>
+
+#data
+<!doctype html><script></
+#errors
+(1,25): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</"
+| <body>
+
+#data
+<!doctype html><script></S
+#errors
+(1,26): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</S"
+| <body>
+
+#data
+<!doctype html><script></SC
+#errors
+(1,27): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</SC"
+| <body>
+
+#data
+<!doctype html><script></SCR
+#errors
+(1,28): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</SCR"
+| <body>
+
+#data
+<!doctype html><script></SCRI
+#errors
+(1,29): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</SCRI"
+| <body>
+
+#data
+<!doctype html><script></SCRIP
+#errors
+(1,30): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</SCRIP"
+| <body>
+
+#data
+<!doctype html><script></SCRIPT
+#errors
+(1,31): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</SCRIPT"
+| <body>
+
+#data
+<!doctype html><script></SCRIPT
+#errors
+(1,32): expected-attribute-name-but-got-eof
+(1,32): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:33) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<!doctype html><script></s
+#errors
+(1,26): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</s"
+| <body>
+
+#data
+<!doctype html><script></sc
+#errors
+(1,27): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</sc"
+| <body>
+
+#data
+<!doctype html><script></scr
+#errors
+(1,28): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</scr"
+| <body>
+
+#data
+<!doctype html><script></scri
+#errors
+(1,29): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</scri"
+| <body>
+
+#data
+<!doctype html><script></scrip
+#errors
+(1,30): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</scrip"
+| <body>
+
+#data
+<!doctype html><script></script
+#errors
+(1,31): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "</script"
+| <body>
+
+#data
+<!doctype html><script></script
+#errors
+(1,32): expected-attribute-name-but-got-eof
+(1,32): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:33) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<!doctype html><script><!
+#errors
+(1,25): expected-script-data-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!"
+| <body>
+
+#data
+<!doctype html><script><!a
+#errors
+(1,26): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!a"
+| <body>
+
+#data
+<!doctype html><script><!-
+#errors
+(1,26): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!-"
+| <body>
+
+#data
+<!doctype html><script><!-a
+#errors
+(1,27): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!-a"
+| <body>
+
+#data
+<!doctype html><script><!--
+#errors
+(1,27): expected-named-closing-tag-but-got-eof
+(1,27): unexpected-eof-in-text-mode
+#new-errors
+(1:28) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--"
+| <body>
+
+#data
+<!doctype html><script><!--a
+#errors
+(1,28): expected-named-closing-tag-but-got-eof
+(1,28): unexpected-eof-in-text-mode
+#new-errors
+(1:29) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--a"
+| <body>
+
+#data
+<!doctype html><script><!--<
+#errors
+(1,28): expected-named-closing-tag-but-got-eof
+(1,28): unexpected-eof-in-text-mode
+#new-errors
+(1:29) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<"
+| <body>
+
+#data
+<!doctype html><script><!--<a
+#errors
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<a"
+| <body>
+
+#data
+<!doctype html><script><!--</
+#errors
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--</"
+| <body>
+
+#data
+<!doctype html><script><!--</script
+#errors
+(1,35): expected-named-closing-tag-but-got-eof
+(1,35): unexpected-eof-in-text-mode
+#new-errors
+(1:36) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--</script"
+| <body>
+
+#data
+<!doctype html><script><!--</script
+#errors
+(1,36): expected-attribute-name-but-got-eof
+(1,36): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:37) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--"
+| <body>
+
+#data
+<!doctype html><script><!--<s
+#errors
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<s"
+| <body>
+
+#data
+<!doctype html><script><!--<script
+#errors
+(1,34): expected-named-closing-tag-but-got-eof
+(1,34): unexpected-eof-in-text-mode
+#new-errors
+(1:35) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script"
+| <body>
+
+#data
+<!doctype html><script><!--<script
+#errors
+(1,35): eof-in-script-in-script
+(1,35): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:36) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script "
+| <body>
+
+#data
+<!doctype html><script><!--<script <
+#errors
+(1,36): eof-in-script-in-script
+(1,36): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:37) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script <"
+| <body>
+
+#data
+<!doctype html><script><!--<script <a
+#errors
+(1,37): eof-in-script-in-script
+(1,37): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script <a"
+| <body>
+
+#data
+<!doctype html><script><!--<script </
+#errors
+(1,37): eof-in-script-in-script
+(1,37): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </"
+| <body>
+
+#data
+<!doctype html><script><!--<script </s
+#errors
+(1,38): eof-in-script-in-script
+(1,38): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:39) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </s"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script
+#errors
+(1,43): eof-in-script-in-script
+(1,43): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:44) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script"
+| <body>
+
+#data
+<!doctype html><script><!--<script </scripta
+#errors
+(1,44): eof-in-script-in-script
+(1,44): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:45) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </scripta"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script
+#errors
+(1,44): expected-named-closing-tag-but-got-eof
+(1,44): unexpected-eof-in-text-mode
+#new-errors
+(1:45) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<!doctype html><script><!--<script </script>
+#errors
+(1,44): expected-named-closing-tag-but-got-eof
+(1,44): unexpected-eof-in-text-mode
+#new-errors
+(1:45) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script>"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script/
+#errors
+(1,44): expected-named-closing-tag-but-got-eof
+(1,44): unexpected-eof-in-text-mode
+#new-errors
+(1:45) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script/"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script <
+#errors
+(1,45): expected-named-closing-tag-but-got-eof
+(1,45): unexpected-eof-in-text-mode
+#new-errors
+(1:46) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script <"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script <a
+#errors
+(1,46): expected-named-closing-tag-but-got-eof
+(1,46): unexpected-eof-in-text-mode
+#new-errors
+(1:47) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script <a"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script </
+#errors
+(1,46): expected-named-closing-tag-but-got-eof
+(1,46): unexpected-eof-in-text-mode
+#new-errors
+(1:47) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script </"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script </script
+#errors
+(1,52): expected-named-closing-tag-but-got-eof
+(1,52): unexpected-eof-in-text-mode
+#new-errors
+(1:53) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script </script"
+| <body>
+
+#data
+<!doctype html><script><!--<script </script </script
+#errors
+(1,53): expected-attribute-name-but-got-eof
+(1,53): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:54) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<!doctype html><script><!--<script </script </script/
+#errors
+(1,53): unexpected-EOF-after-solidus-in-tag
+(1,53): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:54) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<!doctype html><script><!--<script </script </script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<!doctype html><script><!--<script -
+#errors
+(1,36): eof-in-script-in-script
+(1,36): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:37) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -"
+| <body>
+
+#data
+<!doctype html><script><!--<script -a
+#errors
+(1,37): eof-in-script-in-script
+(1,37): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -a"
+| <body>
+
+#data
+<!doctype html><script><!--<script -<
+#errors
+(1,37): eof-in-script-in-script
+(1,37): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -<"
+| <body>
+
+#data
+<!doctype html><script><!--<script --
+#errors
+(1,37): eof-in-script-in-script
+(1,37): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --"
+| <body>
+
+#data
+<!doctype html><script><!--<script --a
+#errors
+(1,38): eof-in-script-in-script
+(1,38): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:39) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --a"
+| <body>
+
+#data
+<!doctype html><script><!--<script --<
+#errors
+(1,38): eof-in-script-in-script
+(1,38): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:39) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --<"
+| <body>
+
+#data
+<!doctype html><script><!--<script -->
+#errors
+(1,38): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<!doctype html><script><!--<script --><
+#errors
+(1,39): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --><"
+| <body>
+
+#data
+<!doctype html><script><!--<script --></
+#errors
+(1,40): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --></"
+| <body>
+
+#data
+<!doctype html><script><!--<script --></script
+#errors
+(1,46): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script --></script"
+| <body>
+
+#data
+<!doctype html><script><!--<script --></script
+#errors
+(1,47): expected-attribute-name-but-got-eof
+(1,47): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:48) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<!doctype html><script><!--<script --></script/
+#errors
+(1,47): unexpected-EOF-after-solidus-in-tag
+(1,47): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:48) eof-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<!doctype html><script><!--<script --></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<!doctype html><script><!--<script><\/script>--></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script><\/script>-->"
+| <body>
+
+#data
+<!doctype html><script><!--<script></scr'+'ipt>--></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></scr'+'ipt>-->"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script>--><!--</script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>--><!--"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script>-- ></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>-- >"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script>- -></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>- ->"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script>- - ></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>- - >"
+| <body>
+
+#data
+<!doctype html><script><!--<script></script><script></script>-></script>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>->"
+| <body>
+
+#data
+<!doctype html><script><!--<script>--!></script>X
+#errors
+(1,49): expected-named-closing-tag-but-got-eof
+(1,49): unexpected-EOF-in-text-mode
+#new-errors
+(1:50) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script>--!></script>X"
+| <body>
+
+#data
+<!doctype html><script><!--<scr'+'ipt></script>--></script>
+#errors
+(1,59): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<scr'+'ipt>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><script><!--<script></scr'+'ipt></script>X
+#errors
+(1,57): expected-named-closing-tag-but-got-eof
+(1,57): unexpected-eof-in-text-mode
+#new-errors
+(1:58) eof-in-script-html-comment-like-text
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "<!--<script></scr'+'ipt></script>X"
+| <body>
+
+#data
+<!doctype html><style><!--<style></style>--></style>
+#errors
+(1,52): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--<style>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><style><!--</style>X
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--"
+| <body>
+| "X"
+
+#data
+<!doctype html><style><!--...</style>...--></style>
+#errors
+(1,51): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--..."
+| <body>
+| "...-->"
+
+#data
+<!doctype html><style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>"
+| <body>
+| "X"
+
+#data
+<!doctype html><style><!--...<style><!--...--!></style>--></style>
+#errors
+(1,66): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--...<style><!--...--!>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><style><!--...</style><!-- --><style>@import ...</style>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "<!--..."
+| <!-- -->
+| <style>
+| "@import ..."
+| <body>
+
+#data
+<!doctype html><style>...<style><!--...</style><!-- --></style>
+#errors
+(1,63): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "...<style><!--..."
+| <!-- -->
+| <body>
+
+#data
+<!doctype html><style>...<!--[if IE]><style>...</style>X
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <style>
+| "...<!--[if IE]><style>..."
+| <body>
+| "X"
+
+#data
+<!doctype html><title><!--<title></title>--></title>
+#errors
+(1,52): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "<!--<title>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><title>&lt;/title></title>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "</title>"
+| <body>
+
+#data
+<!doctype html><title>foo/title><link></head><body>X
+#errors
+(1,52): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "foo/title><link></head><body>X"
+| <body>
+
+#data
+<!doctype html><noscript><!--<noscript></noscript>--></noscript>
+#errors
+(1,64): unexpected-end-tag
+#script-on
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| "<!--<noscript>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><noscript><!--<noscript></noscript>--></noscript>
+#errors
+#script-off
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| <!-- <noscript></noscript> -->
+| <body>
+
+#data
+<!doctype html><noscript><!--</noscript>X<noscript>--></noscript>
+#errors
+#script-on
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| "<!--"
+| <body>
+| "X"
+| <noscript>
+| "-->"
+
+#data
+<!doctype html><noscript><!--</noscript>X<noscript>--></noscript>
+#errors
+#script-off
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| <!-- </noscript>X<noscript> -->
+| <body>
+
+#data
+<!doctype html><noscript><iframe></noscript>X
+#errors
+#script-on
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| "<iframe>"
+| <body>
+| "X"
+
+#data
+<!doctype html><noscript><iframe></noscript>X
+#errors
+ * (1,34) unexpected token in head noscript
+ * (1,46) unexpected EOF
+#script-off
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| <body>
+| <iframe>
+| "</noscript>X"
+
+#data
+<!doctype html><noframes><!--<noframes></noframes>--></noframes>
+#errors
+(1,64): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noframes>
+| "<!--<noframes>"
+| <body>
+| "-->"
+
+#data
+<!doctype html><noframes><body><script><!--...</script></body></noframes></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noframes>
+| "<body><script><!--...</script></body>"
+| <body>
+
+#data
+<!doctype html><textarea><!--<textarea></textarea>--></textarea>
+#errors
+(1,64): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<!--<textarea>"
+| "-->"
+
+#data
+<!doctype html><textarea>&lt;/textarea></textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "</textarea>"
+
+#data
+<!doctype html><textarea>&lt;</textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<"
+
+#data
+<!doctype html><textarea>a&lt;b</textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "a<b"
+
+#data
+<!doctype html><iframe><!--<iframe></iframe>--></iframe>
+#errors
+(1,56): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <iframe>
+| "<!--<iframe>"
+| "-->"
+
+#data
+<!doctype html><iframe>...<!--X->...<!--/X->...</iframe>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <iframe>
+| "...<!--X->...<!--/X->..."
+
+#data
+<!doctype html><xmp><!--<xmp></xmp>--></xmp>
+#errors
+(1,44): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <xmp>
+| "<!--<xmp>"
+| "-->"
+
+#data
+<!doctype html><noembed><!--<noembed></noembed>--></noembed>
+#errors
+(1,60): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <noembed>
+| "<!--<noembed>"
+| "-->"
+
+#data
+<script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,8): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<script>a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,9): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "a"
+| <body>
+
+#data
+<script><
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,9): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<"
+| <body>
+
+#data
+<script></
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,10): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</"
+| <body>
+
+#data
+<script></S
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</S"
+| <body>
+
+#data
+<script></SC
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,12): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</SC"
+| <body>
+
+#data
+<script></SCR
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,13): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</SCR"
+| <body>
+
+#data
+<script></SCRI
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,14): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</SCRI"
+| <body>
+
+#data
+<script></SCRIP
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,15): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</SCRIP"
+| <body>
+
+#data
+<script></SCRIPT
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,16): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</SCRIPT"
+| <body>
+
+#data
+<script></SCRIPT
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,17): expected-attribute-name-but-got-eof
+(1,17): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:18) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<script></s
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</s"
+| <body>
+
+#data
+<script></sc
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,12): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</sc"
+| <body>
+
+#data
+<script></scr
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,13): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</scr"
+| <body>
+
+#data
+<script></scri
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,14): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</scri"
+| <body>
+
+#data
+<script></scrip
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,15): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</scrip"
+| <body>
+
+#data
+<script></script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,16): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</script"
+| <body>
+
+#data
+<script></script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,17): expected-attribute-name-but-got-eof
+(1,17): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:18) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<script><!
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,10): expected-script-data-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!"
+| <body>
+
+#data
+<script><!a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!a"
+| <body>
+
+#data
+<script><!-
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!-"
+| <body>
+
+#data
+<script><!-a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,12): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!-a"
+| <body>
+
+#data
+<script><!--
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,12): expected-named-closing-tag-but-got-eof
+(1,12): unexpected-eof-in-text-mode
+#new-errors
+(1:13) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--"
+| <body>
+
+#data
+<script><!--a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,13): expected-named-closing-tag-but-got-eof
+(1,13): unexpected-eof-in-text-mode
+#new-errors
+(1:14) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--a"
+| <body>
+
+#data
+<script><!--<
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,13): expected-named-closing-tag-but-got-eof
+(1,13): unexpected-eof-in-text-mode
+#new-errors
+(1:14) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<"
+| <body>
+
+#data
+<script><!--<a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,14): expected-named-closing-tag-but-got-eof
+(1,14): unexpected-eof-in-text-mode
+#new-errors
+(1:15) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<a"
+| <body>
+
+#data
+<script><!--</
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,14): expected-named-closing-tag-but-got-eof
+(1,14): unexpected-eof-in-text-mode
+#new-errors
+(1:15) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--</"
+| <body>
+
+#data
+<script><!--</script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,20): expected-named-closing-tag-but-got-eof
+(1,20): unexpected-eof-in-text-mode
+#new-errors
+(1:21) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--</script"
+| <body>
+
+#data
+<script><!--</script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,21): expected-attribute-name-but-got-eof
+(1,21): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:22) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--"
+| <body>
+
+#data
+<script><!--<s
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,14): expected-named-closing-tag-but-got-eof
+(1,14): unexpected-eof-in-text-mode
+#new-errors
+(1:15) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<s"
+| <body>
+
+#data
+<script><!--<script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,19): expected-named-closing-tag-but-got-eof
+(1,19): unexpected-eof-in-text-mode
+#new-errors
+(1:20) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script"
+| <body>
+
+#data
+<script><!--<script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,20): eof-in-script-in-script
+(1,20): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:21) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script "
+| <body>
+
+#data
+<script><!--<script <
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,21): eof-in-script-in-script
+(1,21): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:22) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script <"
+| <body>
+
+#data
+<script><!--<script <a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,22): eof-in-script-in-script
+(1,22): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:23) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script <a"
+| <body>
+
+#data
+<script><!--<script </
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,22): eof-in-script-in-script
+(1,22): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:23) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </"
+| <body>
+
+#data
+<script><!--<script </s
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,23): eof-in-script-in-script
+(1,23): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:24) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </s"
+| <body>
+
+#data
+<script><!--<script </script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,28): eof-in-script-in-script
+(1,28): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:29) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script"
+| <body>
+
+#data
+<script><!--<script </scripta
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,29): eof-in-script-in-script
+(1,29): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </scripta"
+| <body>
+
+#data
+<script><!--<script </script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<script><!--<script </script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script>"
+| <body>
+
+#data
+<script><!--<script </script/
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,29): expected-named-closing-tag-but-got-eof
+(1,29): unexpected-eof-in-text-mode
+#new-errors
+(1:30) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script/"
+| <body>
+
+#data
+<script><!--<script </script <
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,30): expected-named-closing-tag-but-got-eof
+(1,30): unexpected-eof-in-text-mode
+#new-errors
+(1:31) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script <"
+| <body>
+
+#data
+<script><!--<script </script <a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,31): expected-named-closing-tag-but-got-eof
+(1,31): unexpected-eof-in-text-mode
+#new-errors
+(1:32) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script <a"
+| <body>
+
+#data
+<script><!--<script </script </
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,31): expected-named-closing-tag-but-got-eof
+(1,31): unexpected-eof-in-text-mode
+#new-errors
+(1:32) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script </"
+| <body>
+
+#data
+<script><!--<script </script </script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,37): expected-named-closing-tag-but-got-eof
+(1,37): unexpected-eof-in-text-mode
+#new-errors
+(1:38) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script </script"
+| <body>
+
+#data
+<script><!--<script </script </script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,38): expected-attribute-name-but-got-eof
+(1,38): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:39) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<script><!--<script </script </script/
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,38): unexpected-EOF-after-solidus-in-tag
+(1,38): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:39) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<script><!--<script </script </script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script </script "
+| <body>
+
+#data
+<script><!--<script -
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,21): eof-in-script-in-script
+(1,21): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:22) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -"
+| <body>
+
+#data
+<script><!--<script -a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,22): eof-in-script-in-script
+(1,22): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:23) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -a"
+| <body>
+
+#data
+<script><!--<script --
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,22): eof-in-script-in-script
+(1,22): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:23) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script --"
+| <body>
+
+#data
+<script><!--<script --a
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,23): eof-in-script-in-script
+(1,23): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:24) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script --a"
+| <body>
+
+#data
+<script><!--<script -->
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,23): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<script><!--<script --><
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,24): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script --><"
+| <body>
+
+#data
+<script><!--<script --></
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,25): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script --></"
+| <body>
+
+#data
+<script><!--<script --></script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,31): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script --></script"
+| <body>
+
+#data
+<script><!--<script --></script
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,32): expected-attribute-name-but-got-eof
+(1,32): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:33) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<script><!--<script --></script/
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,32): unexpected-EOF-after-solidus-in-tag
+(1,32): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:33) eof-in-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<script><!--<script --></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script -->"
+| <body>
+
+#data
+<script><!--<script><\/script>--></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script><\/script>-->"
+| <body>
+
+#data
+<script><!--<script></scr'+'ipt>--></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></scr'+'ipt>-->"
+| <body>
+
+#data
+<script><!--<script></script><script></script></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>"
+| <body>
+
+#data
+<script><!--<script></script><script></script>--><!--</script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>--><!--"
+| <body>
+
+#data
+<script><!--<script></script><script></script>-- ></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>-- >"
+| <body>
+
+#data
+<script><!--<script></script><script></script>- -></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>- ->"
+| <body>
+
+#data
+<script><!--<script></script><script></script>- - ></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>- - >"
+| <body>
+
+#data
+<script><!--<script></script><script></script>-></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></script><script></script>->"
+| <body>
+
+#data
+<script><!--<script>--!></script>X
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,34): expected-named-closing-tag-but-got-eof
+(1,34): unexpected-eof-in-text-mode
+#new-errors
+(1:35) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script>--!></script>X"
+| <body>
+
+#data
+<script><!--<scr'+'ipt></script>--></script>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,44): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<scr'+'ipt>"
+| <body>
+| "-->"
+
+#data
+<script><!--<script></scr'+'ipt></script>X
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,42): expected-named-closing-tag-but-got-eof
+(1,42): unexpected-eof-in-text-mode
+#new-errors
+(1:43) eof-in-script-html-comment-like-text
+#document
+| <html>
+| <head>
+| <script>
+| "<!--<script></scr'+'ipt></script>X"
+| <body>
+
+#data
+<style><!--<style></style>--></style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,37): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--<style>"
+| <body>
+| "-->"
+
+#data
+<style><!--</style>X
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--"
+| <body>
+| "X"
+
+#data
+<style><!--...</style>...--></style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,36): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--..."
+| <body>
+| "...-->"
+
+#data
+<style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>"
+| <body>
+| "X"
+
+#data
+<style><!--...<style><!--...--!></style>--></style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,51): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--...<style><!--...--!>"
+| <body>
+| "-->"
+
+#data
+<style><!--...</style><!-- --><style>@import ...</style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "<!--..."
+| <!-- -->
+| <style>
+| "@import ..."
+| <body>
+
+#data
+<style>...<style><!--...</style><!-- --></style>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,48): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| "...<style><!--..."
+| <!-- -->
+| <body>
+
+#data
+<style>...<!--[if IE]><style>...</style>X
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| "...<!--[if IE]><style>..."
+| <body>
+| "X"
+
+#data
+<title><!--<title></title>--></title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,37): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <title>
+| "<!--<title>"
+| <body>
+| "-->"
+
+#data
+<title>&lt;/title></title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| "</title>"
+| <body>
+
+#data
+<title>foo/title><link></head><body>X
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,37): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <title>
+| "foo/title><link></head><body>X"
+| <body>
+
+#data
+<noscript><!--<noscript></noscript>--></noscript>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,49): unexpected-end-tag
+#script-on
+#document
+| <html>
+| <head>
+| <noscript>
+| "<!--<noscript>"
+| <body>
+| "-->"
+
+#data
+<noscript><!--<noscript></noscript>--></noscript>
+#errors
+ * (1,11) missing DOCTYPE
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- <noscript></noscript> -->
+| <body>
+
+#data
+<noscript><!--</noscript>X<noscript>--></noscript>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#script-on
+#document
+| <html>
+| <head>
+| <noscript>
+| "<!--"
+| <body>
+| "X"
+| <noscript>
+| "-->"
+
+#data
+<noscript><!--</noscript>X<noscript>--></noscript>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- </noscript>X<noscript> -->
+| <body>
+
+#data
+<noscript><iframe></noscript>X
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#script-on
+#document
+| <html>
+| <head>
+| <noscript>
+| "<iframe>"
+| <body>
+| "X"
+
+#data
+<noscript><iframe></noscript>X
+#errors
+ * (1,11) missing DOCTYPE
+ * (1,19) unexpected token in head noscript
+ * (1,31) unexpected EOF
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <body>
+| <iframe>
+| "</noscript>X"
+
+#data
+<noframes><!--<noframes></noframes>--></noframes>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,49): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <noframes>
+| "<!--<noframes>"
+| <body>
+| "-->"
+
+#data
+<noframes><body><script><!--...</script></body></noframes></html>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <noframes>
+| "<body><script><!--...</script></body>"
+| <body>
+
+#data
+<textarea><!--<textarea></textarea>--></textarea>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,49): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "<!--<textarea>"
+| "-->"
+
+#data
+<textarea>&lt;/textarea></textarea>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "</textarea>"
+
+#data
+<iframe><!--<iframe></iframe>--></iframe>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,41): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <iframe>
+| "<!--<iframe>"
+| "-->"
+
+#data
+<iframe>...<!--X->...<!--/X->...</iframe>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <iframe>
+| "...<!--X->...<!--/X->..."
+
+#data
+<xmp><!--<xmp></xmp>--></xmp>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,29): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <xmp>
+| "<!--<xmp>"
+| "-->"
+
+#data
+<noembed><!--<noembed></noembed>--></noembed>
+#errors
+(1,9): expected-doctype-but-got-start-tag
+(1,45): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <noembed>
+| "<!--<noembed>"
+| "-->"
+
+#data
+<!doctype html><table>
+
+#errors
+(2,0): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| "
+"
+
+#data
+<!doctype html><table><td><span><font></span><span>
+#errors
+(1,26): unexpected-cell-in-table-body
+(1,45): unexpected-end-tag
+(1,51): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <span>
+| <font>
+| <font>
+| <span>
+
+#data
+<!doctype html><form><table></form><form></table></form>
+#errors
+(1,35): unexpected-end-tag-implies-table-voodoo
+(1,35): unexpected-end-tag
+(1,41): unexpected-form-in-table
+(1,56): unexpected-end-tag
+(1,56): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <form>
+| <table>
+| <form>
diff --git a/tests/html5lib-tests/tree-construction/tests17.dat b/tests/html5lib-tests/tree-construction/tests17.dat
new file mode 100644
index 0000000..e49bcf0
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests17.dat
@@ -0,0 +1,179 @@
+#data
+<!doctype html><table><tbody><select><tr>
+#errors
+(1,37): unexpected-start-tag-implies-table-voodoo
+(1,41): unexpected-table-element-start-tag-in-select-in-table
+(1,41): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><table><tr><select><td>
+#errors
+(1,34): unexpected-start-tag-implies-table-voodoo
+(1,38): unexpected-table-element-start-tag-in-select-in-table
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<!doctype html><table><tr><td><select><td>
+#errors
+(1,42): unexpected-table-element-start-tag-in-select-in-table
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <select>
+| <td>
+
+#data
+<!doctype html><table><tr><th><select><td>
+#errors
+(1,42): unexpected-table-element-start-tag-in-select-in-table
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <th>
+| <select>
+| <td>
+
+#data
+<!doctype html><table><caption><select><tr>
+#errors
+(1,43): unexpected-table-element-start-tag-in-select-in-table
+(1,43): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <select>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><select><tr>
+#errors
+(1,27): unexpected-start-tag-in-select
+(1,27): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><td>
+#errors
+(1,27): unexpected-start-tag-in-select
+(1,27): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><th>
+#errors
+(1,27): unexpected-start-tag-in-select
+(1,27): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><tbody>
+#errors
+(1,30): unexpected-start-tag-in-select
+(1,30): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><thead>
+#errors
+(1,30): unexpected-start-tag-in-select
+(1,30): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><tfoot>
+#errors
+(1,30): unexpected-start-tag-in-select
+(1,30): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><select><caption>
+#errors
+(1,32): unexpected-start-tag-in-select
+(1,32): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><table><tr></table>a
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| "a"
diff --git a/tests/html5lib-tests/tree-construction/tests18.dat b/tests/html5lib-tests/tree-construction/tests18.dat
new file mode 100644
index 0000000..0b6d5dc
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests18.dat
@@ -0,0 +1,558 @@
+#data
+<plaintext></plaintext>
+#errors
+11: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>â€.
+23: End of file seen and there were open elements.
+#document
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><plaintext></plaintext>
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><html><plaintext></plaintext>
+#errors
+44: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><head><plaintext></plaintext>
+#errors
+44: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><html><noscript><plaintext></plaintext>
+#errors
+42: Bad start tag in “plaintext†in “headâ€.
+54: End of file seen and there were open elements.
+#script-off
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <noscript>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html></head><plaintext></plaintext>
+#errors
+45: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><body><plaintext></plaintext>
+#errors
+44: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><table><plaintext></plaintext>
+#errors
+(1,33): foster-parenting-start-tag
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): foster-parenting-character
+(1,46): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+| <table>
+
+#data
+<!doctype html><table><tbody><plaintext></plaintext>
+#errors
+(1,40): foster-parenting-start-tag
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+| <table>
+| <tbody>
+
+#data
+<!doctype html><table><tbody><tr><plaintext></plaintext>
+#errors
+(1,44): foster-parenting-start-tag
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): foster-parenting-character
+(1,57): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><table><td><plaintext></plaintext>
+#errors
+(1,26): unexpected-cell-in-table-body
+(1,49): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><table><caption><plaintext></plaintext>
+#errors
+(1,54): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><table><colgroup><plaintext></plaintext>
+#errors
+(1,43): foster-parenting-start-tag
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+(1,56): foster-parenting-character
+55: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+| <table>
+| <colgroup>
+
+#data
+<!doctype html><select><plaintext></plaintext>X
+#errors
+34: Stray start tag “plaintextâ€.
+46: Stray end tag “plaintextâ€.
+47: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "X"
+
+#data
+<!doctype html><table><select><plaintext>a<caption>b
+#errors
+30: Start tag “select†seen in “tableâ€.
+41: Stray start tag “plaintextâ€.
+51: “caption†start tag with “select†open.
+52: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "a"
+| <table>
+| <caption>
+| "b"
+
+#data
+<!doctype html><template><plaintext>a</template>b
+#errors
+49: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <template>
+| content
+| <plaintext>
+| "a</template>b"
+| <body>
+
+#data
+<!doctype html><body></body><plaintext></plaintext>
+#errors
+39: Stray start tag “plaintextâ€.
+51: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><frameset><plaintext></plaintext>
+#errors
+36: Stray start tag “plaintextâ€.
+48: Stray end tag “plaintextâ€.
+48: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><frameset></frameset><plaintext></plaintext>
+#errors
+47: Stray start tag “plaintextâ€.
+59: Stray end tag “plaintextâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><body></body></html><plaintext></plaintext>
+#errors
+46: Stray start tag “plaintextâ€.
+58: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!doctype html><frameset></frameset></html><plaintext></plaintext>
+#errors
+54: Stray start tag “plaintextâ€.
+66: Stray end tag “plaintextâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><svg><plaintext>a</plaintext>b
+#errors
+45: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg plaintext>
+| "a"
+| "b"
+
+#data
+<!doctype html><svg><title><plaintext>a</plaintext>b
+#errors
+52: End of file seen and there were open elements.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg title>
+| <plaintext>
+| "a</plaintext>b"
+
+#data
+<!doctype html><table><tr><style></script></style>abc
+#errors
+(1,51): foster-parenting-character
+(1,52): foster-parenting-character
+(1,53): foster-parenting-character
+(1,53): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "abc"
+| <table>
+| <tbody>
+| <tr>
+| <style>
+| "</script>"
+
+#data
+<!doctype html><table><tr><script></style></script>abc
+#errors
+(1,52): foster-parenting-character
+(1,53): foster-parenting-character
+(1,54): foster-parenting-character
+(1,54): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "abc"
+| <table>
+| <tbody>
+| <tr>
+| <script>
+| "</style>"
+
+#data
+<!doctype html><table><caption><style></script></style>abc
+#errors
+(1,58): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <style>
+| "</script>"
+| "abc"
+
+#data
+<!doctype html><table><td><style></script></style>abc
+#errors
+(1,26): unexpected-cell-in-table-body
+(1,53): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <style>
+| "</script>"
+| "abc"
+
+#data
+<!doctype html><select><script></style></script>abc
+#errors
+(1,51): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <script>
+| "</style>"
+| "abc"
+
+#data
+<!doctype html><table><select><script></style></script>abc
+#errors
+(1,30): unexpected-start-tag-implies-table-voodoo
+(1,58): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <script>
+| "</style>"
+| "abc"
+| <table>
+
+#data
+<!doctype html><table><tr><select><script></style></script>abc
+#errors
+(1,34): unexpected-start-tag-implies-table-voodoo
+(1,62): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <script>
+| "</style>"
+| "abc"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><frameset></frameset><noframes>abc
+#errors
+(1,49): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <noframes>
+| "abc"
+
+#data
+<!doctype html><frameset></frameset><noframes>abc</noframes><!--abc-->
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <noframes>
+| "abc"
+| <!-- abc -->
+
+#data
+<!doctype html><frameset></frameset></html><noframes>abc
+#errors
+(1,56): expected-named-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <noframes>
+| "abc"
+
+#data
+<!doctype html><frameset></frameset></html><noframes>abc</noframes><!--abc-->
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <noframes>
+| "abc"
+| <!-- abc -->
+
+#data
+<!doctype html><table><tr></tbody><tfoot>
+#errors
+(1,41): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <tfoot>
+
+#data
+<!doctype html><table><td><svg></svg>abc<td>
+#errors
+(1,26): unexpected-cell-in-table-body
+(1,44): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| "abc"
+| <td>
diff --git a/tests/html5lib-tests/tree-construction/tests19.dat b/tests/html5lib-tests/tree-construction/tests19.dat
new file mode 100644
index 0000000..2e06fb3
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests19.dat
@@ -0,0 +1,1453 @@
+#data
+<!doctype html><math><mn DefinitionUrl="foo">
+#errors
+(1,45): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mn>
+| definitionURL="foo"
+
+#data
+<!doctype html><html></p><!--foo-->
+#errors
+(1,25): end-tag-after-implied-root
+#document
+| <!DOCTYPE html>
+| <html>
+| <!-- foo -->
+| <head>
+| <body>
+
+#data
+<!doctype html><head></head></p><!--foo-->
+#errors
+(1,32): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <!-- foo -->
+| <body>
+
+#data
+<!doctype html><body><p><pre>
+#errors
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <pre>
+
+#data
+<!doctype html><body><p><listing>
+#errors
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <listing>
+
+#data
+<!doctype html><p><plaintext>
+#errors
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <plaintext>
+
+#data
+<!doctype html><p><h1>
+#errors
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <h1>
+
+#data
+<!doctype html><isindex type="hidden">
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <isindex>
+| type="hidden"
+
+#data
+<!doctype html><ruby><p><rp>
+#errors
+(1,28): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <p>
+| <rp>
+
+#data
+<!doctype html><ruby><div><span><rp>
+#errors
+(1,36): XXX-undefined-error
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <span>
+| <rp>
+
+#data
+<!doctype html><ruby><div><p><rp>
+#errors
+(1,33): XXX-undefined-error
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <p>
+| <rp>
+
+#data
+<!doctype html><ruby><p><rt>
+#errors
+(1,28): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <p>
+| <rt>
+
+#data
+<!doctype html><ruby><div><span><rt>
+#errors
+(1,36): XXX-undefined-error
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <span>
+| <rt>
+
+#data
+<!doctype html><ruby><div><p><rt>
+#errors
+(1,33): XXX-undefined-error
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <p>
+| <rt>
+
+#data
+<html><ruby>a<rb>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rb>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rp>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rp>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rt>b<rt></ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rt>
+| "b"
+| <rt>
+
+#data
+<html><ruby>a<rtc>b<rt>c<rb>d</ruby></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| "a"
+| <rtc>
+| "b"
+| <rt>
+| "c"
+| <rb>
+| "d"
+
+#data
+<!doctype html><math/><foo>
+#errors
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <foo>
+
+#data
+<!doctype html><svg/><foo>
+#errors
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <foo>
+
+#data
+<!doctype html><div></body><!--foo-->
+#errors
+(1,27): expected-one-end-tag-but-got-another
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| <!-- foo -->
+
+#data
+<!doctype html><h1><div><h3><span></h1>foo
+#errors
+(1,39): end-tag-too-early
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <h1>
+| <div>
+| <h3>
+| <span>
+| "foo"
+
+#data
+<!doctype html><p></h3>foo
+#errors
+(1,23): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "foo"
+
+#data
+<!doctype html><h3><li>abc</h2>foo
+#errors
+(1,31): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <h3>
+| <li>
+| "abc"
+| "foo"
+
+#data
+<!doctype html><table>abc<!--foo-->
+#errors
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+(1,25): foster-parenting-character
+(1,35): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "abc"
+| <table>
+| <!-- foo -->
+
+#data
+<!doctype html><table> <!--foo-->
+#errors
+(1,34): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| " "
+| <!-- foo -->
+
+#data
+<!doctype html><table> b <!--foo-->
+#errors
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+(1,25): foster-parenting-character
+(1,35): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| " b "
+| <table>
+| <!-- foo -->
+
+#data
+<!doctype html><select><option><option>
+#errors
+(1,39): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <option>
+
+#data
+<!doctype html><select><option></optgroup>
+#errors
+(1,42): unexpected-end-tag-in-select
+(1,42): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+
+#data
+<!doctype html><select><option></optgroup>
+#errors
+(1,42): unexpected-end-tag-in-select
+(1,42): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+
+#data
+<!doctype html><dd><optgroup><dd>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dd>
+| <optgroup>
+| <dd>
+
+#data
+<!doctype html><p><math><mi><p><h1>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math mi>
+| <p>
+| <h1>
+
+#data
+<!doctype html><p><math><mo><p><h1>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math mo>
+| <p>
+| <h1>
+
+#data
+<!doctype html><p><math><mn><p><h1>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math mn>
+| <p>
+| <h1>
+
+#data
+<!doctype html><p><math><ms><p><h1>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math ms>
+| <p>
+| <h1>
+
+#data
+<!doctype html><p><math><mtext><p><h1>
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math mtext>
+| <p>
+| <h1>
+
+#data
+<!doctype html><frameset></noframes>
+#errors
+(1,36): unexpected-end-tag-in-frameset
+(1,36): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><html c=d><body></html><html a=b>
+#errors
+(1,48): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| a="b"
+| c="d"
+| <head>
+| <body>
+
+#data
+<!doctype html><html c=d><frameset></frameset></html><html a=b>
+#errors
+(1,63): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| a="b"
+| c="d"
+| <head>
+| <frameset>
+
+#data
+<!doctype html><html><frameset></frameset></html><!--foo-->
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <!-- foo -->
+
+#data
+<!doctype html><html><frameset></frameset></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| " "
+
+#data
+<!doctype html><html><frameset></frameset></html>abc
+#errors
+(1,50): expected-eof-but-got-char
+(1,51): expected-eof-but-got-char
+(1,52): expected-eof-but-got-char
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><html><frameset></frameset></html><p>
+#errors
+(1,52): expected-eof-but-got-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><html><frameset></frameset></html></p>
+#errors
+(1,53): expected-eof-but-got-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<html><frameset></frameset></html><!doctype html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,49): unexpected-doctype
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><body><frameset>
+#errors
+(1,31): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!doctype html><p><frameset><frame>
+#errors
+(1,28): unexpected-start-tag
+(1,35): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<!doctype html><p>a<frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "a"
+
+#data
+<!doctype html><p> <frameset><frame>
+#errors
+(1,29): unexpected-start-tag
+(1,36): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<!doctype html><pre><frameset>
+#errors
+(1,30): unexpected-start-tag
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+
+#data
+<!doctype html><listing><frameset>
+#errors
+(1,34): unexpected-start-tag
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <listing>
+
+#data
+<!doctype html><li><frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <li>
+
+#data
+<!doctype html><dd><frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dd>
+
+#data
+<!doctype html><dt><frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dt>
+
+#data
+<!doctype html><button><frameset>
+#errors
+(1,33): unexpected-start-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <button>
+
+#data
+<!doctype html><applet><frameset>
+#errors
+(1,33): unexpected-start-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <applet>
+
+#data
+<!doctype html><marquee><frameset>
+#errors
+(1,34): unexpected-start-tag
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <marquee>
+
+#data
+<!doctype html><object><frameset>
+#errors
+(1,33): unexpected-start-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <object>
+
+#data
+<!doctype html><table><frameset>
+#errors
+(1,32): unexpected-start-tag-implies-table-voodoo
+(1,32): unexpected-start-tag
+(1,32): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+
+#data
+<!doctype html><area><frameset>
+#errors
+(1,31): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <area>
+
+#data
+<!doctype html><basefont><frameset>
+#errors
+(1,35): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <basefont>
+| <frameset>
+
+#data
+<!doctype html><bgsound><frameset>
+#errors
+(1,34): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <bgsound>
+| <frameset>
+
+#data
+<!doctype html><br><frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <br>
+
+#data
+<!doctype html><embed><frameset>
+#errors
+(1,32): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <embed>
+
+#data
+<!doctype html><img><frameset>
+#errors
+(1,30): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <img>
+
+#data
+<!doctype html><input><frameset>
+#errors
+(1,32): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <input>
+
+#data
+<!doctype html><keygen><frameset>
+#errors
+(1,33): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <keygen>
+
+#data
+<!doctype html><wbr><frameset>
+#errors
+(1,30): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <wbr>
+
+#data
+<!doctype html><hr><frameset>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <hr>
+
+#data
+<!doctype html><textarea></textarea><frameset>
+#errors
+(1,46): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+
+#data
+<!doctype html><xmp></xmp><frameset>
+#errors
+(1,36): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <xmp>
+
+#data
+<!doctype html><iframe></iframe><frameset>
+#errors
+(1,42): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <iframe>
+
+#data
+<!doctype html><select></select><frameset>
+#errors
+(1,42): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!doctype html><svg></svg><frameset><frame>
+#errors
+(1,36): unexpected-start-tag
+(1,43): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<!doctype html><math></math><frameset><frame>
+#errors
+(1,38): unexpected-start-tag
+(1,45): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<!doctype html><svg><foreignObject><div> <frameset><frame>
+#errors
+(1,51): unexpected-start-tag
+(1,58): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<!doctype html><svg>a</svg><frameset><frame>
+#errors
+(1,37): unexpected-start-tag
+(1,44): unexpected-start-tag-ignored
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "a"
+
+#data
+<!doctype html><svg> </svg><frameset><frame>
+#errors
+(1,37): unexpected-start-tag
+(1,44): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| <frame>
+
+#data
+<html>aaa<frameset></frameset>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,19): unexpected-start-tag
+(1,30): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| "aaa"
+
+#data
+<html> a <frameset></frameset>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,19): unexpected-start-tag
+(1,30): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| "a "
+
+#data
+<!doctype html><div><frameset>
+#errors
+(1,30): unexpected-start-tag
+(1,30): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><div><body><frameset>
+#errors
+(1,26): unexpected-start-tag
+(1,36): unexpected-start-tag
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+
+#data
+<!doctype html><p><math></p>a
+#errors
+(1,28): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| "a"
+
+#data
+<!doctype html><p><math><mn><span></p>a
+#errors
+(1,38): unexpected-end-tag
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <math math>
+| <math mn>
+| <span>
+| <p>
+| "a"
+
+#data
+<!doctype html><math></html>
+#errors
+(1,28): unexpected-end-tag
+(1,28): expected-one-end-tag-but-got-another
+(1,28): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+
+#data
+<!doctype html><meta charset="ascii">
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <meta>
+| charset="ascii"
+| <body>
+
+#data
+<!doctype html><meta http-equiv="content-type" content="text/html;charset=ascii">
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <meta>
+| content="text/html;charset=ascii"
+| http-equiv="content-type"
+| <body>
+
+#data
+<!doctype html><head><!--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--><meta charset="utf8">
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <!-- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -->
+| <meta>
+| charset="utf8"
+| <body>
+
+#data
+<!doctype html><html a=b><head></head><html c=d>
+#errors
+(1,48): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| a="b"
+| c="d"
+| <head>
+| <body>
+
+#data
+<!doctype html><image/>
+#errors
+(1,23): image-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <img>
+
+#data
+<!doctype html>a<i>b<table>c<b>d</i>e</b>f
+#errors
+(1,28): foster-parenting-character
+(1,31): foster-parenting-start-tag
+(1,32): foster-parenting-character
+(1,36): foster-parenting-end-tag
+(1,36): adoption-agency-1.3
+(1,37): foster-parenting-character
+(1,41): foster-parenting-end-tag
+(1,42): foster-parenting-character
+(1,42): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "a"
+| <i>
+| "bc"
+| <b>
+| "de"
+| "f"
+| <table>
+
+#data
+<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f
+#errors
+(1,25): foster-parenting-start-tag
+(1,26): foster-parenting-character
+(1,29): foster-parenting-start-tag
+(1,30): foster-parenting-character
+(1,35): foster-parenting-start-tag
+(1,36): foster-parenting-character
+(1,39): foster-parenting-start-tag
+(1,40): foster-parenting-character
+(1,44): foster-parenting-end-tag
+(1,44): adoption-agency-1.3
+(1,44): adoption-agency-1.3
+(1,45): foster-parenting-character
+(1,49): foster-parenting-end-tag
+(1,49): adoption-agency-1.3
+(1,49): adoption-agency-1.3
+(1,50): foster-parenting-character
+(1,50): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <i>
+| "a"
+| <b>
+| "b"
+| <b>
+| <div>
+| <b>
+| <i>
+| "c"
+| <a>
+| "d"
+| <a>
+| "e"
+| <a>
+| "f"
+| <table>
+
+#data
+<!doctype html><i>a<b>b<div>c<a>d</i>e</b>f
+#errors
+(1,37): adoption-agency-1.3
+(1,37): adoption-agency-1.3
+(1,42): adoption-agency-1.3
+(1,42): adoption-agency-1.3
+(1,43): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <i>
+| "a"
+| <b>
+| "b"
+| <b>
+| <div>
+| <b>
+| <i>
+| "c"
+| <a>
+| "d"
+| <a>
+| "e"
+| <a>
+| "f"
+
+#data
+<!doctype html><table><i>a<b>b<div>c</i>
+#errors
+(1,25): foster-parenting-start-tag
+(1,26): foster-parenting-character
+(1,29): foster-parenting-start-tag
+(1,30): foster-parenting-character
+(1,35): foster-parenting-start-tag
+(1,36): foster-parenting-character
+(1,40): foster-parenting-end-tag
+(1,40): adoption-agency-1.3
+(1,40): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <i>
+| "a"
+| <b>
+| "b"
+| <b>
+| <div>
+| <i>
+| "c"
+| <table>
+
+#data
+<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f
+#errors
+(1,25): foster-parenting-start-tag
+(1,26): foster-parenting-character
+(1,29): foster-parenting-start-tag
+(1,30): foster-parenting-character
+(1,35): foster-parenting-start-tag
+(1,36): foster-parenting-character
+(1,39): foster-parenting-start-tag
+(1,40): foster-parenting-character
+(1,44): foster-parenting-end-tag
+(1,44): adoption-agency-1.3
+(1,44): adoption-agency-1.3
+(1,45): foster-parenting-character
+(1,49): foster-parenting-end-tag
+(1,44): adoption-agency-1.3
+(1,44): adoption-agency-1.3
+(1,50): foster-parenting-character
+(1,50): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <i>
+| "a"
+| <b>
+| "b"
+| <b>
+| <div>
+| <b>
+| <i>
+| "c"
+| <a>
+| "d"
+| <a>
+| "e"
+| <a>
+| "f"
+| <table>
+
+#data
+<!doctype html><table><i>a<div>b<tr>c<b>d</i>e
+#errors
+(1,25): foster-parenting-start-tag
+(1,26): foster-parenting-character
+(1,31): foster-parenting-start-tag
+(1,32): foster-parenting-character
+(1,37): foster-parenting-character
+(1,40): foster-parenting-start-tag
+(1,41): foster-parenting-character
+(1,45): foster-parenting-end-tag
+(1,45): adoption-agency-1.3
+(1,46): foster-parenting-character
+(1,46): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <i>
+| "a"
+| <div>
+| "b"
+| <i>
+| "c"
+| <b>
+| "d"
+| <b>
+| "e"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><table><td><table><i>a<div>b<b>c</i>d
+#errors
+(1,26): unexpected-cell-in-table-body
+(1,36): foster-parenting-start-tag
+(1,37): foster-parenting-character
+(1,42): foster-parenting-start-tag
+(1,43): foster-parenting-character
+(1,46): foster-parenting-start-tag
+(1,47): foster-parenting-character
+(1,51): foster-parenting-end-tag
+(1,51): adoption-agency-1.3
+(1,51): adoption-agency-1.3
+(1,52): foster-parenting-character
+(1,52): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <i>
+| "a"
+| <div>
+| <i>
+| "b"
+| <b>
+| "c"
+| <b>
+| "d"
+| <table>
+
+#data
+<!doctype html><body><bgsound>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <bgsound>
+
+#data
+<!doctype html><body><basefont>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <basefont>
+
+#data
+<!doctype html><a><b></a><basefont>
+#errors
+(1,25): adoption-agency-1.3
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <basefont>
+
+#data
+<!doctype html><a><b></a><bgsound>
+#errors
+(1,25): adoption-agency-1.3
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <bgsound>
+
+#data
+<!doctype html><figcaption><article></figcaption>a
+#errors
+(1,49): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <figcaption>
+| <article>
+| "a"
+
+#data
+<!doctype html><summary><article></summary>a
+#errors
+(1,43): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <summary>
+| <article>
+| "a"
+
+#data
+<!doctype html><p><a><plaintext>b
+#errors
+(1,32): unexpected-end-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <a>
+| <plaintext>
+| <a>
+| "b"
+
+#data
+<!DOCTYPE html><div>a<a></div>b<p>c</p>d
+#errors
+(1,30): end-tag-too-early
+(1,40): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| "a"
+| <a>
+| <a>
+| "b"
+| <p>
+| "c"
+| "d"
diff --git a/tests/html5lib-tests/tree-construction/tests2.dat b/tests/html5lib-tests/tree-construction/tests2.dat
new file mode 100644
index 0000000..b44fec4
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests2.dat
@@ -0,0 +1,821 @@
+#data
+<!DOCTYPE html>Test
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "Test"
+
+#data
+<textarea>test</div>test
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,24): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "test</div>test"
+
+#data
+<table><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,11): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><td>test</tbody></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "test"
+
+#data
+<frame>test
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,7): unexpected-start-tag-ignored
+#document
+| <html>
+| <head>
+| <body>
+| "test"
+
+#data
+<!DOCTYPE html><frameset>test
+#errors
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><frameset> te st
+#errors
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): unexpected-char-in-frameset
+(1,29): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| " "
+
+#data
+<!DOCTYPE html><frameset></frameset> te st
+#errors
+(1,29): unexpected-char-after-frameset
+(1,29): unexpected-char-after-frameset
+(1,29): unexpected-char-after-frameset
+(1,29): unexpected-char-after-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+| " "
+
+#data
+<!DOCTYPE html><frameset><!DOCTYPE html>
+#errors
+(1,40): unexpected-doctype
+(1,40): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><font><p><b>test</font>
+#errors
+(1,38): adoption-agency-1.3
+(1,38): adoption-agency-1.3
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <font>
+| <p>
+| <font>
+| <b>
+| "test"
+
+#data
+<!DOCTYPE html><dt><div><dd>
+#errors
+(1,28): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <dt>
+| <div>
+| <dd>
+
+#data
+<script></x
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,11): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <script>
+| "</x"
+| <body>
+
+#data
+<table><plaintext><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,18): unexpected-start-tag-implies-table-voodoo
+(1,22): foster-parenting-character-in-table
+(1,22): foster-parenting-character-in-table
+(1,22): foster-parenting-character-in-table
+(1,22): foster-parenting-character-in-table
+(1,22): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "<td>"
+| <table>
+
+#data
+<plaintext></plaintext>
+#errors
+(1,11): expected-doctype-but-got-start-tag
+(1,23): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "</plaintext>"
+
+#data
+<!DOCTYPE html><table><tr>TEST
+#errors
+(1,30): foster-parenting-character-in-table
+(1,30): foster-parenting-character-in-table
+(1,30): foster-parenting-character-in-table
+(1,30): foster-parenting-character-in-table
+(1,30): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "TEST"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!DOCTYPE html><body t1=1><body t2=2><body t3=3 t4=4>
+#errors
+(1,37): unexpected-start-tag
+(1,53): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| t1="1"
+| t2="2"
+| t3="3"
+| t4="4"
+
+#data
+</b test
+#errors
+(1,8): eof-in-attribute-name
+(1,8): expected-doctype-but-got-eof
+#new-errors
+(1:9) eof-in-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html></b test<b &=&amp>X
+#errors
+(1,24): invalid-character-in-attribute-name
+(1,32): named-entity-without-semicolon
+(1,33): attributes-in-end-tag
+(1,33): unexpected-end-tag-before-html
+#new-errors
+(1:24) unexpected-character-in-attribute-name
+(1:33) missing-semicolon-after-character-reference
+(1:33) end-tag-with-attributes
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+
+#data
+<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt
+#errors
+(1,9): need-space-after-doctype
+(1,54): expected-named-closing-tag-but-got-eof
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| type="text/x-foobar;baz"
+| "X</SCRipt"
+| <body>
+
+#data
+&
+#errors
+(1,1): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "&"
+
+#data
+&#
+#errors
+(1,2): expected-numeric-entity
+(1,2): expected-doctype-but-got-chars
+#new-errors
+(1:3) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&#"
+
+#data
+&#X
+#errors
+(1,3): expected-numeric-entity
+(1,3): expected-doctype-but-got-chars
+#new-errors
+(1:4) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&#X"
+
+#data
+&#x
+#errors
+(1,3): expected-numeric-entity
+(1,3): expected-doctype-but-got-chars
+#new-errors
+(1:4) absence-of-digits-in-numeric-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&#x"
+
+#data
+&#45
+#errors
+(1,4): numeric-entity-without-semicolon
+(1,4): expected-doctype-but-got-chars
+#new-errors
+(1:5) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "-"
+
+#data
+&x-test
+#errors
+(1,2): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "&x-test"
+
+#data
+<!doctypehtml><p><li>
+#errors
+(1,9): need-space-after-doctype
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <li>
+
+#data
+<!doctypehtml><p><dt>
+#errors
+(1,9): need-space-after-doctype
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <dt>
+
+#data
+<!doctypehtml><p><dd>
+#errors
+(1,9): need-space-after-doctype
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <dd>
+
+#data
+<!doctypehtml><p><form>
+#errors
+(1,9): need-space-after-doctype
+(1,23): expected-closing-tag-but-got-eof
+#new-errors
+(1:10) missing-whitespace-before-doctype-name
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <form>
+
+#data
+<!DOCTYPE html><p></P>X
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| "X"
+
+#data
+&AMP
+#errors
+(1,4): named-entity-without-semicolon
+(1,4): expected-doctype-but-got-chars
+#new-errors
+(1:5) missing-semicolon-after-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&"
+
+#data
+&AMp;
+#errors
+(1,3): expected-named-entity
+(1,3): expected-doctype-but-got-chars
+#new-errors
+(1:5) unknown-named-character-reference
+#document
+| <html>
+| <head>
+| <body>
+| "&AMp;"
+
+#data
+<!DOCTYPE html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY>
+#errors
+(1,110): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <thisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly>
+
+#data
+<!DOCTYPE html>X</body>X
+#errors
+(1,24): unexpected-char-after-body
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "XX"
+
+#data
+<!DOCTYPE html><!-- X
+#errors
+(1,21): eof-in-comment
+#new-errors
+(1:22) eof-in-comment
+#document
+| <!DOCTYPE html>
+| <!-- X -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><table><caption>test TEST</caption><td>test
+#errors
+(1,54): unexpected-cell-in-table-body
+(1,58): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| "test TEST"
+| <tbody>
+| <tr>
+| <td>
+| "test"
+
+#data
+<!DOCTYPE html><select><option><optgroup>
+#errors
+(1,41): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| <optgroup>
+
+#data
+<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option>
+#errors
+(1,68): unexpected-select-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <optgroup>
+| <option>
+| <option>
+| <option>
+
+#data
+<!DOCTYPE html><select><optgroup><option><optgroup>
+#errors
+(1,51): eof-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <optgroup>
+| <option>
+| <optgroup>
+
+#data
+<!DOCTYPE html><datalist><option>foo</datalist>bar
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <datalist>
+| <option>
+| "foo"
+| "bar"
+
+#data
+<!DOCTYPE html><font><input><input></font>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <font>
+| <input>
+| <input>
+
+#data
+<!DOCTYPE html><!-- XXX - XXX -->
+#errors
+#document
+| <!DOCTYPE html>
+| <!-- XXX - XXX -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><!-- XXX - XXX
+#errors
+(1,29): eof-in-comment
+#new-errors
+(1:30) eof-in-comment
+#document
+| <!DOCTYPE html>
+| <!-- XXX - XXX -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><!-- XXX - XXX - XXX -->
+#errors
+#document
+| <!DOCTYPE html>
+| <!-- XXX - XXX - XXX -->
+| <html>
+| <head>
+| <body>
+
+#data
+test
+test
+#errors
+(2,4): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "test
+test"
+
+#data
+<!DOCTYPE html><body><title>test</body></title>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <title>
+| "test</body>"
+
+#data
+<!DOCTYPE html><body><title>X</title><meta name=z><link rel=foo><style>
+x { content:"</style" } </style>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <title>
+| "X"
+| <meta>
+| name="z"
+| <link>
+| rel="foo"
+| <style>
+| "
+x { content:"</style" } "
+
+#data
+<!DOCTYPE html><select><optgroup></optgroup></select>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <optgroup>
+
+#data
+
+
+#errors
+(2,1): expected-doctype-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html> <html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><script>
+</script> <title>x</title> </head>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <script>
+| "
+"
+| " "
+| <title>
+| "x"
+| " "
+| <body>
+
+#data
+<!DOCTYPE html><html><body><html id=x>
+#errors
+(1,38): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| id="x"
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html>X</body><html id="x">
+#errors
+(1,36): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| id="x"
+| <head>
+| <body>
+| "X"
+
+#data
+<!DOCTYPE html><head><html id=x>
+#errors
+(1,32): non-html-root
+#document
+| <!DOCTYPE html>
+| <html>
+| id="x"
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html>X</html>X
+#errors
+(1,24): expected-eof-but-got-char
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "XX"
+
+#data
+<!DOCTYPE html>X</html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X "
+
+#data
+<!DOCTYPE html>X</html><p>X
+#errors
+(1,26): expected-eof-but-got-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+| <p>
+| "X"
+
+#data
+<!DOCTYPE html>X<p/x/y/z>
+#errors
+(1,19): unexpected-character-after-solidus-in-tag
+(1,21): unexpected-character-after-solidus-in-tag
+(1,23): unexpected-character-after-solidus-in-tag
+#new-errors
+(1:20) unexpected-solidus-in-tag
+(1:22) unexpected-solidus-in-tag
+(1:24) unexpected-solidus-in-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+| <p>
+| x=""
+| y=""
+| z=""
+
+#data
+<!DOCTYPE html><!--x--
+#errors
+(1,22): eof-in-comment-double-dash
+#new-errors
+(1:23) eof-in-comment
+#document
+| <!DOCTYPE html>
+| <!-- x -->
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE html><table><tr><td></p></table>
+#errors
+(1,34): unexpected-end-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <p>
+
+#data
+<!DOCTYPE <!DOCTYPE HTML>><!--<!--x-->-->
+#errors
+(1,20): expected-space-or-right-bracket-in-doctype
+(1,25): unknown-doctype
+(1,35): unexpected-char-in-comment
+#new-errors
+(1:21) invalid-character-sequence-after-doctype-name
+(1:35) nested-comment
+#document
+| <!DOCTYPE <!doctype>
+| <html>
+| <head>
+| <body>
+| ">"
+| <!-- <!--x -->
+| "-->"
+
+#data
+<!doctype html><div><form></form><div></div></div>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| <form>
+| <div>
diff --git a/tests/html5lib-tests/tree-construction/tests20.dat b/tests/html5lib-tests/tree-construction/tests20.dat
new file mode 100644
index 0000000..1bfd130
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests20.dat
@@ -0,0 +1,583 @@
+#data
+<!doctype html><p><button><button>
+#errors
+(1,34): unexpected-start-tag-implies-end-tag
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <button>
+
+#data
+<!doctype html><p><button><address>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <address>
+
+#data
+<!doctype html><p><button><blockquote>
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <blockquote>
+
+#data
+<!doctype html><p><button><menu>
+#errors
+(1,32): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <menu>
+
+#data
+<!doctype html><p><button><p>
+#errors
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <p>
+
+#data
+<!doctype html><p><button><ul>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <ul>
+
+#data
+<!doctype html><p><button><h1>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <h1>
+
+#data
+<!doctype html><p><button><h6>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <h6>
+
+#data
+<!doctype html><p><button><listing>
+#errors
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <listing>
+
+#data
+<!doctype html><p><button><pre>
+#errors
+(1,31): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <pre>
+
+#data
+<!doctype html><p><button><form>
+#errors
+(1,32): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <form>
+
+#data
+<!doctype html><p><button><li>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <li>
+
+#data
+<!doctype html><p><button><dd>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <dd>
+
+#data
+<!doctype html><p><button><dt>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <dt>
+
+#data
+<!doctype html><p><button><plaintext>
+#errors
+(1,37): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <plaintext>
+
+#data
+<!doctype html><p><button><table>
+#errors
+(1,33): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <table>
+
+#data
+<!doctype html><p><button><hr>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <hr>
+
+#data
+<!doctype html><p><button><xmp>
+#errors
+(1,31): expected-named-closing-tag-but-got-eof
+(1,31): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <xmp>
+
+#data
+<!doctype html><p><button></p>
+#errors
+(1,30): unexpected-end-tag
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <button>
+| <p>
+
+#data
+<!doctype html><address><button></address>a
+#errors
+(1,42): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <address>
+| <button>
+| "a"
+
+#data
+<!doctype html><address><button></address>a
+#errors
+(1,42): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <address>
+| <button>
+| "a"
+
+#data
+<p><table></p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,14): unexpected-end-tag-implies-table-voodoo
+(1,14): unexpected-end-tag
+(1,14): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <p>
+| <table>
+
+#data
+<!doctype html><svg>
+#errors
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<!doctype html><p><figcaption>
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <figcaption>
+
+#data
+<!doctype html><p><summary>
+#errors
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <summary>
+
+#data
+<!doctype html><form><table><form>
+#errors
+(1,34): unexpected-form-in-table
+(1,34): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <form>
+| <table>
+
+#data
+<!doctype html><table><form><form>
+#errors
+(1,28): unexpected-form-in-table
+(1,34): unexpected-form-in-table
+(1,34): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <form>
+
+#data
+<!doctype html><table><form></table><form>
+#errors
+(1,28): unexpected-form-in-table
+(1,42): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <form>
+
+#data
+<!doctype html><svg><foreignObject><p>
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg foreignObject>
+| <p>
+
+#data
+<!doctype html><svg><title>abc
+#errors
+(1,30): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg title>
+| "abc"
+
+#data
+<option><span><option>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <option>
+| <span>
+| <option>
+
+#data
+<option><option>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <option>
+| <option>
+
+#data
+<math><annotation-xml><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): unexpected-html-element-in-foreign-content
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <div>
+
+#data
+<math><annotation-xml encoding="application/svg+xml"><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,58): unexpected-html-element-in-foreign-content
+(1,58): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding="application/svg+xml"
+| <div>
+
+#data
+<math><annotation-xml encoding="application/xhtml+xml"><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,60): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding="application/xhtml+xml"
+| <div>
+
+#data
+<math><annotation-xml encoding="aPPlication/xhtmL+xMl"><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,60): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding="aPPlication/xhtmL+xMl"
+| <div>
+
+#data
+<math><annotation-xml encoding="text/html"><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,48): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding="text/html"
+| <div>
+
+#data
+<math><annotation-xml encoding="Text/htmL"><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,48): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding="Text/htmL"
+| <div>
+
+#data
+<math><annotation-xml encoding=" text/html "><div>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,50): unexpected-html-element-in-foreign-content
+(1,50): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| encoding=" text/html "
+| <div>
+
+#data
+<math><annotation-xml> </annotation-xml>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,40): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| " "
+
+#data
+<math><annotation-xml>c</annotation-xml>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,40): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| "c"
+
+#data
+<math><annotation-xml><!--foo-->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,32): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <!-- foo -->
+
+#data
+<math><annotation-xml></svg>x
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,28): unexpected-end-tag-in-math
+(1,28): unexpected-end-tag
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| "x"
+
+#data
+<math><annotation-xml><svg>x
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,28): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <svg svg>
+| "x"
diff --git a/tests/html5lib-tests/tree-construction/tests21.dat b/tests/html5lib-tests/tree-construction/tests21.dat
new file mode 100644
index 0000000..d52ab8c
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests21.dat
@@ -0,0 +1,333 @@
+#data
+<svg><![CDATA[foo]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo"
+
+#data
+<math><![CDATA[foo]]>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| "foo"
+
+#data
+<div><![CDATA[foo]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,7): expected-dashes-or-doctype
+(1,20): expected-closing-tag-but-got-eof
+#new-errors
+(1:14) cdata-in-html-content
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <!-- [CDATA[foo]] -->
+
+#data
+<svg><![CDATA[foo
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:18) eof-in-cdata
+(1,17): expected-closing-tag-but-got-eof
+#new-errors
+(1:18) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo"
+
+#data
+<svg><![CDATA[foo
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:18) eof-in-cdata
+(1,17): expected-closing-tag-but-got-eof
+#new-errors
+(1:18) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo"
+
+#data
+<svg><![CDATA[
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:15) eof-in-cdata
+(1,14): expected-closing-tag-but-got-eof
+#new-errors
+(1:15) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<svg><![CDATA[]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+
+#data
+<svg><![CDATA[]] >]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "]] >"
+
+#data
+<svg><![CDATA[]] >]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "]] >"
+
+#data
+<svg><![CDATA[]]
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:17) eof-in-cdata
+(1,16): expected-closing-tag-but-got-eof
+#new-errors
+(1:17) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "]]"
+
+#data
+<svg><![CDATA[]
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:16) eof-in-cdata
+(1,15): expected-closing-tag-but-got-eof
+#new-errors
+(1:16) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "]"
+
+#data
+<svg><![CDATA[]>a
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:16) eof-in-cdata
+(1,17): expected-closing-tag-but-got-eof
+#new-errors
+(1:18) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "]>a"
+
+#data
+<!DOCTYPE html><svg><![CDATA[foo]]]>
+#errors
+(1,36): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo]"
+
+#data
+<!DOCTYPE html><svg><![CDATA[foo]]]]>
+#errors
+(1,37): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo]]"
+
+#data
+<!DOCTYPE html><svg><![CDATA[foo]]]]]>
+#errors
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "foo]]]"
+
+#data
+<svg><foreignObject><div><![CDATA[foo]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,27): expected-dashes-or-doctype
+(1,40): expected-closing-tag-but-got-eof
+#new-errors
+(1:34) cdata-in-html-content
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg foreignObject>
+| <div>
+| <!-- [CDATA[foo]] -->
+
+#data
+<svg><![CDATA[<svg>]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>"
+
+#data
+<svg><![CDATA[</svg>a]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,24): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "</svg>a"
+
+#data
+<svg><![CDATA[<svg>a
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:21) eof-in-cdata
+(1,20): expected-closing-tag-but-got-eof
+#new-errors
+(1:21) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>a"
+
+#data
+<svg><![CDATA[</svg>a
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1:22) eof-in-cdata
+(1,21): expected-closing-tag-but-got-eof
+#new-errors
+(1:22) eof-in-cdata
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "</svg>a"
+
+#data
+<svg><![CDATA[<svg>]]><path>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,28): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>"
+| <svg path>
+
+#data
+<svg><![CDATA[<svg>]]></path>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,29): unexpected-end-tag
+(1,29): unexpected-end-tag
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>"
+
+#data
+<svg><![CDATA[<svg>]]><!--path-->
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>"
+| <!-- path -->
+
+#data
+<svg><![CDATA[<svg>]]>path
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<svg>path"
+
+#data
+<svg><![CDATA[<!--svg-->]]>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| "<!--svg-->"
diff --git a/tests/html5lib-tests/tree-construction/tests22.dat b/tests/html5lib-tests/tree-construction/tests22.dat
new file mode 100644
index 0000000..31e6d9e
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests22.dat
@@ -0,0 +1,190 @@
+#data
+<a><b><big><em><strong><div>X</a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,33): adoption-agency-1.3
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <big>
+| <em>
+| <strong>
+| <big>
+| <em>
+| <strong>
+| <div>
+| <a>
+| "X"
+
+#data
+<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8>A</a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): adoption-agency-1.3
+(1,91): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <b>
+| <div>
+| id="1"
+| <a>
+| <div>
+| id="2"
+| <a>
+| <div>
+| id="3"
+| <a>
+| <div>
+| id="4"
+| <a>
+| <div>
+| id="5"
+| <a>
+| <div>
+| id="6"
+| <a>
+| <div>
+| id="7"
+| <a>
+| <div>
+| id="8"
+| <a>
+| "A"
+
+#data
+<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8><div id=9>A</a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): adoption-agency-1.3
+(1,101): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <b>
+| <div>
+| id="1"
+| <a>
+| <div>
+| id="2"
+| <a>
+| <div>
+| id="3"
+| <a>
+| <div>
+| id="4"
+| <a>
+| <div>
+| id="5"
+| <a>
+| <div>
+| id="6"
+| <a>
+| <div>
+| id="7"
+| <a>
+| <div>
+| id="8"
+| <a>
+| <div>
+| id="9"
+| "A"
+
+#data
+<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8><div id=9><div id=10>A</a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): adoption-agency-1.3
+(1,112): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <b>
+| <b>
+| <div>
+| id="1"
+| <a>
+| <div>
+| id="2"
+| <a>
+| <div>
+| id="3"
+| <a>
+| <div>
+| id="4"
+| <a>
+| <div>
+| id="5"
+| <a>
+| <div>
+| id="6"
+| <a>
+| <div>
+| id="7"
+| <a>
+| <div>
+| id="8"
+| <a>
+| <div>
+| id="9"
+| <div>
+| id="10"
+| "A"
+
+#data
+<cite><b><cite><i><cite><i><cite><i><div>X</b>TEST
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,46): adoption-agency-1.3
+(1,50): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <cite>
+| <b>
+| <cite>
+| <i>
+| <cite>
+| <i>
+| <cite>
+| <i>
+| <i>
+| <i>
+| <div>
+| <b>
+| "X"
+| "TEST"
diff --git a/tests/html5lib-tests/tree-construction/tests23.dat b/tests/html5lib-tests/tree-construction/tests23.dat
new file mode 100644
index 0000000..49e4a4a
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests23.dat
@@ -0,0 +1,168 @@
+#data
+<p><font size=4><font color=red><font size=4><font size=4><font size=4><font size=4><font size=4><font color=red><p>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,116): unexpected-end-tag
+(1,117): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <font>
+| size="4"
+| <font>
+| color="red"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| color="red"
+| <p>
+| <font>
+| color="red"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| color="red"
+| "X"
+
+#data
+<p><font size=4><font size=4><font size=4><font size=4><p>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,58): unexpected-end-tag
+(1,59): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| "X"
+
+#data
+<p><font size=4><font size=4><font size=4><font size="5"><font size=4><p>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,73): unexpected-end-tag
+(1,74): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="5"
+| <font>
+| size="4"
+| <p>
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="5"
+| <font>
+| size="4"
+| "X"
+
+#data
+<p><font size=4 id=a><font size=4 id=b><font size=4><font size=4><p>X
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,68): unexpected-end-tag
+(1,69): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <font>
+| id="a"
+| size="4"
+| <font>
+| id="b"
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| <p>
+| <font>
+| id="a"
+| size="4"
+| <font>
+| id="b"
+| size="4"
+| <font>
+| size="4"
+| <font>
+| size="4"
+| "X"
+
+#data
+<p><b id=a><b id=a><b id=a><b><object><b id=a><b id=a>X</object><p>Y
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,64): end-tag-too-early
+(1,67): unexpected-end-tag
+(1,68): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <b>
+| id="a"
+| <b>
+| id="a"
+| <b>
+| id="a"
+| <b>
+| <object>
+| <b>
+| id="a"
+| <b>
+| id="a"
+| "X"
+| <p>
+| <b>
+| id="a"
+| <b>
+| id="a"
+| <b>
+| id="a"
+| <b>
+| "Y"
diff --git a/tests/html5lib-tests/tree-construction/tests24.dat b/tests/html5lib-tests/tree-construction/tests24.dat
new file mode 100644
index 0000000..f6dc7eb
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests24.dat
@@ -0,0 +1,79 @@
+#data
+<!DOCTYPE html>&NotEqualTilde;
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "≂̸"
+
+#data
+<!DOCTYPE html>&NotEqualTilde;A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "≂̸A"
+
+#data
+<!DOCTYPE html>&ThickSpace;
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "âŸâ€Š"
+
+#data
+<!DOCTYPE html>&ThickSpace;A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "âŸâ€ŠA"
+
+#data
+<!DOCTYPE html>&NotSubset;
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "⊂⃒"
+
+#data
+<!DOCTYPE html>&NotSubset;A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "⊂⃒A"
+
+#data
+<!DOCTYPE html>&Gopf;
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "ð”¾"
+
+#data
+<!DOCTYPE html>&Gopf;A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "ð”¾A"
diff --git a/tests/html5lib-tests/tree-construction/tests25.dat b/tests/html5lib-tests/tree-construction/tests25.dat
new file mode 100644
index 0000000..5bb369b
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests25.dat
@@ -0,0 +1,288 @@
+#data
+<!DOCTYPE html><body><foo>A
+#errors
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <foo>
+| "A"
+
+#data
+<!DOCTYPE html><body><area>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <area>
+| "A"
+
+#data
+<!DOCTYPE html><body><base>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <base>
+| "A"
+
+#data
+<!DOCTYPE html><body><basefont>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <basefont>
+| "A"
+
+#data
+<!DOCTYPE html><body><bgsound>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <bgsound>
+| "A"
+
+#data
+<!DOCTYPE html><body><br>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <br>
+| "A"
+
+#data
+<!DOCTYPE html><body><col>A
+#errors
+(1,26): unexpected-start-tag-ignored
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><body><command>A
+#errors
+eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <command>
+| "A"
+
+#data
+<!DOCTYPE html><body><embed>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <embed>
+| "A"
+
+#data
+<!DOCTYPE html><body><frame>A
+#errors
+(1,28): unexpected-start-tag-ignored
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><body><hr>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <hr>
+| "A"
+
+#data
+<!DOCTYPE html><body><img>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <img>
+| "A"
+
+#data
+<!DOCTYPE html><body><input>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <input>
+| "A"
+
+#data
+<!DOCTYPE html><body><keygen>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <keygen>
+| "A"
+
+#data
+<!DOCTYPE html><keygen>A</keygen>B
+#errors
+33: Stray end tag “keygenâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <keygen>
+| "AB"
+
+#data
+</keygen>A
+#errors
+9: End tag seen without seeing a doctype first. Expected “<!DOCTYPE html>â€.
+9: Stray end tag “keygenâ€.
+#document
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html></keygen>A
+#errors
+24: Stray end tag “keygenâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><head></keygen>A
+#errors
+30: Stray end tag “keygenâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><head></head></keygen>A
+#errors
+30: Stray end tag “keygenâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><body></keygen>A
+#errors
+30: Stray end tag “keygenâ€.
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "A"
+
+#data
+<!DOCTYPE html><body><link>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <link>
+| "A"
+
+#data
+<!DOCTYPE html><body><meta>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <meta>
+| "A"
+
+#data
+<!DOCTYPE html><body><param>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <param>
+| "A"
+
+#data
+<!DOCTYPE html><body><source>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <source>
+| "A"
+
+#data
+<!DOCTYPE html><body><track>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <track>
+| "A"
+
+#data
+<!DOCTYPE html><body><wbr>A
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <wbr>
+| "A"
diff --git a/tests/html5lib-tests/tree-construction/tests26.dat b/tests/html5lib-tests/tree-construction/tests26.dat
new file mode 100644
index 0000000..1ba2be2
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests26.dat
@@ -0,0 +1,453 @@
+#data
+<!DOCTYPE html><body><a href='#1'><nobr>1<nobr></a><br><a href='#2'><nobr>2<nobr></a><br><a href='#3'><nobr>3<nobr></a>
+#errors
+(1,47): unexpected-start-tag-implies-end-tag
+(1,51): adoption-agency-1.3
+(1,74): unexpected-start-tag-implies-end-tag
+(1,74): adoption-agency-1.3
+(1,81): unexpected-start-tag-implies-end-tag
+(1,85): adoption-agency-1.3
+(1,108): unexpected-start-tag-implies-end-tag
+(1,108): adoption-agency-1.3
+(1,115): unexpected-start-tag-implies-end-tag
+(1,119): adoption-agency-1.3
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <a>
+| href="#1"
+| <nobr>
+| "1"
+| <nobr>
+| <nobr>
+| <br>
+| <a>
+| href="#2"
+| <a>
+| href="#2"
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| <br>
+| <a>
+| href="#3"
+| <a>
+| href="#3"
+| <nobr>
+| "3"
+| <nobr>
+
+#data
+<!DOCTYPE html><body><b><nobr>1<nobr></b><i><nobr>2<nobr></i>3
+#errors
+(1,37): unexpected-start-tag-implies-end-tag
+(1,41): adoption-agency-1.3
+(1,50): unexpected-start-tag-implies-end-tag
+(1,50): adoption-agency-1.3
+(1,57): unexpected-start-tag-implies-end-tag
+(1,61): adoption-agency-1.3
+(1,62): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <nobr>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| "3"
+
+#data
+<!DOCTYPE html><body><b><nobr>1<table><nobr></b><i><nobr>2<nobr></i>3
+#errors
+(1,44): foster-parenting-start-tag
+(1,48): foster-parenting-end-tag
+(1,48): adoption-agency-1.3
+(1,51): foster-parenting-start-tag
+(1,57): foster-parenting-start-tag
+(1,57): nobr-already-in-scope
+(1,57): adoption-agency-1.2
+(1,58): foster-parenting-character
+(1,64): foster-parenting-start-tag
+(1,64): nobr-already-in-scope
+(1,68): foster-parenting-end-tag
+(1,68): adoption-agency-1.2
+(1,69): foster-parenting-character
+(1,69): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| "3"
+| <table>
+
+#data
+<!DOCTYPE html><body><b><nobr>1<table><tr><td><nobr></b><i><nobr>2<nobr></i>3
+#errors
+(1,56): unexpected-end-tag
+(1,65): unexpected-start-tag-implies-end-tag
+(1,65): adoption-agency-1.3
+(1,72): unexpected-start-tag-implies-end-tag
+(1,76): adoption-agency-1.3
+(1,77): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| "3"
+
+#data
+<!DOCTYPE html><body><b><nobr>1<div><nobr></b><i><nobr>2<nobr></i>3
+#errors
+(1,42): unexpected-start-tag-implies-end-tag
+(1,42): adoption-agency-1.3
+(1,46): adoption-agency-1.3
+(1,46): adoption-agency-1.3
+(1,55): unexpected-start-tag-implies-end-tag
+(1,55): adoption-agency-1.3
+(1,62): unexpected-start-tag-implies-end-tag
+(1,66): adoption-agency-1.3
+(1,67): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <div>
+| <b>
+| <nobr>
+| <nobr>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| "3"
+
+#data
+<!DOCTYPE html><body><b><nobr>1<nobr></b><div><i><nobr>2<nobr></i>3
+#errors
+(1,37): unexpected-start-tag-implies-end-tag
+(1,41): adoption-agency-1.3
+(1,55): unexpected-start-tag-implies-end-tag
+(1,55): adoption-agency-1.3
+(1,62): unexpected-start-tag-implies-end-tag
+(1,66): adoption-agency-1.3
+(1,67): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <nobr>
+| <div>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+| <nobr>
+| <nobr>
+| "3"
+
+#data
+<!DOCTYPE html><body><b><nobr>1<nobr><ins></b><i><nobr>
+#errors
+(1,37): unexpected-start-tag-implies-end-tag
+(1,46): adoption-agency-1.3
+(1,55): unexpected-start-tag-implies-end-tag
+(1,55): adoption-agency-1.3
+(1,55): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <nobr>
+| <ins>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+
+#data
+<!DOCTYPE html><body><b><nobr>1<ins><nobr></b><i>2
+#errors
+(1,42): unexpected-start-tag-implies-end-tag
+(1,42): adoption-agency-1.3
+(1,46): adoption-agency-1.3
+(1,50): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| <nobr>
+| "1"
+| <ins>
+| <nobr>
+| <nobr>
+| <i>
+| "2"
+
+#data
+<!DOCTYPE html><body><b>1<nobr></b><i><nobr>2</i>
+#errors
+(1,35): adoption-agency-1.3
+(1,44): unexpected-start-tag-implies-end-tag
+(1,44): adoption-agency-1.3
+(1,49): adoption-agency-1.3
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <b>
+| "1"
+| <nobr>
+| <nobr>
+| <i>
+| <i>
+| <nobr>
+| "2"
+
+#data
+<p><code x</code></p>
+
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,11): invalid-character-in-attribute-name
+(1,12): unexpected-character-after-solidus-in-tag
+(1,21): unexpected-end-tag
+(2,0): expected-closing-tag-but-got-eof
+#new-errors
+(1:11) unexpected-character-in-attribute-name
+(1:13) unexpected-solidus-in-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <code>
+| code=""
+| x<=""
+| <code>
+| code=""
+| x<=""
+| "
+"
+
+#data
+<!DOCTYPE html><svg><foreignObject><p><i></p>a
+#errors
+(1,45): unexpected-end-tag
+(1,46): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg foreignObject>
+| <p>
+| <i>
+| <i>
+| "a"
+
+#data
+<!DOCTYPE html><table><tr><td><svg><foreignObject><p><i></p>a
+#errors
+(1,60): unexpected-end-tag
+(1,61): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg foreignObject>
+| <p>
+| <i>
+| <i>
+| "a"
+
+#data
+<!DOCTYPE html><math><mtext><p><i></p>a
+#errors
+(1,38): unexpected-end-tag
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mtext>
+| <p>
+| <i>
+| <i>
+| "a"
+
+#data
+<!DOCTYPE html><table><tr><td><math><mtext><p><i></p>a
+#errors
+(1,53): unexpected-end-tag
+(1,54): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <math math>
+| <math mtext>
+| <p>
+| <i>
+| <i>
+| "a"
+
+#data
+<!DOCTYPE html><body><div><!/div>a
+#errors
+(1,28): expected-dashes-or-doctype
+(1,34): expected-closing-tag-but-got-eof
+#new-errors
+(1:29) incorrectly-opened-comment
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <div>
+| <!-- /div -->
+| "a"
+
+#data
+<button><p><button>
+#errors
+Line 1 Col 8 Unexpected start tag (button). Expected DOCTYPE.
+Line 1 Col 19 Unexpected start tag (button) implies end tag (button).
+Line 1 Col 19 Expected closing tag. Unexpected end of file.
+#document
+| <html>
+| <head>
+| <body>
+| <button>
+| <p>
+| <button>
+
+#data
+<svg></p><foo>
+#errors
+(1:1) Missing doctype
+9: HTML end tag “p†in a foreign namespace context.
+(1:6) Unexpected </p> from in body insertion mode
+(1:16) Unexpected EOF
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <p>
+| <foo>
+
+#data
+<svg></br><foo>
+#errors
+(1:1) Missing doctype
+10: HTML end tag “br†in a foreign namespace context.
+(1:6) Unexpected </br> from in body insertion mode
+(1:16) Unexpected EOF
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <br>
+| <foo>
+
+#data
+<math></p><foo>
+#errors
+(1:1) Missing doctype
+10: HTML end tag “p†in a foreign namespace context.
+(1:7) Unexpected </p> from in body insertion mode
+(1:16) Unexpected EOF
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <p>
+| <foo>
+
+#data
+<math></br><foo>
+#errors
+(1:1) Missing doctype
+11: HTML end tag “br†in a foreign namespace context.
+(1:7) Unexpected </br> from in body insertion mode
+(1:17) Unexpected EOF
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <br>
+| <foo>
diff --git a/tests/html5lib-tests/tree-construction/tests3.dat b/tests/html5lib-tests/tree-construction/tests3.dat
new file mode 100644
index 0000000..c7583d9
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests3.dat
@@ -0,0 +1,305 @@
+#data
+<head></head><style></style>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,20): unexpected-start-tag-out-of-my-head
+#document
+| <html>
+| <head>
+| <style>
+| <body>
+
+#data
+<head></head><script></script>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,21): unexpected-start-tag-out-of-my-head
+#document
+| <html>
+| <head>
+| <script>
+| <body>
+
+#data
+<head></head><!-- --><style></style><!-- --><script></script>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,28): unexpected-start-tag-out-of-my-head
+(1,52): unexpected-start-tag-out-of-my-head
+#document
+| <html>
+| <head>
+| <style>
+| <script>
+| <!-- -->
+| <!-- -->
+| <body>
+
+#data
+<head></head><!-- -->x<style></style><!-- --><script></script>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <!-- -->
+| <body>
+| "x"
+| <style>
+| <!-- -->
+| <script>
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>
+</pre></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>
+foo</pre></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "foo"
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>
+
+foo</pre></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "
+foo"
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>
+foo
+</pre></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "foo
+"
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>x</pre><span>
+</span></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "x"
+| <span>
+| "
+"
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>x
+y</pre></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "x
+y"
+
+#data
+<!DOCTYPE html><html><head></head><body><pre>x<div>
+y</pre></body></html>
+#errors
+(2,7): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "x"
+| <div>
+| "
+y"
+
+#data
+<!DOCTYPE html><pre>&#x0a;&#x0a;A</pre>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <pre>
+| "
+A"
+
+#data
+<!DOCTYPE html><HTML><META><HEAD></HEAD></HTML>
+#errors
+(1,33): two-heads-are-not-better-than-one
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <meta>
+| <body>
+
+#data
+<!DOCTYPE html><HTML><HEAD><head></HEAD></HTML>
+#errors
+(1,33): two-heads-are-not-better-than-one
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<textarea>foo<span>bar</span><i>baz
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,35): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "foo<span>bar</span><i>baz"
+
+#data
+<title>foo<span>bar</em><i>baz
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,30): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <title>
+| "foo<span>bar</em><i>baz"
+| <body>
+
+#data
+<!DOCTYPE html><textarea>
+</textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+
+#data
+<!DOCTYPE html><textarea>
+foo</textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "foo"
+
+#data
+<!DOCTYPE html><textarea>
+
+foo</textarea>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <textarea>
+| "
+foo"
+
+#data
+<!DOCTYPE html><html><head></head><body><ul><li><div><p><li></ul></body></html>
+#errors
+(1,60): end-tag-too-early
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <ul>
+| <li>
+| <div>
+| <p>
+| <li>
+
+#data
+<!doctype html><nobr><nobr><nobr>
+#errors
+(1,27): unexpected-start-tag-implies-end-tag
+(1,33): unexpected-start-tag-implies-end-tag
+(1,33): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <nobr>
+| <nobr>
+| <nobr>
+
+#data
+<!doctype html><nobr><nobr></nobr><nobr>
+#errors
+(1,27): unexpected-start-tag-implies-end-tag
+(1,40): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <nobr>
+| <nobr>
+| <nobr>
+
+#data
+<!doctype html><html><body><p><table></table></body></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <table>
+
+#data
+<p><table></table>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <table>
diff --git a/tests/html5lib-tests/tree-construction/tests4.dat b/tests/html5lib-tests/tree-construction/tests4.dat
new file mode 100644
index 0000000..0a6174c
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests4.dat
@@ -0,0 +1,58 @@
+#data
+direct div content
+#errors
+#document-fragment
+div
+#document
+| "direct div content"
+
+#data
+direct textarea content
+#errors
+#document-fragment
+textarea
+#document
+| "direct textarea content"
+
+#data
+textarea content with <em>pseudo</em> <foo>markup
+#errors
+#document-fragment
+textarea
+#document
+| "textarea content with <em>pseudo</em> <foo>markup"
+
+#data
+this is &#x0043;DATA inside a <style> element
+#errors
+#document-fragment
+style
+#document
+| "this is &#x0043;DATA inside a <style> element"
+
+#data
+</plaintext>
+#errors
+#document-fragment
+plaintext
+#document
+| "</plaintext>"
+
+#data
+setting html's innerHTML
+#errors
+#document-fragment
+html
+#document
+| <head>
+| <body>
+| "setting html's innerHTML"
+
+#data
+<title>setting head's innerHTML</title>
+#errors
+#document-fragment
+head
+#document
+| <title>
+| "setting head's innerHTML"
diff --git a/tests/html5lib-tests/tree-construction/tests5.dat b/tests/html5lib-tests/tree-construction/tests5.dat
new file mode 100644
index 0000000..1ef8cae
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests5.dat
@@ -0,0 +1,210 @@
+#data
+<style> <!-- </style>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| " <!-- "
+| <body>
+| "x"
+
+#data
+<style> <!-- </style> --> </style>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,34): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <style>
+| " <!-- "
+| " "
+| <body>
+| "--> x"
+
+#data
+<style> <!--> </style>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| " <!--> "
+| <body>
+| "x"
+
+#data
+<style> <!---> </style>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| " <!---> "
+| <body>
+| "x"
+
+#data
+<iframe> <!---> </iframe>x
+#errors
+(1,8): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <iframe>
+| " <!---> "
+| "x"
+
+#data
+<iframe> <!--- </iframe>->x</iframe> --> </iframe>x
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,36): unexpected-end-tag
+(1,50): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <iframe>
+| " <!--- "
+| "->x --> x"
+
+#data
+<script> <!-- </script> --> </script>x
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,37): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <script>
+| " <!-- "
+| " "
+| <body>
+| "--> x"
+
+#data
+<title> <!-- </title> --> </title>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,34): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <title>
+| " <!-- "
+| " "
+| <body>
+| "--> x"
+
+#data
+<textarea> <!--- </textarea>->x</textarea> --> </textarea>x
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,42): unexpected-end-tag
+(1,58): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <textarea>
+| " <!--- "
+| "->x --> x"
+
+#data
+<style> <!</-- </style>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <style>
+| " <!</-- "
+| <body>
+| "x"
+
+#data
+<p><xmp></xmp>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <xmp>
+
+#data
+<xmp> <!-- > --> </xmp>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <xmp>
+| " <!-- > --> "
+
+#data
+<title>&amp;</title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| "&"
+| <body>
+
+#data
+<title><!--&amp;--></title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| "<!--&-->"
+| <body>
+
+#data
+<title><!--</title>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <title>
+| "<!--"
+| <body>
+
+#data
+<noscript><!--</noscript>--></noscript>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,39): unexpected-end-tag
+#script-on
+#document
+| <html>
+| <head>
+| <noscript>
+| "<!--"
+| <body>
+| "-->"
+
+#data
+<noscript><!--</noscript>--></noscript>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#script-off
+#document
+| <html>
+| <head>
+| <noscript>
+| <!-- </noscript> -->
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/tests6.dat b/tests/html5lib-tests/tree-construction/tests6.dat
new file mode 100644
index 0000000..8c36dd3
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests6.dat
@@ -0,0 +1,663 @@
+#data
+<!doctype html></head> <head>
+#errors
+(1,29): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| " "
+| <body>
+
+#data
+<!doctype html><form><div></form><div>
+#errors
+(1,33): end-tag-too-early-ignored
+(1,38): expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <form>
+| <div>
+| <div>
+
+#data
+<!doctype html><title>&amp;</title>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "&"
+| <body>
+
+#data
+<!doctype html><title><!--&amp;--></title>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "<!--&-->"
+| <body>
+
+#data
+<!doctype>
+#errors
+(1,10): expected-doctype-name-but-got-right-bracket
+(1,10): unknown-doctype
+#new-errors
+(1:10) missing-doctype-name
+#document
+| <!DOCTYPE >
+| <html>
+| <head>
+| <body>
+
+#data
+<!---x
+#errors
+(1,6): eof-in-comment
+(1,6): expected-doctype-but-got-eof
+#new-errors
+(1:7) eof-in-comment
+#document
+| <!-- -x -->
+| <html>
+| <head>
+| <body>
+
+#data
+<body>
+<div>
+#errors
+(1,6): unexpected-start-tag
+(2,5): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| "
+"
+| <div>
+
+#data
+<frameset></frameset>
+foo
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(2,1): unexpected-char-after-frameset
+(2,2): unexpected-char-after-frameset
+(2,3): unexpected-char-after-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+| "
+"
+
+#data
+<frameset></frameset>
+<noframes>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(2,10): expected-named-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <frameset>
+| "
+"
+| <noframes>
+
+#data
+<frameset></frameset>
+<div>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(2,5): unexpected-start-tag-after-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+| "
+"
+
+#data
+<frameset></frameset>
+</html>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+| "
+"
+
+#data
+<frameset></frameset>
+</div>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(2,6): unexpected-end-tag-after-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+| "
+"
+
+#data
+<form><form>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,12): unexpected-start-tag
+(1,12): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <form>
+
+#data
+<button><button>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,16): unexpected-start-tag-implies-end-tag
+(1,16): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <button>
+| <button>
+
+#data
+<table><tr><td></th>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,20): unexpected-end-tag
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><caption><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,20): unexpected-cell-in-table-body
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><caption><div>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <div>
+
+#data
+</caption><div>
+#errors
+(1,10): XXX-undefined-error
+(1,15): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <div>
+
+#data
+<table><caption><div></caption>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,31): expected-one-end-tag-but-got-another
+(1,31): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <div>
+
+#data
+<table><caption></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+
+#data
+</table><div>
+#errors
+(1,8): unexpected-end-tag
+(1,13): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <div>
+
+#data
+<table><caption></body></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,23): unexpected-end-tag
+(1,29): unexpected-end-tag
+(1,40): unexpected-end-tag
+(1,47): unexpected-end-tag
+(1,55): unexpected-end-tag
+(1,60): unexpected-end-tag
+(1,68): unexpected-end-tag
+(1,73): unexpected-end-tag
+(1,81): unexpected-end-tag
+(1,86): unexpected-end-tag
+(1,86): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+
+#data
+<table><caption><div></div>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <div>
+
+#data
+<table><tr><td></body></caption></col></colgroup></html>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,22): unexpected-end-tag
+(1,32): unexpected-end-tag
+(1,38): unexpected-end-tag
+(1,49): unexpected-end-tag
+(1,56): unexpected-end-tag
+(1,56): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+</table></tbody></tfoot></thead></tr><div>
+#errors
+(1,8): unexpected-end-tag
+(1,16): unexpected-end-tag
+(1,24): unexpected-end-tag
+(1,32): unexpected-end-tag
+(1,37): unexpected-end-tag
+(1,42): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <div>
+
+#data
+<table><colgroup>foo
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,18): foster-parenting-character-in-table
+(1,19): foster-parenting-character-in-table
+(1,20): foster-parenting-character-in-table
+(1,20): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| "foo"
+| <table>
+| <colgroup>
+
+#data
+foo<col>
+#errors
+(1,1): unexpected-character-in-colgroup
+(1,2): unexpected-character-in-colgroup
+(1,3): unexpected-character-in-colgroup
+#document-fragment
+colgroup
+#document
+| <col>
+
+#data
+<table><colgroup></col>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,23): no-end-tag
+(1,23): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <colgroup>
+
+#data
+<frameset><div>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,15): unexpected-start-tag-in-frameset
+(1,15): eof-in-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+</frameset><frame>
+#errors
+(1,11): unexpected-frameset-in-frameset-innerhtml
+#document-fragment
+frameset
+#document
+| <frame>
+
+#data
+<frameset></div>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+(1,16): unexpected-end-tag-in-frameset
+(1,16): eof-in-frameset
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+</body><div>
+#errors
+(1,7): unexpected-close-tag
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+body
+#document
+| <div>
+
+#data
+<table><tr><div>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,16): unexpected-start-tag-implies-table-voodoo
+(1,16): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <table>
+| <tbody>
+| <tr>
+
+#data
+</tr><td>
+#errors
+(1,5): unexpected-end-tag
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+</tbody></tfoot></thead><td>
+#errors
+(1,8): unexpected-end-tag
+(1,16): unexpected-end-tag
+(1,24): unexpected-end-tag
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<table><tr><div><td>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,16): foster-parenting-start-tag
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<caption><col><colgroup><tbody><tfoot><thead><tr>
+#errors
+(1,9): unexpected-start-tag
+(1,14): unexpected-start-tag
+(1,24): unexpected-start-tag
+(1,31): unexpected-start-tag
+(1,38): unexpected-start-tag
+(1,45): unexpected-start-tag
+#document-fragment
+tbody
+#document
+| <tr>
+
+#data
+<table><tbody></thead>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,22): unexpected-end-tag-in-table-body
+(1,22): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+
+#data
+</table><tr>
+#errors
+(1,8): unexpected-end-tag
+#document-fragment
+tbody
+#document
+| <tr>
+
+#data
+<table><tbody></body></caption></col></colgroup></html></td></th></tr>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,21): unexpected-end-tag-in-table-body
+(1,31): unexpected-end-tag-in-table-body
+(1,37): unexpected-end-tag-in-table-body
+(1,48): unexpected-end-tag-in-table-body
+(1,55): unexpected-end-tag-in-table-body
+(1,60): unexpected-end-tag-in-table-body
+(1,65): unexpected-end-tag-in-table-body
+(1,70): unexpected-end-tag-in-table-body
+(1,70): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+
+#data
+<table><tbody></div>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,20): unexpected-end-tag-implies-table-voodoo
+(1,20): end-tag-too-early
+(1,20): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+
+#data
+<table><table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,14): unexpected-start-tag-implies-end-tag
+(1,14): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <table>
+
+#data
+<table></body></caption></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,14): unexpected-end-tag
+(1,24): unexpected-end-tag
+(1,30): unexpected-end-tag
+(1,41): unexpected-end-tag
+(1,48): unexpected-end-tag
+(1,56): unexpected-end-tag
+(1,61): unexpected-end-tag
+(1,69): unexpected-end-tag
+(1,74): unexpected-end-tag
+(1,82): unexpected-end-tag
+(1,87): unexpected-end-tag
+(1,87): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+
+#data
+</table><tr>
+#errors
+(1,8): unexpected-end-tag
+#document-fragment
+table
+#document
+| <tbody>
+| <tr>
+
+#data
+<body></body></html>
+#errors
+(1,20): unexpected-end-tag-after-body-innerhtml
+#document-fragment
+html
+#document
+| <head>
+| <body>
+
+#data
+<html><frameset></frameset></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+| " "
+
+#data
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html></html>
+#errors
+(1,50): doctype-has-public-identifier
+#document
+| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "">
+| <html>
+| <head>
+| <body>
+
+#data
+<param><frameset></frameset>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,17): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+<source><frameset></frameset>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,18): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+<track><frameset></frameset>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,17): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+</html><frameset></frameset>
+#errors
+(1,7): expected-doctype-but-got-end-tag
+(1,17): expected-eof-but-got-start-tag
+(1,17): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+
+#data
+</body><frameset></frameset>
+#errors
+(1,7): expected-doctype-but-got-end-tag
+(1,17): unexpected-start-tag-after-body
+(1,17): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
diff --git a/tests/html5lib-tests/tree-construction/tests7.dat b/tests/html5lib-tests/tree-construction/tests7.dat
new file mode 100644
index 0000000..8c5596b
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests7.dat
@@ -0,0 +1,417 @@
+#data
+<!doctype html><body><title>X</title>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <title>
+| "X"
+
+#data
+<!doctype html><table><title>X</title></table>
+#errors
+(1,29): unexpected-start-tag-implies-table-voodoo
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <title>
+| "X"
+| <table>
+
+#data
+<!doctype html><head></head><title>X</title>
+#errors
+(1,35): unexpected-start-tag-out-of-my-head
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "X"
+| <body>
+
+#data
+<!doctype html></head><title>X</title>
+#errors
+(1,29): unexpected-start-tag-out-of-my-head
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <title>
+| "X"
+| <body>
+
+#data
+<!doctype html><table><meta></table>
+#errors
+(1,28): unexpected-start-tag-implies-table-voodoo
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <meta>
+| <table>
+
+#data
+<!doctype html><table>X<tr><td><table> <meta></table></table>
+#errors
+unexpected text in table
+(1,45): unexpected-start-tag-implies-table-voodoo
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <meta>
+| <table>
+| " "
+
+#data
+<!doctype html><html> <head>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!doctype html> <head>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!doctype html><table><style> <tr>x </style> </table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <style>
+| " <tr>x "
+| " "
+
+#data
+<!doctype html><table><TBODY><script> <tr>x </script> </table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <script>
+| " <tr>x "
+| " "
+
+#data
+<!doctype html><p><applet><p>X</p></applet>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <applet>
+| <p>
+| "X"
+
+#data
+<!doctype html><p><object type="application/x-non-existant-plugin"><p>X</p></object>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <p>
+| <object>
+| type="application/x-non-existant-plugin"
+| <p>
+| "X"
+
+#data
+<!doctype html><listing>
+X</listing>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <listing>
+| "X"
+
+#data
+<!doctype html><select><input>X
+#errors
+(1,30): unexpected-input-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <input>
+| "X"
+
+#data
+<!doctype html><select><select>X
+#errors
+(1,31): unexpected-select-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "X"
+
+#data
+<!doctype html><table><input type=hidDEN></table>
+#errors
+(1,41): unexpected-hidden-input-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <input>
+| type="hidDEN"
+
+#data
+<!doctype html><table>X<input type=hidDEN></table>
+#errors
+(1,23): foster-parenting-character
+(1,42): unexpected-hidden-input-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| "X"
+| <table>
+| <input>
+| type="hidDEN"
+
+#data
+<!doctype html><table> <input type=hidDEN></table>
+#errors
+(1,43): unexpected-hidden-input-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| " "
+| <input>
+| type="hidDEN"
+
+#data
+<!doctype html><table> <input type='hidDEN'></table>
+#errors
+(1,45): unexpected-hidden-input-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| " "
+| <input>
+| type="hidDEN"
+
+#data
+<!doctype html><table><input type=" hidden"><input type=hidDEN></table>
+#errors
+(1,44): unexpected-start-tag-implies-table-voodoo
+(1,63): unexpected-hidden-input-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <input>
+| type=" hidden"
+| <table>
+| <input>
+| type="hidDEN"
+
+#data
+<!doctype html><table><select>X<tr>
+#errors
+(1,30): unexpected-start-tag-implies-table-voodoo
+(1,35): unexpected-table-element-start-tag-in-select-in-table
+(1,35): eof-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "X"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!doctype html><select>X</select>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "X"
+
+#data
+<!DOCTYPE hTmL><html></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<!DOCTYPE HTML><html></html>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+
+#data
+<body>X</body></body>
+#errors
+(1,21): unexpected-end-tag-after-body
+#document-fragment
+html
+#document
+| <head>
+| <body>
+| "X"
+
+#data
+<div><p>a</x> b
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,13): unexpected-end-tag
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <p>
+| "a b"
+
+#data
+<table><tr><td><code></code> </table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <code>
+| " "
+
+#data
+<table><b><tr><td>aaa</td></tr>bbb</table>ccc
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,10): foster-parenting-start-tag
+(1,32): foster-parenting-character
+(1,33): foster-parenting-character
+(1,34): foster-parenting-character
+(1,45): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <b>
+| "bbb"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "aaa"
+| <b>
+| "ccc"
+
+#data
+A<table><tr> B</tr> B</table>
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,13): foster-parenting-character
+(1,14): foster-parenting-character
+(1,20): foster-parenting-character
+(1,21): foster-parenting-character
+#document
+| <html>
+| <head>
+| <body>
+| "A B B"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+A<table><tr> B</tr> </em>C</table>
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,13): foster-parenting-character
+(1,14): foster-parenting-character
+(1,25): unexpected-end-tag
+(1,25): unexpected-end-tag-in-special-element
+(1,26): foster-parenting-character
+#document
+| <html>
+| <head>
+| <body>
+| "A BC"
+| <table>
+| <tbody>
+| <tr>
+| " "
+
+#data
+<select><keygen>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,16): unexpected-input-in-select
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <keygen>
diff --git a/tests/html5lib-tests/tree-construction/tests8.dat b/tests/html5lib-tests/tree-construction/tests8.dat
new file mode 100644
index 0000000..d532801
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests8.dat
@@ -0,0 +1,165 @@
+#data
+<div>
+<div></div>
+</span>x
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(3,7): unexpected-end-tag
+(3,8): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "
+"
+| <div>
+| "
+x"
+
+#data
+<div>x<div></div>
+</span>x
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(2,7): unexpected-end-tag
+(2,8): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "x"
+| <div>
+| "
+x"
+
+#data
+<div>x<div></div>x</span>x
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,25): unexpected-end-tag
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "x"
+| <div>
+| "xx"
+
+#data
+<div>x<div></div>y</span>z
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,25): unexpected-end-tag
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "x"
+| <div>
+| "yz"
+
+#data
+<table><div>x<div></div>x</span>x
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,12): foster-parenting-start-tag
+(1,13): foster-parenting-character
+(1,18): foster-parenting-start-tag
+(1,24): foster-parenting-end-tag
+(1,25): foster-parenting-start-tag
+(1,32): foster-parenting-end-tag
+(1,32): unexpected-end-tag
+(1,33): foster-parenting-character
+(1,33): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "x"
+| <div>
+| "xx"
+| <table>
+
+#data
+<table><li><li></table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): foster-parenting-start-tag
+(1,15): foster-parenting-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <li>
+| <li>
+| <table>
+
+#data
+x<table>x
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,9): foster-parenting-character
+(1,9): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| "xx"
+| <table>
+
+#data
+x<table><table>x
+#errors
+(1,1): expected-doctype-but-got-chars
+(1,15): unexpected-start-tag-implies-end-tag
+(1,16): foster-parenting-character
+(1,16): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| "x"
+| <table>
+| "x"
+| <table>
+
+#data
+<b>a<div></div><div></b>y
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,24): adoption-agency-1.3
+(1,25): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| "a"
+| <div>
+| <div>
+| <b>
+| "y"
+
+#data
+<a><div><p></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,15): adoption-agency-1.3
+(1,15): adoption-agency-1.3
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <div>
+| <a>
+| <p>
+| <a>
diff --git a/tests/html5lib-tests/tree-construction/tests9.dat b/tests/html5lib-tests/tree-construction/tests9.dat
new file mode 100644
index 0000000..f8d04b2
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests9.dat
@@ -0,0 +1,472 @@
+#data
+<!DOCTYPE html><math></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+
+#data
+<!DOCTYPE html><body><math></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+
+#data
+<!DOCTYPE html><math><mi>
+#errors
+(1,25) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+
+#data
+<!DOCTYPE html><math><annotation-xml><svg><u>
+#errors
+(1,45) unexpected-html-element-in-foreign-content
+(1,45) expected-closing-tag-but-got-eof
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math annotation-xml>
+| <svg svg>
+| <u>
+
+#data
+<!DOCTYPE html><body><select><math></math></select>
+#errors
+(1,35) unexpected-start-tag-in-select
+(1,42) unexpected-end-tag-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+
+#data
+<!DOCTYPE html><body><select><option><math></math></option></select>
+#errors
+(1,43) unexpected-start-tag-in-select
+(1,50) unexpected-end-tag-in-select
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+
+#data
+<!DOCTYPE html><body><table><math></math></table>
+#errors
+(1,34) unexpected-start-tag-implies-table-voodoo
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <table>
+
+#data
+<!DOCTYPE html><body><table><math><mi>foo</mi></math></table>
+#errors
+(1,34) foster-parenting-start-token
+(1,39) foster-parenting-character
+(1,40) foster-parenting-character
+(1,41) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <table>
+
+#data
+<!DOCTYPE html><body><table><math><mi>foo</mi><mi>bar</mi></math></table>
+#errors
+(1,34) foster-parenting-start-tag
+(1,39) foster-parenting-character
+(1,40) foster-parenting-character
+(1,41) foster-parenting-character
+(1,51) foster-parenting-character
+(1,52) foster-parenting-character
+(1,53) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <table>
+
+#data
+<!DOCTYPE html><body><table><tbody><math><mi>foo</mi><mi>bar</mi></math></tbody></table>
+#errors
+(1,41) foster-parenting-start-tag
+(1,46) foster-parenting-character
+(1,47) foster-parenting-character
+(1,48) foster-parenting-character
+(1,58) foster-parenting-character
+(1,59) foster-parenting-character
+(1,60) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <table>
+| <tbody>
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><math><mi>foo</mi><mi>bar</mi></math></tr></tbody></table>
+#errors
+(1,45) foster-parenting-start-tag
+(1,50) foster-parenting-character
+(1,51) foster-parenting-character
+(1,52) foster-parenting-character
+(1,62) foster-parenting-character
+(1,63) foster-parenting-character
+(1,64) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math></td></tr></tbody></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+
+#data
+<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math><p>baz</td></tr></tbody></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi></math><p>baz</caption></table>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+#errors
+(1,70) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi>baz</table><p>quux
+#errors
+(1,78) unexpected-end-tag
+(1,78) expected-one-end-tag-but-got-another
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <caption>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| "baz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><colgroup><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+#errors
+(1,44) foster-parenting-start-tag
+(1,49) foster-parenting-character
+(1,50) foster-parenting-character
+(1,51) foster-parenting-character
+(1,61) foster-parenting-character
+(1,62) foster-parenting-character
+(1,63) foster-parenting-character
+(1,71) unexpected-html-element-in-foreign-content
+(1,71) foster-parenting-start-tag
+(1,63) foster-parenting-character
+(1,63) foster-parenting-character
+(1,63) foster-parenting-character
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+| <table>
+| <colgroup>
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><tr><td><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+#errors
+(1,50) unexpected-start-tag-in-select
+(1,54) unexpected-start-tag-in-select
+(1,62) unexpected-end-tag-in-select
+(1,66) unexpected-start-tag-in-select
+(1,74) unexpected-end-tag-in-select
+(1,77) unexpected-start-tag-in-select
+(1,88) unexpected-table-element-end-tag-in-select-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <select>
+| "foobarbaz"
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body><table><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+#errors
+(1,36) unexpected-start-tag-implies-table-voodoo
+(1,42) unexpected-start-tag-in-select
+(1,46) unexpected-start-tag-in-select
+(1,54) unexpected-end-tag-in-select
+(1,58) unexpected-start-tag-in-select
+(1,66) unexpected-end-tag-in-select
+(1,69) unexpected-start-tag-in-select
+(1,80) unexpected-table-element-end-tag-in-select-in-table
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <select>
+| "foobarbaz"
+| <table>
+| <p>
+| "quux"
+
+#data
+<!DOCTYPE html><body></body></html><math><mi>foo</mi><mi>bar</mi><p>baz
+#errors
+(1,41) expected-eof-but-got-start-tag
+(1,68) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><body></body><math><mi>foo</mi><mi>bar</mi><p>baz
+#errors
+(1,34) unexpected-start-tag-after-body
+(1,61) unexpected-html-element-in-foreign-content
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mi>
+| "foo"
+| <math mi>
+| "bar"
+| <p>
+| "baz"
+
+#data
+<!DOCTYPE html><frameset><math><mi></mi><mi></mi><p><span>
+#errors
+(1,31) unexpected-start-tag-in-frameset
+(1,35) unexpected-start-tag-in-frameset
+(1,40) unexpected-end-tag-in-frameset
+(1,44) unexpected-start-tag-in-frameset
+(1,49) unexpected-end-tag-in-frameset
+(1,52) unexpected-start-tag-in-frameset
+(1,58) unexpected-start-tag-in-frameset
+(1,58) eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><frameset></frameset><math><mi></mi><mi></mi><p><span>
+#errors
+(1,42) unexpected-start-tag-after-frameset
+(1,46) unexpected-start-tag-after-frameset
+(1,51) unexpected-end-tag-after-frameset
+(1,55) unexpected-start-tag-after-frameset
+(1,60) unexpected-end-tag-after-frameset
+(1,63) unexpected-start-tag-after-frameset
+(1,69) unexpected-start-tag-after-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!DOCTYPE html><body xlink:href=foo><math xlink:href=foo></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| <math math>
+| xlink href="foo"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo></mi></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <math math>
+| <math mi>
+| xlink href="foo"
+| xml lang="en"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo /></math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <math math>
+| <math mi>
+| xlink href="foo"
+| xml lang="en"
+
+#data
+<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo />bar</math>
+#errors
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| xlink:href="foo"
+| xml:lang="en"
+| <math math>
+| <math mi>
+| xlink href="foo"
+| xml lang="en"
+| "bar"
diff --git a/tests/html5lib-tests/tree-construction/tests_innerHTML_1.dat b/tests/html5lib-tests/tree-construction/tests_innerHTML_1.dat
new file mode 100644
index 0000000..54f4368
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tests_innerHTML_1.dat
@@ -0,0 +1,887 @@
+#data
+<body><span>
+#errors
+(1,6): unexpected-start-tag
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+body
+#document
+| <span>
+
+#data
+<span><body>
+#errors
+(1,12): unexpected-start-tag
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+body
+#document
+| <span>
+
+#data
+<span><body>
+#errors
+(1,12): unexpected-start-tag
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| <span>
+
+#data
+<body><span>
+#errors
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+html
+#document
+| <head>
+| <body>
+| <span>
+
+#data
+<frameset><span>
+#errors
+(1,10): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+body
+#document
+| <span>
+
+#data
+<span><frameset>
+#errors
+(1,16): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+body
+#document
+| <span>
+
+#data
+<span><frameset>
+#errors
+(1,16): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| <span>
+
+#data
+<frameset><span>
+#errors
+(1,16): unexpected-start-tag-in-frameset
+(1,16): eof-in-frameset
+#document-fragment
+html
+#document
+| <head>
+| <frameset>
+
+#data
+<table><tr>
+#errors
+(1,7): unexpected-start-tag
+#document-fragment
+table
+#document
+| <tbody>
+| <tr>
+
+#data
+</table><tr>
+#errors
+(1,8): unexpected-end-tag
+#document-fragment
+table
+#document
+| <tbody>
+| <tr>
+
+#data
+<a>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,3): eof-in-table
+#document-fragment
+table
+#document
+| <a>
+
+#data
+<a>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,3): eof-in-table
+#document-fragment
+table
+#document
+| <a>
+
+#data
+<a><caption>a
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,13): expected-closing-tag-but-got-eof
+#document-fragment
+table
+#document
+| <a>
+| <caption>
+| "a"
+
+#data
+<a><colgroup><col>
+#errors
+(1,3): foster-parenting-start-token
+(1,18): expected-closing-tag-but-got-eof
+#document-fragment
+table
+#document
+| <a>
+| <colgroup>
+| <col>
+
+#data
+<a><tbody><tr>
+#errors
+(1,3): foster-parenting-start-tag
+#document-fragment
+table
+#document
+| <a>
+| <tbody>
+| <tr>
+
+#data
+<a><tfoot><tr>
+#errors
+(1,3): foster-parenting-start-tag
+#document-fragment
+table
+#document
+| <a>
+| <tfoot>
+| <tr>
+
+#data
+<a><thead><tr>
+#errors
+(1,3): foster-parenting-start-tag
+#document-fragment
+table
+#document
+| <a>
+| <thead>
+| <tr>
+
+#data
+<a><tr>
+#errors
+(1,3): foster-parenting-start-tag
+#document-fragment
+table
+#document
+| <a>
+| <tbody>
+| <tr>
+
+#data
+<a><th>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,7): unexpected-cell-in-table-body
+#document-fragment
+table
+#document
+| <a>
+| <tbody>
+| <tr>
+| <th>
+
+#data
+<a><td>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,7): unexpected-cell-in-table-body
+#document-fragment
+table
+#document
+| <a>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table></table><tbody>
+#errors
+(1,22): unexpected-start-tag
+#document-fragment
+caption
+#document
+| <table>
+
+#data
+</table><span>
+#errors
+(1,8): unexpected-end-tag
+(1,14): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+
+#data
+<span></table>
+#errors
+(1,14): unexpected-end-tag
+(1,14): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+
+#data
+</caption><span>
+#errors
+(1,10): XXX-undefined-error
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+
+#data
+<span></caption><span>
+#errors
+(1,16): XXX-undefined-error
+(1,22): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><caption><span>
+#errors
+(1,15): unexpected-start-tag
+(1,21): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><col><span>
+#errors
+(1,11): unexpected-start-tag
+(1,17): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><colgroup><span>
+#errors
+(1,16): unexpected-start-tag
+(1,22): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><html><span>
+#errors
+(1,12): non-html-root
+(1,18): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><tbody><span>
+#errors
+(1,13): unexpected-start-tag
+(1,19): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><td><span>
+#errors
+(1,10): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><tfoot><span>
+#errors
+(1,13): unexpected-start-tag
+(1,19): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><thead><span>
+#errors
+(1,13): unexpected-start-tag
+(1,19): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><th><span>
+#errors
+(1,10): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span><tr><span>
+#errors
+(1,10): unexpected-start-tag
+(1,16): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+<span></table><span>
+#errors
+(1,14): unexpected-end-tag
+(1,20): expected-closing-tag-but-got-eof
+#document-fragment
+caption
+#document
+| <span>
+| <span>
+
+#data
+</colgroup><col>
+#errors
+(1,11): XXX-undefined-error
+#document-fragment
+colgroup
+#document
+| <col>
+
+#data
+<a><col>
+#errors
+(1,3): XXX-undefined-error
+#document-fragment
+colgroup
+#document
+| <col>
+
+#data
+<caption><a>
+#errors
+(1,9): XXX-undefined-error
+(1,12): unexpected-start-tag-implies-table-voodoo
+(1,12): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<col><a>
+#errors
+(1,5): XXX-undefined-error
+(1,8): unexpected-start-tag-implies-table-voodoo
+(1,8): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<colgroup><a>
+#errors
+(1,10): XXX-undefined-error
+(1,13): unexpected-start-tag-implies-table-voodoo
+(1,13): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<tbody><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): unexpected-start-tag-implies-table-voodoo
+(1,10): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<tfoot><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): unexpected-start-tag-implies-table-voodoo
+(1,10): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<thead><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): unexpected-start-tag-implies-table-voodoo
+(1,10): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+</table><a>
+#errors
+(1,8): XXX-undefined-error
+(1,11): unexpected-start-tag-implies-table-voodoo
+(1,11): eof-in-table
+#document-fragment
+tbody
+#document
+| <a>
+
+#data
+<a><tr>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+#document-fragment
+tbody
+#document
+| <a>
+| <tr>
+
+#data
+<a><td>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,7): unexpected-cell-in-table-body
+#document-fragment
+tbody
+#document
+| <a>
+| <tr>
+| <td>
+
+#data
+<a><td>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,7): unexpected-cell-in-table-body
+#document-fragment
+tbody
+#document
+| <a>
+| <tr>
+| <td>
+
+#data
+<a><td>
+#errors
+(1,3): unexpected-start-tag-implies-table-voodoo
+(1,7): unexpected-cell-in-table-body
+#document-fragment
+tbody
+#document
+| <a>
+| <tr>
+| <td>
+
+#data
+<td><table><tbody><a><tr>
+#errors
+(1,4): unexpected-cell-in-table-body
+(1,21): unexpected-start-tag-implies-table-voodoo
+(1,25): eof-in-table
+#document-fragment
+tbody
+#document
+| <tr>
+| <td>
+| <a>
+| <table>
+| <tbody>
+| <tr>
+
+#data
+</tr><td>
+#errors
+(1,5): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<td><table><a><tr></tr><tr>
+#errors
+(1,14): unexpected-start-tag-implies-table-voodoo
+(1,27): eof-in-table
+#document-fragment
+tr
+#document
+| <td>
+| <a>
+| <table>
+| <tbody>
+| <tr>
+| <tr>
+
+#data
+<caption><td>
+#errors
+(1,9): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<col><td>
+#errors
+(1,5): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<colgroup><td>
+#errors
+(1,10): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<tbody><td>
+#errors
+(1,7): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<tfoot><td>
+#errors
+(1,7): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<thead><td>
+#errors
+(1,7): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<tr><td>
+#errors
+(1,4): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+</table><td>
+#errors
+(1,8): XXX-undefined-error
+#document-fragment
+tr
+#document
+| <td>
+
+#data
+<td><table></table><td>
+#errors
+#document-fragment
+tr
+#document
+| <td>
+| <table>
+| <td>
+
+#data
+<td><table></table><td>
+#errors
+#document-fragment
+tr
+#document
+| <td>
+| <table>
+| <td>
+
+#data
+<caption><a>
+#errors
+(1,9): XXX-undefined-error
+(1,12): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<col><a>
+#errors
+(1,5): XXX-undefined-error
+(1,8): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<colgroup><a>
+#errors
+(1,10): XXX-undefined-error
+(1,13): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<tbody><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<tfoot><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<th><a>
+#errors
+(1,4): XXX-undefined-error
+(1,7): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<thead><a>
+#errors
+(1,7): XXX-undefined-error
+(1,10): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<tr><a>
+#errors
+(1,4): XXX-undefined-error
+(1,7): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</table><a>
+#errors
+(1,8): XXX-undefined-error
+(1,11): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</tbody><a>
+#errors
+(1,8): XXX-undefined-error
+(1,11): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</td><a>
+#errors
+(1,5): unexpected-end-tag
+(1,8): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</tfoot><a>
+#errors
+(1,8): XXX-undefined-error
+(1,11): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</thead><a>
+#errors
+(1,8): XXX-undefined-error
+(1,11): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</th><a>
+#errors
+(1,5): unexpected-end-tag
+(1,8): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+</tr><a>
+#errors
+(1,5): XXX-undefined-error
+(1,8): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <a>
+
+#data
+<table><td><td>
+#errors
+(1,11): unexpected-cell-in-table-body
+(1,15): expected-closing-tag-but-got-eof
+#document-fragment
+td
+#document
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <td>
+
+#data
+</select><option>
+#errors
+(1,9): XXX-undefined-error
+#document-fragment
+select
+#document
+| <option>
+
+#data
+<input><option>
+#errors
+(1,7): unexpected-input-in-select
+#document-fragment
+select
+#document
+| <option>
+
+#data
+<keygen><option>
+#errors
+(1,8): unexpected-input-in-select
+#document-fragment
+select
+#document
+| <option>
+
+#data
+<textarea><option>
+#errors
+(1,10): unexpected-input-in-select
+#document-fragment
+select
+#document
+| <option>
+
+#data
+</html><!--abc-->
+#errors
+(1,7): unexpected-end-tag-after-body-innerhtml
+#document-fragment
+html
+#document
+| <head>
+| <body>
+| <!-- abc -->
+
+#data
+</frameset><frame>
+#errors
+(1,11): unexpected-frameset-in-frameset-innerhtml
+#document-fragment
+frameset
+#document
+| <frame>
+
+#data
+#errors
+#document-fragment
+html
+#document
+| <head>
+| <body>
diff --git a/tests/html5lib-tests/tree-construction/tricky01.dat b/tests/html5lib-tests/tree-construction/tricky01.dat
new file mode 100644
index 0000000..753502a
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/tricky01.dat
@@ -0,0 +1,336 @@
+#data
+<b><p>Bold </b> Not bold</p>
+Also not bold.
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,15): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <p>
+| <b>
+| "Bold "
+| " Not bold"
+| "
+Also not bold."
+
+#data
+<html>
+<font color=red><i>Italic and Red<p>Italic and Red </font> Just italic.</p> Italic only.</i> Plain
+<p>I should not be red. <font color=red>Red. <i>Italic and red.</p>
+<p>Italic and red. </i> Red.</font> I should not be red.</p>
+<b>Bold <i>Bold and italic</b> Only Italic </i> Plain
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(2,58): adoption-agency-1.3
+(3,67): unexpected-end-tag
+(4,23): adoption-agency-1.3
+(4,35): adoption-agency-1.3
+(5,30): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <font>
+| color="red"
+| <i>
+| "Italic and Red"
+| <i>
+| <p>
+| <font>
+| color="red"
+| "Italic and Red "
+| " Just italic."
+| " Italic only."
+| " Plain
+"
+| <p>
+| "I should not be red. "
+| <font>
+| color="red"
+| "Red. "
+| <i>
+| "Italic and red."
+| <font>
+| color="red"
+| <i>
+| "
+"
+| <p>
+| <font>
+| color="red"
+| <i>
+| "Italic and red. "
+| " Red."
+| " I should not be red."
+| "
+"
+| <b>
+| "Bold "
+| <i>
+| "Bold and italic"
+| <i>
+| " Only Italic "
+| " Plain"
+
+#data
+<html><body>
+<p><font size="7">First paragraph.</p>
+<p>Second paragraph.</p></font>
+<b><p><i>Bold and Italic</b> Italic</p>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(2,38): unexpected-end-tag
+(4,28): adoption-agency-1.3
+(4,28): adoption-agency-1.3
+(4,39): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| "
+"
+| <p>
+| <font>
+| size="7"
+| "First paragraph."
+| <font>
+| size="7"
+| "
+"
+| <p>
+| "Second paragraph."
+| "
+"
+| <b>
+| <p>
+| <b>
+| <i>
+| "Bold and Italic"
+| <i>
+| " Italic"
+
+#data
+<html>
+<dl>
+<dt><b>Boo
+<dd>Goo?
+</dl>
+</html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(4,4): end-tag-too-early
+(5,5): end-tag-too-early
+(6,7): expected-one-end-tag-but-got-another
+#document
+| <html>
+| <head>
+| <body>
+| <dl>
+| "
+"
+| <dt>
+| <b>
+| "Boo
+"
+| <dd>
+| <b>
+| "Goo?
+"
+| <b>
+| "
+"
+
+#data
+<html><body>
+<label><a><div>Hello<div>World</div></a></label>
+</body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(2,40): adoption-agency-1.3
+(2,48): unexpected-end-tag
+(3,7): expected-one-end-tag-but-got-another
+#document
+| <html>
+| <head>
+| <body>
+| "
+"
+| <label>
+| <a>
+| <div>
+| <a>
+| "Hello"
+| <div>
+| "World"
+| "
+"
+
+#data
+<table><center> <font>a</center> <img> <tr><td> </td> </tr> </table>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,15): foster-parenting-start-tag
+(1,16): foster-parenting-character
+(1,22): foster-parenting-start-tag
+(1,23): foster-parenting-character
+(1,32): foster-parenting-end-tag
+(1,32): end-tag-too-early
+(1,33): foster-parenting-character
+(1,38): foster-parenting-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <center>
+| " "
+| <font>
+| "a"
+| <font>
+| <img>
+| " "
+| <table>
+| " "
+| <tbody>
+| <tr>
+| <td>
+| " "
+| " "
+| " "
+
+#data
+<table><tr><p><a><p>You should see this text.
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,14): unexpected-start-tag-implies-table-voodoo
+(1,17): unexpected-start-tag-implies-table-voodoo
+(1,20): unexpected-start-tag-implies-table-voodoo
+(1,20): closing-non-current-p-element
+(1,21): foster-parenting-character
+(1,22): foster-parenting-character
+(1,23): foster-parenting-character
+(1,24): foster-parenting-character
+(1,25): foster-parenting-character
+(1,26): foster-parenting-character
+(1,27): foster-parenting-character
+(1,28): foster-parenting-character
+(1,29): foster-parenting-character
+(1,30): foster-parenting-character
+(1,31): foster-parenting-character
+(1,32): foster-parenting-character
+(1,33): foster-parenting-character
+(1,34): foster-parenting-character
+(1,35): foster-parenting-character
+(1,36): foster-parenting-character
+(1,37): foster-parenting-character
+(1,38): foster-parenting-character
+(1,39): foster-parenting-character
+(1,40): foster-parenting-character
+(1,41): foster-parenting-character
+(1,42): foster-parenting-character
+(1,43): foster-parenting-character
+(1,44): foster-parenting-character
+(1,45): foster-parenting-character
+(1,45): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| <a>
+| <p>
+| <a>
+| "You should see this text."
+| <table>
+| <tbody>
+| <tr>
+
+#data
+<TABLE>
+<TR>
+<CENTER><CENTER><TD></TD></TR><TR>
+<FONT>
+<TABLE><tr></tr></TABLE>
+</P>
+<a></font><font></a>
+This page contains an insanely badly-nested tag sequence.
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(3,8): unexpected-start-tag-implies-table-voodoo
+(3,16): unexpected-start-tag-implies-table-voodoo
+(4,6): unexpected-start-tag-implies-table-voodoo
+(4,6): unexpected character token in table (the newline)
+(5,7): unexpected-start-tag-implies-end-tag
+(6,4): unexpected p end tag
+(7,10): adoption-agency-1.3
+(7,20): adoption-agency-1.3
+(8,57): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <center>
+| <center>
+| <font>
+| "
+"
+| <table>
+| "
+"
+| <tbody>
+| <tr>
+| "
+"
+| <td>
+| <tr>
+| "
+"
+| <table>
+| <tbody>
+| <tr>
+| <font>
+| "
+"
+| <p>
+| "
+"
+| <a>
+| <a>
+| <font>
+| <font>
+| "
+This page contains an insanely badly-nested tag sequence."
+
+#data
+<html>
+<body>
+<b><nobr><div>This text is in a div inside a nobr</nobr>More text that should not be in the nobr, i.e., the
+nobr should have closed the div inside it implicitly. </b><pre>A pre tag outside everything else.</pre>
+</body>
+</html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(3,56): adoption-agency-1.3
+(4,58): adoption-agency-1.3
+(5,7): expected-one-end-tag-but-got-another
+#document
+| <html>
+| <head>
+| <body>
+| "
+"
+| <b>
+| <nobr>
+| <div>
+| <b>
+| <nobr>
+| "This text is in a div inside a nobr"
+| "More text that should not be in the nobr, i.e., the
+nobr should have closed the div inside it implicitly. "
+| <pre>
+| "A pre tag outside everything else."
+| "
+
+"
diff --git a/tests/html5lib-tests/tree-construction/webkit01.dat b/tests/html5lib-tests/tree-construction/webkit01.dat
new file mode 100644
index 0000000..3bb3bb9
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/webkit01.dat
@@ -0,0 +1,759 @@
+#data
+Test
+#errors
+(1,4): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "Test"
+
+#data
+<div></div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+
+#data
+<div>Test</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "Test"
+
+#data
+<di
+#errors
+(1,3): eof-in-tag-name
+(1,3): expected-doctype-but-got-eof
+#new-errors
+(1:4) eof-in-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<div>Hello</div>
+<script>
+console.log("PASS");
+</script>
+<div>Bye</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "Hello"
+| "
+"
+| <script>
+| "
+console.log("PASS");
+"
+| "
+"
+| <div>
+| "Bye"
+
+#data
+<div foo="bar">Hello</div>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| foo="bar"
+| "Hello"
+
+#data
+<div>Hello</div>
+<script>
+console.log("FOO<span>BAR</span>BAZ");
+</script>
+<div>Bye</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| "Hello"
+| "
+"
+| <script>
+| "
+console.log("FOO<span>BAR</span>BAZ");
+"
+| "
+"
+| <div>
+| "Bye"
+
+#data
+<foo bar="baz"></foo><potato quack="duck"></potato>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| bar="baz"
+| <potato>
+| quack="duck"
+
+#data
+<foo bar="baz"><potato quack="duck"></potato></foo>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| bar="baz"
+| <potato>
+| quack="duck"
+
+#data
+<foo></foo bar="baz"><potato></potato quack="duck">
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,21): attributes-in-end-tag
+(1,51): attributes-in-end-tag
+#new-errors
+(1:21) end-tag-with-attributes
+(1:51) end-tag-with-attributes
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| <potato>
+
+#data
+</ tttt>
+#errors
+(1,2): expected-closing-tag-but-got-char
+(1,8): expected-doctype-but-got-eof
+#new-errors
+(1:3) invalid-first-character-of-tag-name
+#document
+| <!-- tttt -->
+| <html>
+| <head>
+| <body>
+
+#data
+<div FOO ><img><img></div>
+#errors
+(1,10): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| foo=""
+| <img>
+| <img>
+
+#data
+<p>Test</p<p>Test2</p>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,13): unexpected-end-tag
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| "TestTest2"
+
+#data
+<rdar://problem/6869687>
+#errors
+(1,7): unexpected-character-after-solidus-in-tag
+(1,8): unexpected-character-after-solidus-in-tag
+(1,16): unexpected-character-after-solidus-in-tag
+(1,24): expected-doctype-but-got-start-tag
+(1,24): expected-closing-tag-but-got-eof
+#new-errors
+(1:8) unexpected-solidus-in-tag
+(1:9) unexpected-solidus-in-tag
+(1:17) unexpected-solidus-in-tag
+#document
+| <html>
+| <head>
+| <body>
+| <rdar:>
+| 6869687=""
+| problem=""
+
+#data
+<A>test< /A>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,8): expected-tag-name
+(1,12): expected-closing-tag-but-got-eof
+#new-errors
+(1:9) invalid-first-character-of-tag-name
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| "test< /A>"
+
+#data
+&lt;
+#errors
+(1,4): expected-doctype-but-got-chars
+#document
+| <html>
+| <head>
+| <body>
+| "<"
+
+#data
+<body foo='bar'><body foo='baz' yo='mama'>
+#errors
+(1,16): expected-doctype-but-got-start-tag
+(1,42): unexpected-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| foo="bar"
+| yo="mama"
+
+#data
+<body></br foo="bar"></body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,21): attributes-in-end-tag
+(1,21): unexpected-end-tag-treated-as
+#new-errors
+(1:21) end-tag-with-attributes
+#document
+| <html>
+| <head>
+| <body>
+| <br>
+
+#data
+<bdy><br foo="bar"></body>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,26): expected-one-end-tag-but-got-another
+#document
+| <html>
+| <head>
+| <body>
+| <bdy>
+| <br>
+| foo="bar"
+
+#data
+<body></body></br foo="bar">
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,28): attributes-in-end-tag
+(1,28): unexpected-end-tag-after-body
+(1,28): unexpected-end-tag-treated-as
+#new-errors
+(1:28) end-tag-with-attributes
+#document
+| <html>
+| <head>
+| <body>
+| <br>
+
+#data
+<bdy></body><br foo="bar">
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,12): expected-one-end-tag-but-got-another
+(1,26): unexpected-start-tag-after-body
+(1,26): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <bdy>
+| <br>
+| foo="bar"
+
+#data
+<html><body></body></html><!-- Hi there -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <!-- Hi there -->
+
+#data
+<html><body></body></html><!-- Comment A --><!-- Comment B --><!-- Comment C --><!-- Comment D --><!-- Comment E -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <!-- Comment A -->
+| <!-- Comment B -->
+| <!-- Comment C -->
+| <!-- Comment D -->
+| <!-- Comment E -->
+
+#data
+<html><body></body></html>x<!-- Hi there -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): expected-eof-but-got-char
+#document
+| <html>
+| <head>
+| <body>
+| "x"
+| <!-- Hi there -->
+
+#data
+<html><body></body></html>x<!-- Hi there --></html><!-- Again -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): expected-eof-but-got-char
+#document
+| <html>
+| <head>
+| <body>
+| "x"
+| <!-- Hi there -->
+| <!-- Again -->
+
+#data
+<html><body></body></html>x<!-- Hi there --></body></html><!-- Again -->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): expected-eof-but-got-char
+#document
+| <html>
+| <head>
+| <body>
+| "x"
+| <!-- Hi there -->
+| <!-- Again -->
+
+#data
+<html><body><ruby><div><rp>xx</rp></div></ruby></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): XXX-undefined-error
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <rp>
+| "xx"
+
+#data
+<html><body><ruby><div><rt>xx</rt></div></ruby></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,27): XXX-undefined-error
+#document
+| <html>
+| <head>
+| <body>
+| <ruby>
+| <div>
+| <rt>
+| "xx"
+
+#data
+<html><frameset><!--1--><noframes>A</noframes><!--2--></frameset><!--3--><noframes>B</noframes><!--4--></html><!--5--><noframes>C</noframes><!--6-->
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <frameset>
+| <!-- 1 -->
+| <noframes>
+| "A"
+| <!-- 2 -->
+| <!-- 3 -->
+| <noframes>
+| "B"
+| <!-- 4 -->
+| <noframes>
+| "C"
+| <!-- 5 -->
+| <!-- 6 -->
+
+#data
+<select><option>A<select><option>B<select><option>C<select><option>D<select><option>E<select><option>F<select><option>G<select>
+#errors
+(1,8): expected-doctype-but-got-start-tag
+(1,25): unexpected-select-in-select
+(1,59): unexpected-select-in-select
+(1,93): unexpected-select-in-select
+(1,127): unexpected-select-in-select
+#document
+| <html>
+| <head>
+| <body>
+| <select>
+| <option>
+| "A"
+| <option>
+| "B"
+| <select>
+| <option>
+| "C"
+| <option>
+| "D"
+| <select>
+| <option>
+| "E"
+| <option>
+| "F"
+| <select>
+| <option>
+| "G"
+
+#data
+<dd><dd><dt><dt><dd><li><li>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <dd>
+| <dd>
+| <dt>
+| <dt>
+| <dd>
+| <li>
+| <li>
+
+#data
+<div><b></div><div><nobr>a<nobr>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,14): end-tag-too-early
+(1,32): unexpected-start-tag-implies-end-tag
+(1,32): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <b>
+| <div>
+| <b>
+| <nobr>
+| "a"
+| <nobr>
+
+#data
+<head></head>
+<body></body>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| "
+"
+| <body>
+
+#data
+<head></head> <style></style>ddd
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,21): unexpected-start-tag-out-of-my-head
+#document
+| <html>
+| <head>
+| <style>
+| " "
+| <body>
+| "ddd"
+
+#data
+<kbd><table></kbd><col><select><tr>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,18): unexpected-end-tag-implies-table-voodoo
+(1,18): unexpected-end-tag
+(1,31): unexpected-start-tag-implies-table-voodoo
+(1,35): unexpected-table-element-start-tag-in-select-in-table
+(1,35): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| <kbd>
+| <select>
+| <table>
+| <colgroup>
+| <col>
+| <tbody>
+| <tr>
+
+#data
+<kbd><table></kbd><col><select><tr></table><div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,18): unexpected-end-tag-implies-table-voodoo
+(1,18): unexpected-end-tag
+(1,31): unexpected-start-tag-implies-table-voodoo
+(1,35): unexpected-table-element-start-tag-in-select-in-table
+(1,48): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <kbd>
+| <select>
+| <table>
+| <colgroup>
+| <col>
+| <tbody>
+| <tr>
+| <div>
+
+#data
+<a><li><style></style><title></title></a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,41): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <li>
+| <a>
+| <style>
+| <title>
+
+#data
+<font></p><p><meta><title></title></font>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,10): unexpected-end-tag
+(1,41): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <font>
+| <p>
+| <p>
+| <font>
+| <meta>
+| <title>
+
+#data
+<a><center><title></title><a>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,29): unexpected-start-tag-implies-end-tag
+(1,29): adoption-agency-1.3
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <a>
+| <center>
+| <a>
+| <title>
+| <a>
+
+#data
+<svg><title><div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,17): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg title>
+| <div>
+
+#data
+<svg><title><rect><div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,23): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg title>
+| <rect>
+| <div>
+
+#data
+<svg><title><svg><div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,22): unexpected-html-element-in-foreign-content
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg title>
+| <svg svg>
+| <div>
+
+#data
+<img <="" FAIL>
+#errors
+(1,6): invalid-character-in-attribute-name
+(1,15): expected-doctype-but-got-start-tag
+#new-errors
+(1:6) unexpected-character-in-attribute-name
+#document
+| <html>
+| <head>
+| <body>
+| <img>
+| <=""
+| fail=""
+
+#data
+<ul><li><div id='foo'/>A</li><li>B<div>C</div></li></ul>
+#errors
+(1,4): expected-doctype-but-got-start-tag
+(1,23): non-void-element-with-trailing-solidus
+(1,29): end-tag-too-early
+#new-errors
+(1:9-1:24) non-void-html-element-start-tag-with-trailing-solidus
+#document
+| <html>
+| <head>
+| <body>
+| <ul>
+| <li>
+| <div>
+| id="foo"
+| "A"
+| <li>
+| "B"
+| <div>
+| "C"
+
+#data
+<svg><em><desc></em>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,9): unexpected-html-element-in-foreign-content
+(1,20): adoption-agency-1.3
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <em>
+| <desc>
+
+#data
+<table><tr><td><svg><desc><td></desc><circle>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,30): unexpected-start-tag
+(1,37): unexpected-end-tag
+(1,22): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| <svg svg>
+| <svg desc>
+| <td>
+| <circle>
+
+#data
+<svg><tfoot></mi><td>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,17): unexpected-end-tag
+(1,17): unexpected-end-tag
+(1,21): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg tfoot>
+| <svg td>
+
+#data
+<math><mrow><mrow><mn>1</mn></mrow><mi>a</mi></mrow></math>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math mrow>
+| <math mrow>
+| <math mn>
+| "1"
+| <math mi>
+| "a"
+
+#data
+<!doctype html><input type="hidden"><frameset>
+#errors
+(1,46): unexpected-start-tag
+(1,46): eof-in-frameset
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <frameset>
+
+#data
+<!doctype html><input type="button"><frameset>
+#errors
+(1,46): unexpected-start-tag
+#document
+| <!DOCTYPE html>
+| <html>
+| <head>
+| <body>
+| <input>
+| type="button"
diff --git a/tests/html5lib-tests/tree-construction/webkit02.dat b/tests/html5lib-tests/tree-construction/webkit02.dat
new file mode 100644
index 0000000..dddfe2a
--- /dev/null
+++ b/tests/html5lib-tests/tree-construction/webkit02.dat
@@ -0,0 +1,336 @@
+#data
+<foo bar=qux/>
+#errors
+(1,14): expected-doctype-but-got-start-tag
+(1,14): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <foo>
+| bar="qux/"
+
+#data
+<p id="status"><noscript><strong>A</strong></noscript><span>B</span></p>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#script-on
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| id="status"
+| <noscript>
+| "<strong>A</strong>"
+| <span>
+| "B"
+
+#data
+<p id="status"><noscript><strong>A</strong></noscript><span>B</span></p>
+#errors
+(1,15): expected-doctype-but-got-start-tag
+#script-off
+#document
+| <html>
+| <head>
+| <body>
+| <p>
+| id="status"
+| <noscript>
+| <strong>
+| "A"
+| <span>
+| "B"
+
+#data
+<div><sarcasm><div></div></sarcasm></div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <div>
+| <sarcasm>
+| <div>
+
+#data
+<html><body><img src="" border="0" alt="><div>A</div></body></html>
+#errors
+(1,6): expected-doctype-but-got-start-tag
+(1,67): eof-in-attribute-value-double-quote
+#new-errors
+(1:68) eof-in-tag
+#document
+| <html>
+| <head>
+| <body>
+
+#data
+<table><td></tbody>A
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,20): foster-parenting-character
+(1,20): eof-in-table
+#document
+| <html>
+| <head>
+| <body>
+| "A"
+| <table>
+| <tbody>
+| <tr>
+| <td>
+
+#data
+<table><td></thead>A
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,19): XXX-undefined-error
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "A"
+
+#data
+<table><td></tfoot>A
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,11): unexpected-cell-in-table-body
+(1,19): XXX-undefined-error
+(1,20): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <tbody>
+| <tr>
+| <td>
+| "A"
+
+#data
+<table><thead><td></tbody>A
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,18): unexpected-cell-in-table-body
+(1,26): XXX-undefined-error
+(1,27): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <table>
+| <thead>
+| <tr>
+| <td>
+| "A"
+
+#data
+<legend>test</legend>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+#document
+| <html>
+| <head>
+| <body>
+| <legend>
+| "test"
+
+#data
+<table><input>
+#errors
+(1,7): expected-doctype-but-got-start-tag
+(1,14): foster-parenting-start-tag
+(1,15): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <input>
+| <table>
+
+#data
+<b><em><foo><foo><aside></b>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,28): adoption-agency-9
+(1,29): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <em>
+| <foo>
+| <foo>
+| <em>
+| <aside>
+| <b>
+
+#data
+<b><em><foo><foo><aside></b></em>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,28): adoption-agency-9
+(1,33): adoption-agency-9
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <em>
+| <foo>
+| <foo>
+| <em>
+| <aside>
+| <em>
+| <b>
+
+#data
+<b><em><foo><foo><foo><aside></b>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,33): adoption-agency-9
+(1,34): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <em>
+| <foo>
+| <foo>
+| <foo>
+| <aside>
+| <b>
+
+#data
+<b><em><foo><foo><foo><aside></b></em>
+#errors
+(1,3): expected-doctype-but-got-start-tag
+(1,33): adoption-agency-9
+(1,38): adoption-agency-9
+(1,39): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <b>
+| <em>
+| <foo>
+| <foo>
+| <foo>
+| <aside>
+| <b>
+
+#data
+<b><em><foo><foo><foo><foo><foo><foo><foo><foo><foo><foo><aside></b></em>
+#errors
+(1,68): adoption-agency-9
+(1,73): adoption-agency-9
+(1,74): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| <b>
+| <em>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <foo>
+| <aside>
+| <b>
+
+#data
+<b><em><foo><foob><foob><foob><foob><fooc><fooc><fooc><fooc><food><aside></b></em>
+#errors
+(1,77): adoption-agency-9
+(1,82): adoption-agency-9
+(1,83): expected-closing-tag-but-got-eof
+#document-fragment
+div
+#document
+| <b>
+| <em>
+| <foo>
+| <foob>
+| <foob>
+| <foob>
+| <foob>
+| <fooc>
+| <fooc>
+| <fooc>
+| <fooc>
+| <food>
+| <aside>
+| <b>
+
+#data
+<option><XH<optgroup></optgroup>
+#errors
+(1,21): unexpected-start-tag-in-select
+(1,32): unexpected-end-tag-in-select
+#document-fragment
+select
+#document
+| <option>
+
+#data
+<svg><foreignObject><div>foo</div><plaintext></foreignObject></svg><div>bar</div>
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,82): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg foreignObject>
+| <div>
+| "foo"
+| <plaintext>
+| "</foreignObject></svg><div>bar</div>"
+
+#data
+<svg><foreignObject></foreignObject><title></svg>foo
+#errors
+(1,5): expected-doctype-but-got-start-tag
+(1,49): expected-one-end-tag-but-got-another
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg foreignObject>
+| <svg title>
+| "foo"
+
+#data
+</foreignObject><plaintext><div>foo</div>
+#errors
+(1,16): expected-doctype-but-got-end-tag
+(1,16): unexpected-end-tag-before-html
+(1,42): expected-closing-tag-but-got-eof
+#document
+| <html>
+| <head>
+| <body>
+| <plaintext>
+| "<div>foo</div>"
diff --git a/tests/test_html5lib.rs b/tests/test_html5lib.rs
new file mode 100644
index 0000000..36f371a
--- /dev/null
+++ b/tests/test_html5lib.rs
@@ -0,0 +1,316 @@
+use html5gum::{Doctype, EndTag, Error, Reader, StartTag, State, StringReader, Token, Tokenizer};
+use pretty_assertions::assert_eq;
+use serde::{de::Error as _, Deserialize};
+use std::{collections::BTreeMap, fs::File, io::BufReader, path::Path};
+
+#[cfg(not(feature = "integration-tests"))]
+compile_error!(
+ "integration tests need the integration-tests feature enabled. Run cargo tests --all-features"
+);
+
+struct ExpectedOutputTokens(Vec<Token>);
+
+impl<'de> Deserialize<'de> for ExpectedOutputTokens {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ // this macro is a horrible way to define a type that deserializes only from a particular
+ // string. Together with serde(untagged) this gives us really flexible enum tagging with really
+ // terrible error messages.
+ macro_rules! def_const {
+ ($str:expr, $ty:ident) => {
+ #[derive(Deserialize)]
+ enum $ty {
+ #[serde(rename = $str)]
+ $ty,
+ }
+ };
+ }
+
+ def_const!("DOCTYPE", DoctypeConst);
+ def_const!("StartTag", StartTagConst);
+ def_const!("EndTag", EndTagConst);
+ def_const!("Comment", CommentConst);
+ def_const!("Character", CharacterConst);
+
+ type Attributes = BTreeMap<String, String>;
+
+ #[derive(Deserialize)]
+ #[serde(untagged)]
+ enum OutputToken {
+ // "DOCTYPE", name, public_id, system_id, correctness
+ Doctype(
+ DoctypeConst,
+ Option<String>,
+ Option<String>,
+ Option<String>,
+ bool,
+ ),
+ // "StartTag", name, attributes, self_closing
+ StartTag(StartTagConst, String, Attributes),
+ StartTag2(StartTagConst, String, Attributes, bool),
+ // "EndTag", name
+ EndTag(EndTagConst, String),
+ // "Comment", data
+ Comment(CommentConst, String),
+ // "Character", data
+ Character(CharacterConst, String),
+ }
+
+ Ok(ExpectedOutputTokens(
+ Vec::deserialize(deserializer)?
+ .into_iter()
+ .map(|output_token| match output_token {
+ OutputToken::Doctype(
+ _,
+ name,
+ public_identifier,
+ system_identifier,
+ correctness,
+ ) => Token::Doctype(Doctype {
+ name: name.unwrap_or_default(),
+ public_identifier,
+ system_identifier,
+ force_quirks: !correctness,
+ }),
+ OutputToken::StartTag(_, name, attributes) => Token::StartTag(StartTag {
+ self_closing: false,
+ name,
+ attributes,
+ }),
+ OutputToken::StartTag2(_, name, attributes, self_closing) => {
+ Token::StartTag(StartTag {
+ self_closing,
+ name,
+ attributes,
+ })
+ }
+ OutputToken::EndTag(_, name) => Token::EndTag(EndTag { name }),
+ OutputToken::Comment(_, data) => Token::Comment(data),
+ OutputToken::Character(_, data) => Token::String(data),
+ })
+ .collect::<Vec<Token>>(),
+ ))
+ }
+}
+
+struct InitialState(State);
+
+impl<'de> Deserialize<'de> for InitialState {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ #[derive(Deserialize)]
+ enum RawInitialState {
+ #[serde(rename = "Data state")]
+ Data,
+ #[serde(rename = "PLAINTEXT state")]
+ PlainText,
+ #[serde(rename = "RCDATA state")]
+ RcData,
+ #[serde(rename = "RAWTEXT state")]
+ RawText,
+ #[serde(rename = "Script data state")]
+ ScriptData,
+ #[serde(rename = "CDATA section state")]
+ CdataSection,
+ }
+
+ Ok(Self(match RawInitialState::deserialize(deserializer)? {
+ RawInitialState::Data => State::Data,
+ RawInitialState::PlainText => State::PlainText,
+ RawInitialState::RcData => State::RcData,
+ RawInitialState::RawText => State::RawText,
+ RawInitialState::ScriptData => State::ScriptData,
+ RawInitialState::CdataSection => State::CdataSection,
+ }))
+ }
+}
+
+fn initial_states_default() -> Vec<InitialState> {
+ vec![InitialState(State::Data)]
+}
+
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct Test {
+ description: String,
+ input: String,
+ output: ExpectedOutputTokens,
+ #[serde(default = "initial_states_default")]
+ initial_states: Vec<InitialState>,
+ #[serde(default)]
+ double_escaped: bool,
+ #[serde(default)]
+ last_start_tag: Option<String>,
+ #[serde(default)]
+ errors: Vec<ParseError>,
+}
+
+#[derive(Debug, Eq, PartialEq)]
+struct ParseErrorInner(Error);
+
+impl<'de> Deserialize<'de> for ParseErrorInner {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ let str_err = String::deserialize(deserializer)?;
+ let err: Error = str_err
+ .parse()
+ .map_err(|_| D::Error::custom(&format!("failed to deserialize error: {}", str_err)))?;
+ Ok(ParseErrorInner(err))
+ }
+}
+
+#[derive(Deserialize, Debug, Eq, PartialEq)]
+#[serde(rename_all = "camelCase")]
+struct ParseError {
+ code: ParseErrorInner,
+ // TODO: lineno and column?
+}
+
+#[derive(Deserialize)]
+struct Tests {
+ tests: Vec<Test>,
+}
+
+#[test_generator::test_resources("tests/html5lib-tests/tokenizer/*.test")]
+fn test_tokenizer_file(resource_name: &str) {
+ let path = Path::new(resource_name);
+ let fname = path.file_name().unwrap().to_str().unwrap();
+
+ if matches!(
+ fname,
+ // We don't have the test harness for this test, TODO
+ "xmlViolation.test" |
+ // Our parser does not operate on bytes, the input isn't valid Rust &str
+ "unicodeCharsProblematic.test"
+ ) {
+ return;
+ }
+
+ let f = File::open(path).unwrap();
+ let bf = BufReader::new(f);
+ let tests: Tests = serde_json::from_reader(bf).unwrap();
+
+ for (i, test) in tests.tests.into_iter().enumerate() {
+ run_test(fname, i, test);
+ }
+}
+
+fn run_test(fname: &str, test_i: usize, mut test: Test) {
+ test.input = if test.double_escaped {
+ unescape(&test.input)
+ } else {
+ test.input
+ };
+
+ test.output = if test.double_escaped {
+ ExpectedOutputTokens(
+ test.output
+ .0
+ .into_iter()
+ .map(|token| match token {
+ Token::String(x) => Token::String(unescape(&x)),
+ Token::Comment(x) => Token::Comment(unescape(&x)),
+ token => token,
+ })
+ .collect(),
+ )
+ } else {
+ ExpectedOutputTokens(test.output.0)
+ };
+
+ for state in &test.initial_states {
+ run_test_inner(
+ fname,
+ test_i,
+ &test,
+ state.0,
+ Tokenizer::<StringReader>::new(&test.input),
+ "string",
+ );
+ }
+}
+
+fn run_test_inner<R: Reader>(
+ fname: &str,
+ test_i: usize,
+ test: &Test,
+ state: State,
+ mut tokenizer: Tokenizer<R>,
+ tokenizer_info: &str,
+) {
+ println!(
+ "==== FILE {}, TEST {}, STATE {:?}, TOKENIZER {} ====",
+ fname, test_i, state, tokenizer_info,
+ );
+ println!("description: {}", test.description);
+ tokenizer.set_state(state);
+ tokenizer.set_last_start_tag(test.last_start_tag.as_ref().map(String::as_str));
+
+ let mut actual_tokens = Vec::new();
+ let mut actual_errors = Vec::new();
+
+ for token in tokenizer {
+ if let Token::Error(e) = token {
+ actual_errors.push(ParseError {
+ code: ParseErrorInner(e),
+ });
+ } else {
+ actual_tokens.push(token);
+ }
+ }
+
+ assert_eq!(test.output.0, actual_tokens);
+
+ if !matches!(
+ (fname, test_i),
+ // TODO: html5lib-tests bug?
+ ("test3.test", 79)
+ ) {
+ assert_eq!(test.errors, actual_errors);
+ }
+}
+
+/// Implements the escape sequences described in the tokenizer tests of html5lib-tests (and nothing
+/// more)
+fn unescape(data: &str) -> String {
+ let mut stream = data.chars();
+ let mut rv = String::new();
+
+ loop {
+ match stream.next() {
+ Some('\\') => (),
+ Some(x) => {
+ rv.push(x);
+ continue;
+ }
+ None => break,
+ }
+
+ match stream.next() {
+ Some('u') => (),
+ x => panic!("unexpected escape: {:?}", x),
+ }
+
+ let orig_len = rv.len();
+
+ for _ in 0..4 {
+ rv.push(match stream.next() {
+ Some(x) => x,
+ None => panic!("unexpected eof after \\u"),
+ });
+ }
+
+ let c = u32::from_str_radix(&rv[orig_len..], 16).expect("failed to parse as hex");
+ let c = char::from_u32(c).expect("bad character");
+ rv.truncate(orig_len);
+ rv.push(c);
+ }
+
+ rv
+}