summaryrefslogtreecommitdiffstats
path: root/vendor/markup5ever
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/markup5ever
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/markup5ever')
-rw-r--r--vendor/markup5ever/.cargo-checksum.json1
-rw-r--r--vendor/markup5ever/Cargo.toml41
-rw-r--r--vendor/markup5ever/LICENSE-APACHE201
-rw-r--r--vendor/markup5ever/LICENSE-MIT25
-rw-r--r--vendor/markup5ever/build.rs131
-rw-r--r--vendor/markup5ever/data/mod.rs50
-rw-r--r--vendor/markup5ever/entities.rs2233
-rw-r--r--vendor/markup5ever/interface/mod.rs377
-rw-r--r--vendor/markup5ever/interface/tree_builder.rs253
-rw-r--r--vendor/markup5ever/lib.rs46
-rw-r--r--vendor/markup5ever/local_names.txt1009
-rw-r--r--vendor/markup5ever/serialize.rs75
-rw-r--r--vendor/markup5ever/util/buffer_queue.rs303
-rw-r--r--vendor/markup5ever/util/smallcharset.rs90
14 files changed, 4835 insertions, 0 deletions
diff --git a/vendor/markup5ever/.cargo-checksum.json b/vendor/markup5ever/.cargo-checksum.json
new file mode 100644
index 000000000..b8e2c97ab
--- /dev/null
+++ b/vendor/markup5ever/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"Cargo.toml":"ccecd758bd42f326a487297725a71d21debb90e9e19564f8418dd64ea5d76c4f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"86dd7f026f916daf7511e39951ad8ea8cf55a8db67ae64060dacf829761c18f3","build.rs":"b42d2263985ac4050af47e782a16ef46fa47f3e8f277da32d067c20bce948dae","data/mod.rs":"0fa4ca8cf1f10b0fb0a56277d688f124355ceeb184986b260f6e2e034967c6b7","entities.rs":"505c8b6cf175a1f553d2cfc401fee1851d69a763370b85ece5da4fa806f635ad","interface/mod.rs":"7235edee12e00967c0a1ec6df0dbd6fa4231cb22c396529fc1b9b2932078e398","interface/tree_builder.rs":"e10c87ff976cff4021e90d20191300dc0c7e05c8b2852b02ab9c34a7bd75f681","lib.rs":"be2620e63b956fbf28bf7960c412b96de80a37dbf9fb3469766984aea6cde854","local_names.txt":"9a6e4df2e9f5eb17ba1cb9bc12615d0a10a4ab655379b83fab51a7932f565249","serialize.rs":"2ba20413ed7b439698945f56c43ee680dc333f0c694e4af14f2f5070e175aaa4","util/buffer_queue.rs":"f65ee5039313d9ae2102ca46c5261a669f8af349c1936de2688c9c88f2d595a0","util/smallcharset.rs":"13a91adc6a1ce35172577c7a87d8b3005edc5621cbcbd6f1d6c7c123c396d6ba"},"package":"7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"} \ No newline at end of file
diff --git a/vendor/markup5ever/Cargo.toml b/vendor/markup5ever/Cargo.toml
new file mode 100644
index 000000000..215173efd
--- /dev/null
+++ b/vendor/markup5ever/Cargo.toml
@@ -0,0 +1,41 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies.
+#
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
+
+[package]
+edition = "2018"
+name = "markup5ever"
+version = "0.11.0"
+authors = ["The html5ever Project Developers"]
+build = "build.rs"
+description = "Common code for xml5ever and html5ever"
+documentation = "https://docs.rs/markup5ever"
+categories = ["parser-implementations", "web-programming"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/servo/html5ever"
+
+[lib]
+path = "lib.rs"
+[dependencies.log]
+version = "0.4"
+
+[dependencies.phf]
+version = "0.10"
+
+[dependencies.string_cache]
+version = "0.8"
+
+[dependencies.tendril]
+version = "0.4"
+[build-dependencies.phf_codegen]
+version = "0.10"
+
+[build-dependencies.string_cache_codegen]
+version = "0.5.1"
diff --git a/vendor/markup5ever/LICENSE-APACHE b/vendor/markup5ever/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/vendor/markup5ever/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/vendor/markup5ever/LICENSE-MIT b/vendor/markup5ever/LICENSE-MIT
new file mode 100644
index 000000000..6e4510217
--- /dev/null
+++ b/vendor/markup5ever/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2014 The html5ever Project Developers
+
+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/vendor/markup5ever/build.rs b/vendor/markup5ever/build.rs
new file mode 100644
index 000000000..38b4fdddc
--- /dev/null
+++ b/vendor/markup5ever/build.rs
@@ -0,0 +1,131 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+extern crate phf_codegen;
+extern crate string_cache_codegen;
+
+use std::collections::HashMap;
+use std::env;
+use std::fs::File;
+use std::io::{BufRead, BufReader, BufWriter, Write};
+use std::path::Path;
+
+mod entities;
+
+static NAMESPACES: &[(&str, &str)] = &[
+ ("", ""),
+ ("*", "*"),
+ ("html", "http://www.w3.org/1999/xhtml"),
+ ("xml", "http://www.w3.org/XML/1998/namespace"),
+ ("xmlns", "http://www.w3.org/2000/xmlns/"),
+ ("xlink", "http://www.w3.org/1999/xlink"),
+ ("svg", "http://www.w3.org/2000/svg"),
+ ("mathml", "http://www.w3.org/1998/Math/MathML"),
+];
+
+fn main() {
+ let generated = Path::new(&env::var("OUT_DIR").unwrap()).join("generated.rs");
+ let mut generated = BufWriter::new(File::create(&generated).unwrap());
+
+ named_entities_to_phf(&Path::new(&env::var("OUT_DIR").unwrap()).join("named_entities.rs"));
+
+ // Create a string cache for local names
+ let local_names = Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("local_names.txt");
+ let mut local_names_atom = string_cache_codegen::AtomType::new("LocalName", "local_name!");
+ for line in BufReader::new(File::open(&local_names).unwrap()).lines() {
+ let local_name = line.unwrap();
+ local_names_atom.atom(&local_name);
+ local_names_atom.atom(&local_name.to_ascii_lowercase());
+ }
+ local_names_atom
+ .with_macro_doc("Takes a local name as a string and returns its key in the string cache.")
+ .write_to(&mut generated)
+ .unwrap();
+
+ // Create a string cache for namespace prefixes
+ string_cache_codegen::AtomType::new("Prefix", "namespace_prefix!")
+ .with_macro_doc("Takes a namespace prefix string and returns its key in a string cache.")
+ .atoms(NAMESPACES.iter().map(|&(prefix, _url)| prefix))
+ .write_to(&mut generated)
+ .unwrap();
+
+ // Create a string cache for namespace urls
+ string_cache_codegen::AtomType::new("Namespace", "namespace_url!")
+ .with_macro_doc("Takes a namespace url string and returns its key in a string cache.")
+ .atoms(NAMESPACES.iter().map(|&(_prefix, url)| url))
+ .write_to(&mut generated)
+ .unwrap();
+
+ writeln!(
+ generated,
+ r#"
+ /// Maps the input of [`namespace_prefix!`](macro.namespace_prefix.html) to
+ /// the output of [`namespace_url!`](macro.namespace_url.html).
+ ///
+ #[macro_export] macro_rules! ns {{
+ "#
+ )
+ .unwrap();
+ for &(prefix, url) in NAMESPACES {
+ writeln!(
+ generated,
+ "({}) => {{ namespace_url!({:?}) }};",
+ prefix, url
+ )
+ .unwrap();
+ }
+ writeln!(generated, "}}").unwrap();
+}
+
+fn named_entities_to_phf(to: &Path) {
+ let mut entities: HashMap<&str, (u32, u32)> = entities::NAMED_ENTITIES
+ .iter()
+ .map(|(name, cp1, cp2)| {
+ assert!(name.starts_with('&'));
+ (&name[1..], (*cp1, *cp2))
+ })
+ .collect();
+
+ // Add every missing prefix of those keys, mapping to NULL characters.
+ for key in entities.keys().cloned().collect::<Vec<_>>() {
+ for n in 1..key.len() {
+ entities.entry(&key[..n]).or_insert((0, 0));
+ }
+ }
+ entities.insert("", (0, 0));
+
+ let mut phf_map = phf_codegen::Map::new();
+ for (key, value) in entities {
+ phf_map.entry(key, &format!("{:?}", value));
+ }
+
+ let mut file = File::create(to).unwrap();
+ writeln!(
+ &mut file,
+ r#"
+/// A map of entity names to their codepoints. The second codepoint will
+/// be 0 if the entity contains a single codepoint. Entities have their preceeding '&' removed.
+///
+/// # Examples
+///
+/// ```
+/// use markup5ever::data::NAMED_ENTITIES;
+///
+/// assert_eq!(NAMED_ENTITIES.get("gt;").unwrap(), &(62, 0));
+/// ```
+"#
+ )
+ .unwrap();
+ writeln!(
+ &mut file,
+ "pub static NAMED_ENTITIES: Map<&'static str, (u32, u32)> = {};",
+ phf_map.build(),
+ )
+ .unwrap();
+}
diff --git a/vendor/markup5ever/data/mod.rs b/vendor/markup5ever/data/mod.rs
new file mode 100644
index 000000000..fa839ba8a
--- /dev/null
+++ b/vendor/markup5ever/data/mod.rs
@@ -0,0 +1,50 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+//! Data that is known at compile-time and hard-coded into the binary.
+use phf::Map;
+
+/// The spec replaces most characters in the ISO-2022 C1 control code range
+/// (U+0080 through U+009F) with these characters, based on Windows 8-bit
+/// codepages.
+pub static C1_REPLACEMENTS: [Option<char>; 32] = [
+ Some('\u{20ac}'),
+ None,
+ Some('\u{201a}'),
+ Some('\u{0192}'),
+ Some('\u{201e}'),
+ Some('\u{2026}'),
+ Some('\u{2020}'),
+ Some('\u{2021}'),
+ Some('\u{02c6}'),
+ Some('\u{2030}'),
+ Some('\u{0160}'),
+ Some('\u{2039}'),
+ Some('\u{0152}'),
+ None,
+ Some('\u{017d}'),
+ None,
+ None,
+ Some('\u{2018}'),
+ Some('\u{2019}'),
+ Some('\u{201c}'),
+ Some('\u{201d}'),
+ Some('\u{2022}'),
+ Some('\u{2013}'),
+ Some('\u{2014}'),
+ Some('\u{02dc}'),
+ Some('\u{2122}'),
+ Some('\u{0161}'),
+ Some('\u{203a}'),
+ Some('\u{0153}'),
+ None,
+ Some('\u{017e}'),
+ Some('\u{0178}'),
+];
+
+include!(concat!(env!("OUT_DIR"), "/named_entities.rs"));
diff --git a/vendor/markup5ever/entities.rs b/vendor/markup5ever/entities.rs
new file mode 100644
index 000000000..324d90c67
--- /dev/null
+++ b/vendor/markup5ever/entities.rs
@@ -0,0 +1,2233 @@
+pub const NAMED_ENTITIES: [(&str, u32, u32); 2231] = [
+ ("&Aacute;", 193, 0),
+ ("&Aacute", 193, 0),
+ ("&aacute;", 225, 0),
+ ("&aacute", 225, 0),
+ ("&Abreve;", 258, 0),
+ ("&abreve;", 259, 0),
+ ("&ac;", 8766, 0),
+ ("&acd;", 8767, 0),
+ ("&acE;", 8766, 819),
+ ("&Acirc;", 194, 0),
+ ("&Acirc", 194, 0),
+ ("&acirc;", 226, 0),
+ ("&acirc", 226, 0),
+ ("&acute;", 180, 0),
+ ("&acute", 180, 0),
+ ("&Acy;", 1040, 0),
+ ("&acy;", 1072, 0),
+ ("&AElig;", 198, 0),
+ ("&AElig", 198, 0),
+ ("&aelig;", 230, 0),
+ ("&aelig", 230, 0),
+ ("&af;", 8289, 0),
+ ("&Afr;", 120068, 0),
+ ("&afr;", 120094, 0),
+ ("&Agrave;", 192, 0),
+ ("&Agrave", 192, 0),
+ ("&agrave;", 224, 0),
+ ("&agrave", 224, 0),
+ ("&alefsym;", 8501, 0),
+ ("&aleph;", 8501, 0),
+ ("&Alpha;", 913, 0),
+ ("&alpha;", 945, 0),
+ ("&Amacr;", 256, 0),
+ ("&amacr;", 257, 0),
+ ("&amalg;", 10815, 0),
+ ("&amp;", 38, 0),
+ ("&amp", 38, 0),
+ ("&AMP;", 38, 0),
+ ("&AMP", 38, 0),
+ ("&andand;", 10837, 0),
+ ("&And;", 10835, 0),
+ ("&and;", 8743, 0),
+ ("&andd;", 10844, 0),
+ ("&andslope;", 10840, 0),
+ ("&andv;", 10842, 0),
+ ("&ang;", 8736, 0),
+ ("&ange;", 10660, 0),
+ ("&angle;", 8736, 0),
+ ("&angmsdaa;", 10664, 0),
+ ("&angmsdab;", 10665, 0),
+ ("&angmsdac;", 10666, 0),
+ ("&angmsdad;", 10667, 0),
+ ("&angmsdae;", 10668, 0),
+ ("&angmsdaf;", 10669, 0),
+ ("&angmsdag;", 10670, 0),
+ ("&angmsdah;", 10671, 0),
+ ("&angmsd;", 8737, 0),
+ ("&angrt;", 8735, 0),
+ ("&angrtvb;", 8894, 0),
+ ("&angrtvbd;", 10653, 0),
+ ("&angsph;", 8738, 0),
+ ("&angst;", 197, 0),
+ ("&angzarr;", 9084, 0),
+ ("&Aogon;", 260, 0),
+ ("&aogon;", 261, 0),
+ ("&Aopf;", 120120, 0),
+ ("&aopf;", 120146, 0),
+ ("&apacir;", 10863, 0),
+ ("&ap;", 8776, 0),
+ ("&apE;", 10864, 0),
+ ("&ape;", 8778, 0),
+ ("&apid;", 8779, 0),
+ ("&apos;", 39, 0),
+ ("&ApplyFunction;", 8289, 0),
+ ("&approx;", 8776, 0),
+ ("&approxeq;", 8778, 0),
+ ("&Aring;", 197, 0),
+ ("&Aring", 197, 0),
+ ("&aring;", 229, 0),
+ ("&aring", 229, 0),
+ ("&Ascr;", 119964, 0),
+ ("&ascr;", 119990, 0),
+ ("&Assign;", 8788, 0),
+ ("&ast;", 42, 0),
+ ("&asymp;", 8776, 0),
+ ("&asympeq;", 8781, 0),
+ ("&Atilde;", 195, 0),
+ ("&Atilde", 195, 0),
+ ("&atilde;", 227, 0),
+ ("&atilde", 227, 0),
+ ("&Auml;", 196, 0),
+ ("&Auml", 196, 0),
+ ("&auml;", 228, 0),
+ ("&auml", 228, 0),
+ ("&awconint;", 8755, 0),
+ ("&awint;", 10769, 0),
+ ("&backcong;", 8780, 0),
+ ("&backepsilon;", 1014, 0),
+ ("&backprime;", 8245, 0),
+ ("&backsim;", 8765, 0),
+ ("&backsimeq;", 8909, 0),
+ ("&Backslash;", 8726, 0),
+ ("&Barv;", 10983, 0),
+ ("&barvee;", 8893, 0),
+ ("&barwed;", 8965, 0),
+ ("&Barwed;", 8966, 0),
+ ("&barwedge;", 8965, 0),
+ ("&bbrk;", 9141, 0),
+ ("&bbrktbrk;", 9142, 0),
+ ("&bcong;", 8780, 0),
+ ("&Bcy;", 1041, 0),
+ ("&bcy;", 1073, 0),
+ ("&bdquo;", 8222, 0),
+ ("&becaus;", 8757, 0),
+ ("&because;", 8757, 0),
+ ("&Because;", 8757, 0),
+ ("&bemptyv;", 10672, 0),
+ ("&bepsi;", 1014, 0),
+ ("&bernou;", 8492, 0),
+ ("&Bernoullis;", 8492, 0),
+ ("&Beta;", 914, 0),
+ ("&beta;", 946, 0),
+ ("&beth;", 8502, 0),
+ ("&between;", 8812, 0),
+ ("&Bfr;", 120069, 0),
+ ("&bfr;", 120095, 0),
+ ("&bigcap;", 8898, 0),
+ ("&bigcirc;", 9711, 0),
+ ("&bigcup;", 8899, 0),
+ ("&bigodot;", 10752, 0),
+ ("&bigoplus;", 10753, 0),
+ ("&bigotimes;", 10754, 0),
+ ("&bigsqcup;", 10758, 0),
+ ("&bigstar;", 9733, 0),
+ ("&bigtriangledown;", 9661, 0),
+ ("&bigtriangleup;", 9651, 0),
+ ("&biguplus;", 10756, 0),
+ ("&bigvee;", 8897, 0),
+ ("&bigwedge;", 8896, 0),
+ ("&bkarow;", 10509, 0),
+ ("&blacklozenge;", 10731, 0),
+ ("&blacksquare;", 9642, 0),
+ ("&blacktriangle;", 9652, 0),
+ ("&blacktriangledown;", 9662, 0),
+ ("&blacktriangleleft;", 9666, 0),
+ ("&blacktriangleright;", 9656, 0),
+ ("&blank;", 9251, 0),
+ ("&blk12;", 9618, 0),
+ ("&blk14;", 9617, 0),
+ ("&blk34;", 9619, 0),
+ ("&block;", 9608, 0),
+ ("&bne;", 61, 8421),
+ ("&bnequiv;", 8801, 8421),
+ ("&bNot;", 10989, 0),
+ ("&bnot;", 8976, 0),
+ ("&Bopf;", 120121, 0),
+ ("&bopf;", 120147, 0),
+ ("&bot;", 8869, 0),
+ ("&bottom;", 8869, 0),
+ ("&bowtie;", 8904, 0),
+ ("&boxbox;", 10697, 0),
+ ("&boxdl;", 9488, 0),
+ ("&boxdL;", 9557, 0),
+ ("&boxDl;", 9558, 0),
+ ("&boxDL;", 9559, 0),
+ ("&boxdr;", 9484, 0),
+ ("&boxdR;", 9554, 0),
+ ("&boxDr;", 9555, 0),
+ ("&boxDR;", 9556, 0),
+ ("&boxh;", 9472, 0),
+ ("&boxH;", 9552, 0),
+ ("&boxhd;", 9516, 0),
+ ("&boxHd;", 9572, 0),
+ ("&boxhD;", 9573, 0),
+ ("&boxHD;", 9574, 0),
+ ("&boxhu;", 9524, 0),
+ ("&boxHu;", 9575, 0),
+ ("&boxhU;", 9576, 0),
+ ("&boxHU;", 9577, 0),
+ ("&boxminus;", 8863, 0),
+ ("&boxplus;", 8862, 0),
+ ("&boxtimes;", 8864, 0),
+ ("&boxul;", 9496, 0),
+ ("&boxuL;", 9563, 0),
+ ("&boxUl;", 9564, 0),
+ ("&boxUL;", 9565, 0),
+ ("&boxur;", 9492, 0),
+ ("&boxuR;", 9560, 0),
+ ("&boxUr;", 9561, 0),
+ ("&boxUR;", 9562, 0),
+ ("&boxv;", 9474, 0),
+ ("&boxV;", 9553, 0),
+ ("&boxvh;", 9532, 0),
+ ("&boxvH;", 9578, 0),
+ ("&boxVh;", 9579, 0),
+ ("&boxVH;", 9580, 0),
+ ("&boxvl;", 9508, 0),
+ ("&boxvL;", 9569, 0),
+ ("&boxVl;", 9570, 0),
+ ("&boxVL;", 9571, 0),
+ ("&boxvr;", 9500, 0),
+ ("&boxvR;", 9566, 0),
+ ("&boxVr;", 9567, 0),
+ ("&boxVR;", 9568, 0),
+ ("&bprime;", 8245, 0),
+ ("&breve;", 728, 0),
+ ("&Breve;", 728, 0),
+ ("&brvbar;", 166, 0),
+ ("&brvbar", 166, 0),
+ ("&bscr;", 119991, 0),
+ ("&Bscr;", 8492, 0),
+ ("&bsemi;", 8271, 0),
+ ("&bsim;", 8765, 0),
+ ("&bsime;", 8909, 0),
+ ("&bsolb;", 10693, 0),
+ ("&bsol;", 92, 0),
+ ("&bsolhsub;", 10184, 0),
+ ("&bull;", 8226, 0),
+ ("&bullet;", 8226, 0),
+ ("&bump;", 8782, 0),
+ ("&bumpE;", 10926, 0),
+ ("&bumpe;", 8783, 0),
+ ("&Bumpeq;", 8782, 0),
+ ("&bumpeq;", 8783, 0),
+ ("&Cacute;", 262, 0),
+ ("&cacute;", 263, 0),
+ ("&capand;", 10820, 0),
+ ("&capbrcup;", 10825, 0),
+ ("&capcap;", 10827, 0),
+ ("&cap;", 8745, 0),
+ ("&Cap;", 8914, 0),
+ ("&capcup;", 10823, 0),
+ ("&capdot;", 10816, 0),
+ ("&CapitalDifferentialD;", 8517, 0),
+ ("&caps;", 8745, 65024),
+ ("&caret;", 8257, 0),
+ ("&caron;", 711, 0),
+ ("&Cayleys;", 8493, 0),
+ ("&ccaps;", 10829, 0),
+ ("&Ccaron;", 268, 0),
+ ("&ccaron;", 269, 0),
+ ("&Ccedil;", 199, 0),
+ ("&Ccedil", 199, 0),
+ ("&ccedil;", 231, 0),
+ ("&ccedil", 231, 0),
+ ("&Ccirc;", 264, 0),
+ ("&ccirc;", 265, 0),
+ ("&Cconint;", 8752, 0),
+ ("&ccups;", 10828, 0),
+ ("&ccupssm;", 10832, 0),
+ ("&Cdot;", 266, 0),
+ ("&cdot;", 267, 0),
+ ("&cedil;", 184, 0),
+ ("&cedil", 184, 0),
+ ("&Cedilla;", 184, 0),
+ ("&cemptyv;", 10674, 0),
+ ("&cent;", 162, 0),
+ ("&cent", 162, 0),
+ ("&centerdot;", 183, 0),
+ ("&CenterDot;", 183, 0),
+ ("&cfr;", 120096, 0),
+ ("&Cfr;", 8493, 0),
+ ("&CHcy;", 1063, 0),
+ ("&chcy;", 1095, 0),
+ ("&check;", 10003, 0),
+ ("&checkmark;", 10003, 0),
+ ("&Chi;", 935, 0),
+ ("&chi;", 967, 0),
+ ("&circ;", 710, 0),
+ ("&circeq;", 8791, 0),
+ ("&circlearrowleft;", 8634, 0),
+ ("&circlearrowright;", 8635, 0),
+ ("&circledast;", 8859, 0),
+ ("&circledcirc;", 8858, 0),
+ ("&circleddash;", 8861, 0),
+ ("&CircleDot;", 8857, 0),
+ ("&circledR;", 174, 0),
+ ("&circledS;", 9416, 0),
+ ("&CircleMinus;", 8854, 0),
+ ("&CirclePlus;", 8853, 0),
+ ("&CircleTimes;", 8855, 0),
+ ("&cir;", 9675, 0),
+ ("&cirE;", 10691, 0),
+ ("&cire;", 8791, 0),
+ ("&cirfnint;", 10768, 0),
+ ("&cirmid;", 10991, 0),
+ ("&cirscir;", 10690, 0),
+ ("&ClockwiseContourIntegral;", 8754, 0),
+ ("&CloseCurlyDoubleQuote;", 8221, 0),
+ ("&CloseCurlyQuote;", 8217, 0),
+ ("&clubs;", 9827, 0),
+ ("&clubsuit;", 9827, 0),
+ ("&colon;", 58, 0),
+ ("&Colon;", 8759, 0),
+ ("&Colone;", 10868, 0),
+ ("&colone;", 8788, 0),
+ ("&coloneq;", 8788, 0),
+ ("&comma;", 44, 0),
+ ("&commat;", 64, 0),
+ ("&comp;", 8705, 0),
+ ("&compfn;", 8728, 0),
+ ("&complement;", 8705, 0),
+ ("&complexes;", 8450, 0),
+ ("&cong;", 8773, 0),
+ ("&congdot;", 10861, 0),
+ ("&Congruent;", 8801, 0),
+ ("&conint;", 8750, 0),
+ ("&Conint;", 8751, 0),
+ ("&ContourIntegral;", 8750, 0),
+ ("&copf;", 120148, 0),
+ ("&Copf;", 8450, 0),
+ ("&coprod;", 8720, 0),
+ ("&Coproduct;", 8720, 0),
+ ("&copy;", 169, 0),
+ ("&copy", 169, 0),
+ ("&COPY;", 169, 0),
+ ("&COPY", 169, 0),
+ ("&copysr;", 8471, 0),
+ ("&CounterClockwiseContourIntegral;", 8755, 0),
+ ("&crarr;", 8629, 0),
+ ("&cross;", 10007, 0),
+ ("&Cross;", 10799, 0),
+ ("&Cscr;", 119966, 0),
+ ("&cscr;", 119992, 0),
+ ("&csub;", 10959, 0),
+ ("&csube;", 10961, 0),
+ ("&csup;", 10960, 0),
+ ("&csupe;", 10962, 0),
+ ("&ctdot;", 8943, 0),
+ ("&cudarrl;", 10552, 0),
+ ("&cudarrr;", 10549, 0),
+ ("&cuepr;", 8926, 0),
+ ("&cuesc;", 8927, 0),
+ ("&cularr;", 8630, 0),
+ ("&cularrp;", 10557, 0),
+ ("&cupbrcap;", 10824, 0),
+ ("&cupcap;", 10822, 0),
+ ("&CupCap;", 8781, 0),
+ ("&cup;", 8746, 0),
+ ("&Cup;", 8915, 0),
+ ("&cupcup;", 10826, 0),
+ ("&cupdot;", 8845, 0),
+ ("&cupor;", 10821, 0),
+ ("&cups;", 8746, 65024),
+ ("&curarr;", 8631, 0),
+ ("&curarrm;", 10556, 0),
+ ("&curlyeqprec;", 8926, 0),
+ ("&curlyeqsucc;", 8927, 0),
+ ("&curlyvee;", 8910, 0),
+ ("&curlywedge;", 8911, 0),
+ ("&curren;", 164, 0),
+ ("&curren", 164, 0),
+ ("&curvearrowleft;", 8630, 0),
+ ("&curvearrowright;", 8631, 0),
+ ("&cuvee;", 8910, 0),
+ ("&cuwed;", 8911, 0),
+ ("&cwconint;", 8754, 0),
+ ("&cwint;", 8753, 0),
+ ("&cylcty;", 9005, 0),
+ ("&dagger;", 8224, 0),
+ ("&Dagger;", 8225, 0),
+ ("&daleth;", 8504, 0),
+ ("&darr;", 8595, 0),
+ ("&Darr;", 8609, 0),
+ ("&dArr;", 8659, 0),
+ ("&dash;", 8208, 0),
+ ("&Dashv;", 10980, 0),
+ ("&dashv;", 8867, 0),
+ ("&dbkarow;", 10511, 0),
+ ("&dblac;", 733, 0),
+ ("&Dcaron;", 270, 0),
+ ("&dcaron;", 271, 0),
+ ("&Dcy;", 1044, 0),
+ ("&dcy;", 1076, 0),
+ ("&ddagger;", 8225, 0),
+ ("&ddarr;", 8650, 0),
+ ("&DD;", 8517, 0),
+ ("&dd;", 8518, 0),
+ ("&DDotrahd;", 10513, 0),
+ ("&ddotseq;", 10871, 0),
+ ("&deg;", 176, 0),
+ ("&deg", 176, 0),
+ ("&Del;", 8711, 0),
+ ("&Delta;", 916, 0),
+ ("&delta;", 948, 0),
+ ("&demptyv;", 10673, 0),
+ ("&dfisht;", 10623, 0),
+ ("&Dfr;", 120071, 0),
+ ("&dfr;", 120097, 0),
+ ("&dHar;", 10597, 0),
+ ("&dharl;", 8643, 0),
+ ("&dharr;", 8642, 0),
+ ("&DiacriticalAcute;", 180, 0),
+ ("&DiacriticalDot;", 729, 0),
+ ("&DiacriticalDoubleAcute;", 733, 0),
+ ("&DiacriticalGrave;", 96, 0),
+ ("&DiacriticalTilde;", 732, 0),
+ ("&diam;", 8900, 0),
+ ("&diamond;", 8900, 0),
+ ("&Diamond;", 8900, 0),
+ ("&diamondsuit;", 9830, 0),
+ ("&diams;", 9830, 0),
+ ("&die;", 168, 0),
+ ("&DifferentialD;", 8518, 0),
+ ("&digamma;", 989, 0),
+ ("&disin;", 8946, 0),
+ ("&div;", 247, 0),
+ ("&divide;", 247, 0),
+ ("&divide", 247, 0),
+ ("&divideontimes;", 8903, 0),
+ ("&divonx;", 8903, 0),
+ ("&DJcy;", 1026, 0),
+ ("&djcy;", 1106, 0),
+ ("&dlcorn;", 8990, 0),
+ ("&dlcrop;", 8973, 0),
+ ("&dollar;", 36, 0),
+ ("&Dopf;", 120123, 0),
+ ("&dopf;", 120149, 0),
+ ("&Dot;", 168, 0),
+ ("&dot;", 729, 0),
+ ("&DotDot;", 8412, 0),
+ ("&doteq;", 8784, 0),
+ ("&doteqdot;", 8785, 0),
+ ("&DotEqual;", 8784, 0),
+ ("&dotminus;", 8760, 0),
+ ("&dotplus;", 8724, 0),
+ ("&dotsquare;", 8865, 0),
+ ("&doublebarwedge;", 8966, 0),
+ ("&DoubleContourIntegral;", 8751, 0),
+ ("&DoubleDot;", 168, 0),
+ ("&DoubleDownArrow;", 8659, 0),
+ ("&DoubleLeftArrow;", 8656, 0),
+ ("&DoubleLeftRightArrow;", 8660, 0),
+ ("&DoubleLeftTee;", 10980, 0),
+ ("&DoubleLongLeftArrow;", 10232, 0),
+ ("&DoubleLongLeftRightArrow;", 10234, 0),
+ ("&DoubleLongRightArrow;", 10233, 0),
+ ("&DoubleRightArrow;", 8658, 0),
+ ("&DoubleRightTee;", 8872, 0),
+ ("&DoubleUpArrow;", 8657, 0),
+ ("&DoubleUpDownArrow;", 8661, 0),
+ ("&DoubleVerticalBar;", 8741, 0),
+ ("&DownArrowBar;", 10515, 0),
+ ("&downarrow;", 8595, 0),
+ ("&DownArrow;", 8595, 0),
+ ("&Downarrow;", 8659, 0),
+ ("&DownArrowUpArrow;", 8693, 0),
+ ("&DownBreve;", 785, 0),
+ ("&downdownarrows;", 8650, 0),
+ ("&downharpoonleft;", 8643, 0),
+ ("&downharpoonright;", 8642, 0),
+ ("&DownLeftRightVector;", 10576, 0),
+ ("&DownLeftTeeVector;", 10590, 0),
+ ("&DownLeftVectorBar;", 10582, 0),
+ ("&DownLeftVector;", 8637, 0),
+ ("&DownRightTeeVector;", 10591, 0),
+ ("&DownRightVectorBar;", 10583, 0),
+ ("&DownRightVector;", 8641, 0),
+ ("&DownTeeArrow;", 8615, 0),
+ ("&DownTee;", 8868, 0),
+ ("&drbkarow;", 10512, 0),
+ ("&drcorn;", 8991, 0),
+ ("&drcrop;", 8972, 0),
+ ("&Dscr;", 119967, 0),
+ ("&dscr;", 119993, 0),
+ ("&DScy;", 1029, 0),
+ ("&dscy;", 1109, 0),
+ ("&dsol;", 10742, 0),
+ ("&Dstrok;", 272, 0),
+ ("&dstrok;", 273, 0),
+ ("&dtdot;", 8945, 0),
+ ("&dtri;", 9663, 0),
+ ("&dtrif;", 9662, 0),
+ ("&duarr;", 8693, 0),
+ ("&duhar;", 10607, 0),
+ ("&dwangle;", 10662, 0),
+ ("&DZcy;", 1039, 0),
+ ("&dzcy;", 1119, 0),
+ ("&dzigrarr;", 10239, 0),
+ ("&Eacute;", 201, 0),
+ ("&Eacute", 201, 0),
+ ("&eacute;", 233, 0),
+ ("&eacute", 233, 0),
+ ("&easter;", 10862, 0),
+ ("&Ecaron;", 282, 0),
+ ("&ecaron;", 283, 0),
+ ("&Ecirc;", 202, 0),
+ ("&Ecirc", 202, 0),
+ ("&ecirc;", 234, 0),
+ ("&ecirc", 234, 0),
+ ("&ecir;", 8790, 0),
+ ("&ecolon;", 8789, 0),
+ ("&Ecy;", 1069, 0),
+ ("&ecy;", 1101, 0),
+ ("&eDDot;", 10871, 0),
+ ("&Edot;", 278, 0),
+ ("&edot;", 279, 0),
+ ("&eDot;", 8785, 0),
+ ("&ee;", 8519, 0),
+ ("&efDot;", 8786, 0),
+ ("&Efr;", 120072, 0),
+ ("&efr;", 120098, 0),
+ ("&eg;", 10906, 0),
+ ("&Egrave;", 200, 0),
+ ("&Egrave", 200, 0),
+ ("&egrave;", 232, 0),
+ ("&egrave", 232, 0),
+ ("&egs;", 10902, 0),
+ ("&egsdot;", 10904, 0),
+ ("&el;", 10905, 0),
+ ("&Element;", 8712, 0),
+ ("&elinters;", 9191, 0),
+ ("&ell;", 8467, 0),
+ ("&els;", 10901, 0),
+ ("&elsdot;", 10903, 0),
+ ("&Emacr;", 274, 0),
+ ("&emacr;", 275, 0),
+ ("&empty;", 8709, 0),
+ ("&emptyset;", 8709, 0),
+ ("&EmptySmallSquare;", 9723, 0),
+ ("&emptyv;", 8709, 0),
+ ("&EmptyVerySmallSquare;", 9643, 0),
+ ("&emsp13;", 8196, 0),
+ ("&emsp14;", 8197, 0),
+ ("&emsp;", 8195, 0),
+ ("&ENG;", 330, 0),
+ ("&eng;", 331, 0),
+ ("&ensp;", 8194, 0),
+ ("&Eogon;", 280, 0),
+ ("&eogon;", 281, 0),
+ ("&Eopf;", 120124, 0),
+ ("&eopf;", 120150, 0),
+ ("&epar;", 8917, 0),
+ ("&eparsl;", 10723, 0),
+ ("&eplus;", 10865, 0),
+ ("&epsi;", 949, 0),
+ ("&Epsilon;", 917, 0),
+ ("&epsilon;", 949, 0),
+ ("&epsiv;", 1013, 0),
+ ("&eqcirc;", 8790, 0),
+ ("&eqcolon;", 8789, 0),
+ ("&eqsim;", 8770, 0),
+ ("&eqslantgtr;", 10902, 0),
+ ("&eqslantless;", 10901, 0),
+ ("&Equal;", 10869, 0),
+ ("&equals;", 61, 0),
+ ("&EqualTilde;", 8770, 0),
+ ("&equest;", 8799, 0),
+ ("&Equilibrium;", 8652, 0),
+ ("&equiv;", 8801, 0),
+ ("&equivDD;", 10872, 0),
+ ("&eqvparsl;", 10725, 0),
+ ("&erarr;", 10609, 0),
+ ("&erDot;", 8787, 0),
+ ("&escr;", 8495, 0),
+ ("&Escr;", 8496, 0),
+ ("&esdot;", 8784, 0),
+ ("&Esim;", 10867, 0),
+ ("&esim;", 8770, 0),
+ ("&Eta;", 919, 0),
+ ("&eta;", 951, 0),
+ ("&ETH;", 208, 0),
+ ("&ETH", 208, 0),
+ ("&eth;", 240, 0),
+ ("&eth", 240, 0),
+ ("&Euml;", 203, 0),
+ ("&Euml", 203, 0),
+ ("&euml;", 235, 0),
+ ("&euml", 235, 0),
+ ("&euro;", 8364, 0),
+ ("&excl;", 33, 0),
+ ("&exist;", 8707, 0),
+ ("&Exists;", 8707, 0),
+ ("&expectation;", 8496, 0),
+ ("&exponentiale;", 8519, 0),
+ ("&ExponentialE;", 8519, 0),
+ ("&fallingdotseq;", 8786, 0),
+ ("&Fcy;", 1060, 0),
+ ("&fcy;", 1092, 0),
+ ("&female;", 9792, 0),
+ ("&ffilig;", 64259, 0),
+ ("&fflig;", 64256, 0),
+ ("&ffllig;", 64260, 0),
+ ("&Ffr;", 120073, 0),
+ ("&ffr;", 120099, 0),
+ ("&filig;", 64257, 0),
+ ("&FilledSmallSquare;", 9724, 0),
+ ("&FilledVerySmallSquare;", 9642, 0),
+ ("&fjlig;", 102, 106),
+ ("&flat;", 9837, 0),
+ ("&fllig;", 64258, 0),
+ ("&fltns;", 9649, 0),
+ ("&fnof;", 402, 0),
+ ("&Fopf;", 120125, 0),
+ ("&fopf;", 120151, 0),
+ ("&forall;", 8704, 0),
+ ("&ForAll;", 8704, 0),
+ ("&fork;", 8916, 0),
+ ("&forkv;", 10969, 0),
+ ("&Fouriertrf;", 8497, 0),
+ ("&fpartint;", 10765, 0),
+ ("&frac12;", 189, 0),
+ ("&frac12", 189, 0),
+ ("&frac13;", 8531, 0),
+ ("&frac14;", 188, 0),
+ ("&frac14", 188, 0),
+ ("&frac15;", 8533, 0),
+ ("&frac16;", 8537, 0),
+ ("&frac18;", 8539, 0),
+ ("&frac23;", 8532, 0),
+ ("&frac25;", 8534, 0),
+ ("&frac34;", 190, 0),
+ ("&frac34", 190, 0),
+ ("&frac35;", 8535, 0),
+ ("&frac38;", 8540, 0),
+ ("&frac45;", 8536, 0),
+ ("&frac56;", 8538, 0),
+ ("&frac58;", 8541, 0),
+ ("&frac78;", 8542, 0),
+ ("&frasl;", 8260, 0),
+ ("&frown;", 8994, 0),
+ ("&fscr;", 119995, 0),
+ ("&Fscr;", 8497, 0),
+ ("&gacute;", 501, 0),
+ ("&Gamma;", 915, 0),
+ ("&gamma;", 947, 0),
+ ("&Gammad;", 988, 0),
+ ("&gammad;", 989, 0),
+ ("&gap;", 10886, 0),
+ ("&Gbreve;", 286, 0),
+ ("&gbreve;", 287, 0),
+ ("&Gcedil;", 290, 0),
+ ("&Gcirc;", 284, 0),
+ ("&gcirc;", 285, 0),
+ ("&Gcy;", 1043, 0),
+ ("&gcy;", 1075, 0),
+ ("&Gdot;", 288, 0),
+ ("&gdot;", 289, 0),
+ ("&ge;", 8805, 0),
+ ("&gE;", 8807, 0),
+ ("&gEl;", 10892, 0),
+ ("&gel;", 8923, 0),
+ ("&geq;", 8805, 0),
+ ("&geqq;", 8807, 0),
+ ("&geqslant;", 10878, 0),
+ ("&gescc;", 10921, 0),
+ ("&ges;", 10878, 0),
+ ("&gesdot;", 10880, 0),
+ ("&gesdoto;", 10882, 0),
+ ("&gesdotol;", 10884, 0),
+ ("&gesl;", 8923, 65024),
+ ("&gesles;", 10900, 0),
+ ("&Gfr;", 120074, 0),
+ ("&gfr;", 120100, 0),
+ ("&gg;", 8811, 0),
+ ("&Gg;", 8921, 0),
+ ("&ggg;", 8921, 0),
+ ("&gimel;", 8503, 0),
+ ("&GJcy;", 1027, 0),
+ ("&gjcy;", 1107, 0),
+ ("&gla;", 10917, 0),
+ ("&gl;", 8823, 0),
+ ("&glE;", 10898, 0),
+ ("&glj;", 10916, 0),
+ ("&gnap;", 10890, 0),
+ ("&gnapprox;", 10890, 0),
+ ("&gne;", 10888, 0),
+ ("&gnE;", 8809, 0),
+ ("&gneq;", 10888, 0),
+ ("&gneqq;", 8809, 0),
+ ("&gnsim;", 8935, 0),
+ ("&Gopf;", 120126, 0),
+ ("&gopf;", 120152, 0),
+ ("&grave;", 96, 0),
+ ("&GreaterEqual;", 8805, 0),
+ ("&GreaterEqualLess;", 8923, 0),
+ ("&GreaterFullEqual;", 8807, 0),
+ ("&GreaterGreater;", 10914, 0),
+ ("&GreaterLess;", 8823, 0),
+ ("&GreaterSlantEqual;", 10878, 0),
+ ("&GreaterTilde;", 8819, 0),
+ ("&Gscr;", 119970, 0),
+ ("&gscr;", 8458, 0),
+ ("&gsim;", 8819, 0),
+ ("&gsime;", 10894, 0),
+ ("&gsiml;", 10896, 0),
+ ("&gtcc;", 10919, 0),
+ ("&gtcir;", 10874, 0),
+ ("&gt;", 62, 0),
+ ("&gt", 62, 0),
+ ("&GT;", 62, 0),
+ ("&GT", 62, 0),
+ ("&Gt;", 8811, 0),
+ ("&gtdot;", 8919, 0),
+ ("&gtlPar;", 10645, 0),
+ ("&gtquest;", 10876, 0),
+ ("&gtrapprox;", 10886, 0),
+ ("&gtrarr;", 10616, 0),
+ ("&gtrdot;", 8919, 0),
+ ("&gtreqless;", 8923, 0),
+ ("&gtreqqless;", 10892, 0),
+ ("&gtrless;", 8823, 0),
+ ("&gtrsim;", 8819, 0),
+ ("&gvertneqq;", 8809, 65024),
+ ("&gvnE;", 8809, 65024),
+ ("&Hacek;", 711, 0),
+ ("&hairsp;", 8202, 0),
+ ("&half;", 189, 0),
+ ("&hamilt;", 8459, 0),
+ ("&HARDcy;", 1066, 0),
+ ("&hardcy;", 1098, 0),
+ ("&harrcir;", 10568, 0),
+ ("&harr;", 8596, 0),
+ ("&hArr;", 8660, 0),
+ ("&harrw;", 8621, 0),
+ ("&Hat;", 94, 0),
+ ("&hbar;", 8463, 0),
+ ("&Hcirc;", 292, 0),
+ ("&hcirc;", 293, 0),
+ ("&hearts;", 9829, 0),
+ ("&heartsuit;", 9829, 0),
+ ("&hellip;", 8230, 0),
+ ("&hercon;", 8889, 0),
+ ("&hfr;", 120101, 0),
+ ("&Hfr;", 8460, 0),
+ ("&HilbertSpace;", 8459, 0),
+ ("&hksearow;", 10533, 0),
+ ("&hkswarow;", 10534, 0),
+ ("&hoarr;", 8703, 0),
+ ("&homtht;", 8763, 0),
+ ("&hookleftarrow;", 8617, 0),
+ ("&hookrightarrow;", 8618, 0),
+ ("&hopf;", 120153, 0),
+ ("&Hopf;", 8461, 0),
+ ("&horbar;", 8213, 0),
+ ("&HorizontalLine;", 9472, 0),
+ ("&hscr;", 119997, 0),
+ ("&Hscr;", 8459, 0),
+ ("&hslash;", 8463, 0),
+ ("&Hstrok;", 294, 0),
+ ("&hstrok;", 295, 0),
+ ("&HumpDownHump;", 8782, 0),
+ ("&HumpEqual;", 8783, 0),
+ ("&hybull;", 8259, 0),
+ ("&hyphen;", 8208, 0),
+ ("&Iacute;", 205, 0),
+ ("&Iacute", 205, 0),
+ ("&iacute;", 237, 0),
+ ("&iacute", 237, 0),
+ ("&ic;", 8291, 0),
+ ("&Icirc;", 206, 0),
+ ("&Icirc", 206, 0),
+ ("&icirc;", 238, 0),
+ ("&icirc", 238, 0),
+ ("&Icy;", 1048, 0),
+ ("&icy;", 1080, 0),
+ ("&Idot;", 304, 0),
+ ("&IEcy;", 1045, 0),
+ ("&iecy;", 1077, 0),
+ ("&iexcl;", 161, 0),
+ ("&iexcl", 161, 0),
+ ("&iff;", 8660, 0),
+ ("&ifr;", 120102, 0),
+ ("&Ifr;", 8465, 0),
+ ("&Igrave;", 204, 0),
+ ("&Igrave", 204, 0),
+ ("&igrave;", 236, 0),
+ ("&igrave", 236, 0),
+ ("&ii;", 8520, 0),
+ ("&iiiint;", 10764, 0),
+ ("&iiint;", 8749, 0),
+ ("&iinfin;", 10716, 0),
+ ("&iiota;", 8489, 0),
+ ("&IJlig;", 306, 0),
+ ("&ijlig;", 307, 0),
+ ("&Imacr;", 298, 0),
+ ("&imacr;", 299, 0),
+ ("&image;", 8465, 0),
+ ("&ImaginaryI;", 8520, 0),
+ ("&imagline;", 8464, 0),
+ ("&imagpart;", 8465, 0),
+ ("&imath;", 305, 0),
+ ("&Im;", 8465, 0),
+ ("&imof;", 8887, 0),
+ ("&imped;", 437, 0),
+ ("&Implies;", 8658, 0),
+ ("&incare;", 8453, 0),
+ ("&in;", 8712, 0),
+ ("&infin;", 8734, 0),
+ ("&infintie;", 10717, 0),
+ ("&inodot;", 305, 0),
+ ("&intcal;", 8890, 0),
+ ("&int;", 8747, 0),
+ ("&Int;", 8748, 0),
+ ("&integers;", 8484, 0),
+ ("&Integral;", 8747, 0),
+ ("&intercal;", 8890, 0),
+ ("&Intersection;", 8898, 0),
+ ("&intlarhk;", 10775, 0),
+ ("&intprod;", 10812, 0),
+ ("&InvisibleComma;", 8291, 0),
+ ("&InvisibleTimes;", 8290, 0),
+ ("&IOcy;", 1025, 0),
+ ("&iocy;", 1105, 0),
+ ("&Iogon;", 302, 0),
+ ("&iogon;", 303, 0),
+ ("&Iopf;", 120128, 0),
+ ("&iopf;", 120154, 0),
+ ("&Iota;", 921, 0),
+ ("&iota;", 953, 0),
+ ("&iprod;", 10812, 0),
+ ("&iquest;", 191, 0),
+ ("&iquest", 191, 0),
+ ("&iscr;", 119998, 0),
+ ("&Iscr;", 8464, 0),
+ ("&isin;", 8712, 0),
+ ("&isindot;", 8949, 0),
+ ("&isinE;", 8953, 0),
+ ("&isins;", 8948, 0),
+ ("&isinsv;", 8947, 0),
+ ("&isinv;", 8712, 0),
+ ("&it;", 8290, 0),
+ ("&Itilde;", 296, 0),
+ ("&itilde;", 297, 0),
+ ("&Iukcy;", 1030, 0),
+ ("&iukcy;", 1110, 0),
+ ("&Iuml;", 207, 0),
+ ("&Iuml", 207, 0),
+ ("&iuml;", 239, 0),
+ ("&iuml", 239, 0),
+ ("&Jcirc;", 308, 0),
+ ("&jcirc;", 309, 0),
+ ("&Jcy;", 1049, 0),
+ ("&jcy;", 1081, 0),
+ ("&Jfr;", 120077, 0),
+ ("&jfr;", 120103, 0),
+ ("&jmath;", 567, 0),
+ ("&Jopf;", 120129, 0),
+ ("&jopf;", 120155, 0),
+ ("&Jscr;", 119973, 0),
+ ("&jscr;", 119999, 0),
+ ("&Jsercy;", 1032, 0),
+ ("&jsercy;", 1112, 0),
+ ("&Jukcy;", 1028, 0),
+ ("&jukcy;", 1108, 0),
+ ("&Kappa;", 922, 0),
+ ("&kappa;", 954, 0),
+ ("&kappav;", 1008, 0),
+ ("&Kcedil;", 310, 0),
+ ("&kcedil;", 311, 0),
+ ("&Kcy;", 1050, 0),
+ ("&kcy;", 1082, 0),
+ ("&Kfr;", 120078, 0),
+ ("&kfr;", 120104, 0),
+ ("&kgreen;", 312, 0),
+ ("&KHcy;", 1061, 0),
+ ("&khcy;", 1093, 0),
+ ("&KJcy;", 1036, 0),
+ ("&kjcy;", 1116, 0),
+ ("&Kopf;", 120130, 0),
+ ("&kopf;", 120156, 0),
+ ("&Kscr;", 119974, 0),
+ ("&kscr;", 120000, 0),
+ ("&lAarr;", 8666, 0),
+ ("&Lacute;", 313, 0),
+ ("&lacute;", 314, 0),
+ ("&laemptyv;", 10676, 0),
+ ("&lagran;", 8466, 0),
+ ("&Lambda;", 923, 0),
+ ("&lambda;", 955, 0),
+ ("&lang;", 10216, 0),
+ ("&Lang;", 10218, 0),
+ ("&langd;", 10641, 0),
+ ("&langle;", 10216, 0),
+ ("&lap;", 10885, 0),
+ ("&Laplacetrf;", 8466, 0),
+ ("&laquo;", 171, 0),
+ ("&laquo", 171, 0),
+ ("&larrb;", 8676, 0),
+ ("&larrbfs;", 10527, 0),
+ ("&larr;", 8592, 0),
+ ("&Larr;", 8606, 0),
+ ("&lArr;", 8656, 0),
+ ("&larrfs;", 10525, 0),
+ ("&larrhk;", 8617, 0),
+ ("&larrlp;", 8619, 0),
+ ("&larrpl;", 10553, 0),
+ ("&larrsim;", 10611, 0),
+ ("&larrtl;", 8610, 0),
+ ("&latail;", 10521, 0),
+ ("&lAtail;", 10523, 0),
+ ("&lat;", 10923, 0),
+ ("&late;", 10925, 0),
+ ("&lates;", 10925, 65024),
+ ("&lbarr;", 10508, 0),
+ ("&lBarr;", 10510, 0),
+ ("&lbbrk;", 10098, 0),
+ ("&lbrace;", 123, 0),
+ ("&lbrack;", 91, 0),
+ ("&lbrke;", 10635, 0),
+ ("&lbrksld;", 10639, 0),
+ ("&lbrkslu;", 10637, 0),
+ ("&Lcaron;", 317, 0),
+ ("&lcaron;", 318, 0),
+ ("&Lcedil;", 315, 0),
+ ("&lcedil;", 316, 0),
+ ("&lceil;", 8968, 0),
+ ("&lcub;", 123, 0),
+ ("&Lcy;", 1051, 0),
+ ("&lcy;", 1083, 0),
+ ("&ldca;", 10550, 0),
+ ("&ldquo;", 8220, 0),
+ ("&ldquor;", 8222, 0),
+ ("&ldrdhar;", 10599, 0),
+ ("&ldrushar;", 10571, 0),
+ ("&ldsh;", 8626, 0),
+ ("&le;", 8804, 0),
+ ("&lE;", 8806, 0),
+ ("&LeftAngleBracket;", 10216, 0),
+ ("&LeftArrowBar;", 8676, 0),
+ ("&leftarrow;", 8592, 0),
+ ("&LeftArrow;", 8592, 0),
+ ("&Leftarrow;", 8656, 0),
+ ("&LeftArrowRightArrow;", 8646, 0),
+ ("&leftarrowtail;", 8610, 0),
+ ("&LeftCeiling;", 8968, 0),
+ ("&LeftDoubleBracket;", 10214, 0),
+ ("&LeftDownTeeVector;", 10593, 0),
+ ("&LeftDownVectorBar;", 10585, 0),
+ ("&LeftDownVector;", 8643, 0),
+ ("&LeftFloor;", 8970, 0),
+ ("&leftharpoondown;", 8637, 0),
+ ("&leftharpoonup;", 8636, 0),
+ ("&leftleftarrows;", 8647, 0),
+ ("&leftrightarrow;", 8596, 0),
+ ("&LeftRightArrow;", 8596, 0),
+ ("&Leftrightarrow;", 8660, 0),
+ ("&leftrightarrows;", 8646, 0),
+ ("&leftrightharpoons;", 8651, 0),
+ ("&leftrightsquigarrow;", 8621, 0),
+ ("&LeftRightVector;", 10574, 0),
+ ("&LeftTeeArrow;", 8612, 0),
+ ("&LeftTee;", 8867, 0),
+ ("&LeftTeeVector;", 10586, 0),
+ ("&leftthreetimes;", 8907, 0),
+ ("&LeftTriangleBar;", 10703, 0),
+ ("&LeftTriangle;", 8882, 0),
+ ("&LeftTriangleEqual;", 8884, 0),
+ ("&LeftUpDownVector;", 10577, 0),
+ ("&LeftUpTeeVector;", 10592, 0),
+ ("&LeftUpVectorBar;", 10584, 0),
+ ("&LeftUpVector;", 8639, 0),
+ ("&LeftVectorBar;", 10578, 0),
+ ("&LeftVector;", 8636, 0),
+ ("&lEg;", 10891, 0),
+ ("&leg;", 8922, 0),
+ ("&leq;", 8804, 0),
+ ("&leqq;", 8806, 0),
+ ("&leqslant;", 10877, 0),
+ ("&lescc;", 10920, 0),
+ ("&les;", 10877, 0),
+ ("&lesdot;", 10879, 0),
+ ("&lesdoto;", 10881, 0),
+ ("&lesdotor;", 10883, 0),
+ ("&lesg;", 8922, 65024),
+ ("&lesges;", 10899, 0),
+ ("&lessapprox;", 10885, 0),
+ ("&lessdot;", 8918, 0),
+ ("&lesseqgtr;", 8922, 0),
+ ("&lesseqqgtr;", 10891, 0),
+ ("&LessEqualGreater;", 8922, 0),
+ ("&LessFullEqual;", 8806, 0),
+ ("&LessGreater;", 8822, 0),
+ ("&lessgtr;", 8822, 0),
+ ("&LessLess;", 10913, 0),
+ ("&lesssim;", 8818, 0),
+ ("&LessSlantEqual;", 10877, 0),
+ ("&LessTilde;", 8818, 0),
+ ("&lfisht;", 10620, 0),
+ ("&lfloor;", 8970, 0),
+ ("&Lfr;", 120079, 0),
+ ("&lfr;", 120105, 0),
+ ("&lg;", 8822, 0),
+ ("&lgE;", 10897, 0),
+ ("&lHar;", 10594, 0),
+ ("&lhard;", 8637, 0),
+ ("&lharu;", 8636, 0),
+ ("&lharul;", 10602, 0),
+ ("&lhblk;", 9604, 0),
+ ("&LJcy;", 1033, 0),
+ ("&ljcy;", 1113, 0),
+ ("&llarr;", 8647, 0),
+ ("&ll;", 8810, 0),
+ ("&Ll;", 8920, 0),
+ ("&llcorner;", 8990, 0),
+ ("&Lleftarrow;", 8666, 0),
+ ("&llhard;", 10603, 0),
+ ("&lltri;", 9722, 0),
+ ("&Lmidot;", 319, 0),
+ ("&lmidot;", 320, 0),
+ ("&lmoustache;", 9136, 0),
+ ("&lmoust;", 9136, 0),
+ ("&lnap;", 10889, 0),
+ ("&lnapprox;", 10889, 0),
+ ("&lne;", 10887, 0),
+ ("&lnE;", 8808, 0),
+ ("&lneq;", 10887, 0),
+ ("&lneqq;", 8808, 0),
+ ("&lnsim;", 8934, 0),
+ ("&loang;", 10220, 0),
+ ("&loarr;", 8701, 0),
+ ("&lobrk;", 10214, 0),
+ ("&longleftarrow;", 10229, 0),
+ ("&LongLeftArrow;", 10229, 0),
+ ("&Longleftarrow;", 10232, 0),
+ ("&longleftrightarrow;", 10231, 0),
+ ("&LongLeftRightArrow;", 10231, 0),
+ ("&Longleftrightarrow;", 10234, 0),
+ ("&longmapsto;", 10236, 0),
+ ("&longrightarrow;", 10230, 0),
+ ("&LongRightArrow;", 10230, 0),
+ ("&Longrightarrow;", 10233, 0),
+ ("&looparrowleft;", 8619, 0),
+ ("&looparrowright;", 8620, 0),
+ ("&lopar;", 10629, 0),
+ ("&Lopf;", 120131, 0),
+ ("&lopf;", 120157, 0),
+ ("&loplus;", 10797, 0),
+ ("&lotimes;", 10804, 0),
+ ("&lowast;", 8727, 0),
+ ("&lowbar;", 95, 0),
+ ("&LowerLeftArrow;", 8601, 0),
+ ("&LowerRightArrow;", 8600, 0),
+ ("&loz;", 9674, 0),
+ ("&lozenge;", 9674, 0),
+ ("&lozf;", 10731, 0),
+ ("&lpar;", 40, 0),
+ ("&lparlt;", 10643, 0),
+ ("&lrarr;", 8646, 0),
+ ("&lrcorner;", 8991, 0),
+ ("&lrhar;", 8651, 0),
+ ("&lrhard;", 10605, 0),
+ ("&lrm;", 8206, 0),
+ ("&lrtri;", 8895, 0),
+ ("&lsaquo;", 8249, 0),
+ ("&lscr;", 120001, 0),
+ ("&Lscr;", 8466, 0),
+ ("&lsh;", 8624, 0),
+ ("&Lsh;", 8624, 0),
+ ("&lsim;", 8818, 0),
+ ("&lsime;", 10893, 0),
+ ("&lsimg;", 10895, 0),
+ ("&lsqb;", 91, 0),
+ ("&lsquo;", 8216, 0),
+ ("&lsquor;", 8218, 0),
+ ("&Lstrok;", 321, 0),
+ ("&lstrok;", 322, 0),
+ ("&ltcc;", 10918, 0),
+ ("&ltcir;", 10873, 0),
+ ("&lt;", 60, 0),
+ ("&lt", 60, 0),
+ ("&LT;", 60, 0),
+ ("&LT", 60, 0),
+ ("&Lt;", 8810, 0),
+ ("&ltdot;", 8918, 0),
+ ("&lthree;", 8907, 0),
+ ("&ltimes;", 8905, 0),
+ ("&ltlarr;", 10614, 0),
+ ("&ltquest;", 10875, 0),
+ ("&ltri;", 9667, 0),
+ ("&ltrie;", 8884, 0),
+ ("&ltrif;", 9666, 0),
+ ("&ltrPar;", 10646, 0),
+ ("&lurdshar;", 10570, 0),
+ ("&luruhar;", 10598, 0),
+ ("&lvertneqq;", 8808, 65024),
+ ("&lvnE;", 8808, 65024),
+ ("&macr;", 175, 0),
+ ("&macr", 175, 0),
+ ("&male;", 9794, 0),
+ ("&malt;", 10016, 0),
+ ("&maltese;", 10016, 0),
+ ("&Map;", 10501, 0),
+ ("&map;", 8614, 0),
+ ("&mapsto;", 8614, 0),
+ ("&mapstodown;", 8615, 0),
+ ("&mapstoleft;", 8612, 0),
+ ("&mapstoup;", 8613, 0),
+ ("&marker;", 9646, 0),
+ ("&mcomma;", 10793, 0),
+ ("&Mcy;", 1052, 0),
+ ("&mcy;", 1084, 0),
+ ("&mdash;", 8212, 0),
+ ("&mDDot;", 8762, 0),
+ ("&measuredangle;", 8737, 0),
+ ("&MediumSpace;", 8287, 0),
+ ("&Mellintrf;", 8499, 0),
+ ("&Mfr;", 120080, 0),
+ ("&mfr;", 120106, 0),
+ ("&mho;", 8487, 0),
+ ("&micro;", 181, 0),
+ ("&micro", 181, 0),
+ ("&midast;", 42, 0),
+ ("&midcir;", 10992, 0),
+ ("&mid;", 8739, 0),
+ ("&middot;", 183, 0),
+ ("&middot", 183, 0),
+ ("&minusb;", 8863, 0),
+ ("&minus;", 8722, 0),
+ ("&minusd;", 8760, 0),
+ ("&minusdu;", 10794, 0),
+ ("&MinusPlus;", 8723, 0),
+ ("&mlcp;", 10971, 0),
+ ("&mldr;", 8230, 0),
+ ("&mnplus;", 8723, 0),
+ ("&models;", 8871, 0),
+ ("&Mopf;", 120132, 0),
+ ("&mopf;", 120158, 0),
+ ("&mp;", 8723, 0),
+ ("&mscr;", 120002, 0),
+ ("&Mscr;", 8499, 0),
+ ("&mstpos;", 8766, 0),
+ ("&Mu;", 924, 0),
+ ("&mu;", 956, 0),
+ ("&multimap;", 8888, 0),
+ ("&mumap;", 8888, 0),
+ ("&nabla;", 8711, 0),
+ ("&Nacute;", 323, 0),
+ ("&nacute;", 324, 0),
+ ("&nang;", 8736, 8402),
+ ("&nap;", 8777, 0),
+ ("&napE;", 10864, 824),
+ ("&napid;", 8779, 824),
+ ("&napos;", 329, 0),
+ ("&napprox;", 8777, 0),
+ ("&natural;", 9838, 0),
+ ("&naturals;", 8469, 0),
+ ("&natur;", 9838, 0),
+ ("&nbsp;", 160, 0),
+ ("&nbsp", 160, 0),
+ ("&nbump;", 8782, 824),
+ ("&nbumpe;", 8783, 824),
+ ("&ncap;", 10819, 0),
+ ("&Ncaron;", 327, 0),
+ ("&ncaron;", 328, 0),
+ ("&Ncedil;", 325, 0),
+ ("&ncedil;", 326, 0),
+ ("&ncong;", 8775, 0),
+ ("&ncongdot;", 10861, 824),
+ ("&ncup;", 10818, 0),
+ ("&Ncy;", 1053, 0),
+ ("&ncy;", 1085, 0),
+ ("&ndash;", 8211, 0),
+ ("&nearhk;", 10532, 0),
+ ("&nearr;", 8599, 0),
+ ("&neArr;", 8663, 0),
+ ("&nearrow;", 8599, 0),
+ ("&ne;", 8800, 0),
+ ("&nedot;", 8784, 824),
+ ("&NegativeMediumSpace;", 8203, 0),
+ ("&NegativeThickSpace;", 8203, 0),
+ ("&NegativeThinSpace;", 8203, 0),
+ ("&NegativeVeryThinSpace;", 8203, 0),
+ ("&nequiv;", 8802, 0),
+ ("&nesear;", 10536, 0),
+ ("&nesim;", 8770, 824),
+ ("&NestedGreaterGreater;", 8811, 0),
+ ("&NestedLessLess;", 8810, 0),
+ ("&NewLine;", 10, 0),
+ ("&nexist;", 8708, 0),
+ ("&nexists;", 8708, 0),
+ ("&Nfr;", 120081, 0),
+ ("&nfr;", 120107, 0),
+ ("&ngE;", 8807, 824),
+ ("&nge;", 8817, 0),
+ ("&ngeq;", 8817, 0),
+ ("&ngeqq;", 8807, 824),
+ ("&ngeqslant;", 10878, 824),
+ ("&nges;", 10878, 824),
+ ("&nGg;", 8921, 824),
+ ("&ngsim;", 8821, 0),
+ ("&nGt;", 8811, 8402),
+ ("&ngt;", 8815, 0),
+ ("&ngtr;", 8815, 0),
+ ("&nGtv;", 8811, 824),
+ ("&nharr;", 8622, 0),
+ ("&nhArr;", 8654, 0),
+ ("&nhpar;", 10994, 0),
+ ("&ni;", 8715, 0),
+ ("&nis;", 8956, 0),
+ ("&nisd;", 8954, 0),
+ ("&niv;", 8715, 0),
+ ("&NJcy;", 1034, 0),
+ ("&njcy;", 1114, 0),
+ ("&nlarr;", 8602, 0),
+ ("&nlArr;", 8653, 0),
+ ("&nldr;", 8229, 0),
+ ("&nlE;", 8806, 824),
+ ("&nle;", 8816, 0),
+ ("&nleftarrow;", 8602, 0),
+ ("&nLeftarrow;", 8653, 0),
+ ("&nleftrightarrow;", 8622, 0),
+ ("&nLeftrightarrow;", 8654, 0),
+ ("&nleq;", 8816, 0),
+ ("&nleqq;", 8806, 824),
+ ("&nleqslant;", 10877, 824),
+ ("&nles;", 10877, 824),
+ ("&nless;", 8814, 0),
+ ("&nLl;", 8920, 824),
+ ("&nlsim;", 8820, 0),
+ ("&nLt;", 8810, 8402),
+ ("&nlt;", 8814, 0),
+ ("&nltri;", 8938, 0),
+ ("&nltrie;", 8940, 0),
+ ("&nLtv;", 8810, 824),
+ ("&nmid;", 8740, 0),
+ ("&NoBreak;", 8288, 0),
+ ("&NonBreakingSpace;", 160, 0),
+ ("&nopf;", 120159, 0),
+ ("&Nopf;", 8469, 0),
+ ("&Not;", 10988, 0),
+ ("&not;", 172, 0),
+ ("&not", 172, 0),
+ ("&NotCongruent;", 8802, 0),
+ ("&NotCupCap;", 8813, 0),
+ ("&NotDoubleVerticalBar;", 8742, 0),
+ ("&NotElement;", 8713, 0),
+ ("&NotEqual;", 8800, 0),
+ ("&NotEqualTilde;", 8770, 824),
+ ("&NotExists;", 8708, 0),
+ ("&NotGreater;", 8815, 0),
+ ("&NotGreaterEqual;", 8817, 0),
+ ("&NotGreaterFullEqual;", 8807, 824),
+ ("&NotGreaterGreater;", 8811, 824),
+ ("&NotGreaterLess;", 8825, 0),
+ ("&NotGreaterSlantEqual;", 10878, 824),
+ ("&NotGreaterTilde;", 8821, 0),
+ ("&NotHumpDownHump;", 8782, 824),
+ ("&NotHumpEqual;", 8783, 824),
+ ("&notin;", 8713, 0),
+ ("&notindot;", 8949, 824),
+ ("&notinE;", 8953, 824),
+ ("&notinva;", 8713, 0),
+ ("&notinvb;", 8951, 0),
+ ("&notinvc;", 8950, 0),
+ ("&NotLeftTriangleBar;", 10703, 824),
+ ("&NotLeftTriangle;", 8938, 0),
+ ("&NotLeftTriangleEqual;", 8940, 0),
+ ("&NotLess;", 8814, 0),
+ ("&NotLessEqual;", 8816, 0),
+ ("&NotLessGreater;", 8824, 0),
+ ("&NotLessLess;", 8810, 824),
+ ("&NotLessSlantEqual;", 10877, 824),
+ ("&NotLessTilde;", 8820, 0),
+ ("&NotNestedGreaterGreater;", 10914, 824),
+ ("&NotNestedLessLess;", 10913, 824),
+ ("&notni;", 8716, 0),
+ ("&notniva;", 8716, 0),
+ ("&notnivb;", 8958, 0),
+ ("&notnivc;", 8957, 0),
+ ("&NotPrecedes;", 8832, 0),
+ ("&NotPrecedesEqual;", 10927, 824),
+ ("&NotPrecedesSlantEqual;", 8928, 0),
+ ("&NotReverseElement;", 8716, 0),
+ ("&NotRightTriangleBar;", 10704, 824),
+ ("&NotRightTriangle;", 8939, 0),
+ ("&NotRightTriangleEqual;", 8941, 0),
+ ("&NotSquareSubset;", 8847, 824),
+ ("&NotSquareSubsetEqual;", 8930, 0),
+ ("&NotSquareSuperset;", 8848, 824),
+ ("&NotSquareSupersetEqual;", 8931, 0),
+ ("&NotSubset;", 8834, 8402),
+ ("&NotSubsetEqual;", 8840, 0),
+ ("&NotSucceeds;", 8833, 0),
+ ("&NotSucceedsEqual;", 10928, 824),
+ ("&NotSucceedsSlantEqual;", 8929, 0),
+ ("&NotSucceedsTilde;", 8831, 824),
+ ("&NotSuperset;", 8835, 8402),
+ ("&NotSupersetEqual;", 8841, 0),
+ ("&NotTilde;", 8769, 0),
+ ("&NotTildeEqual;", 8772, 0),
+ ("&NotTildeFullEqual;", 8775, 0),
+ ("&NotTildeTilde;", 8777, 0),
+ ("&NotVerticalBar;", 8740, 0),
+ ("&nparallel;", 8742, 0),
+ ("&npar;", 8742, 0),
+ ("&nparsl;", 11005, 8421),
+ ("&npart;", 8706, 824),
+ ("&npolint;", 10772, 0),
+ ("&npr;", 8832, 0),
+ ("&nprcue;", 8928, 0),
+ ("&nprec;", 8832, 0),
+ ("&npreceq;", 10927, 824),
+ ("&npre;", 10927, 824),
+ ("&nrarrc;", 10547, 824),
+ ("&nrarr;", 8603, 0),
+ ("&nrArr;", 8655, 0),
+ ("&nrarrw;", 8605, 824),
+ ("&nrightarrow;", 8603, 0),
+ ("&nRightarrow;", 8655, 0),
+ ("&nrtri;", 8939, 0),
+ ("&nrtrie;", 8941, 0),
+ ("&nsc;", 8833, 0),
+ ("&nsccue;", 8929, 0),
+ ("&nsce;", 10928, 824),
+ ("&Nscr;", 119977, 0),
+ ("&nscr;", 120003, 0),
+ ("&nshortmid;", 8740, 0),
+ ("&nshortparallel;", 8742, 0),
+ ("&nsim;", 8769, 0),
+ ("&nsime;", 8772, 0),
+ ("&nsimeq;", 8772, 0),
+ ("&nsmid;", 8740, 0),
+ ("&nspar;", 8742, 0),
+ ("&nsqsube;", 8930, 0),
+ ("&nsqsupe;", 8931, 0),
+ ("&nsub;", 8836, 0),
+ ("&nsubE;", 10949, 824),
+ ("&nsube;", 8840, 0),
+ ("&nsubset;", 8834, 8402),
+ ("&nsubseteq;", 8840, 0),
+ ("&nsubseteqq;", 10949, 824),
+ ("&nsucc;", 8833, 0),
+ ("&nsucceq;", 10928, 824),
+ ("&nsup;", 8837, 0),
+ ("&nsupE;", 10950, 824),
+ ("&nsupe;", 8841, 0),
+ ("&nsupset;", 8835, 8402),
+ ("&nsupseteq;", 8841, 0),
+ ("&nsupseteqq;", 10950, 824),
+ ("&ntgl;", 8825, 0),
+ ("&Ntilde;", 209, 0),
+ ("&Ntilde", 209, 0),
+ ("&ntilde;", 241, 0),
+ ("&ntilde", 241, 0),
+ ("&ntlg;", 8824, 0),
+ ("&ntriangleleft;", 8938, 0),
+ ("&ntrianglelefteq;", 8940, 0),
+ ("&ntriangleright;", 8939, 0),
+ ("&ntrianglerighteq;", 8941, 0),
+ ("&Nu;", 925, 0),
+ ("&nu;", 957, 0),
+ ("&num;", 35, 0),
+ ("&numero;", 8470, 0),
+ ("&numsp;", 8199, 0),
+ ("&nvap;", 8781, 8402),
+ ("&nvdash;", 8876, 0),
+ ("&nvDash;", 8877, 0),
+ ("&nVdash;", 8878, 0),
+ ("&nVDash;", 8879, 0),
+ ("&nvge;", 8805, 8402),
+ ("&nvgt;", 62, 8402),
+ ("&nvHarr;", 10500, 0),
+ ("&nvinfin;", 10718, 0),
+ ("&nvlArr;", 10498, 0),
+ ("&nvle;", 8804, 8402),
+ ("&nvlt;", 60, 8402),
+ ("&nvltrie;", 8884, 8402),
+ ("&nvrArr;", 10499, 0),
+ ("&nvrtrie;", 8885, 8402),
+ ("&nvsim;", 8764, 8402),
+ ("&nwarhk;", 10531, 0),
+ ("&nwarr;", 8598, 0),
+ ("&nwArr;", 8662, 0),
+ ("&nwarrow;", 8598, 0),
+ ("&nwnear;", 10535, 0),
+ ("&Oacute;", 211, 0),
+ ("&Oacute", 211, 0),
+ ("&oacute;", 243, 0),
+ ("&oacute", 243, 0),
+ ("&oast;", 8859, 0),
+ ("&Ocirc;", 212, 0),
+ ("&Ocirc", 212, 0),
+ ("&ocirc;", 244, 0),
+ ("&ocirc", 244, 0),
+ ("&ocir;", 8858, 0),
+ ("&Ocy;", 1054, 0),
+ ("&ocy;", 1086, 0),
+ ("&odash;", 8861, 0),
+ ("&Odblac;", 336, 0),
+ ("&odblac;", 337, 0),
+ ("&odiv;", 10808, 0),
+ ("&odot;", 8857, 0),
+ ("&odsold;", 10684, 0),
+ ("&OElig;", 338, 0),
+ ("&oelig;", 339, 0),
+ ("&ofcir;", 10687, 0),
+ ("&Ofr;", 120082, 0),
+ ("&ofr;", 120108, 0),
+ ("&ogon;", 731, 0),
+ ("&Ograve;", 210, 0),
+ ("&Ograve", 210, 0),
+ ("&ograve;", 242, 0),
+ ("&ograve", 242, 0),
+ ("&ogt;", 10689, 0),
+ ("&ohbar;", 10677, 0),
+ ("&ohm;", 937, 0),
+ ("&oint;", 8750, 0),
+ ("&olarr;", 8634, 0),
+ ("&olcir;", 10686, 0),
+ ("&olcross;", 10683, 0),
+ ("&oline;", 8254, 0),
+ ("&olt;", 10688, 0),
+ ("&Omacr;", 332, 0),
+ ("&omacr;", 333, 0),
+ ("&Omega;", 937, 0),
+ ("&omega;", 969, 0),
+ ("&Omicron;", 927, 0),
+ ("&omicron;", 959, 0),
+ ("&omid;", 10678, 0),
+ ("&ominus;", 8854, 0),
+ ("&Oopf;", 120134, 0),
+ ("&oopf;", 120160, 0),
+ ("&opar;", 10679, 0),
+ ("&OpenCurlyDoubleQuote;", 8220, 0),
+ ("&OpenCurlyQuote;", 8216, 0),
+ ("&operp;", 10681, 0),
+ ("&oplus;", 8853, 0),
+ ("&orarr;", 8635, 0),
+ ("&Or;", 10836, 0),
+ ("&or;", 8744, 0),
+ ("&ord;", 10845, 0),
+ ("&order;", 8500, 0),
+ ("&orderof;", 8500, 0),
+ ("&ordf;", 170, 0),
+ ("&ordf", 170, 0),
+ ("&ordm;", 186, 0),
+ ("&ordm", 186, 0),
+ ("&origof;", 8886, 0),
+ ("&oror;", 10838, 0),
+ ("&orslope;", 10839, 0),
+ ("&orv;", 10843, 0),
+ ("&oS;", 9416, 0),
+ ("&Oscr;", 119978, 0),
+ ("&oscr;", 8500, 0),
+ ("&Oslash;", 216, 0),
+ ("&Oslash", 216, 0),
+ ("&oslash;", 248, 0),
+ ("&oslash", 248, 0),
+ ("&osol;", 8856, 0),
+ ("&Otilde;", 213, 0),
+ ("&Otilde", 213, 0),
+ ("&otilde;", 245, 0),
+ ("&otilde", 245, 0),
+ ("&otimesas;", 10806, 0),
+ ("&Otimes;", 10807, 0),
+ ("&otimes;", 8855, 0),
+ ("&Ouml;", 214, 0),
+ ("&Ouml", 214, 0),
+ ("&ouml;", 246, 0),
+ ("&ouml", 246, 0),
+ ("&ovbar;", 9021, 0),
+ ("&OverBar;", 8254, 0),
+ ("&OverBrace;", 9182, 0),
+ ("&OverBracket;", 9140, 0),
+ ("&OverParenthesis;", 9180, 0),
+ ("&para;", 182, 0),
+ ("&para", 182, 0),
+ ("&parallel;", 8741, 0),
+ ("&par;", 8741, 0),
+ ("&parsim;", 10995, 0),
+ ("&parsl;", 11005, 0),
+ ("&part;", 8706, 0),
+ ("&PartialD;", 8706, 0),
+ ("&Pcy;", 1055, 0),
+ ("&pcy;", 1087, 0),
+ ("&percnt;", 37, 0),
+ ("&period;", 46, 0),
+ ("&permil;", 8240, 0),
+ ("&perp;", 8869, 0),
+ ("&pertenk;", 8241, 0),
+ ("&Pfr;", 120083, 0),
+ ("&pfr;", 120109, 0),
+ ("&Phi;", 934, 0),
+ ("&phi;", 966, 0),
+ ("&phiv;", 981, 0),
+ ("&phmmat;", 8499, 0),
+ ("&phone;", 9742, 0),
+ ("&Pi;", 928, 0),
+ ("&pi;", 960, 0),
+ ("&pitchfork;", 8916, 0),
+ ("&piv;", 982, 0),
+ ("&planck;", 8463, 0),
+ ("&planckh;", 8462, 0),
+ ("&plankv;", 8463, 0),
+ ("&plusacir;", 10787, 0),
+ ("&plusb;", 8862, 0),
+ ("&pluscir;", 10786, 0),
+ ("&plus;", 43, 0),
+ ("&plusdo;", 8724, 0),
+ ("&plusdu;", 10789, 0),
+ ("&pluse;", 10866, 0),
+ ("&PlusMinus;", 177, 0),
+ ("&plusmn;", 177, 0),
+ ("&plusmn", 177, 0),
+ ("&plussim;", 10790, 0),
+ ("&plustwo;", 10791, 0),
+ ("&pm;", 177, 0),
+ ("&Poincareplane;", 8460, 0),
+ ("&pointint;", 10773, 0),
+ ("&popf;", 120161, 0),
+ ("&Popf;", 8473, 0),
+ ("&pound;", 163, 0),
+ ("&pound", 163, 0),
+ ("&prap;", 10935, 0),
+ ("&Pr;", 10939, 0),
+ ("&pr;", 8826, 0),
+ ("&prcue;", 8828, 0),
+ ("&precapprox;", 10935, 0),
+ ("&prec;", 8826, 0),
+ ("&preccurlyeq;", 8828, 0),
+ ("&Precedes;", 8826, 0),
+ ("&PrecedesEqual;", 10927, 0),
+ ("&PrecedesSlantEqual;", 8828, 0),
+ ("&PrecedesTilde;", 8830, 0),
+ ("&preceq;", 10927, 0),
+ ("&precnapprox;", 10937, 0),
+ ("&precneqq;", 10933, 0),
+ ("&precnsim;", 8936, 0),
+ ("&pre;", 10927, 0),
+ ("&prE;", 10931, 0),
+ ("&precsim;", 8830, 0),
+ ("&prime;", 8242, 0),
+ ("&Prime;", 8243, 0),
+ ("&primes;", 8473, 0),
+ ("&prnap;", 10937, 0),
+ ("&prnE;", 10933, 0),
+ ("&prnsim;", 8936, 0),
+ ("&prod;", 8719, 0),
+ ("&Product;", 8719, 0),
+ ("&profalar;", 9006, 0),
+ ("&profline;", 8978, 0),
+ ("&profsurf;", 8979, 0),
+ ("&prop;", 8733, 0),
+ ("&Proportional;", 8733, 0),
+ ("&Proportion;", 8759, 0),
+ ("&propto;", 8733, 0),
+ ("&prsim;", 8830, 0),
+ ("&prurel;", 8880, 0),
+ ("&Pscr;", 119979, 0),
+ ("&pscr;", 120005, 0),
+ ("&Psi;", 936, 0),
+ ("&psi;", 968, 0),
+ ("&puncsp;", 8200, 0),
+ ("&Qfr;", 120084, 0),
+ ("&qfr;", 120110, 0),
+ ("&qint;", 10764, 0),
+ ("&qopf;", 120162, 0),
+ ("&Qopf;", 8474, 0),
+ ("&qprime;", 8279, 0),
+ ("&Qscr;", 119980, 0),
+ ("&qscr;", 120006, 0),
+ ("&quaternions;", 8461, 0),
+ ("&quatint;", 10774, 0),
+ ("&quest;", 63, 0),
+ ("&questeq;", 8799, 0),
+ ("&quot;", 34, 0),
+ ("&quot", 34, 0),
+ ("&QUOT;", 34, 0),
+ ("&QUOT", 34, 0),
+ ("&rAarr;", 8667, 0),
+ ("&race;", 8765, 817),
+ ("&Racute;", 340, 0),
+ ("&racute;", 341, 0),
+ ("&radic;", 8730, 0),
+ ("&raemptyv;", 10675, 0),
+ ("&rang;", 10217, 0),
+ ("&Rang;", 10219, 0),
+ ("&rangd;", 10642, 0),
+ ("&range;", 10661, 0),
+ ("&rangle;", 10217, 0),
+ ("&raquo;", 187, 0),
+ ("&raquo", 187, 0),
+ ("&rarrap;", 10613, 0),
+ ("&rarrb;", 8677, 0),
+ ("&rarrbfs;", 10528, 0),
+ ("&rarrc;", 10547, 0),
+ ("&rarr;", 8594, 0),
+ ("&Rarr;", 8608, 0),
+ ("&rArr;", 8658, 0),
+ ("&rarrfs;", 10526, 0),
+ ("&rarrhk;", 8618, 0),
+ ("&rarrlp;", 8620, 0),
+ ("&rarrpl;", 10565, 0),
+ ("&rarrsim;", 10612, 0),
+ ("&Rarrtl;", 10518, 0),
+ ("&rarrtl;", 8611, 0),
+ ("&rarrw;", 8605, 0),
+ ("&ratail;", 10522, 0),
+ ("&rAtail;", 10524, 0),
+ ("&ratio;", 8758, 0),
+ ("&rationals;", 8474, 0),
+ ("&rbarr;", 10509, 0),
+ ("&rBarr;", 10511, 0),
+ ("&RBarr;", 10512, 0),
+ ("&rbbrk;", 10099, 0),
+ ("&rbrace;", 125, 0),
+ ("&rbrack;", 93, 0),
+ ("&rbrke;", 10636, 0),
+ ("&rbrksld;", 10638, 0),
+ ("&rbrkslu;", 10640, 0),
+ ("&Rcaron;", 344, 0),
+ ("&rcaron;", 345, 0),
+ ("&Rcedil;", 342, 0),
+ ("&rcedil;", 343, 0),
+ ("&rceil;", 8969, 0),
+ ("&rcub;", 125, 0),
+ ("&Rcy;", 1056, 0),
+ ("&rcy;", 1088, 0),
+ ("&rdca;", 10551, 0),
+ ("&rdldhar;", 10601, 0),
+ ("&rdquo;", 8221, 0),
+ ("&rdquor;", 8221, 0),
+ ("&rdsh;", 8627, 0),
+ ("&real;", 8476, 0),
+ ("&realine;", 8475, 0),
+ ("&realpart;", 8476, 0),
+ ("&reals;", 8477, 0),
+ ("&Re;", 8476, 0),
+ ("&rect;", 9645, 0),
+ ("&reg;", 174, 0),
+ ("&reg", 174, 0),
+ ("&REG;", 174, 0),
+ ("&REG", 174, 0),
+ ("&ReverseElement;", 8715, 0),
+ ("&ReverseEquilibrium;", 8651, 0),
+ ("&ReverseUpEquilibrium;", 10607, 0),
+ ("&rfisht;", 10621, 0),
+ ("&rfloor;", 8971, 0),
+ ("&rfr;", 120111, 0),
+ ("&Rfr;", 8476, 0),
+ ("&rHar;", 10596, 0),
+ ("&rhard;", 8641, 0),
+ ("&rharu;", 8640, 0),
+ ("&rharul;", 10604, 0),
+ ("&Rho;", 929, 0),
+ ("&rho;", 961, 0),
+ ("&rhov;", 1009, 0),
+ ("&RightAngleBracket;", 10217, 0),
+ ("&RightArrowBar;", 8677, 0),
+ ("&rightarrow;", 8594, 0),
+ ("&RightArrow;", 8594, 0),
+ ("&Rightarrow;", 8658, 0),
+ ("&RightArrowLeftArrow;", 8644, 0),
+ ("&rightarrowtail;", 8611, 0),
+ ("&RightCeiling;", 8969, 0),
+ ("&RightDoubleBracket;", 10215, 0),
+ ("&RightDownTeeVector;", 10589, 0),
+ ("&RightDownVectorBar;", 10581, 0),
+ ("&RightDownVector;", 8642, 0),
+ ("&RightFloor;", 8971, 0),
+ ("&rightharpoondown;", 8641, 0),
+ ("&rightharpoonup;", 8640, 0),
+ ("&rightleftarrows;", 8644, 0),
+ ("&rightleftharpoons;", 8652, 0),
+ ("&rightrightarrows;", 8649, 0),
+ ("&rightsquigarrow;", 8605, 0),
+ ("&RightTeeArrow;", 8614, 0),
+ ("&RightTee;", 8866, 0),
+ ("&RightTeeVector;", 10587, 0),
+ ("&rightthreetimes;", 8908, 0),
+ ("&RightTriangleBar;", 10704, 0),
+ ("&RightTriangle;", 8883, 0),
+ ("&RightTriangleEqual;", 8885, 0),
+ ("&RightUpDownVector;", 10575, 0),
+ ("&RightUpTeeVector;", 10588, 0),
+ ("&RightUpVectorBar;", 10580, 0),
+ ("&RightUpVector;", 8638, 0),
+ ("&RightVectorBar;", 10579, 0),
+ ("&RightVector;", 8640, 0),
+ ("&ring;", 730, 0),
+ ("&risingdotseq;", 8787, 0),
+ ("&rlarr;", 8644, 0),
+ ("&rlhar;", 8652, 0),
+ ("&rlm;", 8207, 0),
+ ("&rmoustache;", 9137, 0),
+ ("&rmoust;", 9137, 0),
+ ("&rnmid;", 10990, 0),
+ ("&roang;", 10221, 0),
+ ("&roarr;", 8702, 0),
+ ("&robrk;", 10215, 0),
+ ("&ropar;", 10630, 0),
+ ("&ropf;", 120163, 0),
+ ("&Ropf;", 8477, 0),
+ ("&roplus;", 10798, 0),
+ ("&rotimes;", 10805, 0),
+ ("&RoundImplies;", 10608, 0),
+ ("&rpar;", 41, 0),
+ ("&rpargt;", 10644, 0),
+ ("&rppolint;", 10770, 0),
+ ("&rrarr;", 8649, 0),
+ ("&Rrightarrow;", 8667, 0),
+ ("&rsaquo;", 8250, 0),
+ ("&rscr;", 120007, 0),
+ ("&Rscr;", 8475, 0),
+ ("&rsh;", 8625, 0),
+ ("&Rsh;", 8625, 0),
+ ("&rsqb;", 93, 0),
+ ("&rsquo;", 8217, 0),
+ ("&rsquor;", 8217, 0),
+ ("&rthree;", 8908, 0),
+ ("&rtimes;", 8906, 0),
+ ("&rtri;", 9657, 0),
+ ("&rtrie;", 8885, 0),
+ ("&rtrif;", 9656, 0),
+ ("&rtriltri;", 10702, 0),
+ ("&RuleDelayed;", 10740, 0),
+ ("&ruluhar;", 10600, 0),
+ ("&rx;", 8478, 0),
+ ("&Sacute;", 346, 0),
+ ("&sacute;", 347, 0),
+ ("&sbquo;", 8218, 0),
+ ("&scap;", 10936, 0),
+ ("&Scaron;", 352, 0),
+ ("&scaron;", 353, 0),
+ ("&Sc;", 10940, 0),
+ ("&sc;", 8827, 0),
+ ("&sccue;", 8829, 0),
+ ("&sce;", 10928, 0),
+ ("&scE;", 10932, 0),
+ ("&Scedil;", 350, 0),
+ ("&scedil;", 351, 0),
+ ("&Scirc;", 348, 0),
+ ("&scirc;", 349, 0),
+ ("&scnap;", 10938, 0),
+ ("&scnE;", 10934, 0),
+ ("&scnsim;", 8937, 0),
+ ("&scpolint;", 10771, 0),
+ ("&scsim;", 8831, 0),
+ ("&Scy;", 1057, 0),
+ ("&scy;", 1089, 0),
+ ("&sdotb;", 8865, 0),
+ ("&sdot;", 8901, 0),
+ ("&sdote;", 10854, 0),
+ ("&searhk;", 10533, 0),
+ ("&searr;", 8600, 0),
+ ("&seArr;", 8664, 0),
+ ("&searrow;", 8600, 0),
+ ("&sect;", 167, 0),
+ ("&sect", 167, 0),
+ ("&semi;", 59, 0),
+ ("&seswar;", 10537, 0),
+ ("&setminus;", 8726, 0),
+ ("&setmn;", 8726, 0),
+ ("&sext;", 10038, 0),
+ ("&Sfr;", 120086, 0),
+ ("&sfr;", 120112, 0),
+ ("&sfrown;", 8994, 0),
+ ("&sharp;", 9839, 0),
+ ("&SHCHcy;", 1065, 0),
+ ("&shchcy;", 1097, 0),
+ ("&SHcy;", 1064, 0),
+ ("&shcy;", 1096, 0),
+ ("&ShortDownArrow;", 8595, 0),
+ ("&ShortLeftArrow;", 8592, 0),
+ ("&shortmid;", 8739, 0),
+ ("&shortparallel;", 8741, 0),
+ ("&ShortRightArrow;", 8594, 0),
+ ("&ShortUpArrow;", 8593, 0),
+ ("&shy;", 173, 0),
+ ("&shy", 173, 0),
+ ("&Sigma;", 931, 0),
+ ("&sigma;", 963, 0),
+ ("&sigmaf;", 962, 0),
+ ("&sigmav;", 962, 0),
+ ("&sim;", 8764, 0),
+ ("&simdot;", 10858, 0),
+ ("&sime;", 8771, 0),
+ ("&simeq;", 8771, 0),
+ ("&simg;", 10910, 0),
+ ("&simgE;", 10912, 0),
+ ("&siml;", 10909, 0),
+ ("&simlE;", 10911, 0),
+ ("&simne;", 8774, 0),
+ ("&simplus;", 10788, 0),
+ ("&simrarr;", 10610, 0),
+ ("&slarr;", 8592, 0),
+ ("&SmallCircle;", 8728, 0),
+ ("&smallsetminus;", 8726, 0),
+ ("&smashp;", 10803, 0),
+ ("&smeparsl;", 10724, 0),
+ ("&smid;", 8739, 0),
+ ("&smile;", 8995, 0),
+ ("&smt;", 10922, 0),
+ ("&smte;", 10924, 0),
+ ("&smtes;", 10924, 65024),
+ ("&SOFTcy;", 1068, 0),
+ ("&softcy;", 1100, 0),
+ ("&solbar;", 9023, 0),
+ ("&solb;", 10692, 0),
+ ("&sol;", 47, 0),
+ ("&Sopf;", 120138, 0),
+ ("&sopf;", 120164, 0),
+ ("&spades;", 9824, 0),
+ ("&spadesuit;", 9824, 0),
+ ("&spar;", 8741, 0),
+ ("&sqcap;", 8851, 0),
+ ("&sqcaps;", 8851, 65024),
+ ("&sqcup;", 8852, 0),
+ ("&sqcups;", 8852, 65024),
+ ("&Sqrt;", 8730, 0),
+ ("&sqsub;", 8847, 0),
+ ("&sqsube;", 8849, 0),
+ ("&sqsubset;", 8847, 0),
+ ("&sqsubseteq;", 8849, 0),
+ ("&sqsup;", 8848, 0),
+ ("&sqsupe;", 8850, 0),
+ ("&sqsupset;", 8848, 0),
+ ("&sqsupseteq;", 8850, 0),
+ ("&square;", 9633, 0),
+ ("&Square;", 9633, 0),
+ ("&SquareIntersection;", 8851, 0),
+ ("&SquareSubset;", 8847, 0),
+ ("&SquareSubsetEqual;", 8849, 0),
+ ("&SquareSuperset;", 8848, 0),
+ ("&SquareSupersetEqual;", 8850, 0),
+ ("&SquareUnion;", 8852, 0),
+ ("&squarf;", 9642, 0),
+ ("&squ;", 9633, 0),
+ ("&squf;", 9642, 0),
+ ("&srarr;", 8594, 0),
+ ("&Sscr;", 119982, 0),
+ ("&sscr;", 120008, 0),
+ ("&ssetmn;", 8726, 0),
+ ("&ssmile;", 8995, 0),
+ ("&sstarf;", 8902, 0),
+ ("&Star;", 8902, 0),
+ ("&star;", 9734, 0),
+ ("&starf;", 9733, 0),
+ ("&straightepsilon;", 1013, 0),
+ ("&straightphi;", 981, 0),
+ ("&strns;", 175, 0),
+ ("&sub;", 8834, 0),
+ ("&Sub;", 8912, 0),
+ ("&subdot;", 10941, 0),
+ ("&subE;", 10949, 0),
+ ("&sube;", 8838, 0),
+ ("&subedot;", 10947, 0),
+ ("&submult;", 10945, 0),
+ ("&subnE;", 10955, 0),
+ ("&subne;", 8842, 0),
+ ("&subplus;", 10943, 0),
+ ("&subrarr;", 10617, 0),
+ ("&subset;", 8834, 0),
+ ("&Subset;", 8912, 0),
+ ("&subseteq;", 8838, 0),
+ ("&subseteqq;", 10949, 0),
+ ("&SubsetEqual;", 8838, 0),
+ ("&subsetneq;", 8842, 0),
+ ("&subsetneqq;", 10955, 0),
+ ("&subsim;", 10951, 0),
+ ("&subsub;", 10965, 0),
+ ("&subsup;", 10963, 0),
+ ("&succapprox;", 10936, 0),
+ ("&succ;", 8827, 0),
+ ("&succcurlyeq;", 8829, 0),
+ ("&Succeeds;", 8827, 0),
+ ("&SucceedsEqual;", 10928, 0),
+ ("&SucceedsSlantEqual;", 8829, 0),
+ ("&SucceedsTilde;", 8831, 0),
+ ("&succeq;", 10928, 0),
+ ("&succnapprox;", 10938, 0),
+ ("&succneqq;", 10934, 0),
+ ("&succnsim;", 8937, 0),
+ ("&succsim;", 8831, 0),
+ ("&SuchThat;", 8715, 0),
+ ("&sum;", 8721, 0),
+ ("&Sum;", 8721, 0),
+ ("&sung;", 9834, 0),
+ ("&sup1;", 185, 0),
+ ("&sup1", 185, 0),
+ ("&sup2;", 178, 0),
+ ("&sup2", 178, 0),
+ ("&sup3;", 179, 0),
+ ("&sup3", 179, 0),
+ ("&sup;", 8835, 0),
+ ("&Sup;", 8913, 0),
+ ("&supdot;", 10942, 0),
+ ("&supdsub;", 10968, 0),
+ ("&supE;", 10950, 0),
+ ("&supe;", 8839, 0),
+ ("&supedot;", 10948, 0),
+ ("&Superset;", 8835, 0),
+ ("&SupersetEqual;", 8839, 0),
+ ("&suphsol;", 10185, 0),
+ ("&suphsub;", 10967, 0),
+ ("&suplarr;", 10619, 0),
+ ("&supmult;", 10946, 0),
+ ("&supnE;", 10956, 0),
+ ("&supne;", 8843, 0),
+ ("&supplus;", 10944, 0),
+ ("&supset;", 8835, 0),
+ ("&Supset;", 8913, 0),
+ ("&supseteq;", 8839, 0),
+ ("&supseteqq;", 10950, 0),
+ ("&supsetneq;", 8843, 0),
+ ("&supsetneqq;", 10956, 0),
+ ("&supsim;", 10952, 0),
+ ("&supsub;", 10964, 0),
+ ("&supsup;", 10966, 0),
+ ("&swarhk;", 10534, 0),
+ ("&swarr;", 8601, 0),
+ ("&swArr;", 8665, 0),
+ ("&swarrow;", 8601, 0),
+ ("&swnwar;", 10538, 0),
+ ("&szlig;", 223, 0),
+ ("&szlig", 223, 0),
+ ("&Tab;", 9, 0),
+ ("&target;", 8982, 0),
+ ("&Tau;", 932, 0),
+ ("&tau;", 964, 0),
+ ("&tbrk;", 9140, 0),
+ ("&Tcaron;", 356, 0),
+ ("&tcaron;", 357, 0),
+ ("&Tcedil;", 354, 0),
+ ("&tcedil;", 355, 0),
+ ("&Tcy;", 1058, 0),
+ ("&tcy;", 1090, 0),
+ ("&tdot;", 8411, 0),
+ ("&telrec;", 8981, 0),
+ ("&Tfr;", 120087, 0),
+ ("&tfr;", 120113, 0),
+ ("&there4;", 8756, 0),
+ ("&therefore;", 8756, 0),
+ ("&Therefore;", 8756, 0),
+ ("&Theta;", 920, 0),
+ ("&theta;", 952, 0),
+ ("&thetasym;", 977, 0),
+ ("&thetav;", 977, 0),
+ ("&thickapprox;", 8776, 0),
+ ("&thicksim;", 8764, 0),
+ ("&ThickSpace;", 8287, 8202),
+ ("&ThinSpace;", 8201, 0),
+ ("&thinsp;", 8201, 0),
+ ("&thkap;", 8776, 0),
+ ("&thksim;", 8764, 0),
+ ("&THORN;", 222, 0),
+ ("&THORN", 222, 0),
+ ("&thorn;", 254, 0),
+ ("&thorn", 254, 0),
+ ("&tilde;", 732, 0),
+ ("&Tilde;", 8764, 0),
+ ("&TildeEqual;", 8771, 0),
+ ("&TildeFullEqual;", 8773, 0),
+ ("&TildeTilde;", 8776, 0),
+ ("&timesbar;", 10801, 0),
+ ("&timesb;", 8864, 0),
+ ("&times;", 215, 0),
+ ("&times", 215, 0),
+ ("&timesd;", 10800, 0),
+ ("&tint;", 8749, 0),
+ ("&toea;", 10536, 0),
+ ("&topbot;", 9014, 0),
+ ("&topcir;", 10993, 0),
+ ("&top;", 8868, 0),
+ ("&Topf;", 120139, 0),
+ ("&topf;", 120165, 0),
+ ("&topfork;", 10970, 0),
+ ("&tosa;", 10537, 0),
+ ("&tprime;", 8244, 0),
+ ("&trade;", 8482, 0),
+ ("&TRADE;", 8482, 0),
+ ("&triangle;", 9653, 0),
+ ("&triangledown;", 9663, 0),
+ ("&triangleleft;", 9667, 0),
+ ("&trianglelefteq;", 8884, 0),
+ ("&triangleq;", 8796, 0),
+ ("&triangleright;", 9657, 0),
+ ("&trianglerighteq;", 8885, 0),
+ ("&tridot;", 9708, 0),
+ ("&trie;", 8796, 0),
+ ("&triminus;", 10810, 0),
+ ("&TripleDot;", 8411, 0),
+ ("&triplus;", 10809, 0),
+ ("&trisb;", 10701, 0),
+ ("&tritime;", 10811, 0),
+ ("&trpezium;", 9186, 0),
+ ("&Tscr;", 119983, 0),
+ ("&tscr;", 120009, 0),
+ ("&TScy;", 1062, 0),
+ ("&tscy;", 1094, 0),
+ ("&TSHcy;", 1035, 0),
+ ("&tshcy;", 1115, 0),
+ ("&Tstrok;", 358, 0),
+ ("&tstrok;", 359, 0),
+ ("&twixt;", 8812, 0),
+ ("&twoheadleftarrow;", 8606, 0),
+ ("&twoheadrightarrow;", 8608, 0),
+ ("&Uacute;", 218, 0),
+ ("&Uacute", 218, 0),
+ ("&uacute;", 250, 0),
+ ("&uacute", 250, 0),
+ ("&uarr;", 8593, 0),
+ ("&Uarr;", 8607, 0),
+ ("&uArr;", 8657, 0),
+ ("&Uarrocir;", 10569, 0),
+ ("&Ubrcy;", 1038, 0),
+ ("&ubrcy;", 1118, 0),
+ ("&Ubreve;", 364, 0),
+ ("&ubreve;", 365, 0),
+ ("&Ucirc;", 219, 0),
+ ("&Ucirc", 219, 0),
+ ("&ucirc;", 251, 0),
+ ("&ucirc", 251, 0),
+ ("&Ucy;", 1059, 0),
+ ("&ucy;", 1091, 0),
+ ("&udarr;", 8645, 0),
+ ("&Udblac;", 368, 0),
+ ("&udblac;", 369, 0),
+ ("&udhar;", 10606, 0),
+ ("&ufisht;", 10622, 0),
+ ("&Ufr;", 120088, 0),
+ ("&ufr;", 120114, 0),
+ ("&Ugrave;", 217, 0),
+ ("&Ugrave", 217, 0),
+ ("&ugrave;", 249, 0),
+ ("&ugrave", 249, 0),
+ ("&uHar;", 10595, 0),
+ ("&uharl;", 8639, 0),
+ ("&uharr;", 8638, 0),
+ ("&uhblk;", 9600, 0),
+ ("&ulcorn;", 8988, 0),
+ ("&ulcorner;", 8988, 0),
+ ("&ulcrop;", 8975, 0),
+ ("&ultri;", 9720, 0),
+ ("&Umacr;", 362, 0),
+ ("&umacr;", 363, 0),
+ ("&uml;", 168, 0),
+ ("&uml", 168, 0),
+ ("&UnderBar;", 95, 0),
+ ("&UnderBrace;", 9183, 0),
+ ("&UnderBracket;", 9141, 0),
+ ("&UnderParenthesis;", 9181, 0),
+ ("&Union;", 8899, 0),
+ ("&UnionPlus;", 8846, 0),
+ ("&Uogon;", 370, 0),
+ ("&uogon;", 371, 0),
+ ("&Uopf;", 120140, 0),
+ ("&uopf;", 120166, 0),
+ ("&UpArrowBar;", 10514, 0),
+ ("&uparrow;", 8593, 0),
+ ("&UpArrow;", 8593, 0),
+ ("&Uparrow;", 8657, 0),
+ ("&UpArrowDownArrow;", 8645, 0),
+ ("&updownarrow;", 8597, 0),
+ ("&UpDownArrow;", 8597, 0),
+ ("&Updownarrow;", 8661, 0),
+ ("&UpEquilibrium;", 10606, 0),
+ ("&upharpoonleft;", 8639, 0),
+ ("&upharpoonright;", 8638, 0),
+ ("&uplus;", 8846, 0),
+ ("&UpperLeftArrow;", 8598, 0),
+ ("&UpperRightArrow;", 8599, 0),
+ ("&upsi;", 965, 0),
+ ("&Upsi;", 978, 0),
+ ("&upsih;", 978, 0),
+ ("&Upsilon;", 933, 0),
+ ("&upsilon;", 965, 0),
+ ("&UpTeeArrow;", 8613, 0),
+ ("&UpTee;", 8869, 0),
+ ("&upuparrows;", 8648, 0),
+ ("&urcorn;", 8989, 0),
+ ("&urcorner;", 8989, 0),
+ ("&urcrop;", 8974, 0),
+ ("&Uring;", 366, 0),
+ ("&uring;", 367, 0),
+ ("&urtri;", 9721, 0),
+ ("&Uscr;", 119984, 0),
+ ("&uscr;", 120010, 0),
+ ("&utdot;", 8944, 0),
+ ("&Utilde;", 360, 0),
+ ("&utilde;", 361, 0),
+ ("&utri;", 9653, 0),
+ ("&utrif;", 9652, 0),
+ ("&uuarr;", 8648, 0),
+ ("&Uuml;", 220, 0),
+ ("&Uuml", 220, 0),
+ ("&uuml;", 252, 0),
+ ("&uuml", 252, 0),
+ ("&uwangle;", 10663, 0),
+ ("&vangrt;", 10652, 0),
+ ("&varepsilon;", 1013, 0),
+ ("&varkappa;", 1008, 0),
+ ("&varnothing;", 8709, 0),
+ ("&varphi;", 981, 0),
+ ("&varpi;", 982, 0),
+ ("&varpropto;", 8733, 0),
+ ("&varr;", 8597, 0),
+ ("&vArr;", 8661, 0),
+ ("&varrho;", 1009, 0),
+ ("&varsigma;", 962, 0),
+ ("&varsubsetneq;", 8842, 65024),
+ ("&varsubsetneqq;", 10955, 65024),
+ ("&varsupsetneq;", 8843, 65024),
+ ("&varsupsetneqq;", 10956, 65024),
+ ("&vartheta;", 977, 0),
+ ("&vartriangleleft;", 8882, 0),
+ ("&vartriangleright;", 8883, 0),
+ ("&vBar;", 10984, 0),
+ ("&Vbar;", 10987, 0),
+ ("&vBarv;", 10985, 0),
+ ("&Vcy;", 1042, 0),
+ ("&vcy;", 1074, 0),
+ ("&vdash;", 8866, 0),
+ ("&vDash;", 8872, 0),
+ ("&Vdash;", 8873, 0),
+ ("&VDash;", 8875, 0),
+ ("&Vdashl;", 10982, 0),
+ ("&veebar;", 8891, 0),
+ ("&vee;", 8744, 0),
+ ("&Vee;", 8897, 0),
+ ("&veeeq;", 8794, 0),
+ ("&vellip;", 8942, 0),
+ ("&verbar;", 124, 0),
+ ("&Verbar;", 8214, 0),
+ ("&vert;", 124, 0),
+ ("&Vert;", 8214, 0),
+ ("&VerticalBar;", 8739, 0),
+ ("&VerticalLine;", 124, 0),
+ ("&VerticalSeparator;", 10072, 0),
+ ("&VerticalTilde;", 8768, 0),
+ ("&VeryThinSpace;", 8202, 0),
+ ("&Vfr;", 120089, 0),
+ ("&vfr;", 120115, 0),
+ ("&vltri;", 8882, 0),
+ ("&vnsub;", 8834, 8402),
+ ("&vnsup;", 8835, 8402),
+ ("&Vopf;", 120141, 0),
+ ("&vopf;", 120167, 0),
+ ("&vprop;", 8733, 0),
+ ("&vrtri;", 8883, 0),
+ ("&Vscr;", 119985, 0),
+ ("&vscr;", 120011, 0),
+ ("&vsubnE;", 10955, 65024),
+ ("&vsubne;", 8842, 65024),
+ ("&vsupnE;", 10956, 65024),
+ ("&vsupne;", 8843, 65024),
+ ("&Vvdash;", 8874, 0),
+ ("&vzigzag;", 10650, 0),
+ ("&Wcirc;", 372, 0),
+ ("&wcirc;", 373, 0),
+ ("&wedbar;", 10847, 0),
+ ("&wedge;", 8743, 0),
+ ("&Wedge;", 8896, 0),
+ ("&wedgeq;", 8793, 0),
+ ("&weierp;", 8472, 0),
+ ("&Wfr;", 120090, 0),
+ ("&wfr;", 120116, 0),
+ ("&Wopf;", 120142, 0),
+ ("&wopf;", 120168, 0),
+ ("&wp;", 8472, 0),
+ ("&wr;", 8768, 0),
+ ("&wreath;", 8768, 0),
+ ("&Wscr;", 119986, 0),
+ ("&wscr;", 120012, 0),
+ ("&xcap;", 8898, 0),
+ ("&xcirc;", 9711, 0),
+ ("&xcup;", 8899, 0),
+ ("&xdtri;", 9661, 0),
+ ("&Xfr;", 120091, 0),
+ ("&xfr;", 120117, 0),
+ ("&xharr;", 10231, 0),
+ ("&xhArr;", 10234, 0),
+ ("&Xi;", 926, 0),
+ ("&xi;", 958, 0),
+ ("&xlarr;", 10229, 0),
+ ("&xlArr;", 10232, 0),
+ ("&xmap;", 10236, 0),
+ ("&xnis;", 8955, 0),
+ ("&xodot;", 10752, 0),
+ ("&Xopf;", 120143, 0),
+ ("&xopf;", 120169, 0),
+ ("&xoplus;", 10753, 0),
+ ("&xotime;", 10754, 0),
+ ("&xrarr;", 10230, 0),
+ ("&xrArr;", 10233, 0),
+ ("&Xscr;", 119987, 0),
+ ("&xscr;", 120013, 0),
+ ("&xsqcup;", 10758, 0),
+ ("&xuplus;", 10756, 0),
+ ("&xutri;", 9651, 0),
+ ("&xvee;", 8897, 0),
+ ("&xwedge;", 8896, 0),
+ ("&Yacute;", 221, 0),
+ ("&Yacute", 221, 0),
+ ("&yacute;", 253, 0),
+ ("&yacute", 253, 0),
+ ("&YAcy;", 1071, 0),
+ ("&yacy;", 1103, 0),
+ ("&Ycirc;", 374, 0),
+ ("&ycirc;", 375, 0),
+ ("&Ycy;", 1067, 0),
+ ("&ycy;", 1099, 0),
+ ("&yen;", 165, 0),
+ ("&yen", 165, 0),
+ ("&Yfr;", 120092, 0),
+ ("&yfr;", 120118, 0),
+ ("&YIcy;", 1031, 0),
+ ("&yicy;", 1111, 0),
+ ("&Yopf;", 120144, 0),
+ ("&yopf;", 120170, 0),
+ ("&Yscr;", 119988, 0),
+ ("&yscr;", 120014, 0),
+ ("&YUcy;", 1070, 0),
+ ("&yucy;", 1102, 0),
+ ("&yuml;", 255, 0),
+ ("&yuml", 255, 0),
+ ("&Yuml;", 376, 0),
+ ("&Zacute;", 377, 0),
+ ("&zacute;", 378, 0),
+ ("&Zcaron;", 381, 0),
+ ("&zcaron;", 382, 0),
+ ("&Zcy;", 1047, 0),
+ ("&zcy;", 1079, 0),
+ ("&Zdot;", 379, 0),
+ ("&zdot;", 380, 0),
+ ("&zeetrf;", 8488, 0),
+ ("&ZeroWidthSpace;", 8203, 0),
+ ("&Zeta;", 918, 0),
+ ("&zeta;", 950, 0),
+ ("&zfr;", 120119, 0),
+ ("&Zfr;", 8488, 0),
+ ("&ZHcy;", 1046, 0),
+ ("&zhcy;", 1078, 0),
+ ("&zigrarr;", 8669, 0),
+ ("&zopf;", 120171, 0),
+ ("&Zopf;", 8484, 0),
+ ("&Zscr;", 119989, 0),
+ ("&zscr;", 120015, 0),
+ ("&zwj;", 8205, 0),
+ ("&zwnj;", 8204, 0),
+];
diff --git a/vendor/markup5ever/interface/mod.rs b/vendor/markup5ever/interface/mod.rs
new file mode 100644
index 000000000..f498fdfbf
--- /dev/null
+++ b/vendor/markup5ever/interface/mod.rs
@@ -0,0 +1,377 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+//! Types for tag and attribute names, and tree-builder functionality.
+
+use std::fmt;
+use tendril::StrTendril;
+
+pub use self::tree_builder::{create_element, AppendNode, AppendText, ElementFlags, NodeOrText};
+pub use self::tree_builder::{LimitedQuirks, NoQuirks, Quirks, QuirksMode};
+pub use self::tree_builder::{NextParserState, Tracer, TreeSink};
+use super::{LocalName, Namespace, Prefix};
+
+/// An [expanded name], containing the tag and the namespace.
+///
+/// [expanded name]: https://www.w3.org/TR/REC-xml-names/#dt-expname
+#[derive(Copy, Clone, Eq, Hash)]
+pub struct ExpandedName<'a> {
+ pub ns: &'a Namespace,
+ pub local: &'a LocalName,
+}
+
+impl<'a, 'b> PartialEq<ExpandedName<'a>> for ExpandedName<'b> {
+ fn eq(&self, other: &ExpandedName<'a>) -> bool {
+ self.ns == other.ns && self.local == other.local
+ }
+}
+
+impl<'a> fmt::Debug for ExpandedName<'a> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ if self.ns.is_empty() {
+ write!(f, "{}", self.local)
+ } else {
+ write!(f, "{{{}}}:{}", self.ns, self.local)
+ }
+ }
+}
+
+/// Helper to quickly create an expanded name.
+///
+/// Can be used with no namespace as `expanded_name!("", "some_name")`
+/// or with a namespace as `expanded_name!(ns "some_name")`. In the
+/// latter case, `ns` is one of the symbols which the [`ns!`][ns]
+/// macro accepts; note the lack of a comma between the `ns` and
+/// `"some_name"`.
+///
+/// [ns]: macro.ns.html
+///
+/// # Examples
+///
+/// ```
+/// # #[macro_use] extern crate markup5ever;
+///
+/// # fn main() {
+/// use markup5ever::ExpandedName;
+///
+/// assert_eq!(
+/// expanded_name!("", "div"),
+/// ExpandedName {
+/// ns: &ns!(),
+/// local: &local_name!("div")
+/// }
+/// );
+///
+/// assert_eq!(
+/// expanded_name!(html "div"),
+/// ExpandedName {
+/// ns: &ns!(html),
+/// local: &local_name!("div")
+/// }
+/// );
+/// # }
+#[macro_export]
+macro_rules! expanded_name {
+ ("", $local: tt) => {
+ $crate::interface::ExpandedName {
+ ns: &ns!(),
+ local: &local_name!($local),
+ }
+ };
+ ($ns: ident $local: tt) => {
+ $crate::interface::ExpandedName {
+ ns: &ns!($ns),
+ local: &local_name!($local),
+ }
+ };
+}
+
+pub mod tree_builder;
+
+/// A fully qualified name (with a namespace), used to depict names of tags and attributes.
+///
+/// Namespaces can be used to differentiate between similar XML fragments. For example:
+///
+/// ```text
+/// // HTML
+/// <table>
+/// <tr>
+/// <td>Apples</td>
+/// <td>Bananas</td>
+/// </tr>
+/// </table>
+///
+/// // Furniture XML
+/// <table>
+/// <name>African Coffee Table</name>
+/// <width>80</width>
+/// <length>120</length>
+/// </table>
+/// ```
+///
+/// Without XML namespaces, we can't use those two fragments in the same document
+/// at the same time. However if we declare a namespace we could instead say:
+///
+/// ```text
+///
+/// // Furniture XML
+/// <furn:table xmlns:furn="https://furniture.rs">
+/// <furn:name>African Coffee Table</furn:name>
+/// <furn:width>80</furn:width>
+/// <furn:length>120</furn:length>
+/// </furn:table>
+/// ```
+///
+/// and bind the prefix `furn` to a different namespace.
+///
+/// For this reason we parse names that contain a colon in the following way:
+///
+/// ```text
+/// <furn:table>
+/// | |
+/// | +- local name
+/// |
+/// prefix (when resolved gives namespace_url `https://furniture.rs`)
+/// ```
+///
+/// NOTE: `Prefix`, `LocalName` and `Prefix` are all derivative of
+/// `string_cache::atom::Atom` and `Atom` implements `Deref<str>`.
+///
+#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
+#[cfg_attr(feature = "heap_size", derive(HeapSizeOf))]
+pub struct QualName {
+ /// The prefix of qualified (e.g. `furn` in `<furn:table>` above).
+ /// Optional (since some namespaces can be empty or inferred), and
+ /// only useful for namespace resolution (since different prefix
+ /// can still resolve to same namespace)
+ ///
+ /// ```
+ ///
+ /// # fn main() {
+ /// use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// let qual = QualName::new(
+ /// Some(Prefix::from("furn")),
+ /// Namespace::from("https://furniture.rs"),
+ /// LocalName::from("table"),
+ /// );
+ ///
+ /// assert_eq!("furn", &qual.prefix.unwrap());
+ ///
+ /// # }
+ /// ```
+ pub prefix: Option<Prefix>,
+ /// The namespace after resolution (e.g. `https://furniture.rs` in example above).
+ ///
+ /// ```
+ /// # use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// # fn main() {
+ /// # let qual = QualName::new(
+ /// # Some(Prefix::from("furn")),
+ /// # Namespace::from("https://furniture.rs"),
+ /// # LocalName::from("table"),
+ /// # );
+ ///
+ /// assert_eq!("https://furniture.rs", &qual.ns);
+ /// # }
+ /// ```
+ ///
+ /// When matching namespaces used by HTML we can use `ns!` macro.
+ /// Although keep in mind that ns! macro only works with namespaces
+ /// that are present in HTML spec (like `html`, `xmlns`, `svg`, etc.).
+ ///
+ /// ```
+ /// #[macro_use] extern crate markup5ever;
+ ///
+ /// # use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// let html_table = QualName::new(
+ /// None,
+ /// ns!(html),
+ /// LocalName::from("table"),
+ /// );
+ ///
+ /// assert!(
+ /// match html_table.ns {
+ /// ns!(html) => true,
+ /// _ => false,
+ /// }
+ /// );
+ ///
+ /// ```
+ pub ns: Namespace,
+ /// The local name (e.g. `table` in `<furn:table>` above).
+ ///
+ /// ```
+ /// # use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// # fn main() {
+ /// # let qual = QualName::new(
+ /// # Some(Prefix::from("furn")),
+ /// # Namespace::from("https://furniture.rs"),
+ /// # LocalName::from("table"),
+ /// # );
+ ///
+ /// assert_eq!("table", &qual.local);
+ /// # }
+ /// ```
+ /// When matching local name we can also use the `local_name!` macro:
+ ///
+ /// ```
+ /// #[macro_use] extern crate markup5ever;
+ ///
+ /// # use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// # let qual = QualName::new(
+ /// # Some(Prefix::from("furn")),
+ /// # Namespace::from("https://furniture.rs"),
+ /// # LocalName::from("table"),
+ /// # );
+ ///
+ /// // Initialize qual to furniture example
+ ///
+ /// assert!(
+ /// match qual.local {
+ /// local_name!("table") => true,
+ /// _ => false,
+ /// }
+ /// );
+ ///
+ /// ```
+ pub local: LocalName,
+}
+
+impl QualName {
+ /// Basic constructor function.
+ ///
+ /// First let's try it for the following example where `QualName`
+ /// is defined as:
+ /// ```text
+ /// <furn:table> <!-- namespace url is https://furniture.rs -->
+ /// ```
+ ///
+ /// Given this definition, we can define `QualName` using strings.
+ ///
+ /// ```
+ /// use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// # fn main() {
+ /// let qual_name = QualName::new(
+ /// Some(Prefix::from("furn")),
+ /// Namespace::from("https://furniture.rs"),
+ /// LocalName::from("table"),
+ /// );
+ /// # }
+ /// ```
+ ///
+ /// If we were instead to construct this element instead:
+ ///
+ /// ```text
+ ///
+ /// <table>
+ /// ^^^^^---- no prefix and thus default html namespace
+ ///
+ /// ```
+ ///
+ /// Or could define it using macros, like so:
+ ///
+ /// ```
+ /// #[macro_use] extern crate markup5ever;
+ /// use markup5ever::{QualName, Namespace, LocalName, Prefix};
+ ///
+ /// # fn main() {
+ /// let qual_name = QualName::new(
+ /// None,
+ /// ns!(html),
+ /// local_name!("table")
+ /// );
+ /// # }
+ /// ```
+ ///
+ /// Let's analyse the above example.
+ /// Since we have no prefix its value is None. Second we have html namespace.
+ /// In html5ever html namespaces are supported out of the box,
+ /// we can write `ns!(html)` instead of typing `Namespace::from("http://www.w3.org/1999/xhtml")`.
+ /// Local name is also one of the HTML elements local names, so can
+ /// use `local_name!("table")` macro.
+ ///
+ #[inline]
+ pub fn new(prefix: Option<Prefix>, ns: Namespace, local: LocalName) -> QualName {
+ QualName {
+ prefix,
+ ns,
+ local,
+ }
+ }
+
+ /// Take a reference of `self` as an `ExpandedName`, dropping the unresolved prefix.
+ ///
+ /// In XML and HTML prefixes are only used to extract the relevant namespace URI.
+ /// Expanded name only contains resolved namespace and tag name, which are only
+ /// relevant parts of an XML or HTML tag and attribute name respectively.
+ ///
+ /// In lieu of our XML Namespace example
+ ///
+ /// ```text
+ /// <furn:table> <!-- namespace url is https://furniture.rs -->
+ /// ```
+ /// For it the expanded name would become roughly equivalent to:
+ ///
+ /// ```text
+ /// ExpandedName {
+ /// ns: "https://furniture.rs",
+ /// local: "table",
+ /// }
+ /// ```
+ ///
+ #[inline]
+ pub fn expanded(&self) -> ExpandedName {
+ ExpandedName {
+ ns: &self.ns,
+ local: &self.local,
+ }
+ }
+}
+
+/// A tag attribute, e.g. `class="test"` in `<div class="test" ...>`.
+///
+/// The namespace on the attribute name is almost always ns!("").
+/// The tokenizer creates all attributes this way, but the tree
+/// builder will adjust certain attribute names inside foreign
+/// content (MathML, SVG).
+#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)]
+pub struct Attribute {
+ /// The name of the attribute (e.g. the `class` in `<div class="test">`)
+ pub name: QualName,
+ /// The value of the attribute (e.g. the `"test"` in `<div class="test">`)
+ pub value: StrTendril,
+}
+
+#[cfg(test)]
+mod tests {
+ use super::Namespace;
+
+ #[test]
+ fn ns_macro() {
+ assert_eq!(ns!(), Namespace::from(""));
+
+ assert_eq!(ns!(html), Namespace::from("http://www.w3.org/1999/xhtml"));
+ assert_eq!(
+ ns!(xml),
+ Namespace::from("http://www.w3.org/XML/1998/namespace")
+ );
+ assert_eq!(ns!(xmlns), Namespace::from("http://www.w3.org/2000/xmlns/"));
+ assert_eq!(ns!(xlink), Namespace::from("http://www.w3.org/1999/xlink"));
+ assert_eq!(ns!(svg), Namespace::from("http://www.w3.org/2000/svg"));
+ assert_eq!(
+ ns!(mathml),
+ Namespace::from("http://www.w3.org/1998/Math/MathML")
+ );
+ }
+}
diff --git a/vendor/markup5ever/interface/tree_builder.rs b/vendor/markup5ever/interface/tree_builder.rs
new file mode 100644
index 000000000..43361f360
--- /dev/null
+++ b/vendor/markup5ever/interface/tree_builder.rs
@@ -0,0 +1,253 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! This module contains functionality for managing the DOM, including adding/removing nodes.
+//!
+//! It can be used by a parser to create the DOM graph structure in memory.
+
+use crate::interface::{Attribute, ExpandedName, QualName};
+use std::borrow::Cow;
+use tendril::StrTendril;
+
+pub use self::NodeOrText::{AppendNode, AppendText};
+pub use self::QuirksMode::{LimitedQuirks, NoQuirks, Quirks};
+
+/// Something which can be inserted into the DOM.
+///
+/// Adjacent sibling text nodes are merged into a single node, so
+/// the sink may not want to allocate a `Handle` for each.
+pub enum NodeOrText<Handle> {
+ AppendNode(Handle),
+ AppendText(StrTendril),
+}
+
+/// A document's quirks mode, for compatibility with old browsers. See [quirks mode on wikipedia]
+/// for more information.
+///
+/// [quirks mode on wikipedia]: https://en.wikipedia.org/wiki/Quirks_mode
+#[derive(PartialEq, Eq, Copy, Clone, Hash, Debug)]
+pub enum QuirksMode {
+ /// Full quirks mode
+ Quirks,
+ /// Almost standards mode
+ LimitedQuirks,
+ /// Standards mode
+ NoQuirks,
+}
+
+/// Whether to interrupt further parsing of the current input until
+/// the next explicit resumption of the tokenizer, or continue without
+/// any interruption.
+#[derive(PartialEq, Eq, Copy, Clone, Hash, Debug)]
+pub enum NextParserState {
+ /// Stop further parsing.
+ Suspend,
+ /// Continue without interruptions.
+ Continue,
+}
+
+/// Special properties of an element, useful for tagging elements with this information.
+#[derive(Default)]
+pub struct ElementFlags {
+ /// A document fragment should be created, associated with the element,
+ /// and returned in TreeSink::get_template_contents.
+ ///
+ /// See [template-contents in the whatwg spec][whatwg template-contents].
+ ///
+ /// [whatwg template-contents]: https://html.spec.whatwg.org/multipage/#template-contents
+ pub template: bool,
+
+ /// This boolean should be recorded with the element and returned
+ /// in TreeSink::is_mathml_annotation_xml_integration_point
+ ///
+ /// See [html-integration-point in the whatwg spec][whatwg integration-point].
+ ///
+ /// [whatwg integration-point]: https://html.spec.whatwg.org/multipage/#html-integration-point
+ pub mathml_annotation_xml_integration_point: bool,
+
+ // Prevent construction from outside module
+ _private: (),
+}
+
+/// A constructor for an element.
+///
+/// # Examples
+///
+/// Create an element like `<div class="test-class-name"></div>`:
+pub fn create_element<Sink>(sink: &mut Sink, name: QualName, attrs: Vec<Attribute>) -> Sink::Handle
+where
+ Sink: TreeSink,
+{
+ let mut flags = ElementFlags::default();
+ match name.expanded() {
+ expanded_name!(html "template") => flags.template = true,
+ expanded_name!(mathml "annotation-xml") => {
+ flags.mathml_annotation_xml_integration_point = attrs.iter().any(|attr| {
+ attr.name.expanded() == expanded_name!("", "encoding") &&
+ (attr.value.eq_ignore_ascii_case("text/html") ||
+ attr.value.eq_ignore_ascii_case("application/xhtml+xml"))
+ })
+ },
+ _ => {},
+ }
+ sink.create_element(name, attrs, flags)
+}
+
+/// Methods a parser can use to create the DOM. The DOM provider implements this trait.
+///
+/// Having this as a trait potentially allows multiple implementations of the DOM to be used with
+/// the same parser.
+pub trait TreeSink {
+ /// `Handle` is a reference to a DOM node. The tree builder requires
+ /// that a `Handle` implements `Clone` to get another reference to
+ /// the same node.
+ type Handle: Clone;
+
+ /// The overall result of parsing.
+ ///
+ /// This should default to Self, but default associated types are not stable yet.
+ /// [rust-lang/rust#29661](https://github.com/rust-lang/rust/issues/29661)
+ type Output;
+
+ /// Consume this sink and return the overall result of parsing.
+ ///
+ /// TODO:This should default to `fn finish(self) -> Self::Output { self }`,
+ /// but default associated types are not stable yet.
+ /// [rust-lang/rust#29661](https://github.com/rust-lang/rust/issues/29661)
+ fn finish(self) -> Self::Output;
+
+ /// Signal a parse error.
+ fn parse_error(&mut self, msg: Cow<'static, str>);
+
+ /// Get a handle to the `Document` node.
+ fn get_document(&mut self) -> Self::Handle;
+
+ /// What is the name of this element?
+ ///
+ /// Should never be called on a non-element node;
+ /// feel free to `panic!`.
+ fn elem_name<'a>(&'a self, target: &'a Self::Handle) -> ExpandedName<'a>;
+
+ /// Create an element.
+ ///
+ /// When creating a template element (`name.ns.expanded() == expanded_name!(html "template")`),
+ /// an associated document fragment called the "template contents" should
+ /// also be created. Later calls to self.get_template_contents() with that
+ /// given element return it.
+ /// See [the template element in the whatwg spec][whatwg template].
+ ///
+ /// [whatwg template]: https://html.spec.whatwg.org/multipage/#the-template-element
+ fn create_element(
+ &mut self,
+ name: QualName,
+ attrs: Vec<Attribute>,
+ flags: ElementFlags,
+ ) -> Self::Handle;
+
+ /// Create a comment node.
+ fn create_comment(&mut self, text: StrTendril) -> Self::Handle;
+
+ /// Create a Processing Instruction node.
+ fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Self::Handle;
+
+ /// Append a node as the last child of the given node. If this would
+ /// produce adjacent sibling text nodes, it should concatenate the text
+ /// instead.
+ ///
+ /// The child node will not already have a parent.
+ fn append(&mut self, parent: &Self::Handle, child: NodeOrText<Self::Handle>);
+
+ /// When the insertion point is decided by the existence of a parent node of the
+ /// element, we consider both possibilities and send the element which will be used
+ /// if a parent node exists, along with the element to be used if there isn't one.
+ fn append_based_on_parent_node(
+ &mut self,
+ element: &Self::Handle,
+ prev_element: &Self::Handle,
+ child: NodeOrText<Self::Handle>,
+ );
+
+ /// Append a `DOCTYPE` element to the `Document` node.
+ fn append_doctype_to_document(
+ &mut self,
+ name: StrTendril,
+ public_id: StrTendril,
+ system_id: StrTendril,
+ );
+
+ /// Mark a HTML `<script>` as "already started".
+ fn mark_script_already_started(&mut self, _node: &Self::Handle) {}
+
+ /// Indicate that a node was popped off the stack of open elements.
+ fn pop(&mut self, _node: &Self::Handle) {}
+
+ /// Get a handle to a template's template contents. The tree builder
+ /// promises this will never be called with something else than
+ /// a template element.
+ fn get_template_contents(&mut self, target: &Self::Handle) -> Self::Handle;
+
+ /// Do two handles refer to the same node?
+ fn same_node(&self, x: &Self::Handle, y: &Self::Handle) -> bool;
+
+ /// Set the document's quirks mode.
+ fn set_quirks_mode(&mut self, mode: QuirksMode);
+
+ /// Append a node as the sibling immediately before the given node.
+ ///
+ /// The tree builder promises that `sibling` is not a text node. However its
+ /// old previous sibling, which would become the new node's previous sibling,
+ /// could be a text node. If the new node is also a text node, the two should
+ /// be merged, as in the behavior of `append`.
+ ///
+ /// NB: `new_node` may have an old parent, from which it should be removed.
+ fn append_before_sibling(&mut self, sibling: &Self::Handle, new_node: NodeOrText<Self::Handle>);
+
+ /// Add each attribute to the given element, if no attribute with that name
+ /// already exists. The tree builder promises this will never be called
+ /// with something else than an element.
+ fn add_attrs_if_missing(&mut self, target: &Self::Handle, attrs: Vec<Attribute>);
+
+ /// Associate the given form-associatable element with the form element
+ fn associate_with_form(
+ &mut self,
+ _target: &Self::Handle,
+ _form: &Self::Handle,
+ _nodes: (&Self::Handle, Option<&Self::Handle>),
+ ) {
+ }
+
+ /// Detach the given node from its parent.
+ fn remove_from_parent(&mut self, target: &Self::Handle);
+
+ /// Remove all the children from node and append them to new_parent.
+ fn reparent_children(&mut self, node: &Self::Handle, new_parent: &Self::Handle);
+
+ /// Returns true if the adjusted current node is an HTML integration point
+ /// and the token is a start tag.
+ fn is_mathml_annotation_xml_integration_point(&self, _handle: &Self::Handle) -> bool {
+ false
+ }
+
+ /// Called whenever the line number changes.
+ fn set_current_line(&mut self, _line_number: u64) {}
+
+ /// Indicate that a `script` element is complete.
+ fn complete_script(&mut self, _node: &Self::Handle) -> NextParserState {
+ NextParserState::Continue
+ }
+}
+
+/// Trace hooks for a garbage-collected DOM.
+pub trait Tracer {
+ type Handle;
+
+ /// Upon a call to `trace_handles`, the tree builder will call this method
+ /// for each handle in its internal state.
+ fn trace_handle(&self, node: &Self::Handle);
+}
diff --git a/vendor/markup5ever/lib.rs b/vendor/markup5ever/lib.rs
new file mode 100644
index 000000000..a2c49753a
--- /dev/null
+++ b/vendor/markup5ever/lib.rs
@@ -0,0 +1,46 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub use tendril;
+
+/// Create a [`SmallCharSet`], with each space-separated number stored in the set.
+///
+/// # Examples
+///
+/// ```
+/// # #[macro_use] extern crate markup5ever;
+/// # fn main() {
+/// let set = small_char_set!(12 54 42);
+/// assert_eq!(set.bits,
+/// 0b00000000_01000000_00000100_00000000_00000000_00000000_00010000_00000000);
+/// # }
+/// ```
+///
+/// [`SmallCharSet`]: struct.SmallCharSet.html
+#[macro_export]
+macro_rules! small_char_set ( ($($e:expr)+) => (
+ $ crate ::SmallCharSet {
+ bits: $( (1 << ($e as usize)) )|+
+ }
+));
+
+include!(concat!(env!("OUT_DIR"), "/generated.rs"));
+
+pub mod data;
+#[macro_use]
+pub mod interface;
+pub mod serialize;
+mod util {
+ pub mod buffer_queue;
+ pub mod smallcharset;
+}
+
+pub use interface::{Attribute, ExpandedName, QualName};
+pub use util::smallcharset::SmallCharSet;
+pub use util::*;
diff --git a/vendor/markup5ever/local_names.txt b/vendor/markup5ever/local_names.txt
new file mode 100644
index 000000000..fdd57f827
--- /dev/null
+++ b/vendor/markup5ever/local_names.txt
@@ -0,0 +1,1009 @@
+*
+a
+abbr
+abs
+accent
+accent-height
+accentunder
+accept
+accept-charset
+accesskey
+accumulate
+acronym
+action
+actiontype
+active
+actuate
+additive
+address
+align
+alignment-baseline
+alignmentscope
+alink
+allowfullscreen
+alphabetic
+alt
+altGlyph
+altGlyphDef
+altGlyphItem
+altimg
+alttext
+amplitude
+and
+animate
+animateColor
+animateMotion
+animateTransform
+animation
+annotation
+annotation-xml
+applet
+apply
+approx
+arabic-form
+arccos
+arccosh
+arccot
+arccoth
+arccsc
+arccsch
+archive
+arcrole
+arcsec
+arcsech
+arcsin
+arcsinh
+arctan
+arctanh
+area
+arg
+aria-activedescendant
+aria-atomic
+aria-autocomplete
+aria-busy
+aria-channel
+aria-checked
+aria-controls
+aria-datatype
+aria-describedby
+aria-disabled
+aria-dropeffect
+aria-expanded
+aria-flowto
+aria-grab
+aria-haspopup
+aria-hidden
+aria-invalid
+aria-labelledby
+aria-level
+aria-live
+aria-multiline
+aria-multiselectable
+aria-owns
+aria-posinset
+aria-pressed
+aria-readonly
+aria-relevant
+aria-required
+aria-secret
+aria-selected
+aria-setsize
+aria-sort
+aria-templateid
+aria-valuemax
+aria-valuemin
+aria-valuenow
+article
+ascent
+aside
+async
+attributeName
+attributeType
+audio
+autocomplete
+autofocus
+autoplay
+autosubmit
+axis
+azimuth
+b
+background
+base
+baseFrequency
+baseProfile
+basefont
+baseline
+baseline-shift
+bbox
+bdi
+bdo
+begin
+bevelled
+bgcolor
+bgsound
+bias
+big
+blink
+blockquote
+body
+border
+br
+button
+bvar
+by
+calcMode
+canvas
+cap-height
+caption
+card
+cartesianproduct
+ceiling
+cellpadding
+cellspacing
+center
+char
+charoff
+charset
+checked
+ci
+circle
+cite
+class
+classid
+clear
+clip
+clip-path
+clip-rule
+clipPath
+clipPathUnits
+close
+closure
+cn
+code
+codebase
+codetype
+codomain
+col
+colgroup
+color
+color-interpolation
+color-interpolation-filters
+color-profile
+color-rendering
+cols
+colspan
+columnalign
+columnlines
+columnspacing
+columnspan
+columnwidth
+compact
+complexes
+compose
+condition
+conjugate
+content
+contentScriptType
+contentStyleType
+contenteditable
+contextmenu
+controllerchange
+controls
+coords
+cos
+cosh
+cot
+coth
+crossorigin
+csc
+csch
+csymbol
+curl
+cursor
+cx
+cy
+d
+data
+datafld
+dataformatas
+datalist
+datasrc
+datatemplate
+datetime
+dd
+declare
+decoding
+default
+defer
+definition-src
+definitionURL
+defs
+degree
+del
+depth
+desc
+descent
+details
+determinant
+dfn
+dialog
+diff
+diffuseConstant
+dir
+direction
+dirname
+disabled
+discard
+display
+displaystyle
+div
+divergence
+divide
+divisor
+dl
+domain
+domainofapplication
+dominant-baseline
+download
+draggable
+dt
+dur
+dx
+dy
+edge
+edgeMode
+elevation
+ellipse
+em
+embed
+emptyset
+enable-background
+encoding
+enctype
+end
+eq
+equalcolumns
+equalrows
+equivalent
+eulergamma
+event
+exists
+exp
+exponent
+exponentiale
+externalResourcesRequired
+face
+factorial
+factorof
+false
+feBlend
+feColorMatrix
+feComponentTransfer
+feComposite
+feConvolveMatrix
+feDiffuseLighting
+feDisplacementMap
+feDistantLight
+feDropShadow
+feFlood
+feFuncA
+feFuncB
+feFuncG
+feFuncR
+feGaussianBlur
+feImage
+feMerge
+feMergeNode
+feMorphology
+feOffset
+fePointLight
+feSpecularLighting
+feSpotLight
+feTile
+feTurbulence
+fence
+fetch
+fieldset
+figcaption
+figure
+fill
+fill-opacity
+fill-rule
+filter
+filterRes
+filterUnits
+flood-color
+flood-opacity
+floor
+fn
+font
+font-face
+font-face-format
+font-face-name
+font-face-src
+font-face-uri
+font-family
+font-size
+font-size-adjust
+font-stretch
+font-style
+font-variant
+font-weight
+fontfamily
+fontsize
+fontstyle
+fontweight
+footer
+for
+forall
+foreignObject
+form
+formaction
+format
+formenctype
+formmethod
+formnovalidate
+formtarget
+frame
+frameborder
+frameset
+framespacing
+from
+fx
+fy
+g
+g1
+g2
+gcd
+geq
+glyph
+glyph-name
+glyph-orientation-horizontal
+glyph-orientation-vertical
+glyphRef
+grad
+gradientTransform
+gradientUnits
+groupalign
+gt
+h1
+h2
+h3
+h4
+h5
+h6
+handler
+hanging
+head
+header
+headers
+height
+hgroup
+hidden
+hidefocus
+high
+hkern
+horiz-adv-x
+horiz-origin-x
+horiz-origin-y
+hr
+href
+hreflang
+hspace
+html
+http-equiv
+i
+icon
+id
+ident
+ideographic
+iframe
+image
+image-rendering
+imaginary
+imaginaryi
+img
+implies
+in
+in2
+index
+infinity
+input
+inputmode
+ins
+int
+integers
+integrity
+intercept
+intersect
+interval
+inverse
+irrelevant
+isindex
+ismap
+itemid
+itemprop
+itemref
+itemscope
+itemtype
+k
+k1
+k2
+k3
+k4
+kbd
+kernelMatrix
+kernelUnitLength
+kerning
+keyPoints
+keySplines
+keyTimes
+keygen
+kind
+label
+lambda
+lang
+language
+laplacian
+largeop
+lcm
+legend
+lengthAdjust
+leq
+letter-spacing
+li
+lighting-color
+limit
+limitingConeAngle
+line
+line-height
+linearGradient
+linebreak
+linethickness
+link
+list
+listener
+listing
+ln
+local
+log
+logbase
+longdesc
+loop
+low
+lowlimit
+lowsrc
+lquote
+lspace
+lt
+macros
+maction
+main
+maligngroup
+malignmark
+manifest
+map
+marginheight
+marginwidth
+mark
+marker
+marker-end
+marker-mid
+marker-start
+markerHeight
+markerUnits
+markerWidth
+marquee
+mask
+maskContentUnits
+maskUnits
+math
+mathbackground
+mathcolor
+mathematical
+mathsize
+mathvariant
+matrix
+matrixrow
+max
+maxlength
+maxsize
+mean
+media
+median
+mediummathspace
+menclose
+menu
+menuitem
+merror
+meta
+metadata
+meter
+method
+mfenced
+mfrac
+mglyph
+mi
+min
+minlength
+minsize
+minus
+missing-glyph
+mlabeledtr
+mmultiscripts
+mn
+mo
+mode
+moment
+momentabout
+movablelimits
+mover
+mozbrowser
+mpadded
+mpath
+mphantom
+mprescripts
+mroot
+mrow
+ms
+mspace
+msqrt
+mstyle
+msub
+msubsup
+msup
+mtable
+mtd
+mtext
+mtr
+multicol
+multiple
+munder
+munderover
+muted
+name
+nargs
+naturalnumbers
+nav
+neq
+nest
+nextid
+nobr
+noembed
+noframes
+nohref
+nomodule
+nonce
+none
+noresize
+noscript
+noshade
+not
+notanumber
+notation
+notin
+notprsubset
+notsubset
+novalidate
+nowrap
+numOctaves
+object
+occurrence
+offset
+ol
+onabort
+onactivate
+onafterprint
+onafterupdate
+onbefordeactivate
+onbeforeactivate
+onbeforecopy
+onbeforecut
+onbeforeeditfocus
+onbeforepaste
+onbeforeprint
+onbeforeunload
+onbeforeupdate
+onbegin
+onblur
+onbounce
+oncellchange
+onchange
+onclick
+oncontextmenu
+oncontrolselect
+oncopy
+oncut
+ondataavailable
+ondatasetchanged
+ondatasetcomplete
+ondblclick
+ondeactivate
+ondrag
+ondragdrop
+ondragend
+ondragenter
+ondragleave
+ondragover
+ondragstart
+ondrop
+onend
+onerror
+onerrorupdate
+onfilterchange
+onfinish
+onfocus
+onfocusin
+onfocusout
+onformchange
+onforminput
+onhashchange
+onhelp
+oninput
+oninvalid
+onkeydown
+onkeypress
+onkeyup
+onlanguagechange
+onload
+onlosecapture
+onmessage
+onmousedown
+onmouseenter
+onmouseleave
+onmousemove
+onmouseout
+onmouseover
+onmouseup
+onmousewheel
+onmove
+onmoveend
+onmovestart
+onoffline
+ononline
+onpagehide
+onpageshow
+onpaste
+onpopstate
+onpropertychange
+onreadystatechange
+onrepeat
+onreset
+onresize
+onrowenter
+onrowexit
+onrowsdelete
+onrowsinserted
+onscroll
+onselect
+onselectstart
+onstart
+onstop
+onstorage
+onsubmit
+onunload
+onzoom
+opacity
+open
+operator
+optgroup
+optimum
+option
+or
+order
+orient
+orientation
+origin
+other
+otherwise
+outerproduct
+output
+overflow
+overline-position
+overline-thickness
+p
+panose-1
+param
+parse
+partialdiff
+path
+pathLength
+pattern
+patternContentUnits
+patternTransform
+patternUnits
+pi
+picture
+piece
+piecewise
+ping
+placeholder
+plaintext
+plus
+pointer-events
+points
+pointsAtX
+pointsAtY
+pointsAtZ
+polygon
+polyline
+poster
+power
+pre
+prefetch
+preload
+preserveAlpha
+preserveAspectRatio
+primes
+primitiveUnits
+product
+profile
+progress
+prompt
+property
+prsubset
+q
+quotient
+r
+radialGradient
+radiogroup
+radius
+rationals
+rb
+readonly
+real
+reals
+rect
+referrerpolicy
+refX
+refY
+rel
+reln
+rem
+rendering-intent
+repeat
+repeat-max
+repeat-min
+repeat-start
+repeat-template
+repeatCount
+repeatDur
+replace
+required
+requiredExtensions
+requiredFeatures
+restart
+result
+rev
+reversed
+role
+root
+rotate
+rowalign
+rowlines
+rows
+rowspacing
+rowspan
+rp
+rquote
+rspace
+rt
+rtc
+ruby
+rule
+rules
+rx
+ry
+s
+samp
+sandbox
+scalarproduct
+scale
+scheme
+scope
+scoped
+script
+scriptlevel
+scriptminsize
+scriptsizemultiplier
+scrolldelay
+scrolling
+sdev
+seamless
+sec
+sech
+section
+seed
+select
+selected
+selection
+selector
+semantics
+sep
+separator
+separators
+set
+setdiff
+shape
+shape-rendering
+show
+sin
+sinh
+size
+sizes
+slope
+slot
+small
+solidcolor
+source
+space
+spacer
+spacing
+span
+specification
+specularConstant
+specularExponent
+speed
+spellcheck
+spreadMethod
+src
+srcdoc
+srclang
+srcset
+standby
+start
+startOffset
+statechange
+stdDeviation
+stemh
+stemv
+step
+stitchTiles
+stop
+stop-color
+stop-opacity
+stretchy
+strike
+strikethrough-position
+strikethrough-thickness
+string
+stroke
+stroke-dasharray
+stroke-dashoffset
+stroke-linecap
+stroke-linejoin
+stroke-miterlimit
+stroke-opacity
+stroke-width
+strong
+style
+sub
+subscriptshift
+subset
+sum
+summary
+sup
+superscriptshift
+surfaceScale
+svg
+switch
+symbol
+symmetric
+systemLanguage
+tabindex
+table
+tableValues
+tan
+tanh
+target
+targetX
+targetY
+tbody
+tbreak
+td
+template
+tendsto
+text
+text-anchor
+text-decoration
+text-rendering
+textLength
+textPath
+textarea
+tfoot
+th
+thead
+thickmathspace
+thinmathspace
+time
+times
+title
+to
+toggle
+tr
+track
+transform
+translate
+transpose
+tref
+true
+tspan
+tt
+type
+u
+u1
+u2
+ul
+underline-position
+underline-thickness
+unicode
+unicode-bidi
+unicode-range
+union
+units-per-em
+unselectable
+uplimit
+use
+usemap
+v-alphabetic
+v-hanging
+v-ideographic
+v-mathematical
+valign
+value
+values
+valuetype
+var
+variance
+vector
+vectorproduct
+version
+vert-adv-y
+vert-origin-x
+vert-origin-y
+verythickmathspace
+verythinmathspace
+veryverythickmathspace
+veryverythinmathspace
+video
+view
+viewBox
+viewTarget
+visibility
+vkern
+vlink
+vspace
+wbr
+when
+width
+widths
+word-spacing
+wrap
+writing-mode
+x
+x-height
+x1
+x2
+xChannelSelector
+xlink
+xlink:actuate
+xlink:arcrole
+xlink:href
+xlink:role
+xlink:show
+xlink:title
+xlink:type
+xml:base
+xml:lang
+xml:space
+xmlns
+xmlns:xlink
+xmp
+xor
+xref
+y
+y1
+y2
+yChannelSelector
+z
+zoomAndPan
diff --git a/vendor/markup5ever/serialize.rs b/vendor/markup5ever/serialize.rs
new file mode 100644
index 000000000..e65e998f6
--- /dev/null
+++ b/vendor/markup5ever/serialize.rs
@@ -0,0 +1,75 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+//! Traits for serializing elements. The serializer expects the data to be xml-like (with a name,
+//! and optional children, attrs, text, comments, doctypes, and [processing instructions]). It uses
+//! the visitor pattern, where the serializer and the serializable objects are decoupled and
+//! implement their own traits.
+//!
+//! [processing instructions]: https://en.wikipedia.org/wiki/Processing_Instruction
+
+use crate::QualName;
+use std::io;
+
+//§ serializing-html-fragments
+/// Used as a parameter to `serialize`, telling it if we want to skip the parent.
+#[derive(Clone, PartialEq)]
+pub enum TraversalScope {
+ /// Include the parent node when serializing.
+ IncludeNode,
+ /// Only serialize the children of the node, treating any provided qualified name as the
+ /// parent while serializing.
+ ///
+ /// This is used in the implementation of [`html5ever::serialize::serialize`]
+ ///
+ /// [`html5ever::serialize::serialize`]: ../../html5ever/serialize/fn.serialize.html
+ ChildrenOnly(Option<QualName>),
+}
+
+/// Types that can be serialized (according to the xml-like scheme in `Serializer`) implement this
+/// trait.
+pub trait Serialize {
+ /// Take the serializer and call its methods to serialize this type. The type will dictate
+ /// which methods are called and with what parameters.
+ fn serialize<S>(&self, serializer: &mut S, traversal_scope: TraversalScope) -> io::Result<()>
+ where
+ S: Serializer;
+}
+
+/// Types that are capable of serializing implement this trait
+pub trait Serializer {
+ /// Serialize the start of an element, for example `<div class="test">`.
+ fn start_elem<'a, AttrIter>(&mut self, name: QualName, attrs: AttrIter) -> io::Result<()>
+ where
+ AttrIter: Iterator<Item = AttrRef<'a>>;
+
+ /// Serialize the end of an element, for example `</div>`.
+ fn end_elem(&mut self, name: QualName) -> io::Result<()>;
+
+ /// Serialize a plain text node.
+ fn write_text(&mut self, text: &str) -> io::Result<()>;
+
+ /// Serialize a comment node, for example `<!-- comment -->`.
+ fn write_comment(&mut self, text: &str) -> io::Result<()>;
+
+ /// Serialize a doctype node, for example `<!doctype html>`.
+ fn write_doctype(&mut self, name: &str) -> io::Result<()>;
+
+ /// Serialize a processing instruction node, for example
+ /// `<?xml-stylesheet type="text/xsl" href="style.xsl"?>`.
+ fn write_processing_instruction(&mut self, target: &str, data: &str) -> io::Result<()>;
+}
+
+/// A type alias for an attribute name and value (e.g. the `class="test"` in `<div class="test">`
+/// is represented as `(<QualName of type class>, "test")`.
+///
+/// This is used in [`Serializer::start_elem`] where the value being serialized must supply an
+/// iterator over the attributes for the current element
+///
+/// [`Serializer::start_elem`]: trait.Serializer.html#tymethod.start_elem
+pub type AttrRef<'a> = (&'a QualName, &'a str);
diff --git a/vendor/markup5ever/util/buffer_queue.rs b/vendor/markup5ever/util/buffer_queue.rs
new file mode 100644
index 000000000..d5724890c
--- /dev/null
+++ b/vendor/markup5ever/util/buffer_queue.rs
@@ -0,0 +1,303 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! The `BufferQueue` struct and helper types.
+//!
+//! This type is designed for the efficient parsing of string data, especially where many
+//! significant characters are from the ascii range 0-63. This includes, for example, important
+//! characters in xml/html parsing.
+//!
+//! Good and predictable performance is achieved by avoiding allocation where possible (a.k.a. zero
+//! copy).
+//!
+//! [`BufferQueue`]: struct.BufferQueue.html
+
+use std::collections::VecDeque;
+
+use tendril::StrTendril;
+
+pub use self::SetResult::{FromSet, NotFromSet};
+use crate::util::smallcharset::SmallCharSet;
+
+/// Result from [`pop_except_from`] containing either a character from a [`SmallCharSet`], or a
+/// string buffer of characters not from the set.
+///
+/// [`pop_except_from`]: struct.BufferQueue.html#method.pop_except_from
+/// [`SmallCharSet`]: ../struct.SmallCharSet.html
+#[derive(PartialEq, Eq, Debug)]
+pub enum SetResult {
+ /// A character from the `SmallCharSet`.
+ FromSet(char),
+ /// A string buffer containing no characters from the `SmallCharSet`.
+ NotFromSet(StrTendril),
+}
+
+/// A queue of owned string buffers, which supports incrementally consuming characters.
+///
+/// Internally it uses [`VecDeque`] and has the same complexity properties.
+///
+/// [`VecDeque`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html
+#[derive(Debug)]
+pub struct BufferQueue {
+ /// Buffers to process.
+ buffers: VecDeque<StrTendril>,
+}
+
+impl BufferQueue {
+ /// Create an empty BufferQueue.
+ #[inline]
+ pub fn new() -> BufferQueue {
+ BufferQueue {
+ buffers: VecDeque::with_capacity(16),
+ }
+ }
+
+ /// Returns whether the queue is empty.
+ #[inline]
+ pub fn is_empty(&self) -> bool {
+ self.buffers.is_empty()
+ }
+
+ /// Get the buffer at the beginning of the queue.
+ #[inline]
+ pub fn pop_front(&mut self) -> Option<StrTendril> {
+ self.buffers.pop_front()
+ }
+
+ /// Add a buffer to the beginning of the queue.
+ ///
+ /// If the buffer is empty, it will be skipped.
+ pub fn push_front(&mut self, buf: StrTendril) {
+ if buf.len32() == 0 {
+ return;
+ }
+ self.buffers.push_front(buf);
+ }
+
+ /// Add a buffer to the end of the queue.
+ ///
+ /// If the buffer is empty, it will be skipped.
+ pub fn push_back(&mut self, buf: StrTendril) {
+ if buf.len32() == 0 {
+ return;
+ }
+ self.buffers.push_back(buf);
+ }
+
+ /// Look at the next available character without removing it, if the queue is not empty.
+ pub fn peek(&self) -> Option<char> {
+ debug_assert!(
+ self.buffers
+ .iter()
+ .find(|el| el.len32() == 0)
+ .is_none(),
+ "invariant \"all buffers in the queue are non-empty\" failed"
+ );
+ self.buffers.front().map(|b| b.chars().next().unwrap())
+ }
+
+ /// Get the next character if one is available, removing it from the queue.
+ ///
+ /// This function manages the buffers, removing them as they become empty.
+ pub fn next(&mut self) -> Option<char> {
+ let (result, now_empty) = match self.buffers.front_mut() {
+ None => (None, false),
+ Some(buf) => {
+ let c = buf.pop_front_char().expect("empty buffer in queue");
+ (Some(c), buf.is_empty())
+ },
+ };
+
+ if now_empty {
+ self.buffers.pop_front();
+ }
+
+ result
+ }
+
+ /// Pops and returns either a single character from the given set, or
+ /// a buffer of characters none of which are in the set.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # #[macro_use] extern crate markup5ever;
+ /// # #[macro_use] extern crate tendril;
+ /// # fn main() {
+ /// use markup5ever::buffer_queue::{BufferQueue, SetResult};
+ ///
+ /// let mut queue = BufferQueue::new();
+ /// queue.push_back(format_tendril!(r#"<some_tag attr="text">SomeText</some_tag>"#));
+ /// let set = small_char_set!(b'<' b'>' b' ' b'=' b'"' b'/');
+ /// let tag = format_tendril!("some_tag");
+ /// let attr = format_tendril!("attr");
+ /// let attr_val = format_tendril!("text");
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('<')));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(tag)));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet(' ')));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(attr)));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('=')));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('"')));
+ /// assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(attr_val)));
+ /// // ...
+ /// # }
+ /// ```
+ pub fn pop_except_from(&mut self, set: SmallCharSet) -> Option<SetResult> {
+ let (result, now_empty) = match self.buffers.front_mut() {
+ None => (None, false),
+ Some(buf) => {
+ let n = set.nonmember_prefix_len(&buf);
+ if n > 0 {
+ let out;
+ unsafe {
+ out = buf.unsafe_subtendril(0, n);
+ buf.unsafe_pop_front(n);
+ }
+ (Some(NotFromSet(out)), buf.is_empty())
+ } else {
+ let c = buf.pop_front_char().expect("empty buffer in queue");
+ (Some(FromSet(c)), buf.is_empty())
+ }
+ },
+ };
+
+ // Unborrow self for this part.
+ if now_empty {
+ self.buffers.pop_front();
+ }
+
+ result
+ }
+
+ /// Consume bytes matching the pattern, using a custom comparison function `eq`.
+ ///
+ /// Returns `Some(true)` if there is a match, `Some(false)` if there is no match, or `None` if
+ /// it wasn't possible to know (more data is needed).
+ ///
+ /// The custom comparison function is used elsewhere to compare ascii-case-insensitively.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # extern crate markup5ever;
+ /// # #[macro_use] extern crate tendril;
+ /// # fn main() {
+ /// use markup5ever::buffer_queue::{BufferQueue};
+ ///
+ /// let mut queue = BufferQueue::new();
+ /// queue.push_back(format_tendril!("testtext"));
+ /// let test_str = "test";
+ /// assert_eq!(queue.eat("test", |&a, &b| a == b), Some(true));
+ /// assert_eq!(queue.eat("text", |&a, &b| a == b), Some(true));
+ /// assert!(queue.is_empty());
+ /// # }
+ /// ```
+ pub fn eat<F: Fn(&u8, &u8) -> bool>(&mut self, pat: &str, eq: F) -> Option<bool> {
+ let mut buffers_exhausted = 0;
+ let mut consumed_from_last = 0;
+
+ self.buffers.front()?;
+
+ for pattern_byte in pat.bytes() {
+ if buffers_exhausted >= self.buffers.len() {
+ return None;
+ }
+ let buf = &self.buffers[buffers_exhausted];
+
+ if !eq(&buf.as_bytes()[consumed_from_last], &pattern_byte) {
+ return Some(false);
+ }
+
+ consumed_from_last += 1;
+ if consumed_from_last >= buf.len() {
+ buffers_exhausted += 1;
+ consumed_from_last = 0;
+ }
+ }
+
+ // We have a match. Commit changes to the BufferQueue.
+ for _ in 0..buffers_exhausted {
+ self.buffers.pop_front();
+ }
+
+ match self.buffers.front_mut() {
+ None => assert_eq!(consumed_from_last, 0),
+ Some(ref mut buf) => buf.pop_front(consumed_from_last as u32),
+ }
+
+ Some(true)
+ }
+}
+
+#[cfg(test)]
+#[allow(non_snake_case)]
+mod test {
+ use tendril::SliceExt;
+
+ use super::BufferQueue;
+ use super::SetResult::{FromSet, NotFromSet};
+
+ #[test]
+ fn smoke_test() {
+ let mut bq = BufferQueue::new();
+ assert_eq!(bq.peek(), None);
+ assert_eq!(bq.next(), None);
+
+ bq.push_back("abc".to_tendril());
+ assert_eq!(bq.peek(), Some('a'));
+ assert_eq!(bq.next(), Some('a'));
+ assert_eq!(bq.peek(), Some('b'));
+ assert_eq!(bq.peek(), Some('b'));
+ assert_eq!(bq.next(), Some('b'));
+ assert_eq!(bq.peek(), Some('c'));
+ assert_eq!(bq.next(), Some('c'));
+ assert_eq!(bq.peek(), None);
+ assert_eq!(bq.next(), None);
+ }
+
+ #[test]
+ fn can_unconsume() {
+ let mut bq = BufferQueue::new();
+ bq.push_back("abc".to_tendril());
+ assert_eq!(bq.next(), Some('a'));
+
+ bq.push_front("xy".to_tendril());
+ assert_eq!(bq.next(), Some('x'));
+ assert_eq!(bq.next(), Some('y'));
+ assert_eq!(bq.next(), Some('b'));
+ assert_eq!(bq.next(), Some('c'));
+ assert_eq!(bq.next(), None);
+ }
+
+ #[test]
+ fn can_pop_except_set() {
+ let mut bq = BufferQueue::new();
+ bq.push_back("abc&def".to_tendril());
+ let mut pop = || bq.pop_except_from(small_char_set!('&'));
+ assert_eq!(pop(), Some(NotFromSet("abc".to_tendril())));
+ assert_eq!(pop(), Some(FromSet('&')));
+ assert_eq!(pop(), Some(NotFromSet("def".to_tendril())));
+ assert_eq!(pop(), None);
+ }
+
+ #[test]
+ fn can_eat() {
+ // This is not very comprehensive. We rely on the tokenizer
+ // integration tests for more thorough testing with many
+ // different input buffer splits.
+ let mut bq = BufferQueue::new();
+ bq.push_back("a".to_tendril());
+ bq.push_back("bc".to_tendril());
+ assert_eq!(bq.eat("abcd", u8::eq_ignore_ascii_case), None);
+ assert_eq!(bq.eat("ax", u8::eq_ignore_ascii_case), Some(false));
+ assert_eq!(bq.eat("ab", u8::eq_ignore_ascii_case), Some(true));
+ assert_eq!(bq.next(), Some('c'));
+ assert_eq!(bq.next(), None);
+ }
+}
diff --git a/vendor/markup5ever/util/smallcharset.rs b/vendor/markup5ever/util/smallcharset.rs
new file mode 100644
index 000000000..957dad730
--- /dev/null
+++ b/vendor/markup5ever/util/smallcharset.rs
@@ -0,0 +1,90 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! This module contains a single struct [`SmallCharSet`]. See its documentation for details.
+//!
+//! [`SmallCharSet`]: struct.SmallCharSet.html
+
+/// Represents a set of "small characters", those with Unicode scalar
+/// values less than 64.
+///
+/// This is stored as a bitmap, with 1 bit for each value.
+#[derive(Debug, Eq, PartialEq, Clone, Copy, Hash)]
+pub struct SmallCharSet {
+ pub bits: u64,
+}
+
+impl SmallCharSet {
+ /// Checks whether a character (u8 value below 64) is stored in the SmallCharSet.
+ ///
+ /// # Examples
+ ///
+ /// ```ignore
+ /// # use markup5ever::SmallCharSet;
+ /// let set = SmallCharSet {
+ /// bits: 0b00000000_01000000_00000100_00000000_00000000_00000000_00010000_00000000
+ /// };
+ /// assert!(set.contains(64));
+ /// assert!(set.contains(b'6')); // `b'6'` is the same as 64u8
+ /// ```
+ #[inline]
+ fn contains(&self, n: u8) -> bool {
+ 0 != (self.bits & (1 << (n as usize)))
+ }
+
+ /// Count the number of bytes of characters at the beginning of `buf` which are not in the set.
+ ///
+ /// This functionality is used in [`BufferQueue::pop_except_from`].
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # #[macro_use] extern crate markup5ever;
+ /// # fn main() {
+ /// let set = small_char_set!(48 49 50); // '0' '1' '2'
+ /// // `test` is 4 chars, 😁 is 4 chars, then we meet a character in the set
+ /// let test_str = "test😁01232afd";
+ /// assert_eq!(set.nonmember_prefix_len(test_str), 8);
+ /// # }
+ /// ```
+ ///
+ /// [`BufferQueue::pop_except_from`]: buffer_queue/struct.BufferQueue.html#method.pop_except_from
+ pub fn nonmember_prefix_len(&self, buf: &str) -> u32 {
+ let mut n = 0;
+ for b in buf.bytes() {
+ if b >= 64 || !self.contains(b) {
+ n += 1;
+ } else {
+ break;
+ }
+ }
+ n
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use std::iter::repeat;
+
+ #[test]
+ fn nonmember_prefix() {
+ for &c in ['&', '\0'].iter() {
+ for x in 0..48u32 {
+ for y in 0..48u32 {
+ let mut s = repeat("x").take(x as usize).collect::<String>();
+ s.push(c);
+ s.push_str(&repeat("x").take(y as usize).collect::<String>());
+ let set = small_char_set!('&' '\0');
+
+ assert_eq!(x, set.nonmember_prefix_len(&s));
+ }
+ }
+ }
+ }
+}