aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2013-10-22 12:54:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-10-22 12:54:31 +0000
commit02545911b6caa33f9ab6ba30c88f2b8197be2a31 (patch)
tree73378e7789f5643fd27bd4cc97183d6629c3113e
parent68c2ec9e0acdb3214b7fb91dbab8c9fab8736817 (diff)
parent70dce01b47b7ef16f67b6bd17ee66fca72b42ef1 (diff)
downloadtagsoup-02545911b6caa33f9ab6ba30c88f2b8197be2a31.tar.gz
Merge "Update tagsoup to 1.2.1"idea133-weekly-releaseidea133
-rw-r--r--CHANGES309
-rw-r--r--LICENSE (renamed from src/org/ccil/cowan/tagsoup/LICENSE)0
-rw-r--r--MODULE_LICENSE_APACHE2 (renamed from src/org/ccil/cowan/tagsoup/MODULE_LICENSE_APACHE2)0
-rw-r--r--README357
-rw-r--r--README.android11
-rw-r--r--TODO18
-rw-r--r--build.xml160
-rw-r--r--definitions/html.stml249
-rw-r--r--definitions/html.tssl2762
-rw-r--r--src/org/ccil/cowan/tagsoup/GOOGLE_README.txt8
-rw-r--r--src/org/ccil/cowan/tagsoup/HTMLScanner.java153
-rw-r--r--src/org/ccil/cowan/tagsoup/HTMLSchema.java824
-rw-r--r--src/org/ccil/cowan/tagsoup/Parser.java2
-rw-r--r--stml/stml.rnc49
-rw-r--r--stml/stml.xslt150
-rw-r--r--templates/org/ccil/cowan/tagsoup/HTMLModels.java31
-rw-r--r--templates/org/ccil/cowan/tagsoup/HTMLScanner.java486
-rw-r--r--templates/org/ccil/cowan/tagsoup/HTMLSchema.java38
-rw-r--r--tssl/tssl-models.xslt47
-rw-r--r--tssl/tssl-validate.xslt40
-rw-r--r--tssl/tssl.rnc75
-rw-r--r--tssl/tssl.xslt220
22 files changed, 5521 insertions, 468 deletions
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..73e5887
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,309 @@
+Changes from 1.2 to 1.2.1
+=========================
+Match DOCTYPE case-blind
+Extend PushbackReader's size for oddball cases like & followed by CR
+Leo Sutic's 2x-4x speedup by precompiling HTMLScanner table
+
+Changes from 1.1.3 to 1.2
+=========================
+Changed license to Apache 2.0
+Bogon default model is now ANY, not EMPTY
+Support new DOCTYPE output switches --doctype-system and --doctype-public
+Support new XML declaration output switches --standalone and --version
+New --norootbogons switch makes bogons children of the root
+Don't resolve entity references in attribute values unless semicolon-terminated
+Support character entities above U+FFFF
+Add character entities from the 2007-12-14 draft of xml-entity-names
+Call SAX events startPrefixMapping and endPrefixMapping to report prefixes
+Clean up newline processing, shrinking html.stml considerably
+Allow link elements in the body as well as the head, to avoid excess bodies
+Allow tables inside paragraphs
+Allow cells and forms in thead and tfoot elements without intervening tr element
+The span element is no longer restartable
+Support non-standard elements bgsound, blink, canvas, comment, listing,
+ marquee, nobr, ruby, rbc, rtc, rb, rt, rp, wbr, xmp
+In HTML mode, boolean attributes like checked are output in minimized form
+Correctly handle runs of less-than characters
+Suppress all but the first DOCTYPE declaration
+Modify PI targets containing colons to have underscores instead
+The case of element tags is now canonicalized to the schema
+PI targets are no longer forced to lower case
+
+Changes from 1.1.2 to 1.1.3
+===========================
+Allow Parser.set* methods to accept null
+Allow setting the LexicalHandler feature to be null
+ in both cases means "use default behavior"
+
+Changes from 1.1.1 to 1.1.2
+===========================
+Setting CDATAElementsFeature didn't really set CDATAElements instance variable
+
+Changes from 1.1 to 1.1.1
+=========================
+Removed lexical handler calls to startCDATA/endCDATA from CDATA element handling
+Added lexical handler calls to startCDATA/endCDATA from CDATA section handling
+Added CDATAElementsFeature, the programmatic equivalent of the --nocdata switch
+
+Changes from 1.0.5 to 1.1
+=========================
+Add Tatu Saloranta's JAXP support package
+
+Changes from 1.0.4 to 1.0.5
+===========================
+Major repairs to comment scanning
+Skip leading BOM
+Comment out debugging code in PYXWriter
+Allow &#X as well as &#x
+Add net.sf.saxon to list of supported XSLT engines
+
+Changes from 1.0.4 to 1.0.3
+===========================
+Certain options were mutually exclusive that should not have been
+Blocked XML declaration from specifying an encoding of ""
+--method=html was not doing the right thing
+
+Changes from 1.0.3 to 1.0.2
+===========================
+Fixed build file to use Java target version 1.4
+Fixed --version switch to print the right thing
+
+Changes from 1.0.1 to 1.0.2
+===========================
+Version attribute default value removed from html element
+Leading and trailing hyphens now trimmed properly from comments
+Added --output-encoding switch to control encoding
+If output encoding is Unicode, don't generate character references
+Whitespace compressed and junk stripped from public identifiers
+
+Changes from 1.0 to 1.0.1
+=========================
+Added ignorableWhitespaceFeature and --ignorable to report ignorable whitespace
+ Patch due to David Pashley
+Insert spaces to break up -- in comments
+Change bogus chars in publicids to spaces
+--lexical switch now outputs DOCTYPE if there is one
+Remove unnecessary blank line after XML declaration
+
+Changes from 1.0rc9 to 1.0
+==========================
+Added feature to control restartability
+ Patch due to Nikita Zhuk
+Added corresponding --norestart switch in CommandLine
+Made translate-colons feature actually work
+
+Changes from 1.0rc8 to 1.0rc9
+=============================
+If there is a publicid but no systemid, set systemid to ""
+
+Changes from 1.0rc7 to 1.0rc8
+=============================
+Fixed paper-bag bug (source didn't match binary in release)
+
+Changes from 1.0rc6 to 1.0rc7
+=============================
+LexicalHandler now gets DOCTYPE information (publicid and systemid)
+ Patch due to Mike Bremford
+HTMLScanner now reports more useful debug output when not commented out
+ Patch due to Mike Bremford
+Change "<memberOfAny>" to exclude "<root>" pseudo-element
+ This prevents "script" from being output as a root
+The shared HTMLParser object has been eliminated
+
+Changes from 1.0rc5 to 1.0rc6
+=============================
+If namespaceFeature is false, uri and localname are passed as empty strings
+The namespacePrefixesFeature is now always false
+Command line switch --nons no longer affects namespacePrefixesFeature
+Command line switch --html now implies --nons
+XMLWriter is now told directly to use the schema's URI as default namespace
+XMLWriter now takes the element name from the qname if localname is empty
+
+Changes from 1.0rc4 to 1.0rc5
+=============================
+The --nodefault switch now removes only default attributes, not all of them
+Added --nocolons switch and translate-colons feature to convert ":"
+ in names to "_" (thus suppressing namespaces other than the basic one)
+The root element can be unknown without problem
+Empty <script/> and <style/> tags now work
+Added all standard SAX2 features to feature hashtable
+Reimplemented namespacePrefixes feature (broken since 1.0rc3)
+
+Changes from 1.0rc3 to 1.0rc4
+=============================
+Remove trailing ? from processing instructions (in case the input is XHTML)
+Added Javadocs for all SAX standard and TagSoup-specific features and properties
+Fixed termination conditions for entity/character references
+Fixed EOF-pushback bug that was generating bogus &#x65535; references
+Added Parser feature and --nodefaults switch to ignore default attribute values
+Added support for SAX Locator
+Updated AFL license to version 3.0
+Scanner buffer size increases as needed, allowing large attribute values
+Look for various XSLT implementations as available (still fails in raw 5.0)
+Clean up handling of XML empty tags and SGML minimized end-tags
+Support proper options and help message internally
+Use Hashtable in CommandLine class instead of HashMap
+Do proper buffering of InputStream and Reader
+Clean up content model of noframes element
+Removed htmlMode in XMLWriter
+Added support for XSLT output options METHOD=html and OMIT_XML_DECLARATION=yes
+Command line option --html sets both of these
+Wrote simple validator for TSSL schemas (tssl/tssl-validator.xslt)
+Removed various validity problems in html.tssl
+When processing a start-tag, don't restart elements that aren't in the new
+ element's content model
+Remove bogus double param in tssl.xslt
+
+Changes from 1.0rc2 to 1.0rc3
+=============================
+Convert CR and CRLF to LF in comments and PIs
+Force empty elements to close immediately
+Match close tags of CDATA elements more precisely (but case-blind)
+Process switches on the command line
+Man page available
+
+Changes from 1.0rc1 to 1.0rc2
+=============================
+Isolated & and &# now don't crash parser
+TagSoup no longer depends on /dev/stdin existing
+Refactored Parser class, removing main method to new CommandLine class
+Changes to content models of form, button, table, and tr elements in html.tssl
+'</scr' + 'ipt>' in a script element no longer terminates it
+Introduced "uncloseability" of form and table elements
+"pyxin" property specifies that input is in PYX format
+Correctly cope with unexpected characters around colons, also with multiple colons
+Correctly output comments with "--" in them (by adding a space)
+
+Changes from 0.10.2 to 1.0rc1
+=============================
+Script can now appear anywhere
+Switch -nocdata correctly implemented
+Eliminated useless M_n constants in Schema
+Introduced <memberofAny> and <isRoot> as alternatives to
+ <memberOf> in TSSL
+Allow prefixes in element names
+Attributes are now normalized
+Expanded public API for Element and ElementType
+Javadoc improved
+
+Changes from 0.10.1 to 0.10.2
+=============================
+Removed misfeature whereby > terminated a tag even inside quotes
+Added licensing language to XSLT scripts, RELAX NG schemas
+Removed long-standing mishandling of entity references in attributes
+Cleaned up logic for converting junky strings to proper XML Names
+Correctly handle empty tag that has no whitespace or attributes
+Restore correct 0.9.3 handling of an apparent end-tag in a CDATA element
+Added script element to content model of head element
+
+Changes from 0.9.7 to 0.10.1 (there is no 0.10.0):
+==================================================
+Convert to XSLT configuration exclusively;
+ Perl code and tab-separated tables are gone
+Remove xmlns:* attributes
+Append "_" to attribute names ending in ":"
+Don't prepend "_" to an attribute name starting in "_"
+Handle namespace prefixes in attributes:
+ "xml" prefix is handled correctly
+ other prefixes are mapped to "urn:x-prefix:foo"
+Ignore XML declarations
+-Dnocdata=true turns off F_CDATA on script and style elements
+Fixed off-by-one errors in character references that made them uninterpreted
+Start-tags ending in a minimized attribute are no longer being dropped
+XML empty tags are now supported (though slashes are still allowed in
+ unquoted attribute values)
+
+Changes from 0.9.6 to 0.9.7:
+============================
+Upgraded AFL to version 2.1
+Passed through newlines in character content (very old bug)
+
+Changes from 0.9.5 to 0.9.6:
+============================
+Script element can appear directly in body
+">" terminates a start-tag even inside a quoted attribute,
+ to protect against unbalanced quotes
+"_" is prepended to attributes that don't begin with a letter
+Remove "xmlns" attributes from the input
+All standard features can now be set
+ (although there is no effect from doing so)
+New "bogons-empty" feature can be set to false to give bogons
+ content model of ANY rather than EMPTY;
+ -Dany switch sets this feature to false
+TSSL now has an explicit group element to declare an element group
+STML is a new XML format for modeling state-table changes
+License updated to AFL 2.1
+
+Changes from 0.9.4 to 0.9.5:
+============================
+S in the statetable now means \r and \n and \t as well as space
+ (as was always intended; brain fart!)
+Ins and del elements are now allowed everywhere
+TSSL now correctly supports attributes that are legal on all elements
+
+Changes from 0.9.3 to 0.9.4:
+============================
+Fixed paper-bag bug that revealed attribute type BOOLEAN to applications.
+Obsolete ABSTRACT removed in favor of README.
+Improved implementation of CDATA restart after bogus end-tag.
+Allowed hyphen, underscore, and period in names as well as colon.
+First cut at TagSoup Schema Language -- doesn't do anything yet.
+Support CDATA sections on input.
+Don't generate built-in entities within CDATA elements.
+
+Changes from 0.9.2 to 0.9.3:
+============================
+Convenience main program "tagsoup" in bin directory.
+Begin to integrate tests.
+Introduced BOOLEAN type (currently just converted to NMTOKEN).
+Features that actually work are now named constants in Parser.
+Double root elements are really gone now.
+ID attributes weren't being removed from restarted elements.
+Fixed a bug that made unknown elements disappear in some cases.
+Parser is now safely reusable.
+PYXWriter and XMLWriter now implement LexicalHandler.
+Parser reports comments, startCDATA, and endCDATA events to a LexicalHandler.
+ScanHandler methods now throw only SAXException, not also IOException.
+-Dlexical=true switch sets the ContentHandler as a LexicalHandler as well
+ (XMLWriter prints comments, ignores CDATA sections; PYXWriter ignores all).
+-Dreuse=true switch reuses a single Parser object (no great speed gain).
+We now disallow an a element as the child of another a element.
+An empty input is now treated as zero-length character content.
+HTMLWriter is gone in favor of an extended XMLWriter with get/setHTMLMode methods.
+CDATA elements only terminaate with matching end-tags (thanks to Sebastien Bardoux).
+
+Changes from 0.9.1 to 0.9.2:
+============================
+No longer inserts bogus ; after unknown entity reference without ;.
+Consecutive entity references now work correctly.
+Setting namespaces and namespace-prefixes methods now works.
+-Dnons=true option turns off namespace and prefix.
+New feature http://www.ccil.org/~cowan/tagsoup/features/ignore-bogons"
+ suppresses unknown start-tags (any end-tag will be automatically ignored).
+-Dnobogons=true option turns ignore-bogons on.
+Suppress unknown and/or empty initial start-tag always
+ (prevents double root element).
+Schema now allows style as an inline element, like script.
+Schema now allows tr as a child of table to avoid problems with embedded tables.
+Clear Parser instance variables to make Parsers properly reusable.
+
+Changes from 0.9 to 0.9.1:
+==========================
+Incorporated patch for -jar support by Joseph Walton.
+Incorporated patch for Megginson XMLWriter support by Joseph Walton.
+Changed existing XMLWriter to HTMLWriter.
+Rewrote Parsermain for better features, removed Tester class.
+-Dnewline=true removed, now implied by -DHTML=true.
+-Dfiles=true now used to generate separate outputs (old Tester behavior)
+ with extension xhtml (removing any old extension).
+Fixed nasty bug in HTMLScanner that was failing to fix unusual entities.
+Don't attempt to smash whitespace to spaces any more.
+
+Changes from 0.8 to 0.9:
+========================
+Ant-ified by Martin Rademacher.
+Don't suppress colons in element names.
+Entity problems fixed (I hope).
+Can now set namespace and namespace-prefixes features (without effect).
+Properly templatize HTMLModels.java.
+Attributes are no longer in the HTML namespace.
diff --git a/src/org/ccil/cowan/tagsoup/LICENSE b/LICENSE
index 261eeb9..261eeb9 100644
--- a/src/org/ccil/cowan/tagsoup/LICENSE
+++ b/LICENSE
diff --git a/src/org/ccil/cowan/tagsoup/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
index e69de29..e69de29 100644
--- a/src/org/ccil/cowan/tagsoup/MODULE_LICENSE_APACHE2
+++ b/MODULE_LICENSE_APACHE2
diff --git a/README b/README
new file mode 100644
index 0000000..1e71819
--- /dev/null
+++ b/README
@@ -0,0 +1,357 @@
+ TagSoup - Just Keep On Truckin'
+
+ Introduction
+
+ This is the home page of TagSoup, a SAX-compliant parser written in
+ Java that, instead of parsing well-formed or valid XML, parses HTML as
+ it is found in the wild: [1]poor, nasty and brutish, though quite often
+ far from short. TagSoup is designed for people who have to process this
+ stuff using some semblance of a rational application design. By
+ providing a SAX interface, it allows standard XML tools to be applied
+ to even the worst HTML. TagSoup also includes a command-line processor
+ that reads HTML files and can generate either clean HTML or well-formed
+ XML that is a close approximation to XHTML.
+
+ This is also the README file packaged with TagSoup.
+
+ TagSoup is free and Open Source software. As of version 1.2, it is
+ licensed under the [2]Apache License, Version 2.0, which allows
+ proprietary re-use as well as use with GPL 3.0 or GPL 2.0-or-later
+ projects. (If anyone needs a GPL 2.0 license for a GPL 2.0-only
+ project, feel free to ask.)
+
+ Warning: TagSoup will not build on stock Java 5.x or 6.x!
+
+ Due to a bug in the versions of Xalan shipped with Java 5.x and 6.x,
+ TagSoup will not build out of the box. You need to retrieve [3]Saxon
+ 6.5.5, which does not have the bug. Unpack the zipfile in an empty
+ directory and copy the saxon.jar and saxon-xml-apis.jar files to
+ $ANT_HOME/lib. The Ant build process for TagSoup will then notice that
+ Saxon is available and use it instead.
+
+ TagSoup 1.2 released
+
+ There are a great many changes, most of them fixes for long-standing
+ bugs, in this release. Only the most important are listed here; for the
+ rest, see the CHANGES file in the source distribution. Very special
+ thanks to Jojo Dijamco, whose intensive efforts at debugging made this
+ release a usable upgrade rather than a useless mass of undetected bugs.
+ * As noted above, I have changed the license to Apache 2.0.
+ * The default content model for bogons (unknown elements) is now ANY
+ rather than EMPTY. This is a breaking change, which I have done
+ only because there was so much demand for it. It can be undone on
+ the command line with the --emptybogons switch, or programmatically
+ with parser.setFeature(Parser.emptyBogonsFeature, true).
+ * The processing of entity references in attribute values has finally
+ been fixed to do what browsers do. That is, a reference is only
+ recognized if it is properly terminated by a semicolon; otherwise
+ it is treated as plain text. This means that URIs like
+ foo?cdown=32&cup=42 are no longer seen as containing an instance of
+ the )U character (whose name happens to be cup).
+ * Several new switches have been added:
+ + --doctype-system and --doctype-public force a DOCTYPE
+ declaration to be output and allow setting the system and
+ public identifiers.
+ + --standalone and --version allow control of the XML
+ declaration that is output. (Note that TagSoup's XML output is
+ always version 1.0, even if you use --version=1.1.)
+ + --norootbogons causes unknown elements not to be allowed as
+ the document root element. Instead, they are made children of
+ the default root element (the html element for HTML).
+ * The TagSoup core now supports character entities with values above
+ U+FFFF. As a consequence, the HTML schema now supports all 2,210
+ standard character entities from the [4]2007-12-14 draft of XML
+ Entity Definitions for Characters, except the 94 which require more
+ than one Unicode character to represent.
+ * The SAX events startPrefixMapping and endPrefixMapping are now
+ being reported for all cases of foreign elements and attributes.
+ * All bugs around newline processing on Windows should now be gone.
+ * A number of content models have been loosened to allow elements to
+ appear in new and non-standard (but commonly found) places. In
+ particular, tables are now allowed inside paragraphs, against the
+ letter of the W3C specification.
+ * Since the span element is intended for fine control of appearance
+ using CSS, it should never have been a restartable element. This
+ very long-standing bug has now been fixed.
+ * The following non-standard elements are now at least partly
+ supported: bgsound, blink, canvas, comment, listing, marquee, nobr,
+ rbc, rb, rp, rtc, rt, ruby, wbr, xmp.
+ * In HTML output mode, boolean attributes like checked are now output
+ as such, rather than in XML style as checked="checked".
+ * Runs of < characters such as << and <<< are now handled correctly
+ in text rather than being transformed into extremely bogus
+ start-tags.
+
+ [5]Download the TagSoup 1.2 jar file here. It's about 87K long.
+ [6]Download the full TagSoup 1.2 source here. If you don't have zip,
+ you can use jar to unpack it.
+ [7]Download the current CHANGES file here.
+
+ TagSoup 1.1 released
+
+ TagSoup 1.1 adds Tatu Saloranta's JAXP support for TagSoup. To use
+ TagSoup within the JAXP framework (which is not something I necessarily
+ recommend, but it is part of the Java XML platform), you can create a
+ SAXParser by calling
+ org.ccil.cowan.tagsoup.jaxp.SAXParserImpl.newInstance(). You can also
+ set the system property javax.xml.parsers.SAXParserFactory to
+ org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl, but be aware that doing
+ this will cause all JAXP-based XML parsing to go through TagSoup, which
+ is a Bad Thing if your application also reads XML documents.
+
+ What TagSoup does
+
+ TagSoup is designed as a parser, not a whole application; it isn't
+ intended to permanently clean up bad HTML, as [8]HTML Tidy does, only
+ to parse it on the fly. Therefore, it does not convert presentation
+ HTML to CSS or anything similar. It does guarantee well-structured
+ results: tags will wind up properly nested, default attributes will
+ appear appropriately, and so on.
+
+ The semantics of TagSoup are as far as practical those of actual HTML
+ browsers. In particular, never, never will it throw any sort of syntax
+ error: the TagSoup motto is [9]"Just Keep On Truckin'". But there's
+ much, much more. For example, if the first tag is LI, it will supply
+ the application with enclosing HTML, BODY, and UL tags. Why UL? Because
+ that's what browsers assume in this situation. For the same reason,
+ overlapping tags are correctly restarted whenever possible: text like:
+This is <B>bold, <I>bold italic, </b>italic, </i>normal text
+
+ gets correctly rewritten as:
+This is <b>bold, <i>bold italic, </i></b><i>italic, </i>normal text.
+
+ By intention, TagSoup is small and fast. It does not depend on the
+ existence of any framework other than SAX, and should be able to work
+ with any framework that can accept SAX parsers. In particular, [10]XOM
+ is known to work.
+
+ You can replace the low-level HTML scanner with one based on Sean
+ McGrath's [11]PYX format (very close to James Clark's ESIS format). You
+ can also supply an AutoDetector that peeks at the incoming byte stream
+ and guesses a character encoding for it. Otherwise, the platform
+ default is used. If you need an autodetector of character sets,
+ consider trying to adapt the [12]Mozilla one; if you succeed, let me
+ know.
+
+ Note: TagSoup in Java 1.1
+
+ If you go through the TagSoup source and replace all references to
+ HashMap with Hashtable and recompile, TagSoup will work fine in Java
+ 1.1 VMs. Thanks to Thorbjørn Vinne for this discovery.
+
+ The TSaxon XSLT-for-HTML processor
+
+ [13]I am also distributing [14]TSaxon, a repackaging of version 6.5.5
+ of Michael Kay's Saxon XSLT version 1.0 implementation that includes
+ TagSoup. TSaxon is a drop-in replacement for Saxon, and can be used to
+ process either HTML or XML documents with XSLT stylesheets.
+
+ TagSoup as a stand-alone program
+
+ It is possible to run TagSoup as a program by saying java -jar
+ tagsoup-1.0.1 [option ...] [file ...]. Files mentioned on the command
+ line will be parsed individually. If no files are specified, the
+ standard input is read.
+
+ The following options are understood:
+
+ --files
+ Output into individual files, with html extensions changed to
+ xhtml. Otherwise, all output is sent to the standard output.
+
+ --html
+ Output is in clean HTML: the XML declaration is suppressed, as
+ are end-tags for the known empty elements.
+
+ --omit-xml-declaration
+ The XML declaration is suppressed.
+
+ --method=html
+ End-tags for the known empty HTML elements are suppressed.
+
+ --doctype-system=systemid
+ Forces the output of a DOCTYPE declaration with the specified
+ systemid.
+
+ --doctype-public=publicid
+ Forces the output of a DOCTYPE declaration with the specified
+ publicid.
+
+ --version=version
+ Sets the version string in the XML declaration.
+
+ --standalone=[yes|no]
+ Sets the standalone declaration to yes or no.
+
+ --pyx
+ Output is in PYX format.
+
+ --pyxin
+ Input is in PYXoid format (need not be well-formed).
+
+ --nons
+ Namespaces are suppressed. Normally, all elements are in the
+ XHTML 1.x namespace, and all attributes are in no namespace.
+
+ --nobogons
+ Bogons (unknown elements) are suppressed.
+
+ --nodefaults
+ suppress default attribute values
+
+ --nocolons
+ change explicit colons in element and attribute names to
+ underscores
+
+ --norestart
+ don't restart any normally restartable elements
+
+ --ignorable
+ output whitespace in elements with element-only content
+
+ --emptybogons
+ Bogons are given a content model of EMPTY rather than ANY.
+
+ --any
+ Bogons are given a content model of ANY rather than EMPTY
+ (default).
+
+ --norootbogons
+ Don't allow bogons to be root elements; make them subordinate to
+ the root.
+
+ --lexical
+ Pass through HTML comments and DOCTYPE declarations. Has no
+ effect when output is in PYX format.
+
+ --reuse
+ Reuse a single instance of TagSoup parser throughout. Normally,
+ a new one is instantiated for each input file.
+
+ --nocdata
+ Change the content models of the script and style elements to
+ treat them as ordinary #PCDATA (text-only) elements, as in
+ XHTML, rather than with the special CDATA content model.
+
+ --encoding=encoding
+ Specify the input encoding. The default is the Java platform
+ default.
+
+ --output-encoding=encoding
+ Specify the output encoding. The default is the Java platform
+ default.
+
+ --help
+ Print help.
+
+ --version
+ Print the version number.
+
+ SAX features and properties
+
+ TagSoup supports the following SAX features in addition to the standard
+ ones:
+
+ http://www.ccil.org/~cowan/tagsoup/features/ignore-bogons
+ A value of "true" indicates that the parser will ignore unknown
+ elements.
+
+ http://www.ccil.org/~cowan/tagsoup/features/bogons-empty
+ A value of "true" indicates that the parser will give unknown
+ elements a content model of EMPTY; a value of "false", a content
+ model of ANY.
+
+ http://www.ccil.org/~cowan/tagsoup/features/root-bogons
+ A value of "true" indicates that the parser will allow unknown
+ elements to be the root of the output document.
+
+ http://www.ccil.org/~cowan/tagsoup/features/default-attributes
+ A value of "true" indicates that the parser will return default
+ attribute values for missing attributes that have default
+ values.
+
+ http://www.ccil.org/~cowan/tagsoup/features/translate-colons
+ A value of "true" indicates that the parser will translate
+ colons into underscores in names.
+
+ http://www.ccil.org/~cowan/tagsoup/features/restart-elements
+ A value of "true" indicates that the parser will attempt to
+ restart the restartable elements.
+
+ http://www.ccil.org/~cowan/tagsoup/features/ignorable-whitespace
+ A value of "true" indicates that the parser will transmit
+ whitespace in element-only content via the SAX
+ ignorableWhitespace callback. Normally this is not done, because
+ HTML is an SGML application and SGML suppresses such whitespace.
+
+ http://www.ccil.org/~cowan/tagsoup/features/cdata-elements
+ A value of "true" indicates that the parser will process the
+ script and style elements (or any elements with type='cdata' in
+ the TSSL schema) as SGML CDATA elements (that is, no markup is
+ recognized except the matching end-tag).
+
+ TagSoup supports the following SAX properties in addition to the
+ standard ones:
+
+ http://www.ccil.org/~cowan/tagsoup/properties/scanner
+ Specifies the Scanner object this parser uses.
+
+ http://www.ccil.org/~cowan/tagsoup/properties/schema
+ Specifies the Schema object this parser uses.
+
+ http://www.ccil.org/~cowan/tagsoup/properties/auto-detector
+ Specifies the AutoDetector (for encoding detection) this parser
+ uses.
+
+ More information
+
+ I gave a presentation (a nocturne, so it's not on the schedule) at
+ [15]Extreme Markup Languages 2004 about TagSoup, updated from the one
+ presented in 2002 at the New York City XML SIG and at XML 2002. This is
+ the main high-level documentation about how TagSoup works. Formats:
+ [16]OpenDocument [17]Powerpoint [18]PDF.
+
+ I also had people add [19]"evil" HTML to a large poster so that I could
+ [20]clean it up; View Source is probably more useful than ordinary
+ browsing. The original instructions were:
+
+ SOUPE DE BALISES (BE EVIL)!
+ Ecritez une balise ouvrante (sans attributs)
+ ou fermante HTML ici, s.v.p.
+
+ There is a [21]tagsoup-friends mailing list hosted at [22]Yahoo Groups.
+ You can [23]join via the Web, or by sending a blank email to
+ [24]tagsoup-friends-subscribe@yahoogroups.com. The [25]archives are
+ open to all.
+
+ Online TagSoup processing for publicly accessible HTML documents is now
+ [26]available courtesy of Leigh Dodds.
+
+References
+
+ 1. http://oregonstate.edu/instruct/phl302/texts/hobbes/leviathan-c.html
+ 2. http://opensource.org/licenses/apache2.0.php
+ 3. http://prdownloads.sourceforge.net/saxon/saxon6-5-5.zip
+ 4. http://www.w3.org/TR/2007/WD-xml-entity-names-20071214
+ 5. http://home.ccil.org/~cowan/XML/tagsoup/tagsoup-1.2.jar
+ 6. http://home.ccil.org/~cowan/XML/tagsoup/tagsoup-1.2-src.zip
+ 7. http://home.ccil.org/~cowan/XML/tagsoup/CHANGES
+ 8. http://tidy.sf.net/
+ 9. http://www.crumbmuseum.com/truckin.html
+ 10. http://www.cafeconleche.org/XOM
+ 11. http://gnosis.cx/publish/programming/xml_matters_17.html
+ 12. http://jchardet.sourceforge.net/
+ 13. http://www.ccil.org/~cowan
+ 14. http://home.ccil.org/~cowan/XML/tagsoup/tsaxon
+ 15. http://www.extrememarkup.com/extreme/2004
+ 16. http://home.ccil.org/~cowan/XML/tagsoup/tagsoup.odp
+ 17. http://home.ccil.org/~cowan/XML/tagsoup/tagsoup.ppt
+ 18. http://home.ccil.org/~cowan/XML/tagsoup/tagsoup.pdf
+ 19. http://home.ccil.org/~cowan/XML/tagsoup/extreme.html
+ 20. http://home.ccil.org/~cowan/XML/tagsoup/extreme.xhtml
+ 21. http://groups.yahoo.com/group/tagsoup-friends
+ 22. http://groups.yahoo.com/
+ 23. http://groups.yahoo.com/group/tagsoup-friends/join
+ 24. mailto:tagsoup-friends-subscribe@yahoogroups.com
+ 25. http://groups.yahoo.com/group/tagsoup-friends/messages
+ 26. http://xmlarmyknife.org/docs/xhtml/tagsoup/
diff --git a/README.android b/README.android
new file mode 100644
index 0000000..a296375
--- /dev/null
+++ b/README.android
@@ -0,0 +1,11 @@
+This is TagSoup 1.2.1, downloaded from http://ccil.org/~cowan/XML/tagsoup/
+
+To get the java files included here:
+- download tagsoup
+- unzip it
+- cd into the tagsoup directory
+- Install saxon 6.5.5 and copy saxon.jar and saxon-xml-apis.jar files to $ANT_HOME/lib
+- run ant
+- copy the files in src/java and tmp/src
+
+Updated on Oct 21, 2013 from tagsoup 1.2.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..d280f18
--- /dev/null
+++ b/TODO
@@ -0,0 +1,18 @@
+Consider having elements that suppress reopening
+Handle namespace declarations semi-properly
+Squelch namespaces better in --nons mode
+Clean systemids as well as publicids
+
+Notice: It's quite possible that none of these features will ever be
+implemented. If you'd like to implement one yourself, feel free to send
+me a patch.
+
+Flag added parent elements with a special attribute
+Allow case sensitivity as a standard feature
+Make use of the pseudo-comment in a script element to suppress close-tag detection
+Allow inline cruft in table bodies and rows
+ (Don't break up tables, ever?)
+ (Don't break up forms, ever, either?)
+Suppress start-tags for some restartable elements if the element
+ is already on the stack (<b><b> is the same as <b>)
+Combine consecutive body elements
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..1aa21d4
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,160 @@
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<project name="tagsoup" default="dist">
+
+ <!-- generic properties -->
+ <property file="etc/build/build.properties"/>
+ <!-- additional tasks -->
+ <taskdef file="etc/build/taskdefs.txt" classpath="bin"/>
+
+ <available property="transformer.factory"
+ classname="com.icl.saxon.TransformerFactoryImpl"
+ value="com.icl.saxon.TransformerFactoryImpl"/>
+ <available property="transformer.factory"
+ classname="net.sf.saxon.TransformerFactoryImpl"
+ value="net.sf.saxon.TransformerFactoryImpl"/>
+ <available property="transformer.factory"
+ classname="org.apache.xalan.processor.TransformerFactoryImpl"
+ value="org.apache.xalan.processor.TransformerFactoryImpl"/>
+ <available property="transformer.factory"
+ classname="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"
+ value="com.sun.org.apache.xalan.processor.TransformerFactoryImpl"/>
+
+ <!-- some folder settings -->
+ <property name="bin" value="bin"/>
+ <property name="src" value="src"/>
+ <property name="build" value="build"/>
+ <property name="dist" value="dist"/>
+ <property name="docs" value="docs"/>
+ <property name="tmp" value="tmp"/>
+
+
+ <!-- initialize project -->
+ <target name="init" description="Init project.">
+ <tstamp/>
+ </target>
+
+
+ <!-- ensure needed folders are available -->
+ <target name="prepare" description="Set up folders.">
+ <mkdir dir="${build}"/>
+ <mkdir dir="${tmp}"/>
+ </target>
+
+ <!-- Build a distribution jar file -->
+ <target name="dist" depends="init,compile"
+ description="Build a binary distribution file.">
+ <antcall target="jar-release">
+ <param name="buildDir" value="build"/>
+ <param name="version" value="${tagsoup.version}"/>
+ </antcall>
+ </target>
+
+
+ <target name="jar-release" depends="init"
+ description="Build a release jar file.">
+ <mkdir dir="${dist}/lib" />
+ <jar jarfile="${dist}/lib/tagsoup-${tagsoup.version}.jar" basedir="${buildDir}">
+ <manifest>
+ <attribute name="Version" value="${tagsoup.version}"/>
+ <attribute name="Main-Class" value="org.ccil.cowan.tagsoup.CommandLine"/>
+ </manifest>
+ </jar>
+ </target>
+
+
+ <!-- compile java sources -->
+ <target name="compile" depends="init,prepare,build-parser"
+ description="Compile java classes.">
+ <javac source="1.4" target="1.4" srcdir="${src}/java" destdir="${build}" deprecation="on" verbose="off" debug="on">
+ <src path="${src}/java"/>
+ <src path="${tmp}/src"/>
+ </javac>
+ </target>
+
+<!-- prepare generation of the parser classes based on the definition files -->
+ <target depends="init,prepare" description="Prepare generation of parser classes." name="prepare-parser">
+
+ <echo>
+ Using ${transformer.factory} as the TransformerFactory
+ </echo>
+
+ <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLModels.i"
+style="tssl/tssl-models.xslt">
+ <factory name="${transformer.factory}"/>
+ </xslt>
+ <xslt in="${src}/definitions/html.tssl" out="${tmp}/HTMLSchema.i"
+style="tssl/tssl.xslt">
+ <factory name="${transformer.factory}"/>
+ </xslt>
+ <xslt in="${src}/definitions/html.stml" out="${tmp}/HTMLScanner.i"
+style="stml/stml.xslt">
+ <factory name="${transformer.factory}"/>
+ </xslt>
+ </target>
+
+
+
+ <!-- patch the parser class files -->
+ <target name="build-parser" depends="prepare-parser"
+ description="Generate parser class files.">
+ <property name="parser.pkg-path" value="org/ccil/cowan/tagsoup"/>
+ <mkdir dir="${tmp}/src/${parser.pkg-path}"/>
+ <antcall target="patch-file">
+ <param name="file-pref" value="HTMLModels"/>
+ <param name="token" value="MODEL_DEFINITIONS"/>
+ </antcall>
+ <antcall target="patch-file">
+ <param name="file-pref" value="HTMLSchema"/>
+ <param name="token" value="SCHEMA_CALLS"/>
+ </antcall>
+ <antcall target="patch-file">
+ <param name="file-pref" value="HTMLScanner"/>
+ <param name="token" value="STATE_TABLE"/>
+ </antcall>
+ </target>
+
+
+ <!-- patch one parser class file -->
+ <target name="patch-file" depends="" description="Patch a parser class file.">
+ <copy file="${src}/templates/${parser.pkg-path}/${file-pref}.java" toDir="${tmp}/src/${parser.pkg-path}"/>
+ <loadfile property="patch" srcFile="${tmp}/${file-pref}.i"/>
+ <replace file="${tmp}/src/${parser.pkg-path}/${file-pref}.java" token="@@${token}@@" value="${patch}"/>
+ </target>
+
+ <!-- clean up the mess -->
+ <target name="clean" description="Clean up folders.">
+ <delete dir="${build}"/>
+ <delete dir="${tmp}"/>
+ <delete dir="${docs}"/>
+ <delete dir="${dist}"/>
+ </target>
+
+
+ <!-- generate javadoc for the java classes -->
+ <target name="docs-api" depends="init"
+ description="Generate javadoc documentation.">
+ <mkdir dir="${docs}/api"/>
+ <javadoc packagenames="org.*"
+ sourcepath="${src}/java" destdir="${docs}/api"
+ use="true"
+ windowtitle="TagSoup ${tagsoup.version} API">
+ <doctitle><![CDATA[<h1>TagSoup Package Documentation</h1>]]></doctitle>
+ <bottom><![CDATA[<em>Licence</em>: <strong>Academic Free License 3.0</strong> and/or <strong>GPL 2.0</strong>]]></bottom>
+ </javadoc>
+ </target>
+
+</project>
diff --git a/definitions/html.stml b/definitions/html.stml
new file mode 100644
index 0000000..4cab973
--- /dev/null
+++ b/definitions/html.stml
@@ -0,0 +1,249 @@
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<statetable xmlns='http://www.ccil.org/~cowan/XML/tagsoup/stml'
+ version='1.0'>
+
+ <symbol id='EOF'/>
+ <symbol id='S'/>
+ <symbol id='default'/>
+
+ <action id='A_ADUP'/>
+ <action id='A_ADUP_SAVE'/>
+ <action id='A_ADUP_STAGC'/>
+ <action id='A_ANAME'/>
+ <action id='A_ANAME_ADUP_STAGC'/>
+ <action id='A_AVAL'/>
+ <action id='A_AVAL_STAGC'/>
+ <action id='A_CDATA'/>
+ <action id='A_CMNT'/>
+ <action id='A_DECL'/>
+ <action id='A_ENTITY'/>
+ <action id='A_ENTITY_START'/>
+ <action id='A_ETAG'/>
+ <action id='A_EMPTYTAG'/>
+ <action id='A_ANAME_ADUP'/>
+ <action id='A_GI'/>
+ <action id='A_GI_STAGC'/>
+ <action id='A_LT'/>
+ <action id='A_LT_PCDATA'/>
+ <action id='A_MINUS'/>
+ <action id='A_MINUS2'/>
+ <action id='A_MINUS3'/>
+ <action id='A_PCDATA'/>
+ <action id='A_PI'/>
+ <action id='A_PITARGET'/>
+ <action id='A_PITARGET_PI'/>
+ <action id='A_SAVE'/>
+ <action id='A_SKIP'/>
+ <action id='A_SP'/>
+ <action id='A_STAGC'/>
+ <action id='A_UNGET'/>
+ <action id='A_UNSAVE_PCDATA'/>
+
+ <state id='S_ANAME'>
+ <tr symbol='default' action='A_SAVE' newstate='S_ANAME'/>
+ <tr char='=' action='A_ANAME' newstate='S_AVAL'/>
+ <tr char='>' action='A_ANAME_ADUP_STAGC' newstate='S_PCDATA'/>
+ <tr char='/' action='A_ANAME_ADUP' newstate='S_EMPTYTAG'/>
+ <tr symbol='EOF' action='A_ANAME_ADUP_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_ANAME' newstate='S_EQ'/>
+ </state>
+ <state id='S_APOS'>
+ <tr symbol='default' action='A_SAVE' newstate='S_APOS'/>
+ <tr char='&apos;' action='A_AVAL' newstate='S_TAGWS'/>
+ <tr symbol='EOF' action='A_AVAL_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SP' newstate='S_APOS'/>
+ </state>
+ <state id='S_AVAL'>
+ <tr symbol='default' action='A_SAVE' newstate='S_STAGC'/>
+ <tr char='"' action='A_SKIP' newstate='S_QUOT'/>
+ <tr char='&apos;' action='A_SKIP' newstate='S_APOS'/>
+ <tr char='>' action='A_AVAL_STAGC' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_AVAL_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SKIP' newstate='S_AVAL'/>
+ </state>
+ <state id='S_CDATA'>
+ <tr symbol='default' action='A_SAVE' newstate='S_CDATA'/>
+ <tr char='&lt;' action='A_SAVE' newstate='S_CDATA2'/>
+ <tr symbol='EOF' action='A_PCDATA' newstate='S_DONE'/>
+ </state>
+ <state id='S_CDATA2'>
+ <tr symbol='default' action='A_SAVE' newstate='S_CDATA'/>
+ <tr char='/' action='A_UNSAVE_PCDATA' newstate='S_ETAG'/>
+ <tr symbol='EOF' action='A_UNSAVE_PCDATA' newstate='S_DONE'/>
+ </state>
+ <state id='S_COM'>
+ <tr symbol='default' action='A_SAVE' newstate='S_COM2'/>
+ <tr char='-' action='A_SKIP' newstate='S_COM2'/>
+ <tr symbol='EOF' action='A_CMNT' newstate='S_DONE'/>
+ </state>
+ <state id='S_COM2'>
+ <tr symbol='default' action='A_SAVE' newstate='S_COM2'/>
+ <tr char='-' action='A_SKIP' newstate='S_COM3'/>
+ <tr symbol='EOF' action='A_CMNT' newstate='S_DONE'/>
+ </state>
+ <state id='S_COM3'>
+ <tr symbol='default' action='A_MINUS' newstate='S_COM2'/>
+ <tr char='-' action='A_SKIP' newstate='S_COM4'/>
+ <tr symbol='EOF' action='A_CMNT' newstate='S_DONE'/>
+ </state>
+ <state id='S_COM4'>
+ <tr symbol='default' action='A_MINUS2' newstate='S_COM2'/>
+ <tr char='-' action='A_MINUS3' newstate='S_COM4'/>
+ <tr char='>' action='A_CMNT' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_CMNT' newstate='S_DONE'/>
+ </state>
+ <state id='S_DECL'>
+ <tr symbol='default' action='A_SAVE' newstate='S_DECL2'/>
+ <tr char='-' action='A_SKIP' newstate='S_COM'/>
+ <tr char='[' action='A_SKIP' newstate='S_BB'/>
+ <tr char='>' action='A_SKIP' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_DECL2'>
+ <tr symbol='default' action='A_SAVE' newstate='S_DECL2'/>
+ <tr char='>' action='A_DECL' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_ENT'>
+ <tr symbol='default' action='A_ENTITY' newstate='S_ENT'/>
+ <tr symbol='EOF' action='A_ENTITY' newstate='S_DONE'/>
+ </state>
+ <state id='S_EQ'>
+ <tr symbol='default' action='A_ADUP_SAVE' newstate='S_ANAME'/>
+ <tr char='=' action='A_SKIP' newstate='S_AVAL'/>
+ <tr char='>' action='A_ADUP_STAGC' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_ADUP_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SKIP' newstate='S_EQ'/>
+ </state>
+ <state id='S_ETAG'>
+ <tr symbol='default' action='A_SAVE' newstate='S_ETAG'/>
+ <tr char='>' action='A_ETAG' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_ETAG' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SKIP' newstate='S_ETAG'/>
+ </state>
+ <state id='S_GI'>
+ <tr symbol='default' action='A_SAVE' newstate='S_GI'/>
+ <tr char='/' action='A_SKIP' newstate='S_EMPTYTAG'/>
+ <tr char='>' action='A_GI_STAGC' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ <tr symbol='S' action='A_GI' newstate='S_TAGWS'/>
+ </state>
+ <state id='S_NCR'>
+ <tr symbol='default' action='A_ENTITY' newstate='S_NCR'/>
+ <tr symbol='EOF' action='A_ENTITY' newstate='S_DONE'/>
+ </state>
+ <state id='S_XNCR'>
+ <tr symbol='default' action='A_ENTITY' newstate='S_XNCR'/>
+ <tr symbol='EOF' action='A_ENTITY' newstate='S_DONE'/>
+ </state>
+ <state id='S_PCDATA'>
+ <tr symbol='default' action='A_SAVE' newstate='S_PCDATA'/>
+ <tr char='&amp;' action='A_ENTITY_START' newstate='S_ENT'/>
+ <tr char='&lt;' action='A_PCDATA' newstate='S_TAG'/>
+ <tr symbol='EOF' action='A_PCDATA' newstate='S_DONE'/>
+ </state>
+ <state id='S_PI'>
+ <tr symbol='default' action='A_SAVE' newstate='S_PI'/>
+ <tr char='>' action='A_PI' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_PI' newstate='S_DONE'/>
+ </state>
+ <state id='S_PITARGET'>
+ <tr symbol='default' action='A_SAVE' newstate='S_PITARGET'/>
+ <tr char='>' action='A_PITARGET_PI' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_PITARGET_PI' newstate='S_DONE'/>
+ <tr symbol='S' action='A_PITARGET' newstate='S_PI'/>
+ </state>
+ <state id='S_QUOT'>
+ <tr symbol='default' action='A_SAVE' newstate='S_QUOT'/>
+ <tr char='"' action='A_AVAL' newstate='S_TAGWS'/>
+ <tr symbol='EOF' action='A_AVAL_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SP' newstate='S_QUOT'/>
+ </state>
+ <state id='S_STAGC'>
+ <tr symbol='default' action='A_SAVE' newstate='S_STAGC'/>
+ <tr char='>' action='A_AVAL_STAGC' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_AVAL_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_AVAL' newstate='S_TAGWS'/>
+ </state>
+ <state id='S_TAG'>
+ <tr symbol='default' action='A_SAVE' newstate='S_GI'/>
+ <tr char='!' action='A_SKIP' newstate='S_DECL'/>
+ <tr char='/' action='A_SKIP' newstate='S_ETAG'/>
+ <tr char='?' action='A_SKIP' newstate='S_PITARGET'/>
+ <tr char='&lt;' action='A_SAVE' newstate='S_TAG'/>
+ <tr symbol='EOF' action='A_LT_PCDATA' newstate='S_DONE'/>
+ <tr symbol='S' action='A_LT' newstate='S_PCDATA'/>
+ </state>
+ <state id='S_TAGWS'>
+ <tr symbol='default' action='A_SAVE' newstate='S_ANAME'/>
+ <tr char='/' action='A_SKIP' newstate='S_EMPTYTAG'/>
+ <tr char='>' action='A_STAGC' newstate='S_PCDATA'/>
+ <tr symbol='EOF' action='A_STAGC' newstate='S_DONE'/>
+ <tr symbol='S' action='A_SKIP' newstate='S_TAGWS'/>
+ </state>
+ <state id='S_EMPTYTAG'>
+ <tr symbol='S' action='A_SKIP' newstate='S_TAGWS'/>
+ <tr symbol='default' action='A_SAVE' newstate='S_ANAME'/>
+ <tr char='>' action='A_EMPTYTAG' newstate='S_PCDATA'/>
+ </state>
+ <state id='S_BB'>
+ <tr char='C' action='A_SKIP' newstate='S_BBC'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_BBC'>
+ <tr char='D' action='A_SKIP' newstate='S_BBCD'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_BBCD'>
+ <tr char='A' action='A_SKIP' newstate='S_BBCDA'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_BBCDA'>
+ <tr char='T' action='A_SKIP' newstate='S_BBCDAT'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_BBCDAT'>
+ <tr char='A' action='A_SKIP' newstate='S_BBCDATA'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_BBCDATA'>
+ <tr char='[' action='A_SKIP' newstate='S_CDSECT'/>
+ <tr symbol='default' action='A_SKIP' newstate='S_DECL'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_CDSECT'>
+ <tr char=']' action='A_SAVE' newstate='S_CDSECT1'/>
+ <tr symbol='default' action='A_SAVE' newstate='S_CDSECT'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_CDSECT1'>
+ <tr char=']' action='A_SAVE' newstate='S_CDSECT2'/>
+ <tr symbol='default' action='A_SAVE' newstate='S_CDSECT'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_CDSECT2'>
+ <tr char='>' action='A_CDATA' newstate='S_PCDATA'/>
+ <tr symbol='default' action='A_SAVE' newstate='S_CDSECT'/>
+ <tr symbol='EOF' action='A_SKIP' newstate='S_DONE'/>
+ </state>
+ <state id='S_DONE'/>
+</statetable>
diff --git a/definitions/html.tssl b/definitions/html.tssl
new file mode 100644
index 0000000..7207862
--- /dev/null
+++ b/definitions/html.tssl
@@ -0,0 +1,2762 @@
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<schema xmlns='http://www.ccil.org/~cowan/XML/tagsoup/tssl'
+ ns='http://www.w3.org/1999/xhtml' name='html'
+ prefix='html' version='1.0'>
+
+ <entity name='Aacgr' codepoint='0386'/>
+ <entity name='aacgr' codepoint='03AC'/>
+ <entity name='Aacute' codepoint='00C1'/>
+ <entity name='aacute' codepoint='00E1'/>
+ <entity name='Abreve' codepoint='0102'/>
+ <entity name='abreve' codepoint='0103'/>
+ <entity name='ac' codepoint='223E'/>
+ <entity name='acd' codepoint='223F'/>
+ <entity name='Acirc' codepoint='00C2'/>
+ <entity name='acirc' codepoint='00E2'/>
+ <entity name='acute' codepoint='00B4'/>
+ <entity name='Acy' codepoint='0410'/>
+ <entity name='acy' codepoint='0430'/>
+ <entity name='AElig' codepoint='00C6'/>
+ <entity name='aelig' codepoint='00E6'/>
+ <entity name='af' codepoint='2061'/>
+ <entity name='Afr' codepoint='1D504'/>
+ <entity name='afr' codepoint='1D51E'/>
+ <entity name='Agr' codepoint='0391'/>
+ <entity name='agr' codepoint='03B1'/>
+ <entity name='Agrave' codepoint='00C0'/>
+ <entity name='agrave' codepoint='00E0'/>
+ <entity name='alefsym' codepoint='2135'/>
+ <entity name='aleph' codepoint='2135'/>
+ <entity name='Alpha' codepoint='0391'/>
+ <entity name='alpha' codepoint='03B1'/>
+ <entity name='Amacr' codepoint='0100'/>
+ <entity name='amacr' codepoint='0101'/>
+ <entity name='amalg' codepoint='2A3F'/>
+ <entity name='amp' codepoint='0026'/>
+ <entity name='and' codepoint='2227'/>
+ <entity name='And' codepoint='2A53'/>
+ <entity name='andand' codepoint='2A55'/>
+ <entity name='andd' codepoint='2A5C'/>
+ <entity name='andslope' codepoint='2A58'/>
+ <entity name='andv' codepoint='2A5A'/>
+ <entity name='ang' codepoint='2220'/>
+ <entity name='ange' codepoint='29A4'/>
+ <entity name='angle' codepoint='2220'/>
+ <entity name='angmsd' codepoint='2221'/>
+ <entity name='angmsdaa' codepoint='29A8'/>
+ <entity name='angmsdab' codepoint='29A9'/>
+ <entity name='angmsdac' codepoint='29AA'/>
+ <entity name='angmsdad' codepoint='29AB'/>
+ <entity name='angmsdae' codepoint='29AC'/>
+ <entity name='angmsdaf' codepoint='29AD'/>
+ <entity name='angmsdag' codepoint='29AE'/>
+ <entity name='angmsdah' codepoint='29AF'/>
+ <entity name='angrt' codepoint='221F'/>
+ <entity name='angrtvb' codepoint='22BE'/>
+ <entity name='angrtvbd' codepoint='299D'/>
+ <entity name='angsph' codepoint='2222'/>
+ <entity name='angst' codepoint='212B'/>
+ <entity name='angzarr' codepoint='237C'/>
+ <entity name='Aogon' codepoint='0104'/>
+ <entity name='aogon' codepoint='0105'/>
+ <entity name='Aopf' codepoint='1D538'/>
+ <entity name='aopf' codepoint='1D552'/>
+ <entity name='ap' codepoint='2248'/>
+ <entity name='apacir' codepoint='2A6F'/>
+ <entity name='ape' codepoint='224A'/>
+ <entity name='apE' codepoint='2A70'/>
+ <entity name='apid' codepoint='224B'/>
+ <entity name='apos' codepoint='0027'/>
+ <entity name='ApplyFunction' codepoint='2061'/>
+ <entity name='approx' codepoint='2248'/>
+ <entity name='approxeq' codepoint='224A'/>
+ <entity name='Aring' codepoint='00C5'/>
+ <entity name='aring' codepoint='00E5'/>
+ <entity name='Ascr' codepoint='1D49C'/>
+ <entity name='ascr' codepoint='1D4B6'/>
+ <entity name='Assign' codepoint='2254'/>
+ <entity name='ast' codepoint='002A'/>
+ <entity name='asymp' codepoint='2248'/>
+ <entity name='asympeq' codepoint='224D'/>
+ <entity name='Atilde' codepoint='00C3'/>
+ <entity name='atilde' codepoint='00E3'/>
+ <entity name='Auml' codepoint='00C4'/>
+ <entity name='auml' codepoint='00E4'/>
+ <entity name='awconint' codepoint='2233'/>
+ <entity name='awint' codepoint='2A11'/>
+ <entity name='b.alpha' codepoint='1D6C2'/>
+ <entity name='b.beta' codepoint='1D6C3'/>
+ <entity name='b.chi' codepoint='1D6D8'/>
+ <entity name='b.Delta' codepoint='1D6AB'/>
+ <entity name='b.delta' codepoint='1D6C5'/>
+ <entity name='b.epsi' codepoint='1D6C6'/>
+ <entity name='b.epsiv' codepoint='1D6DC'/>
+ <entity name='b.eta' codepoint='1D6C8'/>
+ <entity name='b.Gamma' codepoint='1D6AA'/>
+ <entity name='b.gamma' codepoint='1D6C4'/>
+ <entity name='b.Gammad' codepoint='1D7CA'/>
+ <entity name='b.gammad' codepoint='1D7CB'/>
+ <entity name='b.iota' codepoint='1D6CA'/>
+ <entity name='b.kappa' codepoint='1D6CB'/>
+ <entity name='b.kappav' codepoint='1D6DE'/>
+ <entity name='b.Lambda' codepoint='1D6B2'/>
+ <entity name='b.lambda' codepoint='1D6CC'/>
+ <entity name='b.mu' codepoint='1D6CD'/>
+ <entity name='b.nu' codepoint='1D6CE'/>
+ <entity name='b.Omega' codepoint='1D6C0'/>
+ <entity name='b.omega' codepoint='1D6DA'/>
+ <entity name='b.Phi' codepoint='1D6BD'/>
+ <entity name='b.phi' codepoint='1D6D7'/>
+ <entity name='b.phiv' codepoint='1D6DF'/>
+ <entity name='b.Pi' codepoint='1D6B7'/>
+ <entity name='b.pi' codepoint='1D6D1'/>
+ <entity name='b.piv' codepoint='1D6E1'/>
+ <entity name='b.Psi' codepoint='1D6BF'/>
+ <entity name='b.psi' codepoint='1D6D9'/>
+ <entity name='b.rho' codepoint='1D6D2'/>
+ <entity name='b.rhov' codepoint='1D6E0'/>
+ <entity name='b.Sigma' codepoint='1D6BA'/>
+ <entity name='b.sigma' codepoint='1D6D4'/>
+ <entity name='b.sigmav' codepoint='1D6D3'/>
+ <entity name='b.tau' codepoint='1D6D5'/>
+ <entity name='b.Theta' codepoint='1D6AF'/>
+ <entity name='b.thetas' codepoint='1D6C9'/>
+ <entity name='b.thetav' codepoint='1D6DD'/>
+ <entity name='b.Upsi' codepoint='1D6BC'/>
+ <entity name='b.upsi' codepoint='1D6D6'/>
+ <entity name='b.Xi' codepoint='1D6B5'/>
+ <entity name='b.xi' codepoint='1D6CF'/>
+ <entity name='b.zeta' codepoint='1D6C7'/>
+ <entity name='backcong' codepoint='224C'/>
+ <entity name='backepsilon' codepoint='03F6'/>
+ <entity name='backprime' codepoint='2035'/>
+ <entity name='backsim' codepoint='223D'/>
+ <entity name='backsimeq' codepoint='22CD'/>
+ <entity name='Backslash' codepoint='2216'/>
+ <entity name='Barv' codepoint='2AE7'/>
+ <entity name='barvee' codepoint='22BD'/>
+ <entity name='barwed' codepoint='2305'/>
+ <entity name='Barwed' codepoint='2306'/>
+ <entity name='barwedge' codepoint='2305'/>
+ <entity name='bbrk' codepoint='23B5'/>
+ <entity name='bbrktbrk' codepoint='23B6'/>
+ <entity name='bcong' codepoint='224C'/>
+ <entity name='Bcy' codepoint='0411'/>
+ <entity name='bcy' codepoint='0431'/>
+ <entity name='bdquo' codepoint='201E'/>
+ <entity name='becaus' codepoint='2235'/>
+ <entity name='because' codepoint='2235'/>
+ <entity name='bemptyv' codepoint='29B0'/>
+ <entity name='bepsi' codepoint='03F6'/>
+ <entity name='bernou' codepoint='212C'/>
+ <entity name='Bernoullis' codepoint='212C'/>
+ <entity name='Beta' codepoint='0392'/>
+ <entity name='beta' codepoint='03B2'/>
+ <entity name='beth' codepoint='2136'/>
+ <entity name='between' codepoint='226C'/>
+ <entity name='Bfr' codepoint='1D505'/>
+ <entity name='bfr' codepoint='1D51F'/>
+ <entity name='Bgr' codepoint='0392'/>
+ <entity name='bgr' codepoint='03B2'/>
+ <entity name='bigcap' codepoint='22C2'/>
+ <entity name='bigcirc' codepoint='25EF'/>
+ <entity name='bigcup' codepoint='22C3'/>
+ <entity name='bigodot' codepoint='2A00'/>
+ <entity name='bigoplus' codepoint='2A01'/>
+ <entity name='bigotimes' codepoint='2A02'/>
+ <entity name='bigsqcup' codepoint='2A06'/>
+ <entity name='bigstar' codepoint='2605'/>
+ <entity name='bigtriangledown' codepoint='25BD'/>
+ <entity name='bigtriangleup' codepoint='25B3'/>
+ <entity name='biguplus' codepoint='2A04'/>
+ <entity name='bigvee' codepoint='22C1'/>
+ <entity name='bigwedge' codepoint='22C0'/>
+ <entity name='bkarow' codepoint='290D'/>
+ <entity name='blacklozenge' codepoint='29EB'/>
+ <entity name='blacksquare' codepoint='25AA'/>
+ <entity name='blacktriangle' codepoint='25B4'/>
+ <entity name='blacktriangledown' codepoint='25BE'/>
+ <entity name='blacktriangleleft' codepoint='25C2'/>
+ <entity name='blacktriangleright' codepoint='25B8'/>
+ <entity name='blank' codepoint='2423'/>
+ <entity name='blk12' codepoint='2592'/>
+ <entity name='blk14' codepoint='2591'/>
+ <entity name='blk34' codepoint='2593'/>
+ <entity name='block' codepoint='2588'/>
+ <entity name='bnot' codepoint='2310'/>
+ <entity name='bNot' codepoint='2AED'/>
+ <entity name='Bopf' codepoint='1D539'/>
+ <entity name='bopf' codepoint='1D553'/>
+ <entity name='bot' codepoint='22A5'/>
+ <entity name='bottom' codepoint='22A5'/>
+ <entity name='bowtie' codepoint='22C8'/>
+ <entity name='boxbox' codepoint='29C9'/>
+ <entity name='boxdl' codepoint='2510'/>
+ <entity name='boxdL' codepoint='2555'/>
+ <entity name='boxDl' codepoint='2556'/>
+ <entity name='boxDL' codepoint='2557'/>
+ <entity name='boxdr' codepoint='250C'/>
+ <entity name='boxdR' codepoint='2552'/>
+ <entity name='boxDr' codepoint='2553'/>
+ <entity name='boxDR' codepoint='2554'/>
+ <entity name='boxh' codepoint='2500'/>
+ <entity name='boxH' codepoint='2550'/>
+ <entity name='boxhd' codepoint='252C'/>
+ <entity name='boxHd' codepoint='2564'/>
+ <entity name='boxhD' codepoint='2565'/>
+ <entity name='boxHD' codepoint='2566'/>
+ <entity name='boxhu' codepoint='2534'/>
+ <entity name='boxHu' codepoint='2567'/>
+ <entity name='boxhU' codepoint='2568'/>
+ <entity name='boxHU' codepoint='2569'/>
+ <entity name='boxminus' codepoint='229F'/>
+ <entity name='boxplus' codepoint='229E'/>
+ <entity name='boxtimes' codepoint='22A0'/>
+ <entity name='boxul' codepoint='2518'/>
+ <entity name='boxuL' codepoint='255B'/>
+ <entity name='boxUl' codepoint='255C'/>
+ <entity name='boxUL' codepoint='255D'/>
+ <entity name='boxur' codepoint='2514'/>
+ <entity name='boxuR' codepoint='2558'/>
+ <entity name='boxUr' codepoint='2559'/>
+ <entity name='boxUR' codepoint='255A'/>
+ <entity name='boxv' codepoint='2502'/>
+ <entity name='boxV' codepoint='2551'/>
+ <entity name='boxvh' codepoint='253C'/>
+ <entity name='boxvH' codepoint='256A'/>
+ <entity name='boxVh' codepoint='256B'/>
+ <entity name='boxVH' codepoint='256C'/>
+ <entity name='boxvl' codepoint='2524'/>
+ <entity name='boxvL' codepoint='2561'/>
+ <entity name='boxVl' codepoint='2562'/>
+ <entity name='boxVL' codepoint='2563'/>
+ <entity name='boxvr' codepoint='251C'/>
+ <entity name='boxvR' codepoint='255E'/>
+ <entity name='boxVr' codepoint='255F'/>
+ <entity name='boxVR' codepoint='2560'/>
+ <entity name='bprime' codepoint='2035'/>
+ <entity name='breve' codepoint='02D8'/>
+ <entity name='brvbar' codepoint='00A6'/>
+ <entity name='Bscr' codepoint='212C'/>
+ <entity name='bscr' codepoint='1D4B7'/>
+ <entity name='bsemi' codepoint='204F'/>
+ <entity name='bsim' codepoint='223D'/>
+ <entity name='bsime' codepoint='22CD'/>
+ <entity name='bsol' codepoint='005C'/>
+ <entity name='bsolb' codepoint='29C5'/>
+ <entity name='bull' codepoint='2022'/>
+ <entity name='bullet' codepoint='2022'/>
+ <entity name='bump' codepoint='224E'/>
+ <entity name='bumpe' codepoint='224F'/>
+ <entity name='bumpE' codepoint='2AAE'/>
+ <entity name='Bumpeq' codepoint='224E'/>
+ <entity name='bumpeq' codepoint='224F'/>
+ <entity name='Cacute' codepoint='0106'/>
+ <entity name='cacute' codepoint='0107'/>
+ <entity name='cap' codepoint='2229'/>
+ <entity name='Cap' codepoint='22D2'/>
+ <entity name='capand' codepoint='2A44'/>
+ <entity name='capbrcup' codepoint='2A49'/>
+ <entity name='capcap' codepoint='2A4B'/>
+ <entity name='capcup' codepoint='2A47'/>
+ <entity name='capdot' codepoint='2A40'/>
+ <entity name='CapitalDifferentialD' codepoint='2145'/>
+ <entity name='caret' codepoint='2041'/>
+ <entity name='caron' codepoint='02C7'/>
+ <entity name='Cayleys' codepoint='212D'/>
+ <entity name='ccaps' codepoint='2A4D'/>
+ <entity name='Ccaron' codepoint='010C'/>
+ <entity name='ccaron' codepoint='010D'/>
+ <entity name='Ccedil' codepoint='00C7'/>
+ <entity name='ccedil' codepoint='00E7'/>
+ <entity name='Ccirc' codepoint='0108'/>
+ <entity name='ccirc' codepoint='0109'/>
+ <entity name='Cconint' codepoint='2230'/>
+ <entity name='ccups' codepoint='2A4C'/>
+ <entity name='ccupssm' codepoint='2A50'/>
+ <entity name='Cdot' codepoint='010A'/>
+ <entity name='cdot' codepoint='010B'/>
+ <entity name='cedil' codepoint='00B8'/>
+ <entity name='Cedilla' codepoint='00B8'/>
+ <entity name='cemptyv' codepoint='29B2'/>
+ <entity name='cent' codepoint='00A2'/>
+ <entity name='centerdot' codepoint='00B7'/>
+ <entity name='Cfr' codepoint='212D'/>
+ <entity name='cfr' codepoint='1D520'/>
+ <entity name='CHcy' codepoint='0427'/>
+ <entity name='chcy' codepoint='0447'/>
+ <entity name='check' codepoint='2713'/>
+ <entity name='checkmark' codepoint='2713'/>
+ <entity name='Chi' codepoint='03A7'/>
+ <entity name='chi' codepoint='03C7'/>
+ <entity name='cir' codepoint='25CB'/>
+ <entity name='circ' codepoint='02C6'/>
+ <entity name='circeq' codepoint='2257'/>
+ <entity name='circlearrowleft' codepoint='21BA'/>
+ <entity name='circlearrowright' codepoint='21BB'/>
+ <entity name='circledast' codepoint='229B'/>
+ <entity name='circledcirc' codepoint='229A'/>
+ <entity name='circleddash' codepoint='229D'/>
+ <entity name='CircleDot' codepoint='2299'/>
+ <entity name='circledR' codepoint='00AE'/>
+ <entity name='circledS' codepoint='24C8'/>
+ <entity name='CircleMinus' codepoint='2296'/>
+ <entity name='CirclePlus' codepoint='2295'/>
+ <entity name='CircleTimes' codepoint='2297'/>
+ <entity name='cire' codepoint='2257'/>
+ <entity name='cirE' codepoint='29C3'/>
+ <entity name='cirfnint' codepoint='2A10'/>
+ <entity name='cirmid' codepoint='2AEF'/>
+ <entity name='cirscir' codepoint='29C2'/>
+ <entity name='ClockwiseContourIntegral' codepoint='2232'/>
+ <entity name='CloseCurlyDoubleQuote' codepoint='201D'/>
+ <entity name='CloseCurlyQuote' codepoint='2019'/>
+ <entity name='clubs' codepoint='2663'/>
+ <entity name='clubsuit' codepoint='2663'/>
+ <entity name='colon' codepoint='003A'/>
+ <entity name='Colon' codepoint='2237'/>
+ <entity name='colone' codepoint='2254'/>
+ <entity name='Colone' codepoint='2A74'/>
+ <entity name='coloneq' codepoint='2254'/>
+ <entity name='comma' codepoint='002C'/>
+ <entity name='commat' codepoint='0040'/>
+ <entity name='comp' codepoint='2201'/>
+ <entity name='compfn' codepoint='2218'/>
+ <entity name='complement' codepoint='2201'/>
+ <entity name='complexes' codepoint='2102'/>
+ <entity name='cong' codepoint='2245'/>
+ <entity name='congdot' codepoint='2A6D'/>
+ <entity name='Congruent' codepoint='2261'/>
+ <entity name='conint' codepoint='222E'/>
+ <entity name='Conint' codepoint='222F'/>
+ <entity name='ContourIntegral' codepoint='222E'/>
+ <entity name='Copf' codepoint='2102'/>
+ <entity name='copf' codepoint='1D554'/>
+ <entity name='coprod' codepoint='2210'/>
+ <entity name='Coproduct' codepoint='2210'/>
+ <entity name='copy' codepoint='00A9'/>
+ <entity name='copysr' codepoint='2117'/>
+ <entity name='CounterClockwiseContourIntegral' codepoint='2233'/>
+ <entity name='crarr' codepoint='21B5'/>
+ <entity name='cross' codepoint='2717'/>
+ <entity name='Cross' codepoint='2A2F'/>
+ <entity name='Cscr' codepoint='1D49E'/>
+ <entity name='cscr' codepoint='1D4B8'/>
+ <entity name='csub' codepoint='2ACF'/>
+ <entity name='csube' codepoint='2AD1'/>
+ <entity name='csup' codepoint='2AD0'/>
+ <entity name='csupe' codepoint='2AD2'/>
+ <entity name='ctdot' codepoint='22EF'/>
+ <entity name='cudarrl' codepoint='2938'/>
+ <entity name='cudarrr' codepoint='2935'/>
+ <entity name='cuepr' codepoint='22DE'/>
+ <entity name='cuesc' codepoint='22DF'/>
+ <entity name='cularr' codepoint='21B6'/>
+ <entity name='cularrp' codepoint='293D'/>
+ <entity name='cup' codepoint='222A'/>
+ <entity name='Cup' codepoint='22D3'/>
+ <entity name='cupbrcap' codepoint='2A48'/>
+ <entity name='CupCap' codepoint='224D'/>
+ <entity name='cupcap' codepoint='2A46'/>
+ <entity name='cupcup' codepoint='2A4A'/>
+ <entity name='cupdot' codepoint='228D'/>
+ <entity name='cupor' codepoint='2A45'/>
+ <entity name='curarr' codepoint='21B7'/>
+ <entity name='curarrm' codepoint='293C'/>
+ <entity name='curlyeqprec' codepoint='22DE'/>
+ <entity name='curlyeqsucc' codepoint='22DF'/>
+ <entity name='curlyvee' codepoint='22CE'/>
+ <entity name='curlywedge' codepoint='22CF'/>
+ <entity name='curren' codepoint='00A4'/>
+ <entity name='curvearrowleft' codepoint='21B6'/>
+ <entity name='curvearrowright' codepoint='21B7'/>
+ <entity name='cuvee' codepoint='22CE'/>
+ <entity name='cuwed' codepoint='22CF'/>
+ <entity name='cwconint' codepoint='2232'/>
+ <entity name='cwint' codepoint='2231'/>
+ <entity name='cylcty' codepoint='232D'/>
+ <entity name='dagger' codepoint='2020'/>
+ <entity name='Dagger' codepoint='2021'/>
+ <entity name='daleth' codepoint='2138'/>
+ <entity name='darr' codepoint='2193'/>
+ <entity name='Darr' codepoint='21A1'/>
+ <entity name='dArr' codepoint='21D3'/>
+ <entity name='dash' codepoint='2010'/>
+ <entity name='dashv' codepoint='22A3'/>
+ <entity name='Dashv' codepoint='2AE4'/>
+ <entity name='dbkarow' codepoint='290F'/>
+ <entity name='dblac' codepoint='02DD'/>
+ <entity name='Dcaron' codepoint='010E'/>
+ <entity name='dcaron' codepoint='010F'/>
+ <entity name='Dcy' codepoint='0414'/>
+ <entity name='dcy' codepoint='0434'/>
+ <entity name='DD' codepoint='2145'/>
+ <entity name='dd' codepoint='2146'/>
+ <entity name='ddagger' codepoint='2021'/>
+ <entity name='ddarr' codepoint='21CA'/>
+ <entity name='DDotrahd' codepoint='2911'/>
+ <entity name='ddotseq' codepoint='2A77'/>
+ <entity name='deg' codepoint='00B0'/>
+ <entity name='Del' codepoint='2207'/>
+ <entity name='Delta' codepoint='0394'/>
+ <entity name='delta' codepoint='03B4'/>
+ <entity name='demptyv' codepoint='29B1'/>
+ <entity name='dfisht' codepoint='297F'/>
+ <entity name='Dfr' codepoint='1D507'/>
+ <entity name='dfr' codepoint='1D521'/>
+ <entity name='Dgr' codepoint='0394'/>
+ <entity name='dgr' codepoint='03B4'/>
+ <entity name='dHar' codepoint='2965'/>
+ <entity name='dharl' codepoint='21C3'/>
+ <entity name='dharr' codepoint='21C2'/>
+ <entity name='DiacriticalAcute' codepoint='00B4'/>
+ <entity name='DiacriticalDot' codepoint='02D9'/>
+ <entity name='DiacriticalDoubleAcute' codepoint='02DD'/>
+ <entity name='DiacriticalGrave' codepoint='0060'/>
+ <entity name='DiacriticalTilde' codepoint='02DC'/>
+ <entity name='diam' codepoint='22C4'/>
+ <entity name='diamond' codepoint='22C4'/>
+ <entity name='diamondsuit' codepoint='2666'/>
+ <entity name='diams' codepoint='2666'/>
+ <entity name='die' codepoint='00A8'/>
+ <entity name='DifferentialD' codepoint='2146'/>
+ <entity name='digamma' codepoint='03DD'/>
+ <entity name='disin' codepoint='22F2'/>
+ <entity name='div' codepoint='00F7'/>
+ <entity name='divide' codepoint='00F7'/>
+ <entity name='divideontimes' codepoint='22C7'/>
+ <entity name='divonx' codepoint='22C7'/>
+ <entity name='DJcy' codepoint='0402'/>
+ <entity name='djcy' codepoint='0452'/>
+ <entity name='dlcorn' codepoint='231E'/>
+ <entity name='dlcrop' codepoint='230D'/>
+ <entity name='dollar' codepoint='0024'/>
+ <entity name='Dopf' codepoint='1D53B'/>
+ <entity name='dopf' codepoint='1D555'/>
+ <entity name='Dot' codepoint='00A8'/>
+ <entity name='dot' codepoint='02D9'/>
+ <entity name='doteq' codepoint='2250'/>
+ <entity name='doteqdot' codepoint='2251'/>
+ <entity name='DotEqual' codepoint='2250'/>
+ <entity name='dotminus' codepoint='2238'/>
+ <entity name='dotplus' codepoint='2214'/>
+ <entity name='dotsquare' codepoint='22A1'/>
+ <entity name='doublebarwedge' codepoint='2306'/>
+ <entity name='DoubleContourIntegral' codepoint='222F'/>
+ <entity name='DoubleDot' codepoint='00A8'/>
+ <entity name='DoubleDownArrow' codepoint='21D3'/>
+ <entity name='DoubleLeftArrow' codepoint='21D0'/>
+ <entity name='DoubleLeftRightArrow' codepoint='21D4'/>
+ <entity name='DoubleLeftTee' codepoint='2AE4'/>
+ <entity name='DoubleLongLeftArrow' codepoint='27F8'/>
+ <entity name='DoubleLongLeftRightArrow' codepoint='27FA'/>
+ <entity name='DoubleLongRightArrow' codepoint='27F9'/>
+ <entity name='DoubleRightArrow' codepoint='21D2'/>
+ <entity name='DoubleRightTee' codepoint='22A8'/>
+ <entity name='DoubleUpArrow' codepoint='21D1'/>
+ <entity name='DoubleUpDownArrow' codepoint='21D5'/>
+ <entity name='DoubleVerticalBar' codepoint='2225'/>
+ <entity name='downarrow' codepoint='2193'/>
+ <entity name='Downarrow' codepoint='21D3'/>
+ <entity name='DownArrowBar' codepoint='2913'/>
+ <entity name='DownArrowUpArrow' codepoint='21F5'/>
+ <entity name='downdownarrows' codepoint='21CA'/>
+ <entity name='downharpoonleft' codepoint='21C3'/>
+ <entity name='downharpoonright' codepoint='21C2'/>
+ <entity name='DownLeftRightVector' codepoint='2950'/>
+ <entity name='DownLeftTeeVector' codepoint='295E'/>
+ <entity name='DownLeftVector' codepoint='21BD'/>
+ <entity name='DownLeftVectorBar' codepoint='2956'/>
+ <entity name='DownRightTeeVector' codepoint='295F'/>
+ <entity name='DownRightVector' codepoint='21C1'/>
+ <entity name='DownRightVectorBar' codepoint='2957'/>
+ <entity name='DownTee' codepoint='22A4'/>
+ <entity name='DownTeeArrow' codepoint='21A7'/>
+ <entity name='drbkarow' codepoint='2910'/>
+ <entity name='drcorn' codepoint='231F'/>
+ <entity name='drcrop' codepoint='230C'/>
+ <entity name='Dscr' codepoint='1D49F'/>
+ <entity name='dscr' codepoint='1D4B9'/>
+ <entity name='DScy' codepoint='0405'/>
+ <entity name='dscy' codepoint='0455'/>
+ <entity name='dsol' codepoint='29F6'/>
+ <entity name='Dstrok' codepoint='0110'/>
+ <entity name='dstrok' codepoint='0111'/>
+ <entity name='dtdot' codepoint='22F1'/>
+ <entity name='dtri' codepoint='25BF'/>
+ <entity name='dtrif' codepoint='25BE'/>
+ <entity name='duarr' codepoint='21F5'/>
+ <entity name='duhar' codepoint='296F'/>
+ <entity name='dwangle' codepoint='29A6'/>
+ <entity name='DZcy' codepoint='040F'/>
+ <entity name='dzcy' codepoint='045F'/>
+ <entity name='dzigrarr' codepoint='27FF'/>
+ <entity name='Eacgr' codepoint='0388'/>
+ <entity name='eacgr' codepoint='03AD'/>
+ <entity name='Eacute' codepoint='00C9'/>
+ <entity name='eacute' codepoint='00E9'/>
+ <entity name='easter' codepoint='2A6E'/>
+ <entity name='Ecaron' codepoint='011A'/>
+ <entity name='ecaron' codepoint='011B'/>
+ <entity name='ecir' codepoint='2256'/>
+ <entity name='Ecirc' codepoint='00CA'/>
+ <entity name='ecirc' codepoint='00EA'/>
+ <entity name='ecolon' codepoint='2255'/>
+ <entity name='Ecy' codepoint='042D'/>
+ <entity name='ecy' codepoint='044D'/>
+ <entity name='eDDot' codepoint='2A77'/>
+ <entity name='Edot' codepoint='0116'/>
+ <entity name='edot' codepoint='0117'/>
+ <entity name='eDot' codepoint='2251'/>
+ <entity name='ee' codepoint='2147'/>
+ <entity name='EEacgr' codepoint='0389'/>
+ <entity name='eeacgr' codepoint='03AE'/>
+ <entity name='EEgr' codepoint='0397'/>
+ <entity name='eegr' codepoint='03B7'/>
+ <entity name='efDot' codepoint='2252'/>
+ <entity name='Efr' codepoint='1D508'/>
+ <entity name='efr' codepoint='1D522'/>
+ <entity name='eg' codepoint='2A9A'/>
+ <entity name='Egr' codepoint='0395'/>
+ <entity name='egr' codepoint='03B5'/>
+ <entity name='Egrave' codepoint='00C8'/>
+ <entity name='egrave' codepoint='00E8'/>
+ <entity name='egs' codepoint='2A96'/>
+ <entity name='egsdot' codepoint='2A98'/>
+ <entity name='el' codepoint='2A99'/>
+ <entity name='Element' codepoint='2208'/>
+ <entity name='elinters' codepoint='23E7'/>
+ <entity name='ell' codepoint='2113'/>
+ <entity name='els' codepoint='2A95'/>
+ <entity name='elsdot' codepoint='2A97'/>
+ <entity name='Emacr' codepoint='0112'/>
+ <entity name='emacr' codepoint='0113'/>
+ <entity name='empty' codepoint='2205'/>
+ <entity name='emptyset' codepoint='2205'/>
+ <entity name='EmptySmallSquare' codepoint='25FB'/>
+ <entity name='emptyv' codepoint='2205'/>
+ <entity name='EmptyVerySmallSquare' codepoint='25AB'/>
+ <entity name='emsp' codepoint='2003'/>
+ <entity name='emsp13' codepoint='2004'/>
+ <entity name='emsp14' codepoint='2005'/>
+ <entity name='ENG' codepoint='014A'/>
+ <entity name='eng' codepoint='014B'/>
+ <entity name='ensp' codepoint='2002'/>
+ <entity name='Eogon' codepoint='0118'/>
+ <entity name='eogon' codepoint='0119'/>
+ <entity name='Eopf' codepoint='1D53C'/>
+ <entity name='eopf' codepoint='1D556'/>
+ <entity name='epar' codepoint='22D5'/>
+ <entity name='eparsl' codepoint='29E3'/>
+ <entity name='eplus' codepoint='2A71'/>
+ <entity name='epsi' codepoint='03F5'/>
+ <entity name='Epsilon' codepoint='0395'/>
+ <entity name='epsilon' codepoint='03B5'/>
+ <entity name='epsiv' codepoint='03B5'/>
+ <entity name='eqcirc' codepoint='2256'/>
+ <entity name='eqcolon' codepoint='2255'/>
+ <entity name='eqsim' codepoint='2242'/>
+ <entity name='eqslantgtr' codepoint='2A96'/>
+ <entity name='eqslantless' codepoint='2A95'/>
+ <entity name='Equal' codepoint='2A75'/>
+ <entity name='equals' codepoint='003D'/>
+ <entity name='EqualTilde' codepoint='2242'/>
+ <entity name='equest' codepoint='225F'/>
+ <entity name='Equilibrium' codepoint='21CC'/>
+ <entity name='equiv' codepoint='2261'/>
+ <entity name='equivDD' codepoint='2A78'/>
+ <entity name='eqvparsl' codepoint='29E5'/>
+ <entity name='erarr' codepoint='2971'/>
+ <entity name='erDot' codepoint='2253'/>
+ <entity name='escr' codepoint='212F'/>
+ <entity name='Escr' codepoint='2130'/>
+ <entity name='esdot' codepoint='2250'/>
+ <entity name='esim' codepoint='2242'/>
+ <entity name='Esim' codepoint='2A73'/>
+ <entity name='Eta' codepoint='0397'/>
+ <entity name='eta' codepoint='03B7'/>
+ <entity name='ETH' codepoint='00D0'/>
+ <entity name='eth' codepoint='00F0'/>
+ <entity name='Euml' codepoint='00CB'/>
+ <entity name='euml' codepoint='00EB'/>
+ <entity name='euro' codepoint='20AC'/>
+ <entity name='excl' codepoint='0021'/>
+ <entity name='exist' codepoint='2203'/>
+ <entity name='Exists' codepoint='2203'/>
+ <entity name='expectation' codepoint='2130'/>
+ <entity name='exponentiale' codepoint='2147'/>
+ <entity name='fallingdotseq' codepoint='2252'/>
+ <entity name='Fcy' codepoint='0424'/>
+ <entity name='fcy' codepoint='0444'/>
+ <entity name='female' codepoint='2640'/>
+ <entity name='ffilig' codepoint='FB03'/>
+ <entity name='fflig' codepoint='FB00'/>
+ <entity name='ffllig' codepoint='FB04'/>
+ <entity name='Ffr' codepoint='1D509'/>
+ <entity name='ffr' codepoint='1D523'/>
+ <entity name='filig' codepoint='FB01'/>
+ <entity name='FilledSmallSquare' codepoint='25FC'/>
+ <entity name='FilledVerySmallSquare' codepoint='25AA'/>
+ <entity name='flat' codepoint='266D'/>
+ <entity name='fllig' codepoint='FB02'/>
+ <entity name='fltns' codepoint='25B1'/>
+ <entity name='fnof' codepoint='0192'/>
+ <entity name='Fopf' codepoint='1D53D'/>
+ <entity name='fopf' codepoint='1D557'/>
+ <entity name='forall' codepoint='2200'/>
+ <entity name='fork' codepoint='22D4'/>
+ <entity name='forkv' codepoint='2AD9'/>
+ <entity name='Fouriertrf' codepoint='2131'/>
+ <entity name='fpartint' codepoint='2A0D'/>
+ <entity name='frac12' codepoint='00BD'/>
+ <entity name='frac13' codepoint='2153'/>
+ <entity name='frac14' codepoint='00BC'/>
+ <entity name='frac15' codepoint='2155'/>
+ <entity name='frac16' codepoint='2159'/>
+ <entity name='frac18' codepoint='215B'/>
+ <entity name='frac23' codepoint='2154'/>
+ <entity name='frac25' codepoint='2156'/>
+ <entity name='frac34' codepoint='00BE'/>
+ <entity name='frac35' codepoint='2157'/>
+ <entity name='frac38' codepoint='215C'/>
+ <entity name='frac45' codepoint='2158'/>
+ <entity name='frac56' codepoint='215A'/>
+ <entity name='frac58' codepoint='215D'/>
+ <entity name='frac78' codepoint='215E'/>
+ <entity name='frasl' codepoint='2044'/>
+ <entity name='frown' codepoint='2322'/>
+ <entity name='Fscr' codepoint='2131'/>
+ <entity name='fscr' codepoint='1D4BB'/>
+ <entity name='gacute' codepoint='01F5'/>
+ <entity name='Gamma' codepoint='0393'/>
+ <entity name='gamma' codepoint='03B3'/>
+ <entity name='Gammad' codepoint='03DC'/>
+ <entity name='gammad' codepoint='03DD'/>
+ <entity name='gap' codepoint='2A86'/>
+ <entity name='Gbreve' codepoint='011E'/>
+ <entity name='gbreve' codepoint='011F'/>
+ <entity name='Gcedil' codepoint='0122'/>
+ <entity name='Gcirc' codepoint='011C'/>
+ <entity name='gcirc' codepoint='011D'/>
+ <entity name='Gcy' codepoint='0413'/>
+ <entity name='gcy' codepoint='0433'/>
+ <entity name='Gdot' codepoint='0120'/>
+ <entity name='gdot' codepoint='0121'/>
+ <entity name='ge' codepoint='2265'/>
+ <entity name='gE' codepoint='2267'/>
+ <entity name='gel' codepoint='22DB'/>
+ <entity name='gEl' codepoint='2A8C'/>
+ <entity name='geq' codepoint='2265'/>
+ <entity name='geqq' codepoint='2267'/>
+ <entity name='geqslant' codepoint='2A7E'/>
+ <entity name='ges' codepoint='2A7E'/>
+ <entity name='gescc' codepoint='2AA9'/>
+ <entity name='gesdot' codepoint='2A80'/>
+ <entity name='gesdoto' codepoint='2A82'/>
+ <entity name='gesdotol' codepoint='2A84'/>
+ <entity name='gesles' codepoint='2A94'/>
+ <entity name='Gfr' codepoint='1D50A'/>
+ <entity name='gfr' codepoint='1D524'/>
+ <entity name='gg' codepoint='226B'/>
+ <entity name='Gg' codepoint='22D9'/>
+ <entity name='ggg' codepoint='22D9'/>
+ <entity name='Ggr' codepoint='0393'/>
+ <entity name='ggr' codepoint='03B3'/>
+ <entity name='gimel' codepoint='2137'/>
+ <entity name='GJcy' codepoint='0403'/>
+ <entity name='gjcy' codepoint='0453'/>
+ <entity name='gl' codepoint='2277'/>
+ <entity name='gla' codepoint='2AA5'/>
+ <entity name='glE' codepoint='2A92'/>
+ <entity name='glj' codepoint='2AA4'/>
+ <entity name='gnap' codepoint='2A8A'/>
+ <entity name='gnapprox' codepoint='2A8A'/>
+ <entity name='gnE' codepoint='2269'/>
+ <entity name='gne' codepoint='2A88'/>
+ <entity name='gneq' codepoint='2A88'/>
+ <entity name='gneqq' codepoint='2269'/>
+ <entity name='gnsim' codepoint='22E7'/>
+ <entity name='Gopf' codepoint='1D53E'/>
+ <entity name='gopf' codepoint='1D558'/>
+ <entity name='grave' codepoint='0060'/>
+ <entity name='GreaterEqual' codepoint='2265'/>
+ <entity name='GreaterEqualLess' codepoint='22DB'/>
+ <entity name='GreaterFullEqual' codepoint='2267'/>
+ <entity name='GreaterGreater' codepoint='2AA2'/>
+ <entity name='GreaterLess' codepoint='2277'/>
+ <entity name='GreaterSlantEqual' codepoint='2A7E'/>
+ <entity name='GreaterTilde' codepoint='2273'/>
+ <entity name='gscr' codepoint='210A'/>
+ <entity name='Gscr' codepoint='1D4A2'/>
+ <entity name='gsim' codepoint='2273'/>
+ <entity name='gsime' codepoint='2A8E'/>
+ <entity name='gsiml' codepoint='2A90'/>
+ <entity name='gt' codepoint='003E'/>
+ <entity name='Gt' codepoint='226B'/>
+ <entity name='gtcc' codepoint='2AA7'/>
+ <entity name='gtcir' codepoint='2A7A'/>
+ <entity name='gtdot' codepoint='22D7'/>
+ <entity name='gtlPar' codepoint='2995'/>
+ <entity name='gtquest' codepoint='2A7C'/>
+ <entity name='gtrapprox' codepoint='2A86'/>
+ <entity name='gtrarr' codepoint='2978'/>
+ <entity name='gtrdot' codepoint='22D7'/>
+ <entity name='gtreqless' codepoint='22DB'/>
+ <entity name='gtreqqless' codepoint='2A8C'/>
+ <entity name='gtrless' codepoint='2277'/>
+ <entity name='gtrsim' codepoint='2273'/>
+ <entity name='Hacek' codepoint='02C7'/>
+ <entity name='hairsp' codepoint='200A'/>
+ <entity name='half' codepoint='00BD'/>
+ <entity name='hamilt' codepoint='210B'/>
+ <entity name='HARDcy' codepoint='042A'/>
+ <entity name='hardcy' codepoint='044A'/>
+ <entity name='harr' codepoint='2194'/>
+ <entity name='hArr' codepoint='21D4'/>
+ <entity name='harrcir' codepoint='2948'/>
+ <entity name='harrw' codepoint='21AD'/>
+ <entity name='Hat' codepoint='005E'/>
+ <entity name='hbar' codepoint='210F'/>
+ <entity name='Hcirc' codepoint='0124'/>
+ <entity name='hcirc' codepoint='0125'/>
+ <entity name='hearts' codepoint='2665'/>
+ <entity name='heartsuit' codepoint='2665'/>
+ <entity name='hellip' codepoint='2026'/>
+ <entity name='hercon' codepoint='22B9'/>
+ <entity name='Hfr' codepoint='210C'/>
+ <entity name='hfr' codepoint='1D525'/>
+ <entity name='HilbertSpace' codepoint='210B'/>
+ <entity name='hksearow' codepoint='2925'/>
+ <entity name='hkswarow' codepoint='2926'/>
+ <entity name='hoarr' codepoint='21FF'/>
+ <entity name='homtht' codepoint='223B'/>
+ <entity name='hookleftarrow' codepoint='21A9'/>
+ <entity name='hookrightarrow' codepoint='21AA'/>
+ <entity name='Hopf' codepoint='210D'/>
+ <entity name='hopf' codepoint='1D559'/>
+ <entity name='horbar' codepoint='2015'/>
+ <entity name='HorizontalLine' codepoint='2500'/>
+ <entity name='Hscr' codepoint='210B'/>
+ <entity name='hscr' codepoint='1D4BD'/>
+ <entity name='hslash' codepoint='210F'/>
+ <entity name='Hstrok' codepoint='0126'/>
+ <entity name='hstrok' codepoint='0127'/>
+ <entity name='HumpDownHump' codepoint='224E'/>
+ <entity name='HumpEqual' codepoint='224F'/>
+ <entity name='hybull' codepoint='2043'/>
+ <entity name='hyphen' codepoint='2010'/>
+ <entity name='Iacgr' codepoint='038A'/>
+ <entity name='iacgr' codepoint='03AF'/>
+ <entity name='Iacute' codepoint='00CD'/>
+ <entity name='iacute' codepoint='00ED'/>
+ <entity name='ic' codepoint='2063'/>
+ <entity name='Icirc' codepoint='00CE'/>
+ <entity name='icirc' codepoint='00EE'/>
+ <entity name='Icy' codepoint='0418'/>
+ <entity name='icy' codepoint='0438'/>
+ <entity name='idiagr' codepoint='0390'/>
+ <entity name='Idigr' codepoint='03AA'/>
+ <entity name='idigr' codepoint='03CA'/>
+ <entity name='Idot' codepoint='0130'/>
+ <entity name='IEcy' codepoint='0415'/>
+ <entity name='iecy' codepoint='0435'/>
+ <entity name='iexcl' codepoint='00A1'/>
+ <entity name='iff' codepoint='21D4'/>
+ <entity name='Ifr' codepoint='2111'/>
+ <entity name='ifr' codepoint='1D526'/>
+ <entity name='Igr' codepoint='0399'/>
+ <entity name='igr' codepoint='03B9'/>
+ <entity name='Igrave' codepoint='00CC'/>
+ <entity name='igrave' codepoint='00EC'/>
+ <entity name='ii' codepoint='2148'/>
+ <entity name='iiiint' codepoint='2A0C'/>
+ <entity name='iiint' codepoint='222D'/>
+ <entity name='iinfin' codepoint='29DC'/>
+ <entity name='iiota' codepoint='2129'/>
+ <entity name='IJlig' codepoint='0132'/>
+ <entity name='ijlig' codepoint='0133'/>
+ <entity name='Im' codepoint='2111'/>
+ <entity name='Imacr' codepoint='012A'/>
+ <entity name='imacr' codepoint='012B'/>
+ <entity name='image' codepoint='2111'/>
+ <entity name='ImaginaryI' codepoint='2148'/>
+ <entity name='imagline' codepoint='2110'/>
+ <entity name='imagpart' codepoint='2111'/>
+ <entity name='imath' codepoint='0131'/>
+ <entity name='imof' codepoint='22B7'/>
+ <entity name='imped' codepoint='01B5'/>
+ <entity name='Implies' codepoint='21D2'/>
+ <entity name='in' codepoint='2208'/>
+ <entity name='incare' codepoint='2105'/>
+ <entity name='infin' codepoint='221E'/>
+ <entity name='infintie' codepoint='29DD'/>
+ <entity name='inodot' codepoint='0131'/>
+ <entity name='int' codepoint='222B'/>
+ <entity name='Int' codepoint='222C'/>
+ <entity name='intcal' codepoint='22BA'/>
+ <entity name='integers' codepoint='2124'/>
+ <entity name='Integral' codepoint='222B'/>
+ <entity name='intercal' codepoint='22BA'/>
+ <entity name='Intersection' codepoint='22C2'/>
+ <entity name='intlarhk' codepoint='2A17'/>
+ <entity name='intprod' codepoint='2A3C'/>
+ <entity name='InvisibleComma' codepoint='2063'/>
+ <entity name='InvisibleTimes' codepoint='2062'/>
+ <entity name='IOcy' codepoint='0401'/>
+ <entity name='iocy' codepoint='0451'/>
+ <entity name='Iogon' codepoint='012E'/>
+ <entity name='iogon' codepoint='012F'/>
+ <entity name='Iopf' codepoint='1D540'/>
+ <entity name='iopf' codepoint='1D55A'/>
+ <entity name='Iota' codepoint='0399'/>
+ <entity name='iota' codepoint='03B9'/>
+ <entity name='iprod' codepoint='2A3C'/>
+ <entity name='iquest' codepoint='00BF'/>
+ <entity name='Iscr' codepoint='2110'/>
+ <entity name='iscr' codepoint='1D4BE'/>
+ <entity name='isin' codepoint='2208'/>
+ <entity name='isindot' codepoint='22F5'/>
+ <entity name='isinE' codepoint='22F9'/>
+ <entity name='isins' codepoint='22F4'/>
+ <entity name='isinsv' codepoint='22F3'/>
+ <entity name='isinv' codepoint='2208'/>
+ <entity name='it' codepoint='2062'/>
+ <entity name='Itilde' codepoint='0128'/>
+ <entity name='itilde' codepoint='0129'/>
+ <entity name='Iukcy' codepoint='0406'/>
+ <entity name='iukcy' codepoint='0456'/>
+ <entity name='Iuml' codepoint='00CF'/>
+ <entity name='iuml' codepoint='00EF'/>
+ <entity name='Jcirc' codepoint='0134'/>
+ <entity name='jcirc' codepoint='0135'/>
+ <entity name='Jcy' codepoint='0419'/>
+ <entity name='jcy' codepoint='0439'/>
+ <entity name='Jfr' codepoint='1D50D'/>
+ <entity name='jfr' codepoint='1D527'/>
+ <entity name='jmath' codepoint='0237'/>
+ <entity name='Jopf' codepoint='1D541'/>
+ <entity name='jopf' codepoint='1D55B'/>
+ <entity name='Jscr' codepoint='1D4A5'/>
+ <entity name='jscr' codepoint='1D4BF'/>
+ <entity name='Jsercy' codepoint='0408'/>
+ <entity name='jsercy' codepoint='0458'/>
+ <entity name='Jukcy' codepoint='0404'/>
+ <entity name='jukcy' codepoint='0454'/>
+ <entity name='Kappa' codepoint='039A'/>
+ <entity name='kappa' codepoint='03BA'/>
+ <entity name='kappav' codepoint='03F0'/>
+ <entity name='Kcedil' codepoint='0136'/>
+ <entity name='kcedil' codepoint='0137'/>
+ <entity name='Kcy' codepoint='041A'/>
+ <entity name='kcy' codepoint='043A'/>
+ <entity name='Kfr' codepoint='1D50E'/>
+ <entity name='kfr' codepoint='1D528'/>
+ <entity name='Kgr' codepoint='039A'/>
+ <entity name='kgr' codepoint='03BA'/>
+ <entity name='kgreen' codepoint='0138'/>
+ <entity name='KHcy' codepoint='0425'/>
+ <entity name='khcy' codepoint='0445'/>
+ <entity name='KHgr' codepoint='03A7'/>
+ <entity name='khgr' codepoint='03C7'/>
+ <entity name='KJcy' codepoint='040C'/>
+ <entity name='kjcy' codepoint='045C'/>
+ <entity name='Kopf' codepoint='1D542'/>
+ <entity name='kopf' codepoint='1D55C'/>
+ <entity name='Kscr' codepoint='1D4A6'/>
+ <entity name='kscr' codepoint='1D4C0'/>
+ <entity name='lAarr' codepoint='21DA'/>
+ <entity name='Lacute' codepoint='0139'/>
+ <entity name='lacute' codepoint='013A'/>
+ <entity name='laemptyv' codepoint='29B4'/>
+ <entity name='lagran' codepoint='2112'/>
+ <entity name='Lambda' codepoint='039B'/>
+ <entity name='lambda' codepoint='03BB'/>
+ <entity name='lang' codepoint='2329'/>
+ <entity name='Lang' codepoint='27EA'/>
+ <entity name='langd' codepoint='2991'/>
+ <entity name='langle' codepoint='2329'/>
+ <entity name='lap' codepoint='2A85'/>
+ <entity name='Laplacetrf' codepoint='2112'/>
+ <entity name='laquo' codepoint='00AB'/>
+ <entity name='larr' codepoint='2190'/>
+ <entity name='Larr' codepoint='219E'/>
+ <entity name='lArr' codepoint='21D0'/>
+ <entity name='larrb' codepoint='21E4'/>
+ <entity name='larrbfs' codepoint='291F'/>
+ <entity name='larrfs' codepoint='291D'/>
+ <entity name='larrhk' codepoint='21A9'/>
+ <entity name='larrlp' codepoint='21AB'/>
+ <entity name='larrpl' codepoint='2939'/>
+ <entity name='larrsim' codepoint='2973'/>
+ <entity name='larrtl' codepoint='21A2'/>
+ <entity name='lat' codepoint='2AAB'/>
+ <entity name='latail' codepoint='2919'/>
+ <entity name='lAtail' codepoint='291B'/>
+ <entity name='late' codepoint='2AAD'/>
+ <entity name='lbarr' codepoint='290C'/>
+ <entity name='lBarr' codepoint='290E'/>
+ <entity name='lbbrk' codepoint='2997'/>
+ <entity name='lbrace' codepoint='007B'/>
+ <entity name='lbrack' codepoint='005B'/>
+ <entity name='lbrke' codepoint='298B'/>
+ <entity name='lbrksld' codepoint='298F'/>
+ <entity name='lbrkslu' codepoint='298D'/>
+ <entity name='Lcaron' codepoint='013D'/>
+ <entity name='lcaron' codepoint='013E'/>
+ <entity name='Lcedil' codepoint='013B'/>
+ <entity name='lcedil' codepoint='013C'/>
+ <entity name='lceil' codepoint='2308'/>
+ <entity name='lcub' codepoint='007B'/>
+ <entity name='Lcy' codepoint='041B'/>
+ <entity name='lcy' codepoint='043B'/>
+ <entity name='ldca' codepoint='2936'/>
+ <entity name='ldquo' codepoint='201C'/>
+ <entity name='ldquor' codepoint='201E'/>
+ <entity name='ldrdhar' codepoint='2967'/>
+ <entity name='ldrushar' codepoint='294B'/>
+ <entity name='ldsh' codepoint='21B2'/>
+ <entity name='le' codepoint='2264'/>
+ <entity name='lE' codepoint='2266'/>
+ <entity name='LeftAngleBracket' codepoint='2329'/>
+ <entity name='leftarrow' codepoint='2190'/>
+ <entity name='Leftarrow' codepoint='21D0'/>
+ <entity name='LeftArrowBar' codepoint='21E4'/>
+ <entity name='LeftArrowRightArrow' codepoint='21C6'/>
+ <entity name='leftarrowtail' codepoint='21A2'/>
+ <entity name='LeftCeiling' codepoint='2308'/>
+ <entity name='LeftDoubleBracket' codepoint='27E6'/>
+ <entity name='LeftDownTeeVector' codepoint='2961'/>
+ <entity name='LeftDownVector' codepoint='21C3'/>
+ <entity name='LeftDownVectorBar' codepoint='2959'/>
+ <entity name='LeftFloor' codepoint='230A'/>
+ <entity name='leftharpoondown' codepoint='21BD'/>
+ <entity name='leftharpoonup' codepoint='21BC'/>
+ <entity name='leftleftarrows' codepoint='21C7'/>
+ <entity name='leftrightarrow' codepoint='2194'/>
+ <entity name='Leftrightarrow' codepoint='21D4'/>
+ <entity name='leftrightarrows' codepoint='21C6'/>
+ <entity name='leftrightharpoons' codepoint='21CB'/>
+ <entity name='leftrightsquigarrow' codepoint='21AD'/>
+ <entity name='LeftRightVector' codepoint='294E'/>
+ <entity name='LeftTee' codepoint='22A3'/>
+ <entity name='LeftTeeArrow' codepoint='21A4'/>
+ <entity name='LeftTeeVector' codepoint='295A'/>
+ <entity name='leftthreetimes' codepoint='22CB'/>
+ <entity name='LeftTriangle' codepoint='22B2'/>
+ <entity name='LeftTriangleBar' codepoint='29CF'/>
+ <entity name='LeftTriangleEqual' codepoint='22B4'/>
+ <entity name='LeftUpDownVector' codepoint='2951'/>
+ <entity name='LeftUpTeeVector' codepoint='2960'/>
+ <entity name='LeftUpVector' codepoint='21BF'/>
+ <entity name='LeftUpVectorBar' codepoint='2958'/>
+ <entity name='LeftVector' codepoint='21BC'/>
+ <entity name='LeftVectorBar' codepoint='2952'/>
+ <entity name='leg' codepoint='22DA'/>
+ <entity name='lEg' codepoint='2A8B'/>
+ <entity name='leq' codepoint='2264'/>
+ <entity name='leqq' codepoint='2266'/>
+ <entity name='leqslant' codepoint='2A7D'/>
+ <entity name='les' codepoint='2A7D'/>
+ <entity name='lescc' codepoint='2AA8'/>
+ <entity name='lesdot' codepoint='2A7F'/>
+ <entity name='lesdoto' codepoint='2A81'/>
+ <entity name='lesdotor' codepoint='2A83'/>
+ <entity name='lesges' codepoint='2A93'/>
+ <entity name='lessapprox' codepoint='2A85'/>
+ <entity name='lessdot' codepoint='22D6'/>
+ <entity name='lesseqgtr' codepoint='22DA'/>
+ <entity name='lesseqqgtr' codepoint='2A8B'/>
+ <entity name='LessEqualGreater' codepoint='22DA'/>
+ <entity name='LessFullEqual' codepoint='2266'/>
+ <entity name='LessGreater' codepoint='2276'/>
+ <entity name='lessgtr' codepoint='2276'/>
+ <entity name='LessLess' codepoint='2AA1'/>
+ <entity name='lesssim' codepoint='2272'/>
+ <entity name='LessSlantEqual' codepoint='2A7D'/>
+ <entity name='LessTilde' codepoint='2272'/>
+ <entity name='lfisht' codepoint='297C'/>
+ <entity name='lfloor' codepoint='230A'/>
+ <entity name='Lfr' codepoint='1D50F'/>
+ <entity name='lfr' codepoint='1D529'/>
+ <entity name='lg' codepoint='2276'/>
+ <entity name='lgE' codepoint='2A91'/>
+ <entity name='Lgr' codepoint='039B'/>
+ <entity name='lgr' codepoint='03BB'/>
+ <entity name='lHar' codepoint='2962'/>
+ <entity name='lhard' codepoint='21BD'/>
+ <entity name='lharu' codepoint='21BC'/>
+ <entity name='lharul' codepoint='296A'/>
+ <entity name='lhblk' codepoint='2584'/>
+ <entity name='LJcy' codepoint='0409'/>
+ <entity name='ljcy' codepoint='0459'/>
+ <entity name='ll' codepoint='226A'/>
+ <entity name='Ll' codepoint='22D8'/>
+ <entity name='llarr' codepoint='21C7'/>
+ <entity name='llcorner' codepoint='231E'/>
+ <entity name='Lleftarrow' codepoint='21DA'/>
+ <entity name='llhard' codepoint='296B'/>
+ <entity name='lltri' codepoint='25FA'/>
+ <entity name='Lmidot' codepoint='013F'/>
+ <entity name='lmidot' codepoint='0140'/>
+ <entity name='lmoust' codepoint='23B0'/>
+ <entity name='lmoustache' codepoint='23B0'/>
+ <entity name='lnap' codepoint='2A89'/>
+ <entity name='lnapprox' codepoint='2A89'/>
+ <entity name='lnE' codepoint='2268'/>
+ <entity name='lne' codepoint='2A87'/>
+ <entity name='lneq' codepoint='2A87'/>
+ <entity name='lneqq' codepoint='2268'/>
+ <entity name='lnsim' codepoint='22E6'/>
+ <entity name='loang' codepoint='27EC'/>
+ <entity name='loarr' codepoint='21FD'/>
+ <entity name='lobrk' codepoint='27E6'/>
+ <entity name='longleftarrow' codepoint='27F5'/>
+ <entity name='Longleftarrow' codepoint='27F8'/>
+ <entity name='longleftrightarrow' codepoint='27F7'/>
+ <entity name='Longleftrightarrow' codepoint='27FA'/>
+ <entity name='longmapsto' codepoint='27FC'/>
+ <entity name='longrightarrow' codepoint='27F6'/>
+ <entity name='Longrightarrow' codepoint='27F9'/>
+ <entity name='looparrowleft' codepoint='21AB'/>
+ <entity name='looparrowright' codepoint='21AC'/>
+ <entity name='lopar' codepoint='2985'/>
+ <entity name='Lopf' codepoint='1D543'/>
+ <entity name='lopf' codepoint='1D55D'/>
+ <entity name='loplus' codepoint='2A2D'/>
+ <entity name='lotimes' codepoint='2A34'/>
+ <entity name='lowast' codepoint='2217'/>
+ <entity name='lowbar' codepoint='005F'/>
+ <entity name='LowerLeftArrow' codepoint='2199'/>
+ <entity name='LowerRightArrow' codepoint='2198'/>
+ <entity name='loz' codepoint='25CA'/>
+ <entity name='lozenge' codepoint='25CA'/>
+ <entity name='lozf' codepoint='29EB'/>
+ <entity name='lpar' codepoint='0028'/>
+ <entity name='lparlt' codepoint='2993'/>
+ <entity name='lrarr' codepoint='21C6'/>
+ <entity name='lrcorner' codepoint='231F'/>
+ <entity name='lrhar' codepoint='21CB'/>
+ <entity name='lrhard' codepoint='296D'/>
+ <entity name='lrm' codepoint='200E'/>
+ <entity name='lrtri' codepoint='22BF'/>
+ <entity name='lsaquo' codepoint='2039'/>
+ <entity name='Lscr' codepoint='2112'/>
+ <entity name='lscr' codepoint='1D4C1'/>
+ <entity name='lsh' codepoint='21B0'/>
+ <entity name='lsim' codepoint='2272'/>
+ <entity name='lsime' codepoint='2A8D'/>
+ <entity name='lsimg' codepoint='2A8F'/>
+ <entity name='lsqb' codepoint='005B'/>
+ <entity name='lsquo' codepoint='2018'/>
+ <entity name='lsquor' codepoint='201A'/>
+ <entity name='Lstrok' codepoint='0141'/>
+ <entity name='lstrok' codepoint='0142'/>
+ <entity name='lt' codepoint='003C'/>
+ <entity name='Lt' codepoint='226A'/>
+ <entity name='ltcc' codepoint='2AA6'/>
+ <entity name='ltcir' codepoint='2A79'/>
+ <entity name='ltdot' codepoint='22D6'/>
+ <entity name='lthree' codepoint='22CB'/>
+ <entity name='ltimes' codepoint='22C9'/>
+ <entity name='ltlarr' codepoint='2976'/>
+ <entity name='ltquest' codepoint='2A7B'/>
+ <entity name='ltri' codepoint='25C3'/>
+ <entity name='ltrie' codepoint='22B4'/>
+ <entity name='ltrif' codepoint='25C2'/>
+ <entity name='ltrPar' codepoint='2996'/>
+ <entity name='lurdshar' codepoint='294A'/>
+ <entity name='luruhar' codepoint='2966'/>
+ <entity name='macr' codepoint='00AF'/>
+ <entity name='male' codepoint='2642'/>
+ <entity name='malt' codepoint='2720'/>
+ <entity name='maltese' codepoint='2720'/>
+ <entity name='map' codepoint='21A6'/>
+ <entity name='Map' codepoint='2905'/>
+ <entity name='mapsto' codepoint='21A6'/>
+ <entity name='mapstodown' codepoint='21A7'/>
+ <entity name='mapstoleft' codepoint='21A4'/>
+ <entity name='mapstoup' codepoint='21A5'/>
+ <entity name='marker' codepoint='25AE'/>
+ <entity name='mcomma' codepoint='2A29'/>
+ <entity name='Mcy' codepoint='041C'/>
+ <entity name='mcy' codepoint='043C'/>
+ <entity name='mdash' codepoint='2014'/>
+ <entity name='mDDot' codepoint='223A'/>
+ <entity name='measuredangle' codepoint='2221'/>
+ <entity name='MediumSpace' codepoint='205F'/>
+ <entity name='Mellintrf' codepoint='2133'/>
+ <entity name='Mfr' codepoint='1D510'/>
+ <entity name='mfr' codepoint='1D52A'/>
+ <entity name='Mgr' codepoint='039C'/>
+ <entity name='mgr' codepoint='03BC'/>
+ <entity name='mho' codepoint='2127'/>
+ <entity name='micro' codepoint='00B5'/>
+ <entity name='mid' codepoint='2223'/>
+ <entity name='midast' codepoint='002A'/>
+ <entity name='midcir' codepoint='2AF0'/>
+ <entity name='middot' codepoint='00B7'/>
+ <entity name='minus' codepoint='2212'/>
+ <entity name='minusb' codepoint='229F'/>
+ <entity name='minusd' codepoint='2238'/>
+ <entity name='minusdu' codepoint='2A2A'/>
+ <entity name='MinusPlus' codepoint='2213'/>
+ <entity name='mlcp' codepoint='2ADB'/>
+ <entity name='mldr' codepoint='2026'/>
+ <entity name='mnplus' codepoint='2213'/>
+ <entity name='models' codepoint='22A7'/>
+ <entity name='Mopf' codepoint='1D544'/>
+ <entity name='mopf' codepoint='1D55E'/>
+ <entity name='mp' codepoint='2213'/>
+ <entity name='Mscr' codepoint='2133'/>
+ <entity name='mscr' codepoint='1D4C2'/>
+ <entity name='mstpos' codepoint='223E'/>
+ <entity name='Mu' codepoint='039C'/>
+ <entity name='mu' codepoint='03BC'/>
+ <entity name='multimap' codepoint='22B8'/>
+ <entity name='mumap' codepoint='22B8'/>
+ <entity name='nabla' codepoint='2207'/>
+ <entity name='Nacute' codepoint='0143'/>
+ <entity name='nacute' codepoint='0144'/>
+ <entity name='nap' codepoint='2249'/>
+ <entity name='napos' codepoint='0149'/>
+ <entity name='napprox' codepoint='2249'/>
+ <entity name='natur' codepoint='266E'/>
+ <entity name='natural' codepoint='266E'/>
+ <entity name='naturals' codepoint='2115'/>
+ <entity name='nbsp' codepoint='00A0'/>
+ <entity name='ncap' codepoint='2A43'/>
+ <entity name='Ncaron' codepoint='0147'/>
+ <entity name='ncaron' codepoint='0148'/>
+ <entity name='Ncedil' codepoint='0145'/>
+ <entity name='ncedil' codepoint='0146'/>
+ <entity name='ncong' codepoint='2247'/>
+ <entity name='ncup' codepoint='2A42'/>
+ <entity name='Ncy' codepoint='041D'/>
+ <entity name='ncy' codepoint='043D'/>
+ <entity name='ndash' codepoint='2013'/>
+ <entity name='ne' codepoint='2260'/>
+ <entity name='nearhk' codepoint='2924'/>
+ <entity name='nearr' codepoint='2197'/>
+ <entity name='neArr' codepoint='21D7'/>
+ <entity name='nearrow' codepoint='2197'/>
+ <entity name='NegativeMediumSpace' codepoint='200B'/>
+ <entity name='NegativeThickSpace' codepoint='200B'/>
+ <entity name='NegativeThinSpace' codepoint='200B'/>
+ <entity name='NegativeVeryThinSpace' codepoint='200B'/>
+ <entity name='nequiv' codepoint='2262'/>
+ <entity name='nesear' codepoint='2928'/>
+ <entity name='NestedGreaterGreater' codepoint='226B'/>
+ <entity name='NestedLessLess' codepoint='226A'/>
+ <entity name='NewLine' codepoint='000A'/>
+ <entity name='nexist' codepoint='2204'/>
+ <entity name='nexists' codepoint='2204'/>
+ <entity name='Nfr' codepoint='1D511'/>
+ <entity name='nfr' codepoint='1D52B'/>
+ <entity name='nge' codepoint='2271'/>
+ <entity name='ngeq' codepoint='2271'/>
+ <entity name='Ngr' codepoint='039D'/>
+ <entity name='ngr' codepoint='03BD'/>
+ <entity name='ngsim' codepoint='2275'/>
+ <entity name='ngt' codepoint='226F'/>
+ <entity name='ngtr' codepoint='226F'/>
+ <entity name='nharr' codepoint='21AE'/>
+ <entity name='nhArr' codepoint='21CE'/>
+ <entity name='nhpar' codepoint='2AF2'/>
+ <entity name='ni' codepoint='220B'/>
+ <entity name='nis' codepoint='22FC'/>
+ <entity name='nisd' codepoint='22FA'/>
+ <entity name='niv' codepoint='220B'/>
+ <entity name='NJcy' codepoint='040A'/>
+ <entity name='njcy' codepoint='045A'/>
+ <entity name='nlarr' codepoint='219A'/>
+ <entity name='nlArr' codepoint='21CD'/>
+ <entity name='nldr' codepoint='2025'/>
+ <entity name='nle' codepoint='2270'/>
+ <entity name='nleftarrow' codepoint='219A'/>
+ <entity name='nLeftarrow' codepoint='21CD'/>
+ <entity name='nleftrightarrow' codepoint='21AE'/>
+ <entity name='nLeftrightarrow' codepoint='21CE'/>
+ <entity name='nleq' codepoint='2270'/>
+ <entity name='nless' codepoint='226E'/>
+ <entity name='nlsim' codepoint='2274'/>
+ <entity name='nlt' codepoint='226E'/>
+ <entity name='nltri' codepoint='22EA'/>
+ <entity name='nltrie' codepoint='22EC'/>
+ <entity name='nmid' codepoint='2224'/>
+ <entity name='NoBreak' codepoint='2060'/>
+ <entity name='NonBreakingSpace' codepoint='00A0'/>
+ <entity name='Nopf' codepoint='2115'/>
+ <entity name='nopf' codepoint='1D55F'/>
+ <entity name='not' codepoint='00AC'/>
+ <entity name='Not' codepoint='2AEC'/>
+ <entity name='NotCongruent' codepoint='2262'/>
+ <entity name='NotCupCap' codepoint='226D'/>
+ <entity name='NotDoubleVerticalBar' codepoint='2226'/>
+ <entity name='NotElement' codepoint='2209'/>
+ <entity name='NotEqual' codepoint='2260'/>
+ <entity name='NotExists' codepoint='2204'/>
+ <entity name='NotGreater' codepoint='226F'/>
+ <entity name='NotGreaterEqual' codepoint='2271'/>
+ <entity name='NotGreaterLess' codepoint='2279'/>
+ <entity name='NotGreaterTilde' codepoint='2275'/>
+ <entity name='notin' codepoint='2209'/>
+ <entity name='notinva' codepoint='2209'/>
+ <entity name='notinvb' codepoint='22F7'/>
+ <entity name='notinvc' codepoint='22F6'/>
+ <entity name='NotLeftTriangle' codepoint='22EA'/>
+ <entity name='NotLeftTriangleEqual' codepoint='22EC'/>
+ <entity name='NotLess' codepoint='226E'/>
+ <entity name='NotLessEqual' codepoint='2270'/>
+ <entity name='NotLessGreater' codepoint='2278'/>
+ <entity name='NotLessTilde' codepoint='2274'/>
+ <entity name='notni' codepoint='220C'/>
+ <entity name='notniva' codepoint='220C'/>
+ <entity name='notnivb' codepoint='22FE'/>
+ <entity name='notnivc' codepoint='22FD'/>
+ <entity name='NotPrecedes' codepoint='2280'/>
+ <entity name='NotPrecedesSlantEqual' codepoint='22E0'/>
+ <entity name='NotReverseElement' codepoint='220C'/>
+ <entity name='NotRightTriangle' codepoint='22EB'/>
+ <entity name='NotRightTriangleEqual' codepoint='22ED'/>
+ <entity name='NotSquareSubsetEqual' codepoint='22E2'/>
+ <entity name='NotSquareSupersetEqual' codepoint='22E3'/>
+ <entity name='NotSubsetEqual' codepoint='2288'/>
+ <entity name='NotSucceeds' codepoint='2281'/>
+ <entity name='NotSucceedsSlantEqual' codepoint='22E1'/>
+ <entity name='NotSupersetEqual' codepoint='2289'/>
+ <entity name='NotTilde' codepoint='2241'/>
+ <entity name='NotTildeEqual' codepoint='2244'/>
+ <entity name='NotTildeFullEqual' codepoint='2247'/>
+ <entity name='NotTildeTilde' codepoint='2249'/>
+ <entity name='NotVerticalBar' codepoint='2224'/>
+ <entity name='npar' codepoint='2226'/>
+ <entity name='nparallel' codepoint='2226'/>
+ <entity name='npolint' codepoint='2A14'/>
+ <entity name='npr' codepoint='2280'/>
+ <entity name='nprcue' codepoint='22E0'/>
+ <entity name='nprec' codepoint='2280'/>
+ <entity name='nrarr' codepoint='219B'/>
+ <entity name='nrArr' codepoint='21CF'/>
+ <entity name='nrightarrow' codepoint='219B'/>
+ <entity name='nRightarrow' codepoint='21CF'/>
+ <entity name='nrtri' codepoint='22EB'/>
+ <entity name='nrtrie' codepoint='22ED'/>
+ <entity name='nsc' codepoint='2281'/>
+ <entity name='nsccue' codepoint='22E1'/>
+ <entity name='Nscr' codepoint='1D4A9'/>
+ <entity name='nscr' codepoint='1D4C3'/>
+ <entity name='nshortmid' codepoint='2224'/>
+ <entity name='nshortparallel' codepoint='2226'/>
+ <entity name='nsim' codepoint='2241'/>
+ <entity name='nsime' codepoint='2244'/>
+ <entity name='nsimeq' codepoint='2244'/>
+ <entity name='nsmid' codepoint='2224'/>
+ <entity name='nspar' codepoint='2226'/>
+ <entity name='nsqsube' codepoint='22E2'/>
+ <entity name='nsqsupe' codepoint='22E3'/>
+ <entity name='nsub' codepoint='2284'/>
+ <entity name='nsube' codepoint='2288'/>
+ <entity name='nsubseteq' codepoint='2288'/>
+ <entity name='nsucc' codepoint='2281'/>
+ <entity name='nsup' codepoint='2285'/>
+ <entity name='nsupe' codepoint='2289'/>
+ <entity name='nsupseteq' codepoint='2289'/>
+ <entity name='ntgl' codepoint='2279'/>
+ <entity name='Ntilde' codepoint='00D1'/>
+ <entity name='ntilde' codepoint='00F1'/>
+ <entity name='ntlg' codepoint='2278'/>
+ <entity name='ntriangleleft' codepoint='22EA'/>
+ <entity name='ntrianglelefteq' codepoint='22EC'/>
+ <entity name='ntriangleright' codepoint='22EB'/>
+ <entity name='ntrianglerighteq' codepoint='22ED'/>
+ <entity name='Nu' codepoint='039D'/>
+ <entity name='nu' codepoint='03BD'/>
+ <entity name='num' codepoint='0023'/>
+ <entity name='numero' codepoint='2116'/>
+ <entity name='numsp' codepoint='2007'/>
+ <entity name='nvdash' codepoint='22AC'/>
+ <entity name='nvDash' codepoint='22AD'/>
+ <entity name='nVdash' codepoint='22AE'/>
+ <entity name='nVDash' codepoint='22AF'/>
+ <entity name='nvHarr' codepoint='2904'/>
+ <entity name='nvinfin' codepoint='29DE'/>
+ <entity name='nvlArr' codepoint='2902'/>
+ <entity name='nvrArr' codepoint='2903'/>
+ <entity name='nwarhk' codepoint='2923'/>
+ <entity name='nwarr' codepoint='2196'/>
+ <entity name='nwArr' codepoint='21D6'/>
+ <entity name='nwarrow' codepoint='2196'/>
+ <entity name='nwnear' codepoint='2927'/>
+ <entity name='Oacgr' codepoint='038C'/>
+ <entity name='oacgr' codepoint='03CC'/>
+ <entity name='Oacute' codepoint='00D3'/>
+ <entity name='oacute' codepoint='00F3'/>
+ <entity name='oast' codepoint='229B'/>
+ <entity name='ocir' codepoint='229A'/>
+ <entity name='Ocirc' codepoint='00D4'/>
+ <entity name='ocirc' codepoint='00F4'/>
+ <entity name='Ocy' codepoint='041E'/>
+ <entity name='ocy' codepoint='043E'/>
+ <entity name='odash' codepoint='229D'/>
+ <entity name='Odblac' codepoint='0150'/>
+ <entity name='odblac' codepoint='0151'/>
+ <entity name='odiv' codepoint='2A38'/>
+ <entity name='odot' codepoint='2299'/>
+ <entity name='odsold' codepoint='29BC'/>
+ <entity name='OElig' codepoint='0152'/>
+ <entity name='oelig' codepoint='0153'/>
+ <entity name='ofcir' codepoint='29BF'/>
+ <entity name='Ofr' codepoint='1D512'/>
+ <entity name='ofr' codepoint='1D52C'/>
+ <entity name='ogon' codepoint='02DB'/>
+ <entity name='Ogr' codepoint='039F'/>
+ <entity name='ogr' codepoint='03BF'/>
+ <entity name='Ograve' codepoint='00D2'/>
+ <entity name='ograve' codepoint='00F2'/>
+ <entity name='ogt' codepoint='29C1'/>
+ <entity name='OHacgr' codepoint='038F'/>
+ <entity name='ohacgr' codepoint='03CE'/>
+ <entity name='ohbar' codepoint='29B5'/>
+ <entity name='OHgr' codepoint='03A9'/>
+ <entity name='ohgr' codepoint='03C9'/>
+ <entity name='ohm' codepoint='2126'/>
+ <entity name='oint' codepoint='222E'/>
+ <entity name='olarr' codepoint='21BA'/>
+ <entity name='olcir' codepoint='29BE'/>
+ <entity name='olcross' codepoint='29BB'/>
+ <entity name='oline' codepoint='203E'/>
+ <entity name='olt' codepoint='29C0'/>
+ <entity name='Omacr' codepoint='014C'/>
+ <entity name='omacr' codepoint='014D'/>
+ <entity name='Omega' codepoint='03A9'/>
+ <entity name='omega' codepoint='03C9'/>
+ <entity name='Omicron' codepoint='039F'/>
+ <entity name='omicron' codepoint='03BF'/>
+ <entity name='omid' codepoint='29B6'/>
+ <entity name='ominus' codepoint='2296'/>
+ <entity name='Oopf' codepoint='1D546'/>
+ <entity name='oopf' codepoint='1D560'/>
+ <entity name='opar' codepoint='29B7'/>
+ <entity name='OpenCurlyDoubleQuote' codepoint='201C'/>
+ <entity name='OpenCurlyQuote' codepoint='2018'/>
+ <entity name='operp' codepoint='29B9'/>
+ <entity name='oplus' codepoint='2295'/>
+ <entity name='or' codepoint='2228'/>
+ <entity name='Or' codepoint='2A54'/>
+ <entity name='orarr' codepoint='21BB'/>
+ <entity name='ord' codepoint='2A5D'/>
+ <entity name='order' codepoint='2134'/>
+ <entity name='orderof' codepoint='2134'/>
+ <entity name='ordf' codepoint='00AA'/>
+ <entity name='ordm' codepoint='00BA'/>
+ <entity name='origof' codepoint='22B6'/>
+ <entity name='oror' codepoint='2A56'/>
+ <entity name='orslope' codepoint='2A57'/>
+ <entity name='orv' codepoint='2A5B'/>
+ <entity name='oS' codepoint='24C8'/>
+ <entity name='oscr' codepoint='2134'/>
+ <entity name='Oscr' codepoint='1D4AA'/>
+ <entity name='Oslash' codepoint='00D8'/>
+ <entity name='oslash' codepoint='00F8'/>
+ <entity name='osol' codepoint='2298'/>
+ <entity name='Otilde' codepoint='00D5'/>
+ <entity name='otilde' codepoint='00F5'/>
+ <entity name='otimes' codepoint='2297'/>
+ <entity name='Otimes' codepoint='2A37'/>
+ <entity name='otimesas' codepoint='2A36'/>
+ <entity name='Ouml' codepoint='00D6'/>
+ <entity name='ouml' codepoint='00F6'/>
+ <entity name='ovbar' codepoint='233D'/>
+ <entity name='OverBar' codepoint='00AF'/>
+ <entity name='OverBrace' codepoint='FE37'/>
+ <entity name='OverBracket' codepoint='23B4'/>
+ <entity name='OverParenthesis' codepoint='FE35'/>
+ <entity name='par' codepoint='2225'/>
+ <entity name='para' codepoint='00B6'/>
+ <entity name='parallel' codepoint='2225'/>
+ <entity name='parsim' codepoint='2AF3'/>
+ <entity name='parsl' codepoint='2AFD'/>
+ <entity name='part' codepoint='2202'/>
+ <entity name='PartialD' codepoint='2202'/>
+ <entity name='Pcy' codepoint='041F'/>
+ <entity name='pcy' codepoint='043F'/>
+ <entity name='percnt' codepoint='0025'/>
+ <entity name='period' codepoint='002E'/>
+ <entity name='permil' codepoint='2030'/>
+ <entity name='perp' codepoint='22A5'/>
+ <entity name='pertenk' codepoint='2031'/>
+ <entity name='Pfr' codepoint='1D513'/>
+ <entity name='pfr' codepoint='1D52D'/>
+ <entity name='Pgr' codepoint='03A0'/>
+ <entity name='pgr' codepoint='03C0'/>
+ <entity name='PHgr' codepoint='03A6'/>
+ <entity name='phgr' codepoint='03C6'/>
+ <entity name='Phi' codepoint='03A6'/>
+ <entity name='phi' codepoint='03D5'/>
+ <entity name='phiv' codepoint='03C6'/>
+ <entity name='phmmat' codepoint='2133'/>
+ <entity name='phone' codepoint='260E'/>
+ <entity name='Pi' codepoint='03A0'/>
+ <entity name='pi' codepoint='03C0'/>
+ <entity name='pitchfork' codepoint='22D4'/>
+ <entity name='piv' codepoint='03D6'/>
+ <entity name='planck' codepoint='210F'/>
+ <entity name='planckh' codepoint='210E'/>
+ <entity name='plankv' codepoint='210F'/>
+ <entity name='plus' codepoint='002B'/>
+ <entity name='plusacir' codepoint='2A23'/>
+ <entity name='plusb' codepoint='229E'/>
+ <entity name='pluscir' codepoint='2A22'/>
+ <entity name='plusdo' codepoint='2214'/>
+ <entity name='plusdu' codepoint='2A25'/>
+ <entity name='pluse' codepoint='2A72'/>
+ <entity name='PlusMinus' codepoint='00B1'/>
+ <entity name='plusmn' codepoint='00B1'/>
+ <entity name='plussim' codepoint='2A26'/>
+ <entity name='plustwo' codepoint='2A27'/>
+ <entity name='pm' codepoint='00B1'/>
+ <entity name='Poincareplane' codepoint='210C'/>
+ <entity name='pointint' codepoint='2A15'/>
+ <entity name='Popf' codepoint='2119'/>
+ <entity name='popf' codepoint='1D561'/>
+ <entity name='pound' codepoint='00A3'/>
+ <entity name='pr' codepoint='227A'/>
+ <entity name='Pr' codepoint='2ABB'/>
+ <entity name='prap' codepoint='2AB7'/>
+ <entity name='prcue' codepoint='227C'/>
+ <entity name='pre' codepoint='2AAF'/>
+ <entity name='prE' codepoint='2AB3'/>
+ <entity name='prec' codepoint='227A'/>
+ <entity name='precapprox' codepoint='2AB7'/>
+ <entity name='preccurlyeq' codepoint='227C'/>
+ <entity name='Precedes' codepoint='227A'/>
+ <entity name='PrecedesEqual' codepoint='2AAF'/>
+ <entity name='PrecedesSlantEqual' codepoint='227C'/>
+ <entity name='PrecedesTilde' codepoint='227E'/>
+ <entity name='preceq' codepoint='2AAF'/>
+ <entity name='precnapprox' codepoint='2AB9'/>
+ <entity name='precneqq' codepoint='2AB5'/>
+ <entity name='precnsim' codepoint='22E8'/>
+ <entity name='precsim' codepoint='227E'/>
+ <entity name='prime' codepoint='2032'/>
+ <entity name='Prime' codepoint='2033'/>
+ <entity name='primes' codepoint='2119'/>
+ <entity name='prnap' codepoint='2AB9'/>
+ <entity name='prnE' codepoint='2AB5'/>
+ <entity name='prnsim' codepoint='22E8'/>
+ <entity name='prod' codepoint='220F'/>
+ <entity name='Product' codepoint='220F'/>
+ <entity name='profalar' codepoint='232E'/>
+ <entity name='profline' codepoint='2312'/>
+ <entity name='profsurf' codepoint='2313'/>
+ <entity name='prop' codepoint='221D'/>
+ <entity name='Proportion' codepoint='2237'/>
+ <entity name='Proportional' codepoint='221D'/>
+ <entity name='propto' codepoint='221D'/>
+ <entity name='prsim' codepoint='227E'/>
+ <entity name='prurel' codepoint='22B0'/>
+ <entity name='Pscr' codepoint='1D4AB'/>
+ <entity name='pscr' codepoint='1D4C5'/>
+ <entity name='PSgr' codepoint='03A8'/>
+ <entity name='psgr' codepoint='03C8'/>
+ <entity name='Psi' codepoint='03A8'/>
+ <entity name='psi' codepoint='03C8'/>
+ <entity name='puncsp' codepoint='2008'/>
+ <entity name='Qfr' codepoint='1D514'/>
+ <entity name='qfr' codepoint='1D52E'/>
+ <entity name='qint' codepoint='2A0C'/>
+ <entity name='Qopf' codepoint='211A'/>
+ <entity name='qopf' codepoint='1D562'/>
+ <entity name='qprime' codepoint='2057'/>
+ <entity name='Qscr' codepoint='1D4AC'/>
+ <entity name='qscr' codepoint='1D4C6'/>
+ <entity name='quaternions' codepoint='210D'/>
+ <entity name='quatint' codepoint='2A16'/>
+ <entity name='quest' codepoint='003F'/>
+ <entity name='questeq' codepoint='225F'/>
+ <entity name='quot' codepoint='0022'/>
+ <entity name='rAarr' codepoint='21DB'/>
+ <entity name='race' codepoint='29DA'/>
+ <entity name='Racute' codepoint='0154'/>
+ <entity name='racute' codepoint='0155'/>
+ <entity name='radic' codepoint='221A'/>
+ <entity name='raemptyv' codepoint='29B3'/>
+ <entity name='rang' codepoint='232A'/>
+ <entity name='Rang' codepoint='27EB'/>
+ <entity name='rangd' codepoint='2992'/>
+ <entity name='range' codepoint='29A5'/>
+ <entity name='rangle' codepoint='232A'/>
+ <entity name='raquo' codepoint='00BB'/>
+ <entity name='rarr' codepoint='2192'/>
+ <entity name='Rarr' codepoint='21A0'/>
+ <entity name='rArr' codepoint='21D2'/>
+ <entity name='rarrap' codepoint='2975'/>
+ <entity name='rarrb' codepoint='21E5'/>
+ <entity name='rarrbfs' codepoint='2920'/>
+ <entity name='rarrc' codepoint='2933'/>
+ <entity name='rarrfs' codepoint='291E'/>
+ <entity name='rarrhk' codepoint='21AA'/>
+ <entity name='rarrlp' codepoint='21AC'/>
+ <entity name='rarrpl' codepoint='2945'/>
+ <entity name='rarrsim' codepoint='2974'/>
+ <entity name='rarrtl' codepoint='21A3'/>
+ <entity name='Rarrtl' codepoint='2916'/>
+ <entity name='rarrw' codepoint='219D'/>
+ <entity name='ratail' codepoint='291A'/>
+ <entity name='rAtail' codepoint='291C'/>
+ <entity name='ratio' codepoint='2236'/>
+ <entity name='rationals' codepoint='211A'/>
+ <entity name='rbarr' codepoint='290D'/>
+ <entity name='rBarr' codepoint='290F'/>
+ <entity name='RBarr' codepoint='2910'/>
+ <entity name='rbbrk' codepoint='2998'/>
+ <entity name='rbrace' codepoint='007D'/>
+ <entity name='rbrack' codepoint='005D'/>
+ <entity name='rbrke' codepoint='298C'/>
+ <entity name='rbrksld' codepoint='298E'/>
+ <entity name='rbrkslu' codepoint='2990'/>
+ <entity name='Rcaron' codepoint='0158'/>
+ <entity name='rcaron' codepoint='0159'/>
+ <entity name='Rcedil' codepoint='0156'/>
+ <entity name='rcedil' codepoint='0157'/>
+ <entity name='rceil' codepoint='2309'/>
+ <entity name='rcub' codepoint='007D'/>
+ <entity name='Rcy' codepoint='0420'/>
+ <entity name='rcy' codepoint='0440'/>
+ <entity name='rdca' codepoint='2937'/>
+ <entity name='rdldhar' codepoint='2969'/>
+ <entity name='rdquo' codepoint='201D'/>
+ <entity name='rdquor' codepoint='201D'/>
+ <entity name='rdsh' codepoint='21B3'/>
+ <entity name='Re' codepoint='211C'/>
+ <entity name='real' codepoint='211C'/>
+ <entity name='realine' codepoint='211B'/>
+ <entity name='realpart' codepoint='211C'/>
+ <entity name='reals' codepoint='211D'/>
+ <entity name='rect' codepoint='25AD'/>
+ <entity name='reg' codepoint='00AE'/>
+ <entity name='ReverseElement' codepoint='220B'/>
+ <entity name='ReverseEquilibrium' codepoint='21CB'/>
+ <entity name='ReverseUpEquilibrium' codepoint='296F'/>
+ <entity name='rfisht' codepoint='297D'/>
+ <entity name='rfloor' codepoint='230B'/>
+ <entity name='Rfr' codepoint='211C'/>
+ <entity name='rfr' codepoint='1D52F'/>
+ <entity name='Rgr' codepoint='03A1'/>
+ <entity name='rgr' codepoint='03C1'/>
+ <entity name='rHar' codepoint='2964'/>
+ <entity name='rhard' codepoint='21C1'/>
+ <entity name='rharu' codepoint='21C0'/>
+ <entity name='rharul' codepoint='296C'/>
+ <entity name='Rho' codepoint='03A1'/>
+ <entity name='rho' codepoint='03C1'/>
+ <entity name='rhov' codepoint='03F1'/>
+ <entity name='RightAngleBracket' codepoint='232A'/>
+ <entity name='rightarrow' codepoint='2192'/>
+ <entity name='Rightarrow' codepoint='21D2'/>
+ <entity name='RightArrowBar' codepoint='21E5'/>
+ <entity name='RightArrowLeftArrow' codepoint='21C4'/>
+ <entity name='rightarrowtail' codepoint='21A3'/>
+ <entity name='RightCeiling' codepoint='2309'/>
+ <entity name='RightDoubleBracket' codepoint='27E7'/>
+ <entity name='RightDownTeeVector' codepoint='295D'/>
+ <entity name='RightDownVector' codepoint='21C2'/>
+ <entity name='RightDownVectorBar' codepoint='2955'/>
+ <entity name='RightFloor' codepoint='230B'/>
+ <entity name='rightharpoondown' codepoint='21C1'/>
+ <entity name='rightharpoonup' codepoint='21C0'/>
+ <entity name='rightleftarrows' codepoint='21C4'/>
+ <entity name='rightleftharpoons' codepoint='21CC'/>
+ <entity name='rightrightarrows' codepoint='21C9'/>
+ <entity name='rightsquigarrow' codepoint='219D'/>
+ <entity name='RightTee' codepoint='22A2'/>
+ <entity name='RightTeeArrow' codepoint='21A6'/>
+ <entity name='RightTeeVector' codepoint='295B'/>
+ <entity name='rightthreetimes' codepoint='22CC'/>
+ <entity name='RightTriangle' codepoint='22B3'/>
+ <entity name='RightTriangleBar' codepoint='29D0'/>
+ <entity name='RightTriangleEqual' codepoint='22B5'/>
+ <entity name='RightUpDownVector' codepoint='294F'/>
+ <entity name='RightUpTeeVector' codepoint='295C'/>
+ <entity name='RightUpVector' codepoint='21BE'/>
+ <entity name='RightUpVectorBar' codepoint='2954'/>
+ <entity name='RightVector' codepoint='21C0'/>
+ <entity name='RightVectorBar' codepoint='2953'/>
+ <entity name='ring' codepoint='02DA'/>
+ <entity name='risingdotseq' codepoint='2253'/>
+ <entity name='rlarr' codepoint='21C4'/>
+ <entity name='rlhar' codepoint='21CC'/>
+ <entity name='rlm' codepoint='200F'/>
+ <entity name='rmoust' codepoint='23B1'/>
+ <entity name='rmoustache' codepoint='23B1'/>
+ <entity name='rnmid' codepoint='2AEE'/>
+ <entity name='roang' codepoint='27ED'/>
+ <entity name='roarr' codepoint='21FE'/>
+ <entity name='robrk' codepoint='27E7'/>
+ <entity name='ropar' codepoint='2986'/>
+ <entity name='Ropf' codepoint='211D'/>
+ <entity name='ropf' codepoint='1D563'/>
+ <entity name='roplus' codepoint='2A2E'/>
+ <entity name='rotimes' codepoint='2A35'/>
+ <entity name='RoundImplies' codepoint='2970'/>
+ <entity name='rpar' codepoint='0029'/>
+ <entity name='rpargt' codepoint='2994'/>
+ <entity name='rppolint' codepoint='2A12'/>
+ <entity name='rrarr' codepoint='21C9'/>
+ <entity name='Rrightarrow' codepoint='21DB'/>
+ <entity name='rsaquo' codepoint='203A'/>
+ <entity name='Rscr' codepoint='211B'/>
+ <entity name='rscr' codepoint='1D4C7'/>
+ <entity name='rsh' codepoint='21B1'/>
+ <entity name='rsqb' codepoint='005D'/>
+ <entity name='rsquo' codepoint='2019'/>
+ <entity name='rsquor' codepoint='2019'/>
+ <entity name='rthree' codepoint='22CC'/>
+ <entity name='rtimes' codepoint='22CA'/>
+ <entity name='rtri' codepoint='25B9'/>
+ <entity name='rtrie' codepoint='22B5'/>
+ <entity name='rtrif' codepoint='25B8'/>
+ <entity name='rtriltri' codepoint='29CE'/>
+ <entity name='RuleDelayed' codepoint='29F4'/>
+ <entity name='ruluhar' codepoint='2968'/>
+ <entity name='rx' codepoint='211E'/>
+ <entity name='Sacute' codepoint='015A'/>
+ <entity name='sacute' codepoint='015B'/>
+ <entity name='sbquo' codepoint='201A'/>
+ <entity name='sc' codepoint='227B'/>
+ <entity name='Sc' codepoint='2ABC'/>
+ <entity name='scap' codepoint='2AB8'/>
+ <entity name='Scaron' codepoint='0160'/>
+ <entity name='scaron' codepoint='0161'/>
+ <entity name='sccue' codepoint='227D'/>
+ <entity name='sce' codepoint='2AB0'/>
+ <entity name='scE' codepoint='2AB4'/>
+ <entity name='Scedil' codepoint='015E'/>
+ <entity name='scedil' codepoint='015F'/>
+ <entity name='Scirc' codepoint='015C'/>
+ <entity name='scirc' codepoint='015D'/>
+ <entity name='scnap' codepoint='2ABA'/>
+ <entity name='scnE' codepoint='2AB6'/>
+ <entity name='scnsim' codepoint='22E9'/>
+ <entity name='scpolint' codepoint='2A13'/>
+ <entity name='scsim' codepoint='227F'/>
+ <entity name='Scy' codepoint='0421'/>
+ <entity name='scy' codepoint='0441'/>
+ <entity name='sdot' codepoint='22C5'/>
+ <entity name='sdotb' codepoint='22A1'/>
+ <entity name='sdote' codepoint='2A66'/>
+ <entity name='searhk' codepoint='2925'/>
+ <entity name='searr' codepoint='2198'/>
+ <entity name='seArr' codepoint='21D8'/>
+ <entity name='searrow' codepoint='2198'/>
+ <entity name='sect' codepoint='00A7'/>
+ <entity name='semi' codepoint='003B'/>
+ <entity name='seswar' codepoint='2929'/>
+ <entity name='setminus' codepoint='2216'/>
+ <entity name='setmn' codepoint='2216'/>
+ <entity name='sext' codepoint='2736'/>
+ <entity name='sfgr' codepoint='03C2'/>
+ <entity name='Sfr' codepoint='1D516'/>
+ <entity name='sfr' codepoint='1D530'/>
+ <entity name='sfrown' codepoint='2322'/>
+ <entity name='Sgr' codepoint='03A3'/>
+ <entity name='sgr' codepoint='03C3'/>
+ <entity name='sharp' codepoint='266F'/>
+ <entity name='SHCHcy' codepoint='0429'/>
+ <entity name='shchcy' codepoint='0449'/>
+ <entity name='SHcy' codepoint='0428'/>
+ <entity name='shcy' codepoint='0448'/>
+ <entity name='ShortDownArrow' codepoint='2193'/>
+ <entity name='ShortLeftArrow' codepoint='2190'/>
+ <entity name='shortmid' codepoint='2223'/>
+ <entity name='shortparallel' codepoint='2225'/>
+ <entity name='ShortRightArrow' codepoint='2192'/>
+ <entity name='ShortUpArrow' codepoint='2191'/>
+ <entity name='shy' codepoint='00AD'/>
+ <entity name='Sigma' codepoint='03A3'/>
+ <entity name='sigma' codepoint='03C3'/>
+ <entity name='sigmaf' codepoint='03C2'/>
+ <entity name='sigmav' codepoint='03C2'/>
+ <entity name='sim' codepoint='223C'/>
+ <entity name='simdot' codepoint='2A6A'/>
+ <entity name='sime' codepoint='2243'/>
+ <entity name='simeq' codepoint='2243'/>
+ <entity name='simg' codepoint='2A9E'/>
+ <entity name='simgE' codepoint='2AA0'/>
+ <entity name='siml' codepoint='2A9D'/>
+ <entity name='simlE' codepoint='2A9F'/>
+ <entity name='simne' codepoint='2246'/>
+ <entity name='simplus' codepoint='2A24'/>
+ <entity name='simrarr' codepoint='2972'/>
+ <entity name='slarr' codepoint='2190'/>
+ <entity name='SmallCircle' codepoint='2218'/>
+ <entity name='smallsetminus' codepoint='2216'/>
+ <entity name='smashp' codepoint='2A33'/>
+ <entity name='smeparsl' codepoint='29E4'/>
+ <entity name='smid' codepoint='2223'/>
+ <entity name='smile' codepoint='2323'/>
+ <entity name='smt' codepoint='2AAA'/>
+ <entity name='smte' codepoint='2AAC'/>
+ <entity name='SOFTcy' codepoint='042C'/>
+ <entity name='softcy' codepoint='044C'/>
+ <entity name='sol' codepoint='002F'/>
+ <entity name='solb' codepoint='29C4'/>
+ <entity name='solbar' codepoint='233F'/>
+ <entity name='Sopf' codepoint='1D54A'/>
+ <entity name='sopf' codepoint='1D564'/>
+ <entity name='spades' codepoint='2660'/>
+ <entity name='spadesuit' codepoint='2660'/>
+ <entity name='spar' codepoint='2225'/>
+ <entity name='sqcap' codepoint='2293'/>
+ <entity name='sqcup' codepoint='2294'/>
+ <entity name='Sqrt' codepoint='221A'/>
+ <entity name='sqsub' codepoint='228F'/>
+ <entity name='sqsube' codepoint='2291'/>
+ <entity name='sqsubset' codepoint='228F'/>
+ <entity name='sqsubseteq' codepoint='2291'/>
+ <entity name='sqsup' codepoint='2290'/>
+ <entity name='sqsupe' codepoint='2292'/>
+ <entity name='sqsupset' codepoint='2290'/>
+ <entity name='sqsupseteq' codepoint='2292'/>
+ <entity name='squ' codepoint='25A1'/>
+ <entity name='square' codepoint='25A1'/>
+ <entity name='SquareIntersection' codepoint='2293'/>
+ <entity name='SquareSubset' codepoint='228F'/>
+ <entity name='SquareSubsetEqual' codepoint='2291'/>
+ <entity name='SquareSuperset' codepoint='2290'/>
+ <entity name='SquareSupersetEqual' codepoint='2292'/>
+ <entity name='SquareUnion' codepoint='2294'/>
+ <entity name='squarf' codepoint='25AA'/>
+ <entity name='squf' codepoint='25AA'/>
+ <entity name='srarr' codepoint='2192'/>
+ <entity name='Sscr' codepoint='1D4AE'/>
+ <entity name='sscr' codepoint='1D4C8'/>
+ <entity name='ssetmn' codepoint='2216'/>
+ <entity name='ssmile' codepoint='2323'/>
+ <entity name='sstarf' codepoint='22C6'/>
+ <entity name='Star' codepoint='22C6'/>
+ <entity name='star' codepoint='2606'/>
+ <entity name='starf' codepoint='2605'/>
+ <entity name='straightepsilon' codepoint='03F5'/>
+ <entity name='straightphi' codepoint='03D5'/>
+ <entity name='strns' codepoint='00AF'/>
+ <entity name='sub' codepoint='2282'/>
+ <entity name='Sub' codepoint='22D0'/>
+ <entity name='subdot' codepoint='2ABD'/>
+ <entity name='sube' codepoint='2286'/>
+ <entity name='subE' codepoint='2AC5'/>
+ <entity name='subedot' codepoint='2AC3'/>
+ <entity name='submult' codepoint='2AC1'/>
+ <entity name='subne' codepoint='228A'/>
+ <entity name='subnE' codepoint='2ACB'/>
+ <entity name='subplus' codepoint='2ABF'/>
+ <entity name='subrarr' codepoint='2979'/>
+ <entity name='subset' codepoint='2282'/>
+ <entity name='Subset' codepoint='22D0'/>
+ <entity name='subseteq' codepoint='2286'/>
+ <entity name='subseteqq' codepoint='2AC5'/>
+ <entity name='SubsetEqual' codepoint='2286'/>
+ <entity name='subsetneq' codepoint='228A'/>
+ <entity name='subsetneqq' codepoint='2ACB'/>
+ <entity name='subsim' codepoint='2AC7'/>
+ <entity name='subsub' codepoint='2AD5'/>
+ <entity name='subsup' codepoint='2AD3'/>
+ <entity name='succ' codepoint='227B'/>
+ <entity name='succapprox' codepoint='2AB8'/>
+ <entity name='succcurlyeq' codepoint='227D'/>
+ <entity name='Succeeds' codepoint='227B'/>
+ <entity name='SucceedsEqual' codepoint='2AB0'/>
+ <entity name='SucceedsSlantEqual' codepoint='227D'/>
+ <entity name='SucceedsTilde' codepoint='227F'/>
+ <entity name='succeq' codepoint='2AB0'/>
+ <entity name='succnapprox' codepoint='2ABA'/>
+ <entity name='succneqq' codepoint='2AB6'/>
+ <entity name='succnsim' codepoint='22E9'/>
+ <entity name='succsim' codepoint='227F'/>
+ <entity name='SuchThat' codepoint='220B'/>
+ <entity name='sum' codepoint='2211'/>
+ <entity name='sung' codepoint='266A'/>
+ <entity name='sup' codepoint='2283'/>
+ <entity name='Sup' codepoint='22D1'/>
+ <entity name='sup1' codepoint='00B9'/>
+ <entity name='sup2' codepoint='00B2'/>
+ <entity name='sup3' codepoint='00B3'/>
+ <entity name='supdot' codepoint='2ABE'/>
+ <entity name='supdsub' codepoint='2AD8'/>
+ <entity name='supe' codepoint='2287'/>
+ <entity name='supE' codepoint='2AC6'/>
+ <entity name='supedot' codepoint='2AC4'/>
+ <entity name='Superset' codepoint='2283'/>
+ <entity name='SupersetEqual' codepoint='2287'/>
+ <entity name='suphsub' codepoint='2AD7'/>
+ <entity name='suplarr' codepoint='297B'/>
+ <entity name='supmult' codepoint='2AC2'/>
+ <entity name='supne' codepoint='228B'/>
+ <entity name='supnE' codepoint='2ACC'/>
+ <entity name='supplus' codepoint='2AC0'/>
+ <entity name='supset' codepoint='2283'/>
+ <entity name='Supset' codepoint='22D1'/>
+ <entity name='supseteq' codepoint='2287'/>
+ <entity name='supseteqq' codepoint='2AC6'/>
+ <entity name='supsetneq' codepoint='228B'/>
+ <entity name='supsetneqq' codepoint='2ACC'/>
+ <entity name='supsim' codepoint='2AC8'/>
+ <entity name='supsub' codepoint='2AD4'/>
+ <entity name='supsup' codepoint='2AD6'/>
+ <entity name='swarhk' codepoint='2926'/>
+ <entity name='swarr' codepoint='2199'/>
+ <entity name='swArr' codepoint='21D9'/>
+ <entity name='swarrow' codepoint='2199'/>
+ <entity name='swnwar' codepoint='292A'/>
+ <entity name='szlig' codepoint='00DF'/>
+ <entity name='Tab' codepoint='0009'/>
+ <entity name='target' codepoint='2316'/>
+ <entity name='Tau' codepoint='03A4'/>
+ <entity name='tau' codepoint='03C4'/>
+ <entity name='tbrk' codepoint='23B4'/>
+ <entity name='Tcaron' codepoint='0164'/>
+ <entity name='tcaron' codepoint='0165'/>
+ <entity name='Tcedil' codepoint='0162'/>
+ <entity name='tcedil' codepoint='0163'/>
+ <entity name='Tcy' codepoint='0422'/>
+ <entity name='tcy' codepoint='0442'/>
+ <entity name='telrec' codepoint='2315'/>
+ <entity name='Tfr' codepoint='1D517'/>
+ <entity name='tfr' codepoint='1D531'/>
+ <entity name='Tgr' codepoint='03A4'/>
+ <entity name='tgr' codepoint='03C4'/>
+ <entity name='there4' codepoint='2234'/>
+ <entity name='therefore' codepoint='2234'/>
+ <entity name='Theta' codepoint='0398'/>
+ <entity name='theta' codepoint='03B8'/>
+ <entity name='thetasym' codepoint='03D1'/>
+ <entity name='thetav' codepoint='03D1'/>
+ <entity name='THgr' codepoint='0398'/>
+ <entity name='thgr' codepoint='03B8'/>
+ <entity name='thickapprox' codepoint='2248'/>
+ <entity name='thicksim' codepoint='223C'/>
+ <entity name='thinsp' codepoint='2009'/>
+ <entity name='ThinSpace' codepoint='2009'/>
+ <entity name='thkap' codepoint='2248'/>
+ <entity name='thksim' codepoint='223C'/>
+ <entity name='THORN' codepoint='00DE'/>
+ <entity name='thorn' codepoint='00FE'/>
+ <entity name='tilde' codepoint='02DC'/>
+ <entity name='Tilde' codepoint='223C'/>
+ <entity name='TildeEqual' codepoint='2243'/>
+ <entity name='TildeFullEqual' codepoint='2245'/>
+ <entity name='TildeTilde' codepoint='2248'/>
+ <entity name='times' codepoint='00D7'/>
+ <entity name='timesb' codepoint='22A0'/>
+ <entity name='timesbar' codepoint='2A31'/>
+ <entity name='timesd' codepoint='2A30'/>
+ <entity name='tint' codepoint='222D'/>
+ <entity name='toea' codepoint='2928'/>
+ <entity name='top' codepoint='22A4'/>
+ <entity name='topbot' codepoint='2336'/>
+ <entity name='topcir' codepoint='2AF1'/>
+ <entity name='Topf' codepoint='1D54B'/>
+ <entity name='topf' codepoint='1D565'/>
+ <entity name='topfork' codepoint='2ADA'/>
+ <entity name='tosa' codepoint='2929'/>
+ <entity name='tprime' codepoint='2034'/>
+ <entity name='trade' codepoint='2122'/>
+ <entity name='triangle' codepoint='25B5'/>
+ <entity name='triangledown' codepoint='25BF'/>
+ <entity name='triangleleft' codepoint='25C3'/>
+ <entity name='trianglelefteq' codepoint='22B4'/>
+ <entity name='triangleq' codepoint='225C'/>
+ <entity name='triangleright' codepoint='25B9'/>
+ <entity name='trianglerighteq' codepoint='22B5'/>
+ <entity name='tridot' codepoint='25EC'/>
+ <entity name='trie' codepoint='225C'/>
+ <entity name='triminus' codepoint='2A3A'/>
+ <entity name='triplus' codepoint='2A39'/>
+ <entity name='trisb' codepoint='29CD'/>
+ <entity name='tritime' codepoint='2A3B'/>
+ <entity name='trpezium' codepoint='23E2'/>
+ <entity name='Tscr' codepoint='1D4AF'/>
+ <entity name='tscr' codepoint='1D4C9'/>
+ <entity name='TScy' codepoint='0426'/>
+ <entity name='tscy' codepoint='0446'/>
+ <entity name='TSHcy' codepoint='040B'/>
+ <entity name='tshcy' codepoint='045B'/>
+ <entity name='Tstrok' codepoint='0166'/>
+ <entity name='tstrok' codepoint='0167'/>
+ <entity name='twixt' codepoint='226C'/>
+ <entity name='twoheadleftarrow' codepoint='219E'/>
+ <entity name='twoheadrightarrow' codepoint='21A0'/>
+ <entity name='Uacgr' codepoint='038E'/>
+ <entity name='uacgr' codepoint='03CD'/>
+ <entity name='Uacute' codepoint='00DA'/>
+ <entity name='uacute' codepoint='00FA'/>
+ <entity name='uarr' codepoint='2191'/>
+ <entity name='Uarr' codepoint='219F'/>
+ <entity name='uArr' codepoint='21D1'/>
+ <entity name='Uarrocir' codepoint='2949'/>
+ <entity name='Ubrcy' codepoint='040E'/>
+ <entity name='ubrcy' codepoint='045E'/>
+ <entity name='Ubreve' codepoint='016C'/>
+ <entity name='ubreve' codepoint='016D'/>
+ <entity name='Ucirc' codepoint='00DB'/>
+ <entity name='ucirc' codepoint='00FB'/>
+ <entity name='Ucy' codepoint='0423'/>
+ <entity name='ucy' codepoint='0443'/>
+ <entity name='udarr' codepoint='21C5'/>
+ <entity name='Udblac' codepoint='0170'/>
+ <entity name='udblac' codepoint='0171'/>
+ <entity name='udhar' codepoint='296E'/>
+ <entity name='udiagr' codepoint='03B0'/>
+ <entity name='Udigr' codepoint='03AB'/>
+ <entity name='udigr' codepoint='03CB'/>
+ <entity name='ufisht' codepoint='297E'/>
+ <entity name='Ufr' codepoint='1D518'/>
+ <entity name='ufr' codepoint='1D532'/>
+ <entity name='Ugr' codepoint='03A5'/>
+ <entity name='ugr' codepoint='03C5'/>
+ <entity name='Ugrave' codepoint='00D9'/>
+ <entity name='ugrave' codepoint='00F9'/>
+ <entity name='uHar' codepoint='2963'/>
+ <entity name='uharl' codepoint='21BF'/>
+ <entity name='uharr' codepoint='21BE'/>
+ <entity name='uhblk' codepoint='2580'/>
+ <entity name='ulcorn' codepoint='231C'/>
+ <entity name='ulcorner' codepoint='231C'/>
+ <entity name='ulcrop' codepoint='230F'/>
+ <entity name='ultri' codepoint='25F8'/>
+ <entity name='Umacr' codepoint='016A'/>
+ <entity name='umacr' codepoint='016B'/>
+ <entity name='uml' codepoint='00A8'/>
+ <entity name='UnderBrace' codepoint='FE38'/>
+ <entity name='UnderBracket' codepoint='23B5'/>
+ <entity name='UnderParenthesis' codepoint='FE36'/>
+ <entity name='Union' codepoint='22C3'/>
+ <entity name='UnionPlus' codepoint='228E'/>
+ <entity name='Uogon' codepoint='0172'/>
+ <entity name='uogon' codepoint='0173'/>
+ <entity name='Uopf' codepoint='1D54C'/>
+ <entity name='uopf' codepoint='1D566'/>
+ <entity name='uparrow' codepoint='2191'/>
+ <entity name='Uparrow' codepoint='21D1'/>
+ <entity name='UpArrowBar' codepoint='2912'/>
+ <entity name='UpArrowDownArrow' codepoint='21C5'/>
+ <entity name='updownarrow' codepoint='2195'/>
+ <entity name='Updownarrow' codepoint='21D5'/>
+ <entity name='UpEquilibrium' codepoint='296E'/>
+ <entity name='upharpoonleft' codepoint='21BF'/>
+ <entity name='upharpoonright' codepoint='21BE'/>
+ <entity name='uplus' codepoint='228E'/>
+ <entity name='UpperLeftArrow' codepoint='2196'/>
+ <entity name='UpperRightArrow' codepoint='2197'/>
+ <entity name='upsi' codepoint='03C5'/>
+ <entity name='Upsi' codepoint='03D2'/>
+ <entity name='upsih' codepoint='03D2'/>
+ <entity name='Upsilon' codepoint='03A5'/>
+ <entity name='upsilon' codepoint='03C5'/>
+ <entity name='UpTee' codepoint='22A5'/>
+ <entity name='UpTeeArrow' codepoint='21A5'/>
+ <entity name='upuparrows' codepoint='21C8'/>
+ <entity name='urcorn' codepoint='231D'/>
+ <entity name='urcorner' codepoint='231D'/>
+ <entity name='urcrop' codepoint='230E'/>
+ <entity name='Uring' codepoint='016E'/>
+ <entity name='uring' codepoint='016F'/>
+ <entity name='urtri' codepoint='25F9'/>
+ <entity name='Uscr' codepoint='1D4B0'/>
+ <entity name='uscr' codepoint='1D4CA'/>
+ <entity name='utdot' codepoint='22F0'/>
+ <entity name='Utilde' codepoint='0168'/>
+ <entity name='utilde' codepoint='0169'/>
+ <entity name='utri' codepoint='25B5'/>
+ <entity name='utrif' codepoint='25B4'/>
+ <entity name='uuarr' codepoint='21C8'/>
+ <entity name='Uuml' codepoint='00DC'/>
+ <entity name='uuml' codepoint='00FC'/>
+ <entity name='uwangle' codepoint='29A7'/>
+ <entity name='vangrt' codepoint='299C'/>
+ <entity name='varepsilon' codepoint='03B5'/>
+ <entity name='varkappa' codepoint='03F0'/>
+ <entity name='varnothing' codepoint='2205'/>
+ <entity name='varphi' codepoint='03C6'/>
+ <entity name='varpi' codepoint='03D6'/>
+ <entity name='varpropto' codepoint='221D'/>
+ <entity name='varr' codepoint='2195'/>
+ <entity name='vArr' codepoint='21D5'/>
+ <entity name='varrho' codepoint='03F1'/>
+ <entity name='varsigma' codepoint='03C2'/>
+ <entity name='vartheta' codepoint='03D1'/>
+ <entity name='vartriangleleft' codepoint='22B2'/>
+ <entity name='vartriangleright' codepoint='22B3'/>
+ <entity name='vBar' codepoint='2AE8'/>
+ <entity name='Vbar' codepoint='2AEB'/>
+ <entity name='vBarv' codepoint='2AE9'/>
+ <entity name='Vcy' codepoint='0412'/>
+ <entity name='vcy' codepoint='0432'/>
+ <entity name='vdash' codepoint='22A2'/>
+ <entity name='vDash' codepoint='22A8'/>
+ <entity name='Vdash' codepoint='22A9'/>
+ <entity name='VDash' codepoint='22AB'/>
+ <entity name='Vdashl' codepoint='2AE6'/>
+ <entity name='vee' codepoint='2228'/>
+ <entity name='Vee' codepoint='22C1'/>
+ <entity name='veebar' codepoint='22BB'/>
+ <entity name='veeeq' codepoint='225A'/>
+ <entity name='vellip' codepoint='22EE'/>
+ <entity name='verbar' codepoint='007C'/>
+ <entity name='Verbar' codepoint='2016'/>
+ <entity name='vert' codepoint='007C'/>
+ <entity name='Vert' codepoint='2016'/>
+ <entity name='VerticalBar' codepoint='2223'/>
+ <entity name='VerticalLine' codepoint='007C'/>
+ <entity name='VerticalSeparator' codepoint='2758'/>
+ <entity name='VerticalTilde' codepoint='2240'/>
+ <entity name='VeryThinSpace' codepoint='200A'/>
+ <entity name='Vfr' codepoint='1D519'/>
+ <entity name='vfr' codepoint='1D533'/>
+ <entity name='vltri' codepoint='22B2'/>
+ <entity name='Vopf' codepoint='1D54D'/>
+ <entity name='vopf' codepoint='1D567'/>
+ <entity name='vprop' codepoint='221D'/>
+ <entity name='vrtri' codepoint='22B3'/>
+ <entity name='Vscr' codepoint='1D4B1'/>
+ <entity name='vscr' codepoint='1D4CB'/>
+ <entity name='Vvdash' codepoint='22AA'/>
+ <entity name='vzigzag' codepoint='299A'/>
+ <entity name='Wcirc' codepoint='0174'/>
+ <entity name='wcirc' codepoint='0175'/>
+ <entity name='wedbar' codepoint='2A5F'/>
+ <entity name='wedge' codepoint='2227'/>
+ <entity name='Wedge' codepoint='22C0'/>
+ <entity name='wedgeq' codepoint='2259'/>
+ <entity name='weierp' codepoint='2118'/>
+ <entity name='Wfr' codepoint='1D51A'/>
+ <entity name='wfr' codepoint='1D534'/>
+ <entity name='Wopf' codepoint='1D54E'/>
+ <entity name='wopf' codepoint='1D568'/>
+ <entity name='wp' codepoint='2118'/>
+ <entity name='wr' codepoint='2240'/>
+ <entity name='wreath' codepoint='2240'/>
+ <entity name='Wscr' codepoint='1D4B2'/>
+ <entity name='wscr' codepoint='1D4CC'/>
+ <entity name='xcap' codepoint='22C2'/>
+ <entity name='xcirc' codepoint='25EF'/>
+ <entity name='xcup' codepoint='22C3'/>
+ <entity name='xdtri' codepoint='25BD'/>
+ <entity name='Xfr' codepoint='1D51B'/>
+ <entity name='xfr' codepoint='1D535'/>
+ <entity name='Xgr' codepoint='039E'/>
+ <entity name='xgr' codepoint='03BE'/>
+ <entity name='xharr' codepoint='27F7'/>
+ <entity name='xhArr' codepoint='27FA'/>
+ <entity name='Xi' codepoint='039E'/>
+ <entity name='xi' codepoint='03BE'/>
+ <entity name='xlarr' codepoint='27F5'/>
+ <entity name='xlArr' codepoint='27F8'/>
+ <entity name='xmap' codepoint='27FC'/>
+ <entity name='xnis' codepoint='22FB'/>
+ <entity name='xodot' codepoint='2A00'/>
+ <entity name='Xopf' codepoint='1D54F'/>
+ <entity name='xopf' codepoint='1D569'/>
+ <entity name='xoplus' codepoint='2A01'/>
+ <entity name='xotime' codepoint='2A02'/>
+ <entity name='xrarr' codepoint='27F6'/>
+ <entity name='xrArr' codepoint='27F9'/>
+ <entity name='Xscr' codepoint='1D4B3'/>
+ <entity name='xscr' codepoint='1D4CD'/>
+ <entity name='xsqcup' codepoint='2A06'/>
+ <entity name='xuplus' codepoint='2A04'/>
+ <entity name='xutri' codepoint='25B3'/>
+ <entity name='xvee' codepoint='22C1'/>
+ <entity name='xwedge' codepoint='22C0'/>
+ <entity name='Yacute' codepoint='00DD'/>
+ <entity name='yacute' codepoint='00FD'/>
+ <entity name='YAcy' codepoint='042F'/>
+ <entity name='yacy' codepoint='044F'/>
+ <entity name='Ycirc' codepoint='0176'/>
+ <entity name='ycirc' codepoint='0177'/>
+ <entity name='Ycy' codepoint='042B'/>
+ <entity name='ycy' codepoint='044B'/>
+ <entity name='yen' codepoint='00A5'/>
+ <entity name='Yfr' codepoint='1D51C'/>
+ <entity name='yfr' codepoint='1D536'/>
+ <entity name='YIcy' codepoint='0407'/>
+ <entity name='yicy' codepoint='0457'/>
+ <entity name='Yopf' codepoint='1D550'/>
+ <entity name='yopf' codepoint='1D56A'/>
+ <entity name='Yscr' codepoint='1D4B4'/>
+ <entity name='yscr' codepoint='1D4CE'/>
+ <entity name='YUcy' codepoint='042E'/>
+ <entity name='yucy' codepoint='044E'/>
+ <entity name='yuml' codepoint='00FF'/>
+ <entity name='Yuml' codepoint='0178'/>
+ <entity name='Zacute' codepoint='0179'/>
+ <entity name='zacute' codepoint='017A'/>
+ <entity name='Zcaron' codepoint='017D'/>
+ <entity name='zcaron' codepoint='017E'/>
+ <entity name='Zcy' codepoint='0417'/>
+ <entity name='zcy' codepoint='0437'/>
+ <entity name='Zdot' codepoint='017B'/>
+ <entity name='zdot' codepoint='017C'/>
+ <entity name='zeetrf' codepoint='2128'/>
+ <entity name='ZeroWidthSpace' codepoint='200B'/>
+ <entity name='Zeta' codepoint='0396'/>
+ <entity name='zeta' codepoint='03B6'/>
+ <entity name='Zfr' codepoint='2128'/>
+ <entity name='zfr' codepoint='1D537'/>
+ <entity name='Zgr' codepoint='0396'/>
+ <entity name='zgr' codepoint='03B6'/>
+ <entity name='ZHcy' codepoint='0416'/>
+ <entity name='zhcy' codepoint='0436'/>
+ <entity name='zigrarr' codepoint='21DD'/>
+ <entity name='Zopf' codepoint='2124'/>
+ <entity name='zopf' codepoint='1D56B'/>
+ <entity name='Zscr' codepoint='1D4B5'/>
+ <entity name='zscr' codepoint='1D4CF'/>
+ <entity name='zwj' codepoint='200D'/>
+ <entity name='zwnj' codepoint='200C'/>
+
+ <group id='M_AREA'/>
+ <group id='M_BLOCK'/>
+ <group id='M_BLOCKINLINE'/>
+ <group id='M_BODY'/>
+ <group id='M_CELL'/>
+ <group id='M_COL'/>
+ <group id='M_DEF'/>
+ <group id='M_FORM'/>
+ <group id='M_FRAME'/>
+ <group id='M_HEAD'/>
+ <group id='M_HTML'/>
+ <group id='M_INLINE'/>
+ <group id='M_LEGEND'/>
+ <group id='M_LI'/>
+ <group id='M_NOLINK'/>
+ <group id='M_OPTION'/>
+ <group id='M_OPTIONS'/>
+ <group id='M_P'/>
+ <group id='M_PARAM'/>
+ <group id='M_TABLE'/>
+ <group id='M_TABULAR'/>
+ <group id='M_TR'/>
+ <element name='html' type='element'>
+ <isRoot/>
+ <contains group='M_HTML'/>
+ <element name='body' type='mixed' text-parent='true'>
+ <memberOf group='M_HTML'/>
+ <memberOf group='M_BODY'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <element name='a' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <contains group='M_NOLINK'/>
+ <attribute name='hreflang' type='NMTOKEN' />
+ <attribute name='shape' default='rect'/>
+ <attribute name='tabindex' type='NMTOKEN' />
+ </element>
+ <element name='abbr' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='acronym' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='address' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_P'/>
+ </element>
+ <element name='applet' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_PARAM'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='b' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='basefont' type='empty'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ </element>
+ <element name='bdo' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='big' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='blink' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='blockquote' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='br' type='empty'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <attribute name='clear' default='none'/>
+ </element>
+ <element name='canvas' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='center' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='cite' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='code' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='comment' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='del' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_BLOCKINLINE'/>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='dfn' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='dir' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_LI'/>
+ <attribute name='compact' type='BOOLEAN' />
+ </element>
+ <element name='div' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='dl' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_DEF'/>
+ <attribute name='compact' type='BOOLEAN' />
+ <element name='dd' type='mixed'>
+ <memberOf group='M_DEF'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='dt' type='mixed'>
+ <memberOf group='M_DEF'/>
+ <contains group='M_INLINE'/>
+ </element>
+ </element>
+ <element name='em' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='font' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='form' closeMode='unclosable' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <memberOf group='M_FORM'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_NOLINK'/>
+ <contains group='M_BLOCK'/>
+ <contains group='M_TR'/>
+ <contains group='M_CELL'/>
+ <attribute name='enctype' default='application/x-www-form-urlencoded'/>
+ <attribute name='method' default='get'/>
+ <element name='button' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='disabled' type='BOOLEAN' />
+ <attribute name='tabindex' type='NMTOKEN' />
+ <attribute name='type' default='submit'/>
+ </element>
+ <element name='fieldset' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_LEGEND'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <element name='legend' type='mixed'>
+ <memberOf group='M_LEGEND'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ </element>
+ <element name='input' type='empty'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='checked' type='BOOLEAN' />
+ <attribute name='disabled' type='BOOLEAN' />
+ <attribute name='ismap' type='BOOLEAN' />
+ <attribute name='maxlength' type='NMTOKEN' />
+ <attribute name='readonly' type='BOOLEAN' />
+ <attribute name='tabindex' type='NMTOKEN' />
+ <attribute name='type' default='text'/>
+ </element>
+ <element name='label' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='for' type='IDREF' />
+ </element>
+ <element name='select' type='element'>
+ <memberOf group='M_INLINE'/>
+ <contains group='M_OPTIONS'/>
+ <attribute name='disabled' type='BOOLEAN' />
+ <attribute name='multiple' type='BOOLEAN' />
+ <attribute name='size' type='NMTOKEN' />
+ <attribute name='tabindex' type='NMTOKEN' />
+ <element name='optgroup' type='element'>
+ <memberOf group='M_OPTIONS'/>
+ <contains group='M_OPTIONS'/>
+ <attribute name='disabled' type='BOOLEAN' />
+ </element>
+ <element name='option' type='string'>
+ <memberOf group='M_OPTION'/>
+ <memberOf group='M_OPTIONS'/>
+ <attribute name='disabled' type='BOOLEAN' />
+ <attribute name='selected' type='BOOLEAN' />
+ </element>
+ </element>
+ <element name='textarea' type='string'>
+ <memberOf group='M_INLINE'/>
+ <attribute name='cols' type='NMTOKEN' />
+ <attribute name='disabled' type='BOOLEAN' />
+ <attribute name='readonly' type='BOOLEAN' />
+ <attribute name='rows' type='NMTOKEN' />
+ <attribute name='tabindex' type='NMTOKEN' />
+ </element>
+ </element>
+ <element name='h1' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='h2' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='h3' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='h4' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='h5' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='h6' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='hr' type='empty'>
+ <memberOf group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='noshade' type='BOOLEAN' />
+ </element>
+ <element name='i' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='iframe' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='frameborder' default='1'/>
+ <attribute name='scrolling' default='auto'/>
+ </element>
+ <element name='img' type='empty'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='ismap' type='BOOLEAN' />
+ </element>
+ <element name='ins' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='kbd' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='map' type='element'>
+ <memberOf group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <contains group='M_AREA'/>
+ <element name='area' type='empty'>
+ <memberOf group='M_AREA'/>
+ <attribute name='nohref' type='BOOLEAN' />
+ <attribute name='shape' default='rect'/>
+ <attribute name='tabindex' type='NMTOKEN' />
+ </element>
+ </element>
+ <element name='menu' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_LI'/>
+ <attribute name='compact' type='BOOLEAN' />
+ </element>
+ <element name='marquee' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='width' type='NMTOKEN' />
+ </element>
+ <element name='nobr' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='wbr' type='empty'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ </element>
+ <element name='noscript' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ </element>
+ <element name='object' type='mixed'>
+ <memberOf group='M_HEAD'/>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_PARAM'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='declare' type='BOOLEAN' />
+ <attribute name='tabindex' type='NMTOKEN' />
+ <element name='param' type='empty'>
+ <memberOf group='M_PARAM'/>
+ <attribute name='valuetype' default='data'/>
+ </element>
+ </element>
+ <element name='ol' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_LI'/>
+ <attribute name='compact' type='BOOLEAN' />
+ <attribute name='start' type='NMTOKEN' />
+ </element>
+ <element name='p' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <memberOf group='M_P'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_TABLE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='pre' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='width' type='NMTOKEN' />
+ </element>
+ <element name='listing' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='xmp' type='mixed'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='width' type='NMTOKEN' />
+ </element>
+ <element name='q' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='ruby' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='rbc' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='rtc' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='rb' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='rt' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ <attribute name='rbspan' default='1'/>
+ </element>
+ <element name='rp' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='s' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='samp' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='small' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='span' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='strike' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='strong' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='sub' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='sup' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='table' closeMode='unclosable' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <memberOf group='M_TABLE'/>
+ <contains group='M_FORM'/>
+ <contains group='M_TABULAR'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='frame' type='NMTOKEN' />
+ <attribute name='rules' type='NMTOKEN' />
+ <element name='caption' type='mixed'>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_INLINE'/>
+ <attribute name='align' type='NMTOKEN' />
+ </element>
+ <element name='col' type='empty'>
+ <memberOf group='M_COL'/>
+ <memberOf group='M_TABULAR'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='span' default='1'/>
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ <element name='colgroup' type='element'>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_COL'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='span' default='1'/>
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ <element name='tbody' type='element'>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_TR'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ <element name='tr' type='element'>
+ <memberOf group='M_TR'/>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_FORM'/>
+ <contains group='M_CELL'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ <element name='td' type='mixed'>
+ <memberOf group='M_CELL'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='colspan' default='1'/>
+ <attribute name='headers' type='IDREFS' />
+ <attribute name='nowrap' type='BOOLEAN' />
+ <attribute name='rowspan' default='1'/>
+ <attribute name='scope' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ <element name='th' type='mixed'>
+ <memberOf group='M_CELL'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='colspan' default='1'/>
+ <attribute name='headers' type='IDREFS' />
+ <attribute name='nowrap' type='BOOLEAN' />
+ <attribute name='rowspan' default='1'/>
+ <attribute name='scope' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ </element>
+ </element>
+ <element name='tfoot' type='element'>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_TR'/>
+ <contains group='M_FORM'/>
+ <contains group='M_CELL'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ <element name='thead' type='element'>
+ <memberOf group='M_TABULAR'/>
+ <contains group='M_TR'/>
+ <contains group='M_FORM'/>
+ <contains group='M_CELL'/>
+ <attribute name='align' type='NMTOKEN' />
+ <attribute name='valign' type='NMTOKEN' />
+ </element>
+ </element>
+ <element name='tt' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='u' closeMode='restartable' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='ul' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <contains group='M_LI'/>
+ <attribute name='compact' type='BOOLEAN' />
+ <attribute name='type' type='NMTOKEN' />
+ <element name='li' type='mixed'>
+ <memberOf group='M_LI'/>
+ <contains group='M_INLINE'/>
+ <contains group='M_BLOCK'/>
+ <attribute name='value' type='NMTOKEN' />
+ </element>
+ </element>
+ <element name='var' type='mixed'>
+ <memberOf group='M_INLINE'/>
+ <memberOf group='M_NOLINK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ </element>
+ <element name='frameset' type='element'>
+ <memberOf group='M_FRAME'/>
+ <memberOf group='M_HTML'/>
+ <contains group='M_FRAME'/>
+ <element name='frame' type='empty'>
+ <memberOf group='M_FRAME'/>
+ <attribute name='frameborder' default='1'/>
+ <attribute name='noresize' type='BOOLEAN' />
+ <attribute name='scrolling' default='auto'/>
+ </element>
+ </element>
+ <element name='head' type='element'>
+ <memberOf group='M_HTML'/>
+ <contains group='M_HEAD'/>
+ <element name='base' type='empty'>
+ <memberOf group='M_HEAD'/>
+ </element>
+ <element name='isindex' type='empty'>
+ <memberOf group='M_HEAD'/>
+ </element>
+ <element name='link' type='empty'>
+ <memberOf group='M_HEAD'/>
+ <memberOf group='M_INLINE'/>
+ <attribute name='hreflang' type='NMTOKEN' />
+ </element>
+ <element name='meta' type='empty'>
+ <memberOf group='M_HEAD'/>
+ <attribute name='http-equiv' type='NMTOKEN' />
+ <attribute name='name' type='NMTOKEN' />
+ </element>
+ <element name='style' type='cdata'>
+ <memberOf group='M_HEAD'/>
+ <memberOf group='M_INLINE'/>
+ </element>
+ <element name='title' type='string'>
+ <memberOf group='M_HEAD'/>
+ </element>
+ <element name='bgsound' type='empty'>
+ <memberOf group='M_HEAD'/>
+ </element>
+ </element>
+ <element name='noframes' type='element'>
+ <memberOf group='M_BLOCK'/>
+ <memberOf group='M_HTML'/>
+ <memberOf group='M_FRAME'/>
+ <contains group='M_BODY'/>
+ <contains group='M_BLOCK'/>
+ <contains group='M_INLINE'/>
+ </element>
+ <element name='script' type='cdata'>
+ <memberOfAny/>
+ <attribute name='defer' type='BOOLEAN' />
+ </element>
+ </element>
+ <attribute name='class' type='NMTOKEN' />
+ <attribute name='dir' type='NMTOKEN' />
+ <attribute name='id' type='ID' />
+ <attribute name='lang' type='NMTOKEN' />
+</schema>
diff --git a/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt b/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt
deleted file mode 100644
index 7462b7a..0000000
--- a/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-This is TagSoup 1.2, downloaded from http://home.ccil.org/~cowan/XML/tagsoup/.
-
-To get the java files included here:
-- download tagsoup
-- unzip it
-- cd into the tagsoup directory
-- run ant
-- copy the files in src/java and tmp/src \ No newline at end of file
diff --git a/src/org/ccil/cowan/tagsoup/HTMLScanner.java b/src/org/ccil/cowan/tagsoup/HTMLScanner.java
index f5980ee..70c12c4 100644
--- a/src/org/ccil/cowan/tagsoup/HTMLScanner.java
+++ b/src/org/ccil/cowan/tagsoup/HTMLScanner.java
@@ -109,8 +109,8 @@ public class HTMLScanner implements Scanner, Locator {
S_APOS, ' ', A_SP, S_APOS,
S_APOS, '\n', A_SP, S_APOS,
S_APOS, '\t', A_SP, S_APOS,
- S_AVAL, '\'', A_SKIP, S_APOS,
S_AVAL, '"', A_SKIP, S_QUOT,
+ S_AVAL, '\'', A_SKIP, S_APOS,
S_AVAL, '>', A_AVAL_STAGC, S_PCDATA,
S_AVAL, 0, A_SAVE, S_STAGC,
S_AVAL, -1, A_AVAL_STAGC, S_DONE,
@@ -164,8 +164,8 @@ public class HTMLScanner implements Scanner, Locator {
S_COM4, 0, A_MINUS2, S_COM2,
S_COM4, -1, A_CMNT, S_DONE,
S_DECL, '-', A_SKIP, S_COM,
- S_DECL, '[', A_SKIP, S_BB,
S_DECL, '>', A_SKIP, S_PCDATA,
+ S_DECL, '[', A_SKIP, S_BB,
S_DECL, 0, A_SAVE, S_DECL2,
S_DECL, -1, A_SKIP, S_DONE,
S_DECL2, '>', A_DECL, S_PCDATA,
@@ -226,9 +226,9 @@ public class HTMLScanner implements Scanner, Locator {
S_STAGC, '\n', A_AVAL, S_TAGWS,
S_STAGC, '\t', A_AVAL, S_TAGWS,
S_TAG, '!', A_SKIP, S_DECL,
- S_TAG, '?', A_SKIP, S_PITARGET,
S_TAG, '/', A_SKIP, S_ETAG,
S_TAG, '<', A_SAVE, S_TAG,
+ S_TAG, '?', A_SKIP, S_PITARGET,
S_TAG, 0, A_SAVE, S_GI,
S_TAG, -1, A_LT_PCDATA, S_DONE,
S_TAG, ' ', A_LT, S_PCDATA,
@@ -268,6 +268,76 @@ public class HTMLScanner implements Scanner, Locator {
0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFD, 0x017E, 0x0178};
+ /**
+ * Index into the state table for [state][input character - 2].
+ * The state table consists of 4-entry runs on the form
+ * { current state, input character, action, next state }.
+ * We precompute the index into the state table for all possible
+ * { current state, input character } and store the result in
+ * the statetableIndex array. Since only some input characters
+ * are present in the state table, we only do the computation for
+ * characters 0 to the highest character value in the state table.
+ * An input character of -2 is used to cover all other characters
+ * as -2 is guaranteed not to match any input character entry
+ * in the state table.
+ *
+ * <p>When doing lookups, the input character should first be tested
+ * to be in the range [-1 (inclusive), statetableIndexMaxChar (exclusive)].
+ * if it isn't use -2 as the input character.
+ *
+ * <p>Finally, add 2 to the input character to cover for the fact that
+ * Java doesn't support negative array indexes. Then look up
+ * the value in the statetableIndex. If the value is -1, then
+ * no action or next state was found for the { state, input } that
+ * you had. If it isn't -1, then action = statetable[value + 2] and
+ * next state = statetable[value + 3]. That is, the value points
+ * to the start of the answer 4-tuple in the statetable.
+ */
+ static short[][] statetableIndex;
+ /**
+ * The highest character value seen in the statetable.
+ * See the doc comment for statetableIndex to see how this
+ * is used.
+ */
+ static int statetableIndexMaxChar;
+ static {
+ int maxState = -1;
+ int maxChar = -1;
+ for (int i = 0; i < statetable.length; i += 4) {
+ if (statetable[i] > maxState) {
+ maxState = statetable[i];
+ }
+ if (statetable[i + 1] > maxChar) {
+ maxChar = statetable[i + 1];
+ }
+ }
+ statetableIndexMaxChar = maxChar + 1;
+
+ statetableIndex = new short[maxState + 1][maxChar + 3];
+ for (int theState = 0; theState <= maxState; ++theState) {
+ for (int ch = -2; ch <= maxChar; ++ch) {
+ int hit = -1;
+ int action = 0;
+ for (int i = 0; i < statetable.length; i += 4) {
+ if (theState != statetable[i]) {
+ if (action != 0) break;
+ continue;
+ }
+ if (statetable[i+1] == 0) {
+ hit = i;
+ action = statetable[i+2];
+ }
+ else if (statetable[i+1] == ch) {
+ hit = i;
+ action = statetable[i+2];
+ break;
+ }
+ }
+ statetableIndex[theState][ch + 2] = (short) hit;
+ }
+ }
+ }
+
// Compensate for bug in PushbackReader that allows
// pushing back EOF.
private void unread(PushbackReader r, int c) throws IOException {
@@ -313,14 +383,11 @@ public class HTMLScanner implements Scanner, Locator {
public void scan(Reader r0, ScanHandler h) throws IOException, SAXException {
theState = S_PCDATA;
PushbackReader r;
- if (r0 instanceof PushbackReader) {
- r = (PushbackReader)r0;
- }
- else if (r0 instanceof BufferedReader) {
- r = new PushbackReader(r0);
+ if (r0 instanceof BufferedReader) {
+ r = new PushbackReader(r0, 5);
}
else {
- r = new PushbackReader(new BufferedReader(r0, 200));
+ r = new PushbackReader(new BufferedReader(r0), 5);
}
int firstChar = r.read(); // Remove any leading BOM
@@ -351,62 +418,54 @@ public class HTMLScanner implements Scanner, Locator {
if (!(ch >= 0x20 || ch == '\n' || ch == '\t' || ch == -1)) continue;
// Search state table
+ int adjCh = (ch >= -1 && ch < statetableIndexMaxChar) ? ch : -2;
+ int statetableRow = statetableIndex[theState][adjCh + 2];
int action = 0;
- for (int i = 0; i < statetable.length; i += 4) {
- if (theState != statetable[i]) {
- if (action != 0) break;
- continue;
- }
- if (statetable[i+1] == 0) {
- action = statetable[i+2];
- theNextState = statetable[i+3];
- }
- else if (statetable[i+1] == ch) {
- action = statetable[i+2];
- theNextState = statetable[i+3];
- break;
- }
+ if (statetableRow != -1) {
+ action = statetable[statetableRow + 2];
+ theNextState = statetable[statetableRow + 3];
}
+
// System.err.println("In " + debug_statenames[theState] + " got " + nicechar(ch) + " doing " + debug_actionnames[action] + " then " + debug_statenames[theNextState]);
switch (action) {
case 0:
throw new Error(
-"HTMLScanner can't cope with " + Integer.toString(ch) + " in state " +
-Integer.toString(theState));
- case A_ADUP:
+ "HTMLScanner can't cope with " + Integer.toString(ch) + " in state " +
+ Integer.toString(theState));
+ case A_ADUP:
h.adup(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_ADUP_SAVE:
+ case A_ADUP_SAVE:
h.adup(theOutputBuffer, 0, theSize);
theSize = 0;
save(ch, h);
break;
- case A_ADUP_STAGC:
+ case A_ADUP_STAGC:
h.adup(theOutputBuffer, 0, theSize);
theSize = 0;
h.stagc(theOutputBuffer, 0, theSize);
break;
- case A_ANAME:
+ case A_ANAME:
h.aname(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_ANAME_ADUP:
+ case A_ANAME_ADUP:
h.aname(theOutputBuffer, 0, theSize);
theSize = 0;
h.adup(theOutputBuffer, 0, theSize);
break;
- case A_ANAME_ADUP_STAGC:
+ case A_ANAME_ADUP_STAGC:
h.aname(theOutputBuffer, 0, theSize);
theSize = 0;
h.adup(theOutputBuffer, 0, theSize);
h.stagc(theOutputBuffer, 0, theSize);
break;
- case A_AVAL:
+ case A_AVAL:
h.aval(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_AVAL_STAGC:
+ case A_AVAL_STAGC:
h.aval(theOutputBuffer, 0, theSize);
theSize = 0;
h.stagc(theOutputBuffer, 0, theSize);
@@ -489,15 +548,15 @@ Integer.toString(theState));
}
theNextState = S_PCDATA;
break;
- case A_ETAG:
+ case A_ETAG:
h.etag(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_DECL:
+ case A_DECL:
h.decl(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_GI:
+ case A_GI:
h.gi(theOutputBuffer, 0, theSize);
theSize = 0;
break;
@@ -506,7 +565,7 @@ Integer.toString(theState));
theSize = 0;
h.stagc(theOutputBuffer, 0, theSize);
break;
- case A_LT:
+ case A_LT:
mark();
save('<', h);
save(ch, h);
@@ -517,7 +576,7 @@ Integer.toString(theState));
h.pcdata(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_PCDATA:
+ case A_PCDATA:
mark();
h.pcdata(theOutputBuffer, 0, theSize);
theSize = 0;
@@ -539,29 +598,29 @@ Integer.toString(theState));
save('-', h);
save(ch, h);
break;
- case A_PI:
+ case A_PI:
mark();
h.pi(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_PITARGET:
+ case A_PITARGET:
h.pitarget(theOutputBuffer, 0, theSize);
theSize = 0;
break;
- case A_PITARGET_PI:
+ case A_PITARGET_PI:
h.pitarget(theOutputBuffer, 0, theSize);
theSize = 0;
h.pi(theOutputBuffer, 0, theSize);
break;
- case A_SAVE:
+ case A_SAVE:
save(ch, h);
break;
- case A_SKIP:
+ case A_SKIP:
break;
- case A_SP:
+ case A_SP:
save(' ', h);
break;
- case A_STAGC:
+ case A_STAGC:
h.stagc(theOutputBuffer, 0, theSize);
theSize = 0;
break;
@@ -576,7 +635,7 @@ Integer.toString(theState));
unread(r, ch);
theCurrentColumn--;
break;
- case A_UNSAVE_PCDATA:
+ case A_UNSAVE_PCDATA:
if (theSize > 0) theSize--;
h.pcdata(theOutputBuffer, 0, theSize);
theSize = 0;
@@ -617,7 +676,7 @@ Integer.toString(theState));
else {
// Grow the buffer size
char[] newOutputBuffer = new char[theOutputBuffer.length * 2];
- System.arraycopy(theOutputBuffer, 0, newOutputBuffer, 0, theSize+1);
+ System.arraycopy(theOutputBuffer, 0, newOutputBuffer, 0, theSize+1);
theOutputBuffer = newOutputBuffer;
}
}
diff --git a/src/org/ccil/cowan/tagsoup/HTMLSchema.java b/src/org/ccil/cowan/tagsoup/HTMLSchema.java
index 9b46a68..90c7a52 100644
--- a/src/org/ccil/cowan/tagsoup/HTMLSchema.java
+++ b/src/org/ccil/cowan/tagsoup/HTMLSchema.java
@@ -776,38 +776,38 @@ public class HTMLSchema extends Schema implements HTMLModels {
attribute("var", "lang", "NMTOKEN", null);
attribute("wbr", "lang", "NMTOKEN", null);
attribute("xmp", "lang", "NMTOKEN", null);
- entity("aacgr", 0x03AC);
entity("Aacgr", 0x0386);
- entity("aacute", 0x00E1);
+ entity("aacgr", 0x03AC);
entity("Aacute", 0x00C1);
- entity("abreve", 0x0103);
+ entity("aacute", 0x00E1);
entity("Abreve", 0x0102);
+ entity("abreve", 0x0103);
entity("ac", 0x223E);
entity("acd", 0x223F);
- entity("acirc", 0x00E2);
entity("Acirc", 0x00C2);
+ entity("acirc", 0x00E2);
entity("acute", 0x00B4);
- entity("acy", 0x0430);
entity("Acy", 0x0410);
- entity("aelig", 0x00E6);
+ entity("acy", 0x0430);
entity("AElig", 0x00C6);
+ entity("aelig", 0x00E6);
entity("af", 0x2061);
- entity("afr", 0x1D51E);
entity("Afr", 0x1D504);
- entity("agr", 0x03B1);
+ entity("afr", 0x1D51E);
entity("Agr", 0x0391);
- entity("agrave", 0x00E0);
+ entity("agr", 0x03B1);
entity("Agrave", 0x00C0);
+ entity("agrave", 0x00E0);
entity("alefsym", 0x2135);
entity("aleph", 0x2135);
- entity("alpha", 0x03B1);
entity("Alpha", 0x0391);
- entity("amacr", 0x0101);
+ entity("alpha", 0x03B1);
entity("Amacr", 0x0100);
+ entity("amacr", 0x0101);
entity("amalg", 0x2A3F);
entity("amp", 0x0026);
- entity("and", 0x2227);
entity("And", 0x2A53);
+ entity("and", 0x2227);
entity("andand", 0x2A55);
entity("andd", 0x2A5C);
entity("andslope", 0x2A58);
@@ -830,75 +830,75 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("angsph", 0x2222);
entity("angst", 0x212B);
entity("angzarr", 0x237C);
- entity("aogon", 0x0105);
entity("Aogon", 0x0104);
- entity("aopf", 0x1D552);
+ entity("aogon", 0x0105);
entity("Aopf", 0x1D538);
+ entity("aopf", 0x1D552);
entity("ap", 0x2248);
entity("apacir", 0x2A6F);
- entity("ape", 0x224A);
entity("apE", 0x2A70);
+ entity("ape", 0x224A);
entity("apid", 0x224B);
entity("apos", 0x0027);
entity("ApplyFunction", 0x2061);
entity("approx", 0x2248);
entity("approxeq", 0x224A);
- entity("aring", 0x00E5);
entity("Aring", 0x00C5);
- entity("ascr", 0x1D4B6);
+ entity("aring", 0x00E5);
entity("Ascr", 0x1D49C);
+ entity("ascr", 0x1D4B6);
entity("Assign", 0x2254);
entity("ast", 0x002A);
entity("asymp", 0x2248);
entity("asympeq", 0x224D);
- entity("atilde", 0x00E3);
entity("Atilde", 0x00C3);
- entity("auml", 0x00E4);
+ entity("atilde", 0x00E3);
entity("Auml", 0x00C4);
+ entity("auml", 0x00E4);
entity("awconint", 0x2233);
entity("awint", 0x2A11);
entity("b.alpha", 0x1D6C2);
entity("b.beta", 0x1D6C3);
entity("b.chi", 0x1D6D8);
- entity("b.delta", 0x1D6C5);
entity("b.Delta", 0x1D6AB);
+ entity("b.delta", 0x1D6C5);
entity("b.epsi", 0x1D6C6);
entity("b.epsiv", 0x1D6DC);
entity("b.eta", 0x1D6C8);
- entity("b.gamma", 0x1D6C4);
entity("b.Gamma", 0x1D6AA);
- entity("b.gammad", 0x1D7CB);
+ entity("b.gamma", 0x1D6C4);
entity("b.Gammad", 0x1D7CA);
+ entity("b.gammad", 0x1D7CB);
entity("b.iota", 0x1D6CA);
entity("b.kappa", 0x1D6CB);
entity("b.kappav", 0x1D6DE);
- entity("b.lambda", 0x1D6CC);
entity("b.Lambda", 0x1D6B2);
+ entity("b.lambda", 0x1D6CC);
entity("b.mu", 0x1D6CD);
entity("b.nu", 0x1D6CE);
- entity("b.omega", 0x1D6DA);
entity("b.Omega", 0x1D6C0);
- entity("b.phi", 0x1D6D7);
+ entity("b.omega", 0x1D6DA);
entity("b.Phi", 0x1D6BD);
+ entity("b.phi", 0x1D6D7);
entity("b.phiv", 0x1D6DF);
- entity("b.pi", 0x1D6D1);
entity("b.Pi", 0x1D6B7);
+ entity("b.pi", 0x1D6D1);
entity("b.piv", 0x1D6E1);
- entity("b.psi", 0x1D6D9);
entity("b.Psi", 0x1D6BF);
+ entity("b.psi", 0x1D6D9);
entity("b.rho", 0x1D6D2);
entity("b.rhov", 0x1D6E0);
- entity("b.sigma", 0x1D6D4);
entity("b.Sigma", 0x1D6BA);
+ entity("b.sigma", 0x1D6D4);
entity("b.sigmav", 0x1D6D3);
entity("b.tau", 0x1D6D5);
entity("b.Theta", 0x1D6AF);
entity("b.thetas", 0x1D6C9);
entity("b.thetav", 0x1D6DD);
- entity("b.upsi", 0x1D6D6);
entity("b.Upsi", 0x1D6BC);
- entity("b.xi", 0x1D6CF);
+ entity("b.upsi", 0x1D6D6);
entity("b.Xi", 0x1D6B5);
+ entity("b.xi", 0x1D6CF);
entity("b.zeta", 0x1D6C7);
entity("backcong", 0x224C);
entity("backepsilon", 0x03F6);
@@ -908,14 +908,14 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("Backslash", 0x2216);
entity("Barv", 0x2AE7);
entity("barvee", 0x22BD);
- entity("barwed", 0x2305);
entity("Barwed", 0x2306);
+ entity("barwed", 0x2305);
entity("barwedge", 0x2305);
entity("bbrk", 0x23B5);
entity("bbrktbrk", 0x23B6);
entity("bcong", 0x224C);
- entity("bcy", 0x0431);
entity("Bcy", 0x0411);
+ entity("bcy", 0x0431);
entity("bdquo", 0x201E);
entity("becaus", 0x2235);
entity("because", 0x2235);
@@ -923,14 +923,14 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("bepsi", 0x03F6);
entity("bernou", 0x212C);
entity("Bernoullis", 0x212C);
- entity("beta", 0x03B2);
entity("Beta", 0x0392);
+ entity("beta", 0x03B2);
entity("beth", 0x2136);
entity("between", 0x226C);
- entity("bfr", 0x1D51F);
entity("Bfr", 0x1D505);
- entity("bgr", 0x03B2);
+ entity("bfr", 0x1D51F);
entity("Bgr", 0x0392);
+ entity("bgr", 0x03B2);
entity("bigcap", 0x22C2);
entity("bigcirc", 0x25EF);
entity("bigcup", 0x22C3);
@@ -956,62 +956,62 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("blk14", 0x2591);
entity("blk34", 0x2593);
entity("block", 0x2588);
- entity("bnot", 0x2310);
entity("bNot", 0x2AED);
- entity("bopf", 0x1D553);
+ entity("bnot", 0x2310);
entity("Bopf", 0x1D539);
+ entity("bopf", 0x1D553);
entity("bot", 0x22A5);
entity("bottom", 0x22A5);
entity("bowtie", 0x22C8);
entity("boxbox", 0x29C9);
- entity("boxdl", 0x2510);
- entity("boxdL", 0x2555);
- entity("boxDl", 0x2556);
entity("boxDL", 0x2557);
- entity("boxdr", 0x250C);
- entity("boxdR", 0x2552);
- entity("boxDr", 0x2553);
+ entity("boxDl", 0x2556);
+ entity("boxdL", 0x2555);
+ entity("boxdl", 0x2510);
entity("boxDR", 0x2554);
- entity("boxh", 0x2500);
+ entity("boxDr", 0x2553);
+ entity("boxdR", 0x2552);
+ entity("boxdr", 0x250C);
entity("boxH", 0x2550);
- entity("boxhd", 0x252C);
- entity("boxhD", 0x2565);
- entity("boxHd", 0x2564);
+ entity("boxh", 0x2500);
entity("boxHD", 0x2566);
- entity("boxhu", 0x2534);
- entity("boxhU", 0x2568);
- entity("boxHu", 0x2567);
+ entity("boxHd", 0x2564);
+ entity("boxhD", 0x2565);
+ entity("boxhd", 0x252C);
entity("boxHU", 0x2569);
+ entity("boxHu", 0x2567);
+ entity("boxhU", 0x2568);
+ entity("boxhu", 0x2534);
entity("boxminus", 0x229F);
entity("boxplus", 0x229E);
entity("boxtimes", 0x22A0);
- entity("boxul", 0x2518);
- entity("boxuL", 0x255B);
- entity("boxUl", 0x255C);
entity("boxUL", 0x255D);
- entity("boxur", 0x2514);
- entity("boxuR", 0x2558);
- entity("boxUr", 0x2559);
+ entity("boxUl", 0x255C);
+ entity("boxuL", 0x255B);
+ entity("boxul", 0x2518);
entity("boxUR", 0x255A);
- entity("boxv", 0x2502);
+ entity("boxUr", 0x2559);
+ entity("boxuR", 0x2558);
+ entity("boxur", 0x2514);
entity("boxV", 0x2551);
- entity("boxvh", 0x253C);
- entity("boxvH", 0x256A);
- entity("boxVh", 0x256B);
+ entity("boxv", 0x2502);
entity("boxVH", 0x256C);
- entity("boxvl", 0x2524);
- entity("boxvL", 0x2561);
- entity("boxVl", 0x2562);
+ entity("boxVh", 0x256B);
+ entity("boxvH", 0x256A);
+ entity("boxvh", 0x253C);
entity("boxVL", 0x2563);
- entity("boxvr", 0x251C);
- entity("boxvR", 0x255E);
- entity("boxVr", 0x255F);
+ entity("boxVl", 0x2562);
+ entity("boxvL", 0x2561);
+ entity("boxvl", 0x2524);
entity("boxVR", 0x2560);
+ entity("boxVr", 0x255F);
+ entity("boxvR", 0x255E);
+ entity("boxvr", 0x251C);
entity("bprime", 0x2035);
entity("breve", 0x02D8);
entity("brvbar", 0x00A6);
- entity("bscr", 0x1D4B7);
entity("Bscr", 0x212C);
+ entity("bscr", 0x1D4B7);
entity("bsemi", 0x204F);
entity("bsim", 0x223D);
entity("bsime", 0x22CD);
@@ -1020,14 +1020,14 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("bull", 0x2022);
entity("bullet", 0x2022);
entity("bump", 0x224E);
- entity("bumpe", 0x224F);
entity("bumpE", 0x2AAE);
- entity("bumpeq", 0x224F);
+ entity("bumpe", 0x224F);
entity("Bumpeq", 0x224E);
- entity("cacute", 0x0107);
+ entity("bumpeq", 0x224F);
entity("Cacute", 0x0106);
- entity("cap", 0x2229);
+ entity("cacute", 0x0107);
entity("Cap", 0x22D2);
+ entity("cap", 0x2229);
entity("capand", 0x2A44);
entity("capbrcup", 0x2A49);
entity("capcap", 0x2A4B);
@@ -1038,30 +1038,30 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("caron", 0x02C7);
entity("Cayleys", 0x212D);
entity("ccaps", 0x2A4D);
- entity("ccaron", 0x010D);
entity("Ccaron", 0x010C);
- entity("ccedil", 0x00E7);
+ entity("ccaron", 0x010D);
entity("Ccedil", 0x00C7);
- entity("ccirc", 0x0109);
+ entity("ccedil", 0x00E7);
entity("Ccirc", 0x0108);
+ entity("ccirc", 0x0109);
entity("Cconint", 0x2230);
entity("ccups", 0x2A4C);
entity("ccupssm", 0x2A50);
- entity("cdot", 0x010B);
entity("Cdot", 0x010A);
+ entity("cdot", 0x010B);
entity("cedil", 0x00B8);
entity("Cedilla", 0x00B8);
entity("cemptyv", 0x29B2);
entity("cent", 0x00A2);
entity("centerdot", 0x00B7);
- entity("cfr", 0x1D520);
entity("Cfr", 0x212D);
- entity("chcy", 0x0447);
+ entity("cfr", 0x1D520);
entity("CHcy", 0x0427);
+ entity("chcy", 0x0447);
entity("check", 0x2713);
entity("checkmark", 0x2713);
- entity("chi", 0x03C7);
entity("Chi", 0x03A7);
+ entity("chi", 0x03C7);
entity("cir", 0x25CB);
entity("circ", 0x02C6);
entity("circeq", 0x2257);
@@ -1076,8 +1076,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("CircleMinus", 0x2296);
entity("CirclePlus", 0x2295);
entity("CircleTimes", 0x2297);
- entity("cire", 0x2257);
entity("cirE", 0x29C3);
+ entity("cire", 0x2257);
entity("cirfnint", 0x2A10);
entity("cirmid", 0x2AEF);
entity("cirscir", 0x29C2);
@@ -1086,10 +1086,10 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("CloseCurlyQuote", 0x2019);
entity("clubs", 0x2663);
entity("clubsuit", 0x2663);
- entity("colon", 0x003A);
entity("Colon", 0x2237);
- entity("colone", 0x2254);
+ entity("colon", 0x003A);
entity("Colone", 0x2A74);
+ entity("colone", 0x2254);
entity("coloneq", 0x2254);
entity("comma", 0x002C);
entity("commat", 0x0040);
@@ -1100,21 +1100,21 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("cong", 0x2245);
entity("congdot", 0x2A6D);
entity("Congruent", 0x2261);
- entity("conint", 0x222E);
entity("Conint", 0x222F);
+ entity("conint", 0x222E);
entity("ContourIntegral", 0x222E);
- entity("copf", 0x1D554);
entity("Copf", 0x2102);
+ entity("copf", 0x1D554);
entity("coprod", 0x2210);
entity("Coproduct", 0x2210);
entity("copy", 0x00A9);
entity("copysr", 0x2117);
entity("CounterClockwiseContourIntegral", 0x2233);
entity("crarr", 0x21B5);
- entity("cross", 0x2717);
entity("Cross", 0x2A2F);
- entity("cscr", 0x1D4B8);
+ entity("cross", 0x2717);
entity("Cscr", 0x1D49E);
+ entity("cscr", 0x1D4B8);
entity("csub", 0x2ACF);
entity("csube", 0x2AD1);
entity("csup", 0x2AD0);
@@ -1126,11 +1126,11 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("cuesc", 0x22DF);
entity("cularr", 0x21B6);
entity("cularrp", 0x293D);
- entity("cup", 0x222A);
entity("Cup", 0x22D3);
+ entity("cup", 0x222A);
entity("cupbrcap", 0x2A48);
- entity("cupcap", 0x2A46);
entity("CupCap", 0x224D);
+ entity("cupcap", 0x2A46);
entity("cupcup", 0x2A4A);
entity("cupdot", 0x228D);
entity("cupor", 0x2A45);
@@ -1148,37 +1148,37 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("cwconint", 0x2232);
entity("cwint", 0x2231);
entity("cylcty", 0x232D);
- entity("dagger", 0x2020);
entity("Dagger", 0x2021);
+ entity("dagger", 0x2020);
entity("daleth", 0x2138);
- entity("darr", 0x2193);
- entity("dArr", 0x21D3);
entity("Darr", 0x21A1);
+ entity("dArr", 0x21D3);
+ entity("darr", 0x2193);
entity("dash", 0x2010);
- entity("dashv", 0x22A3);
entity("Dashv", 0x2AE4);
+ entity("dashv", 0x22A3);
entity("dbkarow", 0x290F);
entity("dblac", 0x02DD);
- entity("dcaron", 0x010F);
entity("Dcaron", 0x010E);
- entity("dcy", 0x0434);
+ entity("dcaron", 0x010F);
entity("Dcy", 0x0414);
- entity("dd", 0x2146);
+ entity("dcy", 0x0434);
entity("DD", 0x2145);
+ entity("dd", 0x2146);
entity("ddagger", 0x2021);
entity("ddarr", 0x21CA);
entity("DDotrahd", 0x2911);
entity("ddotseq", 0x2A77);
entity("deg", 0x00B0);
entity("Del", 0x2207);
- entity("delta", 0x03B4);
entity("Delta", 0x0394);
+ entity("delta", 0x03B4);
entity("demptyv", 0x29B1);
entity("dfisht", 0x297F);
- entity("dfr", 0x1D521);
entity("Dfr", 0x1D507);
- entity("dgr", 0x03B4);
+ entity("dfr", 0x1D521);
entity("Dgr", 0x0394);
+ entity("dgr", 0x03B4);
entity("dHar", 0x2965);
entity("dharl", 0x21C3);
entity("dharr", 0x21C2);
@@ -1199,15 +1199,15 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("divide", 0x00F7);
entity("divideontimes", 0x22C7);
entity("divonx", 0x22C7);
- entity("djcy", 0x0452);
entity("DJcy", 0x0402);
+ entity("djcy", 0x0452);
entity("dlcorn", 0x231E);
entity("dlcrop", 0x230D);
entity("dollar", 0x0024);
- entity("dopf", 0x1D555);
entity("Dopf", 0x1D53B);
- entity("dot", 0x02D9);
+ entity("dopf", 0x1D555);
entity("Dot", 0x00A8);
+ entity("dot", 0x02D9);
entity("doteq", 0x2250);
entity("doteqdot", 0x2251);
entity("DotEqual", 0x2250);
@@ -1229,8 +1229,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("DoubleUpArrow", 0x21D1);
entity("DoubleUpDownArrow", 0x21D5);
entity("DoubleVerticalBar", 0x2225);
- entity("downarrow", 0x2193);
entity("Downarrow", 0x21D3);
+ entity("downarrow", 0x2193);
entity("DownArrowBar", 0x2913);
entity("DownArrowUpArrow", 0x21F5);
entity("downdownarrows", 0x21CA);
@@ -1248,52 +1248,52 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("drbkarow", 0x2910);
entity("drcorn", 0x231F);
entity("drcrop", 0x230C);
- entity("dscr", 0x1D4B9);
entity("Dscr", 0x1D49F);
- entity("dscy", 0x0455);
+ entity("dscr", 0x1D4B9);
entity("DScy", 0x0405);
+ entity("dscy", 0x0455);
entity("dsol", 0x29F6);
- entity("dstrok", 0x0111);
entity("Dstrok", 0x0110);
+ entity("dstrok", 0x0111);
entity("dtdot", 0x22F1);
entity("dtri", 0x25BF);
entity("dtrif", 0x25BE);
entity("duarr", 0x21F5);
entity("duhar", 0x296F);
entity("dwangle", 0x29A6);
- entity("dzcy", 0x045F);
entity("DZcy", 0x040F);
+ entity("dzcy", 0x045F);
entity("dzigrarr", 0x27FF);
- entity("eacgr", 0x03AD);
entity("Eacgr", 0x0388);
- entity("eacute", 0x00E9);
+ entity("eacgr", 0x03AD);
entity("Eacute", 0x00C9);
+ entity("eacute", 0x00E9);
entity("easter", 0x2A6E);
- entity("ecaron", 0x011B);
entity("Ecaron", 0x011A);
+ entity("ecaron", 0x011B);
entity("ecir", 0x2256);
- entity("ecirc", 0x00EA);
entity("Ecirc", 0x00CA);
+ entity("ecirc", 0x00EA);
entity("ecolon", 0x2255);
- entity("ecy", 0x044D);
entity("Ecy", 0x042D);
+ entity("ecy", 0x044D);
entity("eDDot", 0x2A77);
- entity("edot", 0x0117);
- entity("eDot", 0x2251);
entity("Edot", 0x0116);
+ entity("eDot", 0x2251);
+ entity("edot", 0x0117);
entity("ee", 0x2147);
- entity("eeacgr", 0x03AE);
entity("EEacgr", 0x0389);
- entity("eegr", 0x03B7);
+ entity("eeacgr", 0x03AE);
entity("EEgr", 0x0397);
+ entity("eegr", 0x03B7);
entity("efDot", 0x2252);
- entity("efr", 0x1D522);
entity("Efr", 0x1D508);
+ entity("efr", 0x1D522);
entity("eg", 0x2A9A);
- entity("egr", 0x03B5);
entity("Egr", 0x0395);
- entity("egrave", 0x00E8);
+ entity("egr", 0x03B5);
entity("Egrave", 0x00C8);
+ entity("egrave", 0x00E8);
entity("egs", 0x2A96);
entity("egsdot", 0x2A98);
entity("el", 0x2A99);
@@ -1302,8 +1302,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("ell", 0x2113);
entity("els", 0x2A95);
entity("elsdot", 0x2A97);
- entity("emacr", 0x0113);
entity("Emacr", 0x0112);
+ entity("emacr", 0x0113);
entity("empty", 0x2205);
entity("emptyset", 0x2205);
entity("EmptySmallSquare", 0x25FB);
@@ -1312,19 +1312,19 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("emsp", 0x2003);
entity("emsp13", 0x2004);
entity("emsp14", 0x2005);
- entity("eng", 0x014B);
entity("ENG", 0x014A);
+ entity("eng", 0x014B);
entity("ensp", 0x2002);
- entity("eogon", 0x0119);
entity("Eogon", 0x0118);
- entity("eopf", 0x1D556);
+ entity("eogon", 0x0119);
entity("Eopf", 0x1D53C);
+ entity("eopf", 0x1D556);
entity("epar", 0x22D5);
entity("eparsl", 0x29E3);
entity("eplus", 0x2A71);
entity("epsi", 0x03F5);
- entity("epsilon", 0x03B5);
entity("Epsilon", 0x0395);
+ entity("epsilon", 0x03B5);
entity("epsiv", 0x03B5);
entity("eqcirc", 0x2256);
entity("eqcolon", 0x2255);
@@ -1341,17 +1341,17 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("eqvparsl", 0x29E5);
entity("erarr", 0x2971);
entity("erDot", 0x2253);
- entity("escr", 0x212F);
entity("Escr", 0x2130);
+ entity("escr", 0x212F);
entity("esdot", 0x2250);
- entity("esim", 0x2242);
entity("Esim", 0x2A73);
- entity("eta", 0x03B7);
+ entity("esim", 0x2242);
entity("Eta", 0x0397);
- entity("eth", 0x00F0);
+ entity("eta", 0x03B7);
entity("ETH", 0x00D0);
- entity("euml", 0x00EB);
+ entity("eth", 0x00F0);
entity("Euml", 0x00CB);
+ entity("euml", 0x00EB);
entity("euro", 0x20AC);
entity("excl", 0x0021);
entity("exist", 0x2203);
@@ -1359,14 +1359,14 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("expectation", 0x2130);
entity("exponentiale", 0x2147);
entity("fallingdotseq", 0x2252);
- entity("fcy", 0x0444);
entity("Fcy", 0x0424);
+ entity("fcy", 0x0444);
entity("female", 0x2640);
entity("ffilig", 0xFB03);
entity("fflig", 0xFB00);
entity("ffllig", 0xFB04);
- entity("ffr", 0x1D523);
entity("Ffr", 0x1D509);
+ entity("ffr", 0x1D523);
entity("filig", 0xFB01);
entity("FilledSmallSquare", 0x25FC);
entity("FilledVerySmallSquare", 0x25AA);
@@ -1374,8 +1374,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("fllig", 0xFB02);
entity("fltns", 0x25B1);
entity("fnof", 0x0192);
- entity("fopf", 0x1D557);
entity("Fopf", 0x1D53D);
+ entity("fopf", 0x1D557);
entity("forall", 0x2200);
entity("fork", 0x22D4);
entity("forkv", 0x2AD9);
@@ -1398,27 +1398,27 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("frac78", 0x215E);
entity("frasl", 0x2044);
entity("frown", 0x2322);
- entity("fscr", 0x1D4BB);
entity("Fscr", 0x2131);
+ entity("fscr", 0x1D4BB);
entity("gacute", 0x01F5);
- entity("gamma", 0x03B3);
entity("Gamma", 0x0393);
- entity("gammad", 0x03DD);
+ entity("gamma", 0x03B3);
entity("Gammad", 0x03DC);
+ entity("gammad", 0x03DD);
entity("gap", 0x2A86);
- entity("gbreve", 0x011F);
entity("Gbreve", 0x011E);
+ entity("gbreve", 0x011F);
entity("Gcedil", 0x0122);
- entity("gcirc", 0x011D);
entity("Gcirc", 0x011C);
- entity("gcy", 0x0433);
+ entity("gcirc", 0x011D);
entity("Gcy", 0x0413);
- entity("gdot", 0x0121);
+ entity("gcy", 0x0433);
entity("Gdot", 0x0120);
- entity("ge", 0x2265);
+ entity("gdot", 0x0121);
entity("gE", 0x2267);
- entity("gel", 0x22DB);
+ entity("ge", 0x2265);
entity("gEl", 0x2A8C);
+ entity("gel", 0x22DB);
entity("geq", 0x2265);
entity("geqq", 0x2267);
entity("geqslant", 0x2A7E);
@@ -1428,29 +1428,29 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("gesdoto", 0x2A82);
entity("gesdotol", 0x2A84);
entity("gesles", 0x2A94);
- entity("gfr", 0x1D524);
entity("Gfr", 0x1D50A);
- entity("gg", 0x226B);
+ entity("gfr", 0x1D524);
entity("Gg", 0x22D9);
+ entity("gg", 0x226B);
entity("ggg", 0x22D9);
- entity("ggr", 0x03B3);
entity("Ggr", 0x0393);
+ entity("ggr", 0x03B3);
entity("gimel", 0x2137);
- entity("gjcy", 0x0453);
entity("GJcy", 0x0403);
+ entity("gjcy", 0x0453);
entity("gl", 0x2277);
entity("gla", 0x2AA5);
entity("glE", 0x2A92);
entity("glj", 0x2AA4);
entity("gnap", 0x2A8A);
entity("gnapprox", 0x2A8A);
- entity("gne", 0x2A88);
entity("gnE", 0x2269);
+ entity("gne", 0x2A88);
entity("gneq", 0x2A88);
entity("gneqq", 0x2269);
entity("gnsim", 0x22E7);
- entity("gopf", 0x1D558);
entity("Gopf", 0x1D53E);
+ entity("gopf", 0x1D558);
entity("grave", 0x0060);
entity("GreaterEqual", 0x2265);
entity("GreaterEqualLess", 0x22DB);
@@ -1459,13 +1459,13 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("GreaterLess", 0x2277);
entity("GreaterSlantEqual", 0x2A7E);
entity("GreaterTilde", 0x2273);
- entity("gscr", 0x210A);
entity("Gscr", 0x1D4A2);
+ entity("gscr", 0x210A);
entity("gsim", 0x2273);
entity("gsime", 0x2A8E);
entity("gsiml", 0x2A90);
- entity("gt", 0x003E);
entity("Gt", 0x226B);
+ entity("gt", 0x003E);
entity("gtcc", 0x2AA7);
entity("gtcir", 0x2A7A);
entity("gtdot", 0x22D7);
@@ -1482,22 +1482,22 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("hairsp", 0x200A);
entity("half", 0x00BD);
entity("hamilt", 0x210B);
- entity("hardcy", 0x044A);
entity("HARDcy", 0x042A);
- entity("harr", 0x2194);
+ entity("hardcy", 0x044A);
entity("hArr", 0x21D4);
+ entity("harr", 0x2194);
entity("harrcir", 0x2948);
entity("harrw", 0x21AD);
entity("Hat", 0x005E);
entity("hbar", 0x210F);
- entity("hcirc", 0x0125);
entity("Hcirc", 0x0124);
+ entity("hcirc", 0x0125);
entity("hearts", 0x2665);
entity("heartsuit", 0x2665);
entity("hellip", 0x2026);
entity("hercon", 0x22B9);
- entity("hfr", 0x1D525);
entity("Hfr", 0x210C);
+ entity("hfr", 0x1D525);
entity("HilbertSpace", 0x210B);
entity("hksearow", 0x2925);
entity("hkswarow", 0x2926);
@@ -1505,52 +1505,52 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("homtht", 0x223B);
entity("hookleftarrow", 0x21A9);
entity("hookrightarrow", 0x21AA);
- entity("hopf", 0x1D559);
entity("Hopf", 0x210D);
+ entity("hopf", 0x1D559);
entity("horbar", 0x2015);
entity("HorizontalLine", 0x2500);
- entity("hscr", 0x1D4BD);
entity("Hscr", 0x210B);
+ entity("hscr", 0x1D4BD);
entity("hslash", 0x210F);
- entity("hstrok", 0x0127);
entity("Hstrok", 0x0126);
+ entity("hstrok", 0x0127);
entity("HumpDownHump", 0x224E);
entity("HumpEqual", 0x224F);
entity("hybull", 0x2043);
entity("hyphen", 0x2010);
- entity("iacgr", 0x03AF);
entity("Iacgr", 0x038A);
- entity("iacute", 0x00ED);
+ entity("iacgr", 0x03AF);
entity("Iacute", 0x00CD);
+ entity("iacute", 0x00ED);
entity("ic", 0x2063);
- entity("icirc", 0x00EE);
entity("Icirc", 0x00CE);
- entity("icy", 0x0438);
+ entity("icirc", 0x00EE);
entity("Icy", 0x0418);
+ entity("icy", 0x0438);
entity("idiagr", 0x0390);
- entity("idigr", 0x03CA);
entity("Idigr", 0x03AA);
+ entity("idigr", 0x03CA);
entity("Idot", 0x0130);
- entity("iecy", 0x0435);
entity("IEcy", 0x0415);
+ entity("iecy", 0x0435);
entity("iexcl", 0x00A1);
entity("iff", 0x21D4);
- entity("ifr", 0x1D526);
entity("Ifr", 0x2111);
- entity("igr", 0x03B9);
+ entity("ifr", 0x1D526);
entity("Igr", 0x0399);
- entity("igrave", 0x00EC);
+ entity("igr", 0x03B9);
entity("Igrave", 0x00CC);
+ entity("igrave", 0x00EC);
entity("ii", 0x2148);
entity("iiiint", 0x2A0C);
entity("iiint", 0x222D);
entity("iinfin", 0x29DC);
entity("iiota", 0x2129);
- entity("ijlig", 0x0133);
entity("IJlig", 0x0132);
+ entity("ijlig", 0x0133);
entity("Im", 0x2111);
- entity("imacr", 0x012B);
entity("Imacr", 0x012A);
+ entity("imacr", 0x012B);
entity("image", 0x2111);
entity("ImaginaryI", 0x2148);
entity("imagline", 0x2110);
@@ -1564,8 +1564,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("infin", 0x221E);
entity("infintie", 0x29DD);
entity("inodot", 0x0131);
- entity("int", 0x222B);
entity("Int", 0x222C);
+ entity("int", 0x222B);
entity("intcal", 0x22BA);
entity("integers", 0x2124);
entity("Integral", 0x222B);
@@ -1575,18 +1575,18 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("intprod", 0x2A3C);
entity("InvisibleComma", 0x2063);
entity("InvisibleTimes", 0x2062);
- entity("iocy", 0x0451);
entity("IOcy", 0x0401);
- entity("iogon", 0x012F);
+ entity("iocy", 0x0451);
entity("Iogon", 0x012E);
- entity("iopf", 0x1D55A);
+ entity("iogon", 0x012F);
entity("Iopf", 0x1D540);
- entity("iota", 0x03B9);
+ entity("iopf", 0x1D55A);
entity("Iota", 0x0399);
+ entity("iota", 0x03B9);
entity("iprod", 0x2A3C);
entity("iquest", 0x00BF);
- entity("iscr", 0x1D4BE);
entity("Iscr", 0x2110);
+ entity("iscr", 0x1D4BE);
entity("isin", 0x2208);
entity("isindot", 0x22F5);
entity("isinE", 0x22F9);
@@ -1594,66 +1594,66 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("isinsv", 0x22F3);
entity("isinv", 0x2208);
entity("it", 0x2062);
- entity("itilde", 0x0129);
entity("Itilde", 0x0128);
- entity("iukcy", 0x0456);
+ entity("itilde", 0x0129);
entity("Iukcy", 0x0406);
- entity("iuml", 0x00EF);
+ entity("iukcy", 0x0456);
entity("Iuml", 0x00CF);
- entity("jcirc", 0x0135);
+ entity("iuml", 0x00EF);
entity("Jcirc", 0x0134);
- entity("jcy", 0x0439);
+ entity("jcirc", 0x0135);
entity("Jcy", 0x0419);
- entity("jfr", 0x1D527);
+ entity("jcy", 0x0439);
entity("Jfr", 0x1D50D);
+ entity("jfr", 0x1D527);
entity("jmath", 0x0237);
- entity("jopf", 0x1D55B);
entity("Jopf", 0x1D541);
- entity("jscr", 0x1D4BF);
+ entity("jopf", 0x1D55B);
entity("Jscr", 0x1D4A5);
- entity("jsercy", 0x0458);
+ entity("jscr", 0x1D4BF);
entity("Jsercy", 0x0408);
- entity("jukcy", 0x0454);
+ entity("jsercy", 0x0458);
entity("Jukcy", 0x0404);
- entity("kappa", 0x03BA);
+ entity("jukcy", 0x0454);
entity("Kappa", 0x039A);
+ entity("kappa", 0x03BA);
entity("kappav", 0x03F0);
- entity("kcedil", 0x0137);
entity("Kcedil", 0x0136);
- entity("kcy", 0x043A);
+ entity("kcedil", 0x0137);
entity("Kcy", 0x041A);
- entity("kfr", 0x1D528);
+ entity("kcy", 0x043A);
entity("Kfr", 0x1D50E);
- entity("kgr", 0x03BA);
+ entity("kfr", 0x1D528);
entity("Kgr", 0x039A);
+ entity("kgr", 0x03BA);
entity("kgreen", 0x0138);
- entity("khcy", 0x0445);
entity("KHcy", 0x0425);
- entity("khgr", 0x03C7);
+ entity("khcy", 0x0445);
entity("KHgr", 0x03A7);
- entity("kjcy", 0x045C);
+ entity("khgr", 0x03C7);
entity("KJcy", 0x040C);
- entity("kopf", 0x1D55C);
+ entity("kjcy", 0x045C);
entity("Kopf", 0x1D542);
- entity("kscr", 0x1D4C0);
+ entity("kopf", 0x1D55C);
entity("Kscr", 0x1D4A6);
+ entity("kscr", 0x1D4C0);
entity("lAarr", 0x21DA);
- entity("lacute", 0x013A);
entity("Lacute", 0x0139);
+ entity("lacute", 0x013A);
entity("laemptyv", 0x29B4);
entity("lagran", 0x2112);
- entity("lambda", 0x03BB);
entity("Lambda", 0x039B);
- entity("lang", 0x2329);
+ entity("lambda", 0x03BB);
entity("Lang", 0x27EA);
+ entity("lang", 0x2329);
entity("langd", 0x2991);
entity("langle", 0x2329);
entity("lap", 0x2A85);
entity("Laplacetrf", 0x2112);
entity("laquo", 0x00AB);
- entity("larr", 0x2190);
- entity("lArr", 0x21D0);
entity("Larr", 0x219E);
+ entity("lArr", 0x21D0);
+ entity("larr", 0x2190);
entity("larrb", 0x21E4);
entity("larrbfs", 0x291F);
entity("larrfs", 0x291D);
@@ -1663,36 +1663,36 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("larrsim", 0x2973);
entity("larrtl", 0x21A2);
entity("lat", 0x2AAB);
- entity("latail", 0x2919);
entity("lAtail", 0x291B);
+ entity("latail", 0x2919);
entity("late", 0x2AAD);
- entity("lbarr", 0x290C);
entity("lBarr", 0x290E);
+ entity("lbarr", 0x290C);
entity("lbbrk", 0x2997);
entity("lbrace", 0x007B);
entity("lbrack", 0x005B);
entity("lbrke", 0x298B);
entity("lbrksld", 0x298F);
entity("lbrkslu", 0x298D);
- entity("lcaron", 0x013E);
entity("Lcaron", 0x013D);
- entity("lcedil", 0x013C);
+ entity("lcaron", 0x013E);
entity("Lcedil", 0x013B);
+ entity("lcedil", 0x013C);
entity("lceil", 0x2308);
entity("lcub", 0x007B);
- entity("lcy", 0x043B);
entity("Lcy", 0x041B);
+ entity("lcy", 0x043B);
entity("ldca", 0x2936);
entity("ldquo", 0x201C);
entity("ldquor", 0x201E);
entity("ldrdhar", 0x2967);
entity("ldrushar", 0x294B);
entity("ldsh", 0x21B2);
- entity("le", 0x2264);
entity("lE", 0x2266);
+ entity("le", 0x2264);
entity("LeftAngleBracket", 0x2329);
- entity("leftarrow", 0x2190);
entity("Leftarrow", 0x21D0);
+ entity("leftarrow", 0x2190);
entity("LeftArrowBar", 0x21E4);
entity("LeftArrowRightArrow", 0x21C6);
entity("leftarrowtail", 0x21A2);
@@ -1705,8 +1705,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("leftharpoondown", 0x21BD);
entity("leftharpoonup", 0x21BC);
entity("leftleftarrows", 0x21C7);
- entity("leftrightarrow", 0x2194);
entity("Leftrightarrow", 0x21D4);
+ entity("leftrightarrow", 0x2194);
entity("leftrightarrows", 0x21C6);
entity("leftrightharpoons", 0x21CB);
entity("leftrightsquigarrow", 0x21AD);
@@ -1724,8 +1724,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("LeftUpVectorBar", 0x2958);
entity("LeftVector", 0x21BC);
entity("LeftVectorBar", 0x2952);
- entity("leg", 0x22DA);
entity("lEg", 0x2A8B);
+ entity("leg", 0x22DA);
entity("leq", 0x2264);
entity("leqq", 0x2266);
entity("leqslant", 0x2A7D);
@@ -1749,52 +1749,52 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("LessTilde", 0x2272);
entity("lfisht", 0x297C);
entity("lfloor", 0x230A);
- entity("lfr", 0x1D529);
entity("Lfr", 0x1D50F);
+ entity("lfr", 0x1D529);
entity("lg", 0x2276);
entity("lgE", 0x2A91);
- entity("lgr", 0x03BB);
entity("Lgr", 0x039B);
+ entity("lgr", 0x03BB);
entity("lHar", 0x2962);
entity("lhard", 0x21BD);
entity("lharu", 0x21BC);
entity("lharul", 0x296A);
entity("lhblk", 0x2584);
- entity("ljcy", 0x0459);
entity("LJcy", 0x0409);
- entity("ll", 0x226A);
+ entity("ljcy", 0x0459);
entity("Ll", 0x22D8);
+ entity("ll", 0x226A);
entity("llarr", 0x21C7);
entity("llcorner", 0x231E);
entity("Lleftarrow", 0x21DA);
entity("llhard", 0x296B);
entity("lltri", 0x25FA);
- entity("lmidot", 0x0140);
entity("Lmidot", 0x013F);
+ entity("lmidot", 0x0140);
entity("lmoust", 0x23B0);
entity("lmoustache", 0x23B0);
entity("lnap", 0x2A89);
entity("lnapprox", 0x2A89);
- entity("lne", 0x2A87);
entity("lnE", 0x2268);
+ entity("lne", 0x2A87);
entity("lneq", 0x2A87);
entity("lneqq", 0x2268);
entity("lnsim", 0x22E6);
entity("loang", 0x27EC);
entity("loarr", 0x21FD);
entity("lobrk", 0x27E6);
- entity("longleftarrow", 0x27F5);
entity("Longleftarrow", 0x27F8);
- entity("longleftrightarrow", 0x27F7);
+ entity("longleftarrow", 0x27F5);
entity("Longleftrightarrow", 0x27FA);
+ entity("longleftrightarrow", 0x27F7);
entity("longmapsto", 0x27FC);
- entity("longrightarrow", 0x27F6);
entity("Longrightarrow", 0x27F9);
+ entity("longrightarrow", 0x27F6);
entity("looparrowleft", 0x21AB);
entity("looparrowright", 0x21AC);
entity("lopar", 0x2985);
- entity("lopf", 0x1D55D);
entity("Lopf", 0x1D543);
+ entity("lopf", 0x1D55D);
entity("loplus", 0x2A2D);
entity("lotimes", 0x2A34);
entity("lowast", 0x2217);
@@ -1813,8 +1813,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("lrm", 0x200E);
entity("lrtri", 0x22BF);
entity("lsaquo", 0x2039);
- entity("lscr", 0x1D4C1);
entity("Lscr", 0x2112);
+ entity("lscr", 0x1D4C1);
entity("lsh", 0x21B0);
entity("lsim", 0x2272);
entity("lsime", 0x2A8D);
@@ -1822,10 +1822,10 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("lsqb", 0x005B);
entity("lsquo", 0x2018);
entity("lsquor", 0x201A);
- entity("lstrok", 0x0142);
entity("Lstrok", 0x0141);
- entity("lt", 0x003C);
+ entity("lstrok", 0x0142);
entity("Lt", 0x226A);
+ entity("lt", 0x003C);
entity("ltcc", 0x2AA6);
entity("ltcir", 0x2A79);
entity("ltdot", 0x22D6);
@@ -1843,25 +1843,25 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("male", 0x2642);
entity("malt", 0x2720);
entity("maltese", 0x2720);
- entity("map", 0x21A6);
entity("Map", 0x2905);
+ entity("map", 0x21A6);
entity("mapsto", 0x21A6);
entity("mapstodown", 0x21A7);
entity("mapstoleft", 0x21A4);
entity("mapstoup", 0x21A5);
entity("marker", 0x25AE);
entity("mcomma", 0x2A29);
- entity("mcy", 0x043C);
entity("Mcy", 0x041C);
+ entity("mcy", 0x043C);
entity("mdash", 0x2014);
entity("mDDot", 0x223A);
entity("measuredangle", 0x2221);
entity("MediumSpace", 0x205F);
entity("Mellintrf", 0x2133);
- entity("mfr", 0x1D52A);
entity("Mfr", 0x1D510);
- entity("mgr", 0x03BC);
+ entity("mfr", 0x1D52A);
entity("Mgr", 0x039C);
+ entity("mgr", 0x03BC);
entity("mho", 0x2127);
entity("micro", 0x00B5);
entity("mid", 0x2223);
@@ -1877,19 +1877,19 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("mldr", 0x2026);
entity("mnplus", 0x2213);
entity("models", 0x22A7);
- entity("mopf", 0x1D55E);
entity("Mopf", 0x1D544);
+ entity("mopf", 0x1D55E);
entity("mp", 0x2213);
- entity("mscr", 0x1D4C2);
entity("Mscr", 0x2133);
+ entity("mscr", 0x1D4C2);
entity("mstpos", 0x223E);
- entity("mu", 0x03BC);
entity("Mu", 0x039C);
+ entity("mu", 0x03BC);
entity("multimap", 0x22B8);
entity("mumap", 0x22B8);
entity("nabla", 0x2207);
- entity("nacute", 0x0144);
entity("Nacute", 0x0143);
+ entity("nacute", 0x0144);
entity("nap", 0x2249);
entity("napos", 0x0149);
entity("napprox", 0x2249);
@@ -1898,19 +1898,19 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("naturals", 0x2115);
entity("nbsp", 0x00A0);
entity("ncap", 0x2A43);
- entity("ncaron", 0x0148);
entity("Ncaron", 0x0147);
- entity("ncedil", 0x0146);
+ entity("ncaron", 0x0148);
entity("Ncedil", 0x0145);
+ entity("ncedil", 0x0146);
entity("ncong", 0x2247);
entity("ncup", 0x2A42);
- entity("ncy", 0x043D);
entity("Ncy", 0x041D);
+ entity("ncy", 0x043D);
entity("ndash", 0x2013);
entity("ne", 0x2260);
entity("nearhk", 0x2924);
- entity("nearr", 0x2197);
entity("neArr", 0x21D7);
+ entity("nearr", 0x2197);
entity("nearrow", 0x2197);
entity("NegativeMediumSpace", 0x200B);
entity("NegativeThickSpace", 0x200B);
@@ -1923,32 +1923,32 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("NewLine", 0x000A);
entity("nexist", 0x2204);
entity("nexists", 0x2204);
- entity("nfr", 0x1D52B);
entity("Nfr", 0x1D511);
+ entity("nfr", 0x1D52B);
entity("nge", 0x2271);
entity("ngeq", 0x2271);
- entity("ngr", 0x03BD);
entity("Ngr", 0x039D);
+ entity("ngr", 0x03BD);
entity("ngsim", 0x2275);
entity("ngt", 0x226F);
entity("ngtr", 0x226F);
- entity("nharr", 0x21AE);
entity("nhArr", 0x21CE);
+ entity("nharr", 0x21AE);
entity("nhpar", 0x2AF2);
entity("ni", 0x220B);
entity("nis", 0x22FC);
entity("nisd", 0x22FA);
entity("niv", 0x220B);
- entity("njcy", 0x045A);
entity("NJcy", 0x040A);
- entity("nlarr", 0x219A);
+ entity("njcy", 0x045A);
entity("nlArr", 0x21CD);
+ entity("nlarr", 0x219A);
entity("nldr", 0x2025);
entity("nle", 0x2270);
- entity("nleftarrow", 0x219A);
entity("nLeftarrow", 0x21CD);
- entity("nleftrightarrow", 0x21AE);
+ entity("nleftarrow", 0x219A);
entity("nLeftrightarrow", 0x21CE);
+ entity("nleftrightarrow", 0x21AE);
entity("nleq", 0x2270);
entity("nless", 0x226E);
entity("nlsim", 0x2274);
@@ -1958,10 +1958,10 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("nmid", 0x2224);
entity("NoBreak", 0x2060);
entity("NonBreakingSpace", 0x00A0);
- entity("nopf", 0x1D55F);
entity("Nopf", 0x2115);
- entity("not", 0x00AC);
+ entity("nopf", 0x1D55F);
entity("Not", 0x2AEC);
+ entity("not", 0x00AC);
entity("NotCongruent", 0x2262);
entity("NotCupCap", 0x226D);
entity("NotDoubleVerticalBar", 0x2226);
@@ -2008,16 +2008,16 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("npr", 0x2280);
entity("nprcue", 0x22E0);
entity("nprec", 0x2280);
- entity("nrarr", 0x219B);
entity("nrArr", 0x21CF);
- entity("nrightarrow", 0x219B);
+ entity("nrarr", 0x219B);
entity("nRightarrow", 0x21CF);
+ entity("nrightarrow", 0x219B);
entity("nrtri", 0x22EB);
entity("nrtrie", 0x22ED);
entity("nsc", 0x2281);
entity("nsccue", 0x22E1);
- entity("nscr", 0x1D4C3);
entity("Nscr", 0x1D4A9);
+ entity("nscr", 0x1D4C3);
entity("nshortmid", 0x2224);
entity("nshortparallel", 0x2226);
entity("nsim", 0x2241);
@@ -2035,63 +2035,63 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("nsupe", 0x2289);
entity("nsupseteq", 0x2289);
entity("ntgl", 0x2279);
- entity("ntilde", 0x00F1);
entity("Ntilde", 0x00D1);
+ entity("ntilde", 0x00F1);
entity("ntlg", 0x2278);
entity("ntriangleleft", 0x22EA);
entity("ntrianglelefteq", 0x22EC);
entity("ntriangleright", 0x22EB);
entity("ntrianglerighteq", 0x22ED);
- entity("nu", 0x03BD);
entity("Nu", 0x039D);
+ entity("nu", 0x03BD);
entity("num", 0x0023);
entity("numero", 0x2116);
entity("numsp", 0x2007);
- entity("nvdash", 0x22AC);
- entity("nvDash", 0x22AD);
- entity("nVdash", 0x22AE);
entity("nVDash", 0x22AF);
+ entity("nVdash", 0x22AE);
+ entity("nvDash", 0x22AD);
+ entity("nvdash", 0x22AC);
entity("nvHarr", 0x2904);
entity("nvinfin", 0x29DE);
entity("nvlArr", 0x2902);
entity("nvrArr", 0x2903);
entity("nwarhk", 0x2923);
- entity("nwarr", 0x2196);
entity("nwArr", 0x21D6);
+ entity("nwarr", 0x2196);
entity("nwarrow", 0x2196);
entity("nwnear", 0x2927);
- entity("oacgr", 0x03CC);
entity("Oacgr", 0x038C);
- entity("oacute", 0x00F3);
+ entity("oacgr", 0x03CC);
entity("Oacute", 0x00D3);
+ entity("oacute", 0x00F3);
entity("oast", 0x229B);
entity("ocir", 0x229A);
- entity("ocirc", 0x00F4);
entity("Ocirc", 0x00D4);
- entity("ocy", 0x043E);
+ entity("ocirc", 0x00F4);
entity("Ocy", 0x041E);
+ entity("ocy", 0x043E);
entity("odash", 0x229D);
- entity("odblac", 0x0151);
entity("Odblac", 0x0150);
+ entity("odblac", 0x0151);
entity("odiv", 0x2A38);
entity("odot", 0x2299);
entity("odsold", 0x29BC);
- entity("oelig", 0x0153);
entity("OElig", 0x0152);
+ entity("oelig", 0x0153);
entity("ofcir", 0x29BF);
- entity("ofr", 0x1D52C);
entity("Ofr", 0x1D512);
+ entity("ofr", 0x1D52C);
entity("ogon", 0x02DB);
- entity("ogr", 0x03BF);
entity("Ogr", 0x039F);
- entity("ograve", 0x00F2);
+ entity("ogr", 0x03BF);
entity("Ograve", 0x00D2);
+ entity("ograve", 0x00F2);
entity("ogt", 0x29C1);
- entity("ohacgr", 0x03CE);
entity("OHacgr", 0x038F);
+ entity("ohacgr", 0x03CE);
entity("ohbar", 0x29B5);
- entity("ohgr", 0x03C9);
entity("OHgr", 0x03A9);
+ entity("ohgr", 0x03C9);
entity("ohm", 0x2126);
entity("oint", 0x222E);
entity("olarr", 0x21BA);
@@ -2099,23 +2099,23 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("olcross", 0x29BB);
entity("oline", 0x203E);
entity("olt", 0x29C0);
- entity("omacr", 0x014D);
entity("Omacr", 0x014C);
- entity("omega", 0x03C9);
+ entity("omacr", 0x014D);
entity("Omega", 0x03A9);
- entity("omicron", 0x03BF);
+ entity("omega", 0x03C9);
entity("Omicron", 0x039F);
+ entity("omicron", 0x03BF);
entity("omid", 0x29B6);
entity("ominus", 0x2296);
- entity("oopf", 0x1D560);
entity("Oopf", 0x1D546);
+ entity("oopf", 0x1D560);
entity("opar", 0x29B7);
entity("OpenCurlyDoubleQuote", 0x201C);
entity("OpenCurlyQuote", 0x2018);
entity("operp", 0x29B9);
entity("oplus", 0x2295);
- entity("or", 0x2228);
entity("Or", 0x2A54);
+ entity("or", 0x2228);
entity("orarr", 0x21BB);
entity("ord", 0x2A5D);
entity("order", 0x2134);
@@ -2127,18 +2127,18 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("orslope", 0x2A57);
entity("orv", 0x2A5B);
entity("oS", 0x24C8);
- entity("oscr", 0x2134);
entity("Oscr", 0x1D4AA);
- entity("oslash", 0x00F8);
+ entity("oscr", 0x2134);
entity("Oslash", 0x00D8);
+ entity("oslash", 0x00F8);
entity("osol", 0x2298);
- entity("otilde", 0x00F5);
entity("Otilde", 0x00D5);
- entity("otimes", 0x2297);
+ entity("otilde", 0x00F5);
entity("Otimes", 0x2A37);
+ entity("otimes", 0x2297);
entity("otimesas", 0x2A36);
- entity("ouml", 0x00F6);
entity("Ouml", 0x00D6);
+ entity("ouml", 0x00F6);
entity("ovbar", 0x233D);
entity("OverBar", 0x00AF);
entity("OverBrace", 0xFE37);
@@ -2151,26 +2151,26 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("parsl", 0x2AFD);
entity("part", 0x2202);
entity("PartialD", 0x2202);
- entity("pcy", 0x043F);
entity("Pcy", 0x041F);
+ entity("pcy", 0x043F);
entity("percnt", 0x0025);
entity("period", 0x002E);
entity("permil", 0x2030);
entity("perp", 0x22A5);
entity("pertenk", 0x2031);
- entity("pfr", 0x1D52D);
entity("Pfr", 0x1D513);
- entity("pgr", 0x03C0);
+ entity("pfr", 0x1D52D);
entity("Pgr", 0x03A0);
- entity("phgr", 0x03C6);
+ entity("pgr", 0x03C0);
entity("PHgr", 0x03A6);
- entity("phi", 0x03D5);
+ entity("phgr", 0x03C6);
entity("Phi", 0x03A6);
+ entity("phi", 0x03D5);
entity("phiv", 0x03C6);
entity("phmmat", 0x2133);
entity("phone", 0x260E);
- entity("pi", 0x03C0);
entity("Pi", 0x03A0);
+ entity("pi", 0x03C0);
entity("pitchfork", 0x22D4);
entity("piv", 0x03D6);
entity("planck", 0x210F);
@@ -2190,15 +2190,15 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("pm", 0x00B1);
entity("Poincareplane", 0x210C);
entity("pointint", 0x2A15);
- entity("popf", 0x1D561);
entity("Popf", 0x2119);
+ entity("popf", 0x1D561);
entity("pound", 0x00A3);
- entity("pr", 0x227A);
entity("Pr", 0x2ABB);
+ entity("pr", 0x227A);
entity("prap", 0x2AB7);
entity("prcue", 0x227C);
- entity("pre", 0x2AAF);
entity("prE", 0x2AB3);
+ entity("pre", 0x2AAF);
entity("prec", 0x227A);
entity("precapprox", 0x2AB7);
entity("preccurlyeq", 0x227C);
@@ -2211,8 +2211,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("precneqq", 0x2AB5);
entity("precnsim", 0x22E8);
entity("precsim", 0x227E);
- entity("prime", 0x2032);
entity("Prime", 0x2033);
+ entity("prime", 0x2032);
entity("primes", 0x2119);
entity("prnap", 0x2AB9);
entity("prnE", 0x2AB5);
@@ -2228,21 +2228,21 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("propto", 0x221D);
entity("prsim", 0x227E);
entity("prurel", 0x22B0);
- entity("pscr", 0x1D4C5);
entity("Pscr", 0x1D4AB);
- entity("psgr", 0x03C8);
+ entity("pscr", 0x1D4C5);
entity("PSgr", 0x03A8);
- entity("psi", 0x03C8);
+ entity("psgr", 0x03C8);
entity("Psi", 0x03A8);
+ entity("psi", 0x03C8);
entity("puncsp", 0x2008);
- entity("qfr", 0x1D52E);
entity("Qfr", 0x1D514);
+ entity("qfr", 0x1D52E);
entity("qint", 0x2A0C);
- entity("qopf", 0x1D562);
entity("Qopf", 0x211A);
+ entity("qopf", 0x1D562);
entity("qprime", 0x2057);
- entity("qscr", 0x1D4C6);
entity("Qscr", 0x1D4AC);
+ entity("qscr", 0x1D4C6);
entity("quaternions", 0x210D);
entity("quatint", 0x2A16);
entity("quest", 0x003F);
@@ -2250,19 +2250,19 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("quot", 0x0022);
entity("rAarr", 0x21DB);
entity("race", 0x29DA);
- entity("racute", 0x0155);
entity("Racute", 0x0154);
+ entity("racute", 0x0155);
entity("radic", 0x221A);
entity("raemptyv", 0x29B3);
- entity("rang", 0x232A);
entity("Rang", 0x27EB);
+ entity("rang", 0x232A);
entity("rangd", 0x2992);
entity("range", 0x29A5);
entity("rangle", 0x232A);
entity("raquo", 0x00BB);
- entity("rarr", 0x2192);
- entity("rArr", 0x21D2);
entity("Rarr", 0x21A0);
+ entity("rArr", 0x21D2);
+ entity("rarr", 0x2192);
entity("rarrap", 0x2975);
entity("rarrb", 0x21E5);
entity("rarrbfs", 0x2920);
@@ -2272,30 +2272,30 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("rarrlp", 0x21AC);
entity("rarrpl", 0x2945);
entity("rarrsim", 0x2974);
- entity("rarrtl", 0x21A3);
entity("Rarrtl", 0x2916);
+ entity("rarrtl", 0x21A3);
entity("rarrw", 0x219D);
- entity("ratail", 0x291A);
entity("rAtail", 0x291C);
+ entity("ratail", 0x291A);
entity("ratio", 0x2236);
entity("rationals", 0x211A);
- entity("rbarr", 0x290D);
- entity("rBarr", 0x290F);
entity("RBarr", 0x2910);
+ entity("rBarr", 0x290F);
+ entity("rbarr", 0x290D);
entity("rbbrk", 0x2998);
entity("rbrace", 0x007D);
entity("rbrack", 0x005D);
entity("rbrke", 0x298C);
entity("rbrksld", 0x298E);
entity("rbrkslu", 0x2990);
- entity("rcaron", 0x0159);
entity("Rcaron", 0x0158);
- entity("rcedil", 0x0157);
+ entity("rcaron", 0x0159);
entity("Rcedil", 0x0156);
+ entity("rcedil", 0x0157);
entity("rceil", 0x2309);
entity("rcub", 0x007D);
- entity("rcy", 0x0440);
entity("Rcy", 0x0420);
+ entity("rcy", 0x0440);
entity("rdca", 0x2937);
entity("rdldhar", 0x2969);
entity("rdquo", 0x201D);
@@ -2313,20 +2313,20 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("ReverseUpEquilibrium", 0x296F);
entity("rfisht", 0x297D);
entity("rfloor", 0x230B);
- entity("rfr", 0x1D52F);
entity("Rfr", 0x211C);
- entity("rgr", 0x03C1);
+ entity("rfr", 0x1D52F);
entity("Rgr", 0x03A1);
+ entity("rgr", 0x03C1);
entity("rHar", 0x2964);
entity("rhard", 0x21C1);
entity("rharu", 0x21C0);
entity("rharul", 0x296C);
- entity("rho", 0x03C1);
entity("Rho", 0x03A1);
+ entity("rho", 0x03C1);
entity("rhov", 0x03F1);
entity("RightAngleBracket", 0x232A);
- entity("rightarrow", 0x2192);
entity("Rightarrow", 0x21D2);
+ entity("rightarrow", 0x2192);
entity("RightArrowBar", 0x21E5);
entity("RightArrowLeftArrow", 0x21C4);
entity("rightarrowtail", 0x21A3);
@@ -2367,8 +2367,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("roarr", 0x21FE);
entity("robrk", 0x27E7);
entity("ropar", 0x2986);
- entity("ropf", 0x1D563);
entity("Ropf", 0x211D);
+ entity("ropf", 0x1D563);
entity("roplus", 0x2A2E);
entity("rotimes", 0x2A35);
entity("RoundImplies", 0x2970);
@@ -2378,8 +2378,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("rrarr", 0x21C9);
entity("Rrightarrow", 0x21DB);
entity("rsaquo", 0x203A);
- entity("rscr", 0x1D4C7);
entity("Rscr", 0x211B);
+ entity("rscr", 0x1D4C7);
entity("rsh", 0x21B1);
entity("rsqb", 0x005D);
entity("rsquo", 0x2019);
@@ -2393,34 +2393,34 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("RuleDelayed", 0x29F4);
entity("ruluhar", 0x2968);
entity("rx", 0x211E);
- entity("sacute", 0x015B);
entity("Sacute", 0x015A);
+ entity("sacute", 0x015B);
entity("sbquo", 0x201A);
- entity("sc", 0x227B);
entity("Sc", 0x2ABC);
+ entity("sc", 0x227B);
entity("scap", 0x2AB8);
- entity("scaron", 0x0161);
entity("Scaron", 0x0160);
+ entity("scaron", 0x0161);
entity("sccue", 0x227D);
- entity("sce", 0x2AB0);
entity("scE", 0x2AB4);
- entity("scedil", 0x015F);
+ entity("sce", 0x2AB0);
entity("Scedil", 0x015E);
- entity("scirc", 0x015D);
+ entity("scedil", 0x015F);
entity("Scirc", 0x015C);
+ entity("scirc", 0x015D);
entity("scnap", 0x2ABA);
entity("scnE", 0x2AB6);
entity("scnsim", 0x22E9);
entity("scpolint", 0x2A13);
entity("scsim", 0x227F);
- entity("scy", 0x0441);
entity("Scy", 0x0421);
+ entity("scy", 0x0441);
entity("sdot", 0x22C5);
entity("sdotb", 0x22A1);
entity("sdote", 0x2A66);
entity("searhk", 0x2925);
- entity("searr", 0x2198);
entity("seArr", 0x21D8);
+ entity("searr", 0x2198);
entity("searrow", 0x2198);
entity("sect", 0x00A7);
entity("semi", 0x003B);
@@ -2429,16 +2429,16 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("setmn", 0x2216);
entity("sext", 0x2736);
entity("sfgr", 0x03C2);
- entity("sfr", 0x1D530);
entity("Sfr", 0x1D516);
+ entity("sfr", 0x1D530);
entity("sfrown", 0x2322);
- entity("sgr", 0x03C3);
entity("Sgr", 0x03A3);
+ entity("sgr", 0x03C3);
entity("sharp", 0x266F);
- entity("shchcy", 0x0449);
entity("SHCHcy", 0x0429);
- entity("shcy", 0x0448);
+ entity("shchcy", 0x0449);
entity("SHcy", 0x0428);
+ entity("shcy", 0x0448);
entity("ShortDownArrow", 0x2193);
entity("ShortLeftArrow", 0x2190);
entity("shortmid", 0x2223);
@@ -2446,8 +2446,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("ShortRightArrow", 0x2192);
entity("ShortUpArrow", 0x2191);
entity("shy", 0x00AD);
- entity("sigma", 0x03C3);
entity("Sigma", 0x03A3);
+ entity("sigma", 0x03C3);
entity("sigmaf", 0x03C2);
entity("sigmav", 0x03C2);
entity("sim", 0x223C);
@@ -2470,13 +2470,13 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("smile", 0x2323);
entity("smt", 0x2AAA);
entity("smte", 0x2AAC);
- entity("softcy", 0x044C);
entity("SOFTcy", 0x042C);
+ entity("softcy", 0x044C);
entity("sol", 0x002F);
entity("solb", 0x29C4);
entity("solbar", 0x233F);
- entity("sopf", 0x1D564);
entity("Sopf", 0x1D54A);
+ entity("sopf", 0x1D564);
entity("spades", 0x2660);
entity("spadesuit", 0x2660);
entity("spar", 0x2225);
@@ -2502,30 +2502,30 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("squarf", 0x25AA);
entity("squf", 0x25AA);
entity("srarr", 0x2192);
- entity("sscr", 0x1D4C8);
entity("Sscr", 0x1D4AE);
+ entity("sscr", 0x1D4C8);
entity("ssetmn", 0x2216);
entity("ssmile", 0x2323);
entity("sstarf", 0x22C6);
- entity("star", 0x2606);
entity("Star", 0x22C6);
+ entity("star", 0x2606);
entity("starf", 0x2605);
entity("straightepsilon", 0x03F5);
entity("straightphi", 0x03D5);
entity("strns", 0x00AF);
- entity("sub", 0x2282);
entity("Sub", 0x22D0);
+ entity("sub", 0x2282);
entity("subdot", 0x2ABD);
- entity("sube", 0x2286);
entity("subE", 0x2AC5);
+ entity("sube", 0x2286);
entity("subedot", 0x2AC3);
entity("submult", 0x2AC1);
- entity("subne", 0x228A);
entity("subnE", 0x2ACB);
+ entity("subne", 0x228A);
entity("subplus", 0x2ABF);
entity("subrarr", 0x2979);
- entity("subset", 0x2282);
entity("Subset", 0x22D0);
+ entity("subset", 0x2282);
entity("subseteq", 0x2286);
entity("subseteqq", 0x2AC5);
entity("SubsetEqual", 0x2286);
@@ -2549,26 +2549,26 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("SuchThat", 0x220B);
entity("sum", 0x2211);
entity("sung", 0x266A);
- entity("sup", 0x2283);
entity("Sup", 0x22D1);
+ entity("sup", 0x2283);
entity("sup1", 0x00B9);
entity("sup2", 0x00B2);
entity("sup3", 0x00B3);
entity("supdot", 0x2ABE);
entity("supdsub", 0x2AD8);
- entity("supe", 0x2287);
entity("supE", 0x2AC6);
+ entity("supe", 0x2287);
entity("supedot", 0x2AC4);
entity("Superset", 0x2283);
entity("SupersetEqual", 0x2287);
entity("suphsub", 0x2AD7);
entity("suplarr", 0x297B);
entity("supmult", 0x2AC2);
- entity("supne", 0x228B);
entity("supnE", 0x2ACC);
+ entity("supne", 0x228B);
entity("supplus", 0x2AC0);
- entity("supset", 0x2283);
entity("Supset", 0x22D1);
+ entity("supset", 0x2283);
entity("supseteq", 0x2287);
entity("supseteqq", 0x2AC6);
entity("supsetneq", 0x228B);
@@ -2577,45 +2577,45 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("supsub", 0x2AD4);
entity("supsup", 0x2AD6);
entity("swarhk", 0x2926);
- entity("swarr", 0x2199);
entity("swArr", 0x21D9);
+ entity("swarr", 0x2199);
entity("swarrow", 0x2199);
entity("swnwar", 0x292A);
entity("szlig", 0x00DF);
entity("Tab", 0x0009);
entity("target", 0x2316);
- entity("tau", 0x03C4);
entity("Tau", 0x03A4);
+ entity("tau", 0x03C4);
entity("tbrk", 0x23B4);
- entity("tcaron", 0x0165);
entity("Tcaron", 0x0164);
- entity("tcedil", 0x0163);
+ entity("tcaron", 0x0165);
entity("Tcedil", 0x0162);
- entity("tcy", 0x0442);
+ entity("tcedil", 0x0163);
entity("Tcy", 0x0422);
+ entity("tcy", 0x0442);
entity("telrec", 0x2315);
- entity("tfr", 0x1D531);
entity("Tfr", 0x1D517);
- entity("tgr", 0x03C4);
+ entity("tfr", 0x1D531);
entity("Tgr", 0x03A4);
+ entity("tgr", 0x03C4);
entity("there4", 0x2234);
entity("therefore", 0x2234);
- entity("theta", 0x03B8);
entity("Theta", 0x0398);
+ entity("theta", 0x03B8);
entity("thetasym", 0x03D1);
entity("thetav", 0x03D1);
- entity("thgr", 0x03B8);
entity("THgr", 0x0398);
+ entity("thgr", 0x03B8);
entity("thickapprox", 0x2248);
entity("thicksim", 0x223C);
entity("thinsp", 0x2009);
entity("ThinSpace", 0x2009);
entity("thkap", 0x2248);
entity("thksim", 0x223C);
- entity("thorn", 0x00FE);
entity("THORN", 0x00DE);
- entity("tilde", 0x02DC);
+ entity("thorn", 0x00FE);
entity("Tilde", 0x223C);
+ entity("tilde", 0x02DC);
entity("TildeEqual", 0x2243);
entity("TildeFullEqual", 0x2245);
entity("TildeTilde", 0x2248);
@@ -2628,8 +2628,8 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("top", 0x22A4);
entity("topbot", 0x2336);
entity("topcir", 0x2AF1);
- entity("topf", 0x1D565);
entity("Topf", 0x1D54B);
+ entity("topf", 0x1D565);
entity("topfork", 0x2ADA);
entity("tosa", 0x2929);
entity("tprime", 0x2034);
@@ -2648,47 +2648,47 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("trisb", 0x29CD);
entity("tritime", 0x2A3B);
entity("trpezium", 0x23E2);
- entity("tscr", 0x1D4C9);
entity("Tscr", 0x1D4AF);
- entity("tscy", 0x0446);
+ entity("tscr", 0x1D4C9);
entity("TScy", 0x0426);
- entity("tshcy", 0x045B);
+ entity("tscy", 0x0446);
entity("TSHcy", 0x040B);
- entity("tstrok", 0x0167);
+ entity("tshcy", 0x045B);
entity("Tstrok", 0x0166);
+ entity("tstrok", 0x0167);
entity("twixt", 0x226C);
entity("twoheadleftarrow", 0x219E);
entity("twoheadrightarrow", 0x21A0);
- entity("uacgr", 0x03CD);
entity("Uacgr", 0x038E);
- entity("uacute", 0x00FA);
+ entity("uacgr", 0x03CD);
entity("Uacute", 0x00DA);
- entity("uarr", 0x2191);
- entity("uArr", 0x21D1);
+ entity("uacute", 0x00FA);
entity("Uarr", 0x219F);
+ entity("uArr", 0x21D1);
+ entity("uarr", 0x2191);
entity("Uarrocir", 0x2949);
- entity("ubrcy", 0x045E);
entity("Ubrcy", 0x040E);
- entity("ubreve", 0x016D);
+ entity("ubrcy", 0x045E);
entity("Ubreve", 0x016C);
- entity("ucirc", 0x00FB);
+ entity("ubreve", 0x016D);
entity("Ucirc", 0x00DB);
- entity("ucy", 0x0443);
+ entity("ucirc", 0x00FB);
entity("Ucy", 0x0423);
+ entity("ucy", 0x0443);
entity("udarr", 0x21C5);
- entity("udblac", 0x0171);
entity("Udblac", 0x0170);
+ entity("udblac", 0x0171);
entity("udhar", 0x296E);
entity("udiagr", 0x03B0);
- entity("udigr", 0x03CB);
entity("Udigr", 0x03AB);
+ entity("udigr", 0x03CB);
entity("ufisht", 0x297E);
- entity("ufr", 0x1D532);
entity("Ufr", 0x1D518);
- entity("ugr", 0x03C5);
+ entity("ufr", 0x1D532);
entity("Ugr", 0x03A5);
- entity("ugrave", 0x00F9);
+ entity("ugr", 0x03C5);
entity("Ugrave", 0x00D9);
+ entity("ugrave", 0x00F9);
entity("uHar", 0x2963);
entity("uharl", 0x21BF);
entity("uharr", 0x21BE);
@@ -2697,54 +2697,54 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("ulcorner", 0x231C);
entity("ulcrop", 0x230F);
entity("ultri", 0x25F8);
- entity("umacr", 0x016B);
entity("Umacr", 0x016A);
+ entity("umacr", 0x016B);
entity("uml", 0x00A8);
entity("UnderBrace", 0xFE38);
entity("UnderBracket", 0x23B5);
entity("UnderParenthesis", 0xFE36);
entity("Union", 0x22C3);
entity("UnionPlus", 0x228E);
- entity("uogon", 0x0173);
entity("Uogon", 0x0172);
- entity("uopf", 0x1D566);
+ entity("uogon", 0x0173);
entity("Uopf", 0x1D54C);
- entity("uparrow", 0x2191);
+ entity("uopf", 0x1D566);
entity("Uparrow", 0x21D1);
+ entity("uparrow", 0x2191);
entity("UpArrowBar", 0x2912);
entity("UpArrowDownArrow", 0x21C5);
- entity("updownarrow", 0x2195);
entity("Updownarrow", 0x21D5);
+ entity("updownarrow", 0x2195);
entity("UpEquilibrium", 0x296E);
entity("upharpoonleft", 0x21BF);
entity("upharpoonright", 0x21BE);
entity("uplus", 0x228E);
entity("UpperLeftArrow", 0x2196);
entity("UpperRightArrow", 0x2197);
- entity("upsi", 0x03C5);
entity("Upsi", 0x03D2);
+ entity("upsi", 0x03C5);
entity("upsih", 0x03D2);
- entity("upsilon", 0x03C5);
entity("Upsilon", 0x03A5);
+ entity("upsilon", 0x03C5);
entity("UpTee", 0x22A5);
entity("UpTeeArrow", 0x21A5);
entity("upuparrows", 0x21C8);
entity("urcorn", 0x231D);
entity("urcorner", 0x231D);
entity("urcrop", 0x230E);
- entity("uring", 0x016F);
entity("Uring", 0x016E);
+ entity("uring", 0x016F);
entity("urtri", 0x25F9);
- entity("uscr", 0x1D4CA);
entity("Uscr", 0x1D4B0);
+ entity("uscr", 0x1D4CA);
entity("utdot", 0x22F0);
- entity("utilde", 0x0169);
entity("Utilde", 0x0168);
+ entity("utilde", 0x0169);
entity("utri", 0x25B5);
entity("utrif", 0x25B4);
entity("uuarr", 0x21C8);
- entity("uuml", 0x00FC);
entity("Uuml", 0x00DC);
+ entity("uuml", 0x00FC);
entity("uwangle", 0x29A7);
entity("vangrt", 0x299C);
entity("varepsilon", 0x03B5);
@@ -2753,138 +2753,138 @@ public class HTMLSchema extends Schema implements HTMLModels {
entity("varphi", 0x03C6);
entity("varpi", 0x03D6);
entity("varpropto", 0x221D);
- entity("varr", 0x2195);
entity("vArr", 0x21D5);
+ entity("varr", 0x2195);
entity("varrho", 0x03F1);
entity("varsigma", 0x03C2);
entity("vartheta", 0x03D1);
entity("vartriangleleft", 0x22B2);
entity("vartriangleright", 0x22B3);
- entity("vBar", 0x2AE8);
entity("Vbar", 0x2AEB);
+ entity("vBar", 0x2AE8);
entity("vBarv", 0x2AE9);
- entity("vcy", 0x0432);
entity("Vcy", 0x0412);
- entity("vdash", 0x22A2);
- entity("vDash", 0x22A8);
- entity("Vdash", 0x22A9);
+ entity("vcy", 0x0432);
entity("VDash", 0x22AB);
+ entity("Vdash", 0x22A9);
+ entity("vDash", 0x22A8);
+ entity("vdash", 0x22A2);
entity("Vdashl", 0x2AE6);
- entity("vee", 0x2228);
entity("Vee", 0x22C1);
+ entity("vee", 0x2228);
entity("veebar", 0x22BB);
entity("veeeq", 0x225A);
entity("vellip", 0x22EE);
- entity("verbar", 0x007C);
entity("Verbar", 0x2016);
- entity("vert", 0x007C);
+ entity("verbar", 0x007C);
entity("Vert", 0x2016);
+ entity("vert", 0x007C);
entity("VerticalBar", 0x2223);
entity("VerticalLine", 0x007C);
entity("VerticalSeparator", 0x2758);
entity("VerticalTilde", 0x2240);
entity("VeryThinSpace", 0x200A);
- entity("vfr", 0x1D533);
entity("Vfr", 0x1D519);
+ entity("vfr", 0x1D533);
entity("vltri", 0x22B2);
- entity("vopf", 0x1D567);
entity("Vopf", 0x1D54D);
+ entity("vopf", 0x1D567);
entity("vprop", 0x221D);
entity("vrtri", 0x22B3);
- entity("vscr", 0x1D4CB);
entity("Vscr", 0x1D4B1);
+ entity("vscr", 0x1D4CB);
entity("Vvdash", 0x22AA);
entity("vzigzag", 0x299A);
- entity("wcirc", 0x0175);
entity("Wcirc", 0x0174);
+ entity("wcirc", 0x0175);
entity("wedbar", 0x2A5F);
- entity("wedge", 0x2227);
entity("Wedge", 0x22C0);
+ entity("wedge", 0x2227);
entity("wedgeq", 0x2259);
entity("weierp", 0x2118);
- entity("wfr", 0x1D534);
entity("Wfr", 0x1D51A);
- entity("wopf", 0x1D568);
+ entity("wfr", 0x1D534);
entity("Wopf", 0x1D54E);
+ entity("wopf", 0x1D568);
entity("wp", 0x2118);
entity("wr", 0x2240);
entity("wreath", 0x2240);
- entity("wscr", 0x1D4CC);
entity("Wscr", 0x1D4B2);
+ entity("wscr", 0x1D4CC);
entity("xcap", 0x22C2);
entity("xcirc", 0x25EF);
entity("xcup", 0x22C3);
entity("xdtri", 0x25BD);
- entity("xfr", 0x1D535);
entity("Xfr", 0x1D51B);
- entity("xgr", 0x03BE);
+ entity("xfr", 0x1D535);
entity("Xgr", 0x039E);
- entity("xharr", 0x27F7);
+ entity("xgr", 0x03BE);
entity("xhArr", 0x27FA);
- entity("xi", 0x03BE);
+ entity("xharr", 0x27F7);
entity("Xi", 0x039E);
- entity("xlarr", 0x27F5);
+ entity("xi", 0x03BE);
entity("xlArr", 0x27F8);
+ entity("xlarr", 0x27F5);
entity("xmap", 0x27FC);
entity("xnis", 0x22FB);
entity("xodot", 0x2A00);
- entity("xopf", 0x1D569);
entity("Xopf", 0x1D54F);
+ entity("xopf", 0x1D569);
entity("xoplus", 0x2A01);
entity("xotime", 0x2A02);
- entity("xrarr", 0x27F6);
entity("xrArr", 0x27F9);
- entity("xscr", 0x1D4CD);
+ entity("xrarr", 0x27F6);
entity("Xscr", 0x1D4B3);
+ entity("xscr", 0x1D4CD);
entity("xsqcup", 0x2A06);
entity("xuplus", 0x2A04);
entity("xutri", 0x25B3);
entity("xvee", 0x22C1);
entity("xwedge", 0x22C0);
- entity("yacute", 0x00FD);
entity("Yacute", 0x00DD);
- entity("yacy", 0x044F);
+ entity("yacute", 0x00FD);
entity("YAcy", 0x042F);
- entity("ycirc", 0x0177);
+ entity("yacy", 0x044F);
entity("Ycirc", 0x0176);
- entity("ycy", 0x044B);
+ entity("ycirc", 0x0177);
entity("Ycy", 0x042B);
+ entity("ycy", 0x044B);
entity("yen", 0x00A5);
- entity("yfr", 0x1D536);
entity("Yfr", 0x1D51C);
- entity("yicy", 0x0457);
+ entity("yfr", 0x1D536);
entity("YIcy", 0x0407);
- entity("yopf", 0x1D56A);
+ entity("yicy", 0x0457);
entity("Yopf", 0x1D550);
- entity("yscr", 0x1D4CE);
+ entity("yopf", 0x1D56A);
entity("Yscr", 0x1D4B4);
- entity("yucy", 0x044E);
+ entity("yscr", 0x1D4CE);
entity("YUcy", 0x042E);
- entity("yuml", 0x00FF);
+ entity("yucy", 0x044E);
entity("Yuml", 0x0178);
- entity("zacute", 0x017A);
+ entity("yuml", 0x00FF);
entity("Zacute", 0x0179);
- entity("zcaron", 0x017E);
+ entity("zacute", 0x017A);
entity("Zcaron", 0x017D);
- entity("zcy", 0x0437);
+ entity("zcaron", 0x017E);
entity("Zcy", 0x0417);
- entity("zdot", 0x017C);
+ entity("zcy", 0x0437);
entity("Zdot", 0x017B);
+ entity("zdot", 0x017C);
entity("zeetrf", 0x2128);
entity("ZeroWidthSpace", 0x200B);
- entity("zeta", 0x03B6);
entity("Zeta", 0x0396);
- entity("zfr", 0x1D537);
+ entity("zeta", 0x03B6);
entity("Zfr", 0x2128);
- entity("zgr", 0x03B6);
+ entity("zfr", 0x1D537);
entity("Zgr", 0x0396);
- entity("zhcy", 0x0436);
+ entity("zgr", 0x03B6);
entity("ZHcy", 0x0416);
+ entity("zhcy", 0x0436);
entity("zigrarr", 0x21DD);
- entity("zopf", 0x1D56B);
entity("Zopf", 0x2124);
- entity("zscr", 0x1D4CF);
+ entity("zopf", 0x1D56B);
entity("Zscr", 0x1D4B5);
+ entity("zscr", 0x1D4CF);
entity("zwj", 0x200D);
entity("zwnj", 0x200C);
diff --git a/src/org/ccil/cowan/tagsoup/Parser.java b/src/org/ccil/cowan/tagsoup/Parser.java
index 0997f23..41b5517 100644
--- a/src/org/ccil/cowan/tagsoup/Parser.java
+++ b/src/org/ccil/cowan/tagsoup/Parser.java
@@ -834,7 +834,7 @@ public class Parser extends DefaultHandler implements ScanHandler, XMLReader, Le
String systemid = null;
String publicid = null;
String[] v = split(s);
- if (v.length > 0 && "DOCTYPE".equals(v[0])) {
+ if (v.length > 0 && "DOCTYPE".equalsIgnoreCase(v[0])) {
if (theDoctypeIsPresent) return; // one doctype only!
theDoctypeIsPresent = true;
if (v.length > 1) {
diff --git a/stml/stml.rnc b/stml/stml.rnc
new file mode 100644
index 0000000..b767640
--- /dev/null
+++ b/stml/stml.rnc
@@ -0,0 +1,49 @@
+# This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+#
+# TagSoup is licensed under the Apache License,
+# Version 2.0. You may obtain a copy of this license at
+# http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+# additional legal rights not granted by this license.
+#
+# TagSoup is distributed in the hope that it will be useful, but
+# unless required by applicable law or agreed to in writing, TagSoup
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+# OF ANY KIND, either express or implied; not even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# State Table Markup Language
+default namespace = "http://www.ccil.org/~cowan/XML/tagsoup/stml"
+start = statetable
+
+## Root element
+statetable = element statetable {
+ attribute version {"1.0"},
+ attribute id {xsd:ID}?,
+ symbol*,
+ action+,
+ state+
+ }
+
+## A symbol specifies a non-character input to the state machine
+symbol = element symbol {
+ attribute id {xsd:ID}
+ }
+
+## An action is the name for what the state machine does
+action = element action {
+ attribute id {xsd:ID}
+ }
+
+## A state specifies an internal state of the machine
+state = element state {
+ attribute id {xsd:ID},
+ tr*
+ }
+
+## A tr specifies a state transition
+tr = element tr {
+ (attribute symbol {xsd:IDREF} |
+ attribute char {xsd:string {length = "1"}}),
+ attribute action {xsd:IDREF},
+ attribute newstate {xsd:IDREF}
+ }
diff --git a/stml/stml.xslt b/stml/stml.xslt
new file mode 100644
index 0000000..4cc6c9d
--- /dev/null
+++ b/stml/stml.xslt
@@ -0,0 +1,150 @@
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:stml="http://www.ccil.org/~cowan/XML/tagsoup/stml"
+ version="1.0">
+
+ <xsl:output method="text"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <!-- The main template. Generates declarations for states and
+ actions, then the statetable itself, and then a comment (used for
+ manual checking) listing all the actions compactly. -->
+ <xsl:template match="stml:statetable">
+ <xsl:apply-templates select="stml:state">
+ <xsl:sort select="@id"/>
+ </xsl:apply-templates>
+
+ <xsl:apply-templates select="stml:action">
+ <xsl:sort select="@id"/>
+ </xsl:apply-templates>
+
+ <xsl:text>&#x9;private static int[] statetable = {&#xA;</xsl:text>
+ <xsl:apply-templates select="stml:state/stml:tr">
+ <xsl:sort select="../@id"/>
+ <xsl:sort select="@symbol"/>
+ <xsl:sort select="@char"/>
+ </xsl:apply-templates>
+ <xsl:text>&#xA;&#x9;};&#xA;</xsl:text>
+
+ <xsl:text>&#x9;private static final String[] debug_actionnames = { ""</xsl:text>
+ <xsl:apply-templates select="stml:action" mode="debug">
+ <xsl:sort select="@id"/>
+ </xsl:apply-templates>
+ <xsl:text>};&#xA;</xsl:text>
+
+ <xsl:text>&#x9;private static final String[] debug_statenames = { ""</xsl:text>
+ <xsl:apply-templates select="stml:state" mode="debug">
+ <xsl:sort select="@id"/>
+ </xsl:apply-templates>
+ <xsl:text>};&#xA;</xsl:text>
+
+ <xsl:text>&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generate a single state declaration. -->
+ <xsl:template match="stml:state">
+ <xsl:text>&#x9;private static final int </xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="position()"/>
+ <xsl:text>;&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generate a single action declaration. -->
+ <xsl:template match="stml:action">
+ <xsl:text>&#x9;private static final int </xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="position()"/>
+ <xsl:text>;&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generate a single row of the statetable. -->
+ <xsl:template match="stml:tr">
+ <xsl:choose>
+ <xsl:when test="@symbol = 'EOF'">
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;-1&quot;"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="@symbol = 'LF'">
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;'\n'&quot;"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="@symbol = 'default'">
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;0&quot;"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="@char = &quot;&apos;&quot;">
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;'\''&quot;"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="@symbol = 'S'">
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;' '&quot;"/>
+ </xsl:call-template>
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;'\n'&quot;"/>
+ </xsl:call-template>
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char" select="&quot;'\t'&quot;"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="dump-tr">
+ <xsl:with-param name="char"
+ select="concat(&quot;'&quot;, @char, &quot;'&quot;)"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- This is a subroutine used to do the actual printing. -->
+ <xsl:template name="dump-tr">
+ <xsl:param name="char"/>
+ <xsl:text>&#x9;&#x9;</xsl:text>
+ <xsl:value-of select="../@id"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$char"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@newstate"/>
+ <xsl:text>,&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generate a single action name in the "Actions:" comment.
+ The mode is used to keep XSLT from confusing this with the
+ regular actions template that does the action declarations. -->
+ <xsl:template match="stml:action" mode="debug">
+ <xsl:text>, "</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>"</xsl:text>
+ </xsl:template>
+
+ <!-- Generate a single stat debug name. -->
+ <xsl:template match="stml:state" mode="debug">
+ <xsl:text>, "</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>"</xsl:text>
+ </xsl:template>
+
+</xsl:transform>
diff --git a/templates/org/ccil/cowan/tagsoup/HTMLModels.java b/templates/org/ccil/cowan/tagsoup/HTMLModels.java
new file mode 100644
index 0000000..e982bcf
--- /dev/null
+++ b/templates/org/ccil/cowan/tagsoup/HTMLModels.java
@@ -0,0 +1,31 @@
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+//
+//
+// Defines models for HTMLSchema
+
+/**
+This interface contains generated constants representing HTML content
+models. Logically, it is part of HTMLSchema, but it is more
+convenient to generate the constants into a separate interface.
+*/
+
+package org.ccil.cowan.tagsoup;
+public interface HTMLModels {
+
+ // Start of model definitions
+ @@MODEL_DEFINITIONS@@
+
+ // End of model definitions
+
+ }
diff --git a/templates/org/ccil/cowan/tagsoup/HTMLScanner.java b/templates/org/ccil/cowan/tagsoup/HTMLScanner.java
new file mode 100644
index 0000000..23cb332
--- /dev/null
+++ b/templates/org/ccil/cowan/tagsoup/HTMLScanner.java
@@ -0,0 +1,486 @@
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+//
+//
+package org.ccil.cowan.tagsoup;
+import java.io.*;
+import org.xml.sax.SAXException;
+import org.xml.sax.Locator;
+
+/**
+This class implements a table-driven scanner for HTML, allowing for lots of
+defects. It implements the Scanner interface, which accepts a Reader
+object to fetch characters from and a ScanHandler object to report lexical
+events to.
+*/
+
+public class HTMLScanner implements Scanner, Locator {
+
+ // Start of state table
+ @@STATE_TABLE@@
+ // End of state table
+
+ private String thePublicid; // Locator state
+ private String theSystemid;
+ private int theLastLine;
+ private int theLastColumn;
+ private int theCurrentLine;
+ private int theCurrentColumn;
+
+ int theState; // Current state
+ int theNextState; // Next state
+ char[] theOutputBuffer = new char[200]; // Output buffer
+ int theSize; // Current buffer size
+ int[] theWinMap = { // Windows chars map
+ 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFD, 0x017D, 0xFFFD,
+ 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFD, 0x017E, 0x0178};
+
+ /**
+ * Index into the state table for [state][input character - 2].
+ * The state table consists of 4-entry runs on the form
+ * { current state, input character, action, next state }.
+ * We precompute the index into the state table for all possible
+ * { current state, input character } and store the result in
+ * the statetableIndex array. Since only some input characters
+ * are present in the state table, we only do the computation for
+ * characters 0 to the highest character value in the state table.
+ * An input character of -2 is used to cover all other characters
+ * as -2 is guaranteed not to match any input character entry
+ * in the state table.
+ *
+ * <p>When doing lookups, the input character should first be tested
+ * to be in the range [-1 (inclusive), statetableIndexMaxChar (exclusive)].
+ * if it isn't use -2 as the input character.
+ *
+ * <p>Finally, add 2 to the input character to cover for the fact that
+ * Java doesn't support negative array indexes. Then look up
+ * the value in the statetableIndex. If the value is -1, then
+ * no action or next state was found for the { state, input } that
+ * you had. If it isn't -1, then action = statetable[value + 2] and
+ * next state = statetable[value + 3]. That is, the value points
+ * to the start of the answer 4-tuple in the statetable.
+ */
+ static short[][] statetableIndex;
+ /**
+ * The highest character value seen in the statetable.
+ * See the doc comment for statetableIndex to see how this
+ * is used.
+ */
+ static int statetableIndexMaxChar;
+ static {
+ int maxState = -1;
+ int maxChar = -1;
+ for (int i = 0; i < statetable.length; i += 4) {
+ if (statetable[i] > maxState) {
+ maxState = statetable[i];
+ }
+ if (statetable[i + 1] > maxChar) {
+ maxChar = statetable[i + 1];
+ }
+ }
+ statetableIndexMaxChar = maxChar + 1;
+
+ statetableIndex = new short[maxState + 1][maxChar + 3];
+ for (int theState = 0; theState <= maxState; ++theState) {
+ for (int ch = -2; ch <= maxChar; ++ch) {
+ int hit = -1;
+ int action = 0;
+ for (int i = 0; i < statetable.length; i += 4) {
+ if (theState != statetable[i]) {
+ if (action != 0) break;
+ continue;
+ }
+ if (statetable[i+1] == 0) {
+ hit = i;
+ action = statetable[i+2];
+ }
+ else if (statetable[i+1] == ch) {
+ hit = i;
+ action = statetable[i+2];
+ break;
+ }
+ }
+ statetableIndex[theState][ch + 2] = (short) hit;
+ }
+ }
+ }
+
+ // Compensate for bug in PushbackReader that allows
+ // pushing back EOF.
+ private void unread(PushbackReader r, int c) throws IOException {
+ if (c != -1) r.unread(c);
+ }
+
+ // Locator implementation
+
+ public int getLineNumber() {
+ return theLastLine;
+ }
+ public int getColumnNumber() {
+ return theLastColumn;
+ }
+ public String getPublicId() {
+ return thePublicid;
+ }
+ public String getSystemId() {
+ return theSystemid;
+ }
+
+
+ // Scanner implementation
+
+ /**
+ Reset document locator, supplying systemid and publicid.
+ @param systemid System id
+ @param publicid Public id
+ */
+
+ public void resetDocumentLocator(String publicid, String systemid) {
+ thePublicid = publicid;
+ theSystemid = systemid;
+ theLastLine = theLastColumn = theCurrentLine = theCurrentColumn = 0;
+ }
+
+ /**
+ Scan HTML source, reporting lexical events.
+ @param r0 Reader that provides characters
+ @param h ScanHandler that accepts lexical events.
+ */
+
+ public void scan(Reader r0, ScanHandler h) throws IOException, SAXException {
+ theState = S_PCDATA;
+ PushbackReader r;
+ if (r0 instanceof BufferedReader) {
+ r = new PushbackReader(r0, 5);
+ }
+ else {
+ r = new PushbackReader(new BufferedReader(r0), 5);
+ }
+
+ int firstChar = r.read(); // Remove any leading BOM
+ if (firstChar != '\uFEFF') unread(r, firstChar);
+
+ while (theState != S_DONE) {
+ int ch = r.read();
+
+ // Process control characters
+ if (ch >= 0x80 && ch <= 0x9F) ch = theWinMap[ch-0x80];
+
+ if (ch == '\r') {
+ ch = r.read(); // expect LF next
+ if (ch != '\n') {
+ unread(r, ch); // nope
+ ch = '\n';
+ }
+ }
+
+ if (ch == '\n') {
+ theCurrentLine++;
+ theCurrentColumn = 0;
+ }
+ else {
+ theCurrentColumn++;
+ }
+
+ if (!(ch >= 0x20 || ch == '\n' || ch == '\t' || ch == -1)) continue;
+
+ // Search state table
+ int adjCh = (ch >= -1 && ch < statetableIndexMaxChar) ? ch : -2;
+ int statetableRow = statetableIndex[theState][adjCh + 2];
+ int action = 0;
+ if (statetableRow != -1) {
+ action = statetable[statetableRow + 2];
+ theNextState = statetable[statetableRow + 3];
+ }
+
+// System.err.println("In " + debug_statenames[theState] + " got " + nicechar(ch) + " doing " + debug_actionnames[action] + " then " + debug_statenames[theNextState]);
+ switch (action) {
+ case 0:
+ throw new Error(
+ "HTMLScanner can't cope with " + Integer.toString(ch) + " in state " +
+ Integer.toString(theState));
+ case A_ADUP:
+ h.adup(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_ADUP_SAVE:
+ h.adup(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ save(ch, h);
+ break;
+ case A_ADUP_STAGC:
+ h.adup(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.stagc(theOutputBuffer, 0, theSize);
+ break;
+ case A_ANAME:
+ h.aname(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_ANAME_ADUP:
+ h.aname(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.adup(theOutputBuffer, 0, theSize);
+ break;
+ case A_ANAME_ADUP_STAGC:
+ h.aname(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.adup(theOutputBuffer, 0, theSize);
+ h.stagc(theOutputBuffer, 0, theSize);
+ break;
+ case A_AVAL:
+ h.aval(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_AVAL_STAGC:
+ h.aval(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.stagc(theOutputBuffer, 0, theSize);
+ break;
+ case A_CDATA:
+ mark();
+ // suppress the final "]]" in the buffer
+ if (theSize > 1) theSize -= 2;
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_ENTITY_START:
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ save(ch, h);
+ break;
+ case A_ENTITY:
+ mark();
+ char ch1 = (char)ch;
+// System.out.println("Got " + ch1 + " in state " + ((theState == S_ENT) ? "S_ENT" : ((theState == S_NCR) ? "S_NCR" : "UNK")));
+ if (theState == S_ENT && ch1 == '#') {
+ theNextState = S_NCR;
+ save(ch, h);
+ break;
+ }
+ else if (theState == S_NCR && (ch1 == 'x' || ch1 == 'X')) {
+ theNextState = S_XNCR;
+ save(ch, h);
+ break;
+ }
+ else if (theState == S_ENT && Character.isLetterOrDigit(ch1)) {
+ save(ch, h);
+ break;
+ }
+ else if (theState == S_NCR && Character.isDigit(ch1)) {
+ save(ch, h);
+ break;
+ }
+ else if (theState == S_XNCR && (Character.isDigit(ch1) || "abcdefABCDEF".indexOf(ch1) != -1)) {
+ save(ch, h);
+ break;
+ }
+
+ // The whole entity reference has been collected
+// System.err.println("%%" + new String(theOutputBuffer, 0, theSize));
+ h.entity(theOutputBuffer, 1, theSize - 1);
+ int ent = h.getEntity();
+// System.err.println("%% value = " + ent);
+ if (ent != 0) {
+ theSize = 0;
+ if (ent >= 0x80 && ent <= 0x9F) {
+ ent = theWinMap[ent-0x80];
+ }
+ if (ent < 0x20) {
+ // Control becomes space
+ ent = 0x20;
+ }
+ else if (ent >= 0xD800 && ent <= 0xDFFF) {
+ // Surrogates get dropped
+ ent = 0;
+ }
+ else if (ent <= 0xFFFF) {
+ // BMP character
+ save(ent, h);
+ }
+ else {
+ // Astral converted to two surrogates
+ ent -= 0x10000;
+ save((ent>>10) + 0xD800, h);
+ save((ent&0x3FF) + 0xDC00, h);
+ }
+ if (ch != ';') {
+ unread(r, ch);
+ theCurrentColumn--;
+ }
+ }
+ else {
+ unread(r, ch);
+ theCurrentColumn--;
+ }
+ theNextState = S_PCDATA;
+ break;
+ case A_ETAG:
+ h.etag(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_DECL:
+ h.decl(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_GI:
+ h.gi(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_GI_STAGC:
+ h.gi(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.stagc(theOutputBuffer, 0, theSize);
+ break;
+ case A_LT:
+ mark();
+ save('<', h);
+ save(ch, h);
+ break;
+ case A_LT_PCDATA:
+ mark();
+ save('<', h);
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_PCDATA:
+ mark();
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_CMNT:
+ mark();
+ h.cmnt(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_MINUS3:
+ save('-', h);
+ save(' ', h);
+ break;
+ case A_MINUS2:
+ save('-', h);
+ save(' ', h);
+ // fall through into A_MINUS
+ case A_MINUS:
+ save('-', h);
+ save(ch, h);
+ break;
+ case A_PI:
+ mark();
+ h.pi(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_PITARGET:
+ h.pitarget(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_PITARGET_PI:
+ h.pitarget(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.pi(theOutputBuffer, 0, theSize);
+ break;
+ case A_SAVE:
+ save(ch, h);
+ break;
+ case A_SKIP:
+ break;
+ case A_SP:
+ save(' ', h);
+ break;
+ case A_STAGC:
+ h.stagc(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ case A_EMPTYTAG:
+ mark();
+// System.err.println("%%% Empty tag seen");
+ if (theSize > 0) h.gi(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ h.stage(theOutputBuffer, 0, theSize);
+ break;
+ case A_UNGET:
+ unread(r, ch);
+ theCurrentColumn--;
+ break;
+ case A_UNSAVE_PCDATA:
+ if (theSize > 0) theSize--;
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ break;
+ default:
+ throw new Error("Can't process state " + action);
+ }
+ theState = theNextState;
+ }
+ h.eof(theOutputBuffer, 0, 0);
+ }
+
+ /**
+ * Mark the current scan position as a "point of interest" - start of a tag,
+ * cdata, processing instruction etc.
+ */
+
+ private void mark() {
+ theLastColumn = theCurrentColumn;
+ theLastLine = theCurrentLine;
+ }
+
+ /**
+ A callback for the ScanHandler that allows it to force
+ the lexer state to CDATA content (no markup is recognized except
+ the end of element.
+ */
+
+ public void startCDATA() { theNextState = S_CDATA; }
+
+ private void save(int ch, ScanHandler h) throws IOException, SAXException {
+ if (theSize >= theOutputBuffer.length - 20) {
+ if (theState == S_PCDATA || theState == S_CDATA) {
+ // Return a buffer-sized chunk of PCDATA
+ h.pcdata(theOutputBuffer, 0, theSize);
+ theSize = 0;
+ }
+ else {
+ // Grow the buffer size
+ char[] newOutputBuffer = new char[theOutputBuffer.length * 2];
+ System.arraycopy(theOutputBuffer, 0, newOutputBuffer, 0, theSize+1);
+ theOutputBuffer = newOutputBuffer;
+ }
+ }
+ theOutputBuffer[theSize++] = (char)ch;
+ }
+
+ /**
+ Test procedure. Reads HTML from the standard input and writes
+ PYX to the standard output.
+ */
+
+ public static void main(String[] argv) throws IOException, SAXException {
+ Scanner s = new HTMLScanner();
+ Reader r = new InputStreamReader(System.in, "UTF-8");
+ Writer w = new OutputStreamWriter(System.out, "UTF-8");
+ PYXWriter pw = new PYXWriter(w);
+ s.scan(r, pw);
+ w.close();
+ }
+
+
+ private static String nicechar(int in) {
+ if (in == '\n') return "\\n";
+ if (in < 32) return "0x"+Integer.toHexString(in);
+ return "'"+((char)in)+"'";
+ }
+
+ }
diff --git a/templates/org/ccil/cowan/tagsoup/HTMLSchema.java b/templates/org/ccil/cowan/tagsoup/HTMLSchema.java
new file mode 100644
index 0000000..8def657
--- /dev/null
+++ b/templates/org/ccil/cowan/tagsoup/HTMLSchema.java
@@ -0,0 +1,38 @@
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+//
+//
+/**
+This class provides a Schema that has been preinitialized with HTML
+elements, attributes, and character entity declarations. All the declarations
+normally provided with HTML 4.01 are given, plus some that are IE-specific
+and NS4-specific. Attribute declarations of type CDATA with no default
+value are not included.
+*/
+
+package org.ccil.cowan.tagsoup;
+public class HTMLSchema extends Schema implements HTMLModels {
+
+ /**
+ Returns a newly constructed HTMLSchema object independent of
+ any existing ones.
+ */
+
+ public HTMLSchema() {
+ // Start of Schema calls
+ @@SCHEMA_CALLS@@
+ // End of Schema calls
+ }
+
+
+ }
diff --git a/tssl/tssl-models.xslt b/tssl/tssl-models.xslt
new file mode 100644
index 0000000..6a983b4
--- /dev/null
+++ b/tssl/tssl-models.xslt
@@ -0,0 +1,47 @@
+<!-- Generate Java code to be inserted into HTMLModels.java. -->
+
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl"
+ version="1.0">
+
+ <xsl:output method="text"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <!-- The main template. We are going to generate Java constant
+ definitions for the groups in the file. -->
+ <xsl:template match="tssl:schema">
+ <xsl:apply-templates select="tssl:group">
+ <xsl:sort select="@id"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+ <!-- Generate a declaration for a single group. -->
+ <xsl:template match="tssl:group" name="tssl:group">
+ <xsl:param name="id" select="@id"/>
+ <xsl:param name="number" select="position()"/>
+ <xsl:text>&#x9;public static final int </xsl:text>
+ <xsl:value-of select="$id"/>
+ <xsl:text> = 1 &lt;&lt; </xsl:text>
+ <xsl:value-of select="$number"/>
+ <xsl:text>;&#xA;</xsl:text>
+ </xsl:template>
+
+</xsl:transform>
diff --git a/tssl/tssl-validate.xslt b/tssl/tssl-validate.xslt
new file mode 100644
index 0000000..81faab5
--- /dev/null
+++ b/tssl/tssl-validate.xslt
@@ -0,0 +1,40 @@
+<!-- Generate complaints if the schema is invalid in some way. -->
+
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl"
+ version="1.0">
+
+ <xsl:output method="text"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <!-- Generates a report if an element does not belong to at least
+ one of the groups that its parent element contains. -->
+ <xsl:template match="tssl:element/tssl:element">
+ <xsl:if test="not(tssl:memberOfAny) and not(tssl:memberOf/@group = ../tssl:contains/@group)">
+ <xsl:value-of select="@name"/>
+ <xsl:text> is not in the content model of </xsl:text>
+ <xsl:value-of select="../@name"/>
+ <xsl:text>&#xA;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+
+
+</xsl:transform>
diff --git a/tssl/tssl.rnc b/tssl/tssl.rnc
new file mode 100644
index 0000000..4443073
--- /dev/null
+++ b/tssl/tssl.rnc
@@ -0,0 +1,75 @@
+# This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+#
+# TagSoup is licensed under the Apache License,
+# Version 2.0. You may obtain a copy of this license at
+# http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+# additional legal rights not granted by this license.
+#
+# TagSoup is distributed in the hope that it will be useful, but
+# unless required by applicable law or agreed to in writing, TagSoup
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+# OF ANY KIND, either express or implied; not even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+default namespace = "http://www.ccil.org/~cowan/XML/tagsoup/tssl"
+
+start = schema
+
+## A TSSL schema has a namespace, which is applied to the elements by default,
+## and a name, which is used solely for documentation. It contains entity
+## definitions, a root element, and attributes to be applied to all elements.
+schema = element schema {
+ attribute ns {xsd:anyURI},
+ attribute prefix {xsd:NCName},
+ attribute name {xsd:NCName},
+ attribute version {"1.0"},
+ entity*,
+ group+,
+ \element,
+ \attribute*
+ }
+
+## An entity has a name and a Unicode codepoint in hex.
+entity = element entity {
+ attribute name {xsd:NCName},
+ attribute codepoint {xsd:string}
+ }
+
+## A group is a named group of elements. Every element belongs to one
+## or more groups and has a content model consisting of one or more groups.
+group = element group {
+ attribute id {xsd:ID}
+ }
+
+## An element has a name and a namespace (currently ignored).
+## It can have any of several types of content and can be restartable
+## or not. The element is also a member of one or more model groups
+## (with arbitrary names), and can contain as children zero or more
+## model groups. Elements also have attributes and "natural" children.
+\element = element element {
+ attribute ns {xsd:anyURI}?,
+ attribute name {xsd:NCName},
+ attribute type {type},
+ attribute closeMode { "unclosable" | "restartable" }?,
+ attribute text-parent { "true" | "false" }?,
+ (element memberOf { attribute group {xsd:IDREF}}+ |
+ element isRoot { empty} |
+ element memberOfAny { empty }),
+ element contains { attribute group {xsd:IDREF}}*,
+ \attribute*,
+ \element*
+ }
+
+## Here are the attribute types:
+
+type = "element" | "any" | "empty" | "mixed" | "string" | "cdata"
+
+## An attribute has a name and a namespace (currently not supported).
+## It also has an optional type and an optional default value.
+\attribute = element attribute {
+ attribute ns {xsd:anyURI}?,
+ attribute name {xsd:NCName},
+ attribute type {"ID" | "IDREF" | "IDREFS" | "NMTOKEN" | "BOOLEAN"}?,
+ attribute default {xsd:string}?
+ }
+
diff --git a/tssl/tssl.xslt b/tssl/tssl.xslt
new file mode 100644
index 0000000..a25be10
--- /dev/null
+++ b/tssl/tssl.xslt
@@ -0,0 +1,220 @@
+<!-- Generate Java code to be inserted into HTMLSchema.java. -->
+
+<!--
+// This file is part of TagSoup and is Copyright 2002-2008 by John Cowan.
+//
+// TagSoup is licensed under the Apache License,
+// Version 2.0. You may obtain a copy of this license at
+// http://www.apache.org/licenses/LICENSE-2.0 . You may also have
+// additional legal rights not granted by this license.
+//
+// TagSoup is distributed in the hope that it will be useful, but
+// unless required by applicable law or agreed to in writing, TagSoup
+// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied; not even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-->
+
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tssl="http://www.ccil.org/~cowan/XML/tagsoup/tssl"
+ version="1.0">
+
+ <xsl:output method="text"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <!-- The main template. This generates calls on the Schema routines
+ setURI(), setPrefix(), elementType(), parent(), attribute(),
+ and entity() in that order. Several special cases are
+ handled by template calls. -->
+ <xsl:template match="tssl:schema">
+ <!-- setURI() -->
+ <xsl:text>&#x9;&#x9;setURI("</xsl:text>
+ <xsl:value-of select="@ns"/>
+ <xsl:text>");&#xA;</xsl:text>
+ <!-- setPrefix() -->
+ <xsl:text>&#x9;&#x9;setPrefix("</xsl:text>
+ <xsl:value-of select="@prefix"/>
+ <xsl:text>");&#xA;</xsl:text>
+ <!-- elementType() special cases -->
+ <xsl:text>&#x9;&#x9;elementType("&lt;pcdata>", M_EMPTY, M_PCDATA, 0);&#xA;</xsl:text>
+ <xsl:text>&#x9;&#x9;elementType("&lt;root>", </xsl:text>
+ <xsl:apply-templates select="tssl:element/tssl:isRoot"/>
+ <xsl:text>, M_EMPTY, 0);&#xA;</xsl:text>
+ <!-- elementType() main loop -->
+ <xsl:apply-templates select="//tssl:element">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <!-- parent() special cases -->
+ <xsl:call-template name="parent">
+ <xsl:with-param name="elem" select="'&lt;pcdata>'"/>
+ <xsl:with-param name="parent" select="//tssl:element[@text-parent='true']/@name"/>
+ </xsl:call-template>
+ <xsl:call-template name="parent">
+ <xsl:with-param name="elem" select="tssl:element/@name"/>
+ <xsl:with-param name="parent" select="'&lt;root>'"/>
+ </xsl:call-template>
+ <!-- parent() main loop -->
+ <xsl:apply-templates select="//tssl:element/tssl:element" mode="parent">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="//tssl:element/tssl:attribute">
+ <xsl:sort select="../@name"/>
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <!-- attribute() main loop -->
+ <xsl:apply-templates select="tssl:attribute">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <!-- entity() main loop -->
+ <xsl:apply-templates select="tssl:entity">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+ <!-- Generates a single call to elementType(). -->
+ <xsl:template match="tssl:element">
+ <xsl:text>&#x9;&#x9;elementType("</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>", </xsl:text>
+ <xsl:choose>
+ <xsl:when test="@type = 'element'">
+ <xsl:apply-templates select="tssl:contains"/>
+ </xsl:when>
+ <xsl:when test="@type = 'string'">
+ <xsl:text>M_PCDATA</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type = 'mixed'">
+ <xsl:text>M_PCDATA|</xsl:text>
+ <xsl:apply-templates select="tssl:contains"/>
+ </xsl:when>
+ <xsl:when test="@type = 'empty'">
+ <xsl:text>M_EMPTY</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type = 'any'">
+ <xsl:text>M_ANY</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type = 'cdata'">
+ <xsl:text>M_PCDATA</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>, </xsl:text>
+ <xsl:apply-templates select="tssl:memberOf"/>
+ <xsl:apply-templates select="tssl:memberOfAny"/>
+ <xsl:apply-templates select="tssl:isRoot"/>
+ <xsl:text>, </xsl:text>
+ <xsl:choose>
+ <xsl:when test="@type = 'cdata'">
+ <xsl:text>F_CDATA</xsl:text>
+ </xsl:when>
+ <xsl:when test="@closeMode = 'restartable'">
+ <xsl:text>F_RESTART</xsl:text>
+ </xsl:when>
+ <xsl:when test="@closeMode = 'unclosable'">
+ <xsl:text>F_NOFORCE</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>);&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Applied from tssl:element to generate the contains argument. -->
+ <xsl:template match="tssl:contains">
+ <xsl:value-of select="@group"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>|</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- Applied from tssl:element to generate the memberOf argument. -->
+ <xsl:template match="tssl:memberOf">
+ <xsl:value-of select="@group"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>|</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- Applied from tssl:element to handle memberOfAny. -->
+ <xsl:template match="tssl:memberOfAny">
+ <xsl:text>M_ANY &amp; ~M_ROOT</xsl:text>
+ </xsl:template>
+
+ <!-- Applied from tssl:element to handle isRoot. -->
+ <xsl:template match="tssl:isRoot">
+ <xsl:text>M_ROOT</xsl:text>
+ </xsl:template>
+
+ <!-- Generates a single call to parent(). The mode is used to prevent XSLT
+ from getting confused and generating elementType calls instead. -->
+ <xsl:template match="tssl:element/tssl:element" name="parent" mode="parent">
+ <xsl:param name="elem" select="@name"/>
+ <xsl:param name="parent" select="../@name"/>
+ <xsl:text>&#x9;&#x9;parent("</xsl:text>
+ <xsl:value-of select="$elem"/>
+ <xsl:text>", "</xsl:text>
+ <xsl:value-of select="$parent"/>
+ <xsl:text>");&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generates a single call to attribute(). -->
+ <xsl:template match="tssl:element/tssl:attribute" name="tssl:attribute">
+ <xsl:param name="elem" select="../@name"/>
+ <xsl:param name="attr" select="@name"/>
+ <xsl:param name="type" select="@type"/>
+ <xsl:param name="default" select="@default"/>
+ <xsl:text>&#x9;&#x9;attribute("</xsl:text>
+ <xsl:value-of select="$elem"/>
+ <xsl:text>", "</xsl:text>
+ <xsl:value-of select="$attr"/>
+ <xsl:text>", "</xsl:text>
+ <xsl:choose>
+ <xsl:when test="$type">
+ <xsl:value-of select="$type"/>
+ </xsl:when>
+ <xsl:when test="not($type)">
+ <xsl:text>CDATA</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>", </xsl:text>
+ <xsl:choose>
+ <xsl:when test="$default">
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="$default"/>
+ <xsl:text>"</xsl:text>
+ </xsl:when>
+ <xsl:when test="not($default)">
+ <xsl:text>null</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>);&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- Generates calls to attribute() (using the above template)
+ based on the global attribute definitions. -->
+ <xsl:template match="tssl:schema/tssl:attribute">
+ <xsl:variable name="attr" select="@name"/>
+ <xsl:variable name="type" select="@type"/>
+ <xsl:variable name="default" select="@default"/>
+ <xsl:for-each select="//tssl:element">
+ <xsl:sort select="@name"/>
+ <xsl:call-template name="tssl:attribute">
+ <xsl:with-param name="elem" select="@name"/>
+ <xsl:with-param name="attr" select="$attr"/>
+ <xsl:with-param name="type" select="$type"/>
+ <xsl:with-param name="default" select="$default"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- Generates a single call to entity(). -->
+ <xsl:template match="tssl:entity">
+ <xsl:text>&#x9;&#x9;entity("</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>", 0x</xsl:text>
+ <xsl:value-of select="@codepoint"/>
+ <xsl:text>);&#xA;</xsl:text>
+ </xsl:template>
+
+</xsl:transform>