Initial Contribution
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index 94a0a38..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,303 +0,0 @@
-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/README b/README
deleted file mode 100644
index 1e71819..0000000
--- a/README
+++ /dev/null
@@ -1,357 +0,0 @@
-                        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/TODO b/TODO
deleted file mode 100644
index ccb59fd..0000000
--- a/TODO
+++ /dev/null
@@ -1,14 +0,0 @@
-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
-Don't see </script> tag when in pseudo-comment in script element
-Don't just chuck out namespace declarations
-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 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
deleted file mode 100644
index 1aa21d4..0000000
--- a/build.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
-// 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/etc/build/build.properties b/etc/build/build.properties
deleted file mode 100644
index e372092..0000000
--- a/etc/build/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-tagsoup.version = 1.2
diff --git a/index.html b/index.html
deleted file mode 100644
index 1936ace..0000000
--- a/index.html
+++ /dev/null
@@ -1,407 +0,0 @@
-<!--
-// 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.
--->
-
-<html><head><title>TagSoup home page</title></head><body>
-<h1>TagSoup - Just Keep On Truckin'</h1>
-
-<h3>Introduction</h3>
-<p>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:
-<a href="http://oregonstate.edu/instruct/phl302/texts/hobbes/leviathan-c.html">
-poor, nasty and brutish</a>, 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.</p>
-
-<p>This is also the README file packaged with TagSoup.</p>
-
-<p>TagSoup is free and Open Source software.  As of version 1.2, it
-is licensed under the
-<a href="http://opensource.org/licenses/apache2.0.php">
-Apache License, Version 2.0</a>, 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.)
-
-<h3><i>Warning:</i> TagSoup will not build on stock Java 5.x or 6.x!</h3>
-
-<p>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
-<a href="http://prdownloads.sourceforge.net/saxon/saxon6-5-5.zip">
-Saxon 6.5.5</a>, which does not have the bug.  Unpack the
-zipfile in an empty directory and copy the <tt>saxon.jar</tt> and
-<tt>saxon-xml-apis.jar</tt> files to <tt>$ANT_HOME/lib</tt>.  The Ant
-build process for TagSoup will then notice that Saxon is available and
-use it instead.</p>
-
-<h3>TagSoup 1.2 released</h3>
-
-<p>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.</p>
-
-<ul>
-
-<li><p>As noted above, I have changed the license to Apache 2.0.</p></li>
-
-<li><p>The default content model for bogons (unknown elements) is now
-ANY rather than EMPTY.  <b>This is a breaking change</b>, which I have
-done only because there was so much demand for it.  It can be undone
-on the command line with the <code>--emptybogons</code> switch, or
-programmatically with <code>parser.setFeature(Parser.emptyBogonsFeature,
-true)</code>.</p></li>
-
-<li><p>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 <code>foo?cdown=32&amp;cup=42</code> are no longer seen as
-containing an instance of the &cup; character (whose name happens to
-be <code>cup</code>).</p></li>
-
-<li><p>Several new switches have been added:
-
-<ul>
-
-<li><p><code>--doctype-system</code> and <code>--doctype-public</code>
-force a <code>DOCTYPE</code> declaration to be output and allow setting
-the system and public identifiers.</p></li>
-
-<li><p><code>--standalone</code> and <code>--version</code> allow control
-of the XML declaration that is output.  (Note that TagSoup's XML output
-is always version 1.0, even if you use <code>--version=1.1</code>.)</p></li>
-
-<li><p><code>--norootbogons</code> causes unknown elements not to be allowed
-as the document root element.  Instead, they are made children of the
-default root element (the <code>html</code> element for HTML).</p></li>
-
-</ul>
-<li><p>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 
-<a href="http://www.w3.org/TR/2007/WD-xml-entity-names-20071214">
-2007-12-14 draft of XML Entity Definitions for Characters</a>, except the
-94 which require more than one Unicode character to represent.</p></li>
-
-<li>The SAX events <code>startPrefixMapping</code> and
-<code>endPrefixMapping</code> are now being reported for all cases of
-foreign elements and attributes.</li>
-
-<li><p>All bugs around newline processing on Windows should now be gone.</p></li>
-
-<li>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.</p>
-
-<li><p>Since the <code>span</code> 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.</p></li>
-
-<li><p>The following non-standard elements are now at least partly
-supported: <code>bgsound</code>, <code>blink</code>, <code>canvas</code>,
-<code>comment</code>, <code>listing</code>, <code>marquee</code>,
-<code>nobr</code>, <code>rbc</code>, <code>rb</code>, <code>rp</code>,
-<code>rtc</code>, <code>rt</code>, <code>ruby</code>, <code>wbr</code>,
-<code>xmp</code>.</p></li>
-
-<li><p>In HTML output mode, boolean attributes like <code>checked</code>
-are now output as such, rather than in XML style as
-<code>checked="checked"</code>.</p></li>
-
-<li><p>Runs of &lt; characters such as &lt;&lt; and &lt;&lt;&lt; are now
-handled correctly in text rather than being transformed into extremely
-bogus start-tags.</p></li>
-
-</ul>
-
-<p><a href="tagsoup-1.2.jar">Download</a> the TagSoup 1.2 jar
-file here.
-It's about 87K long.<br/>
-<a href="tagsoup-1.2-src.zip">Download</a> the full TagSoup 1.2 source
-here.  If you don't have zip, you can use jar to unpack it.  <br/>
-<a href="CHANGES">Download</a> the current CHANGES file here.</p>
-
-<h3>TagSoup 1.1 released</h3>
-
-<p>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 <tt>SAXParser</tt> by calling
-<tt>org.ccil.cowan.tagsoup.jaxp.SAXParserImpl.newInstance()</tt>.  You can
-also set the system property <tt>javax.xml.parsers.SAXParserFactory</tt>
-to <tt>org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl</tt>, but <i>be
-aware</i> 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.</p>
-
-<h3>What TagSoup does</h3>
-<p>TagSoup is designed as a parser, not a whole application; it isn't
-intended to permanently clean up bad HTML, as 
-<a href="http://tidy.sf.net">HTML Tidy</a> 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.</p>
-
-<p>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
-<a href="http://www.crumbmuseum.com/truckin.html">
-"Just Keep On Truckin'"</a>.  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:</p>
-
-<pre>This is &lt;B>bold, &lt;I>bold italic, &lt;/b>italic, &lt;/i>normal text
-</pre>
-
-<p>gets correctly rewritten as:</p>
-
-<pre>This is &lt;b>bold, &lt;i>bold italic, &lt;/i>&lt;/b>&lt;i>italic, &lt;/i>normal text.
-</pre>
-
-<p>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, <a href="http://www.cafeconleche.org/XOM">XOM</a> 
-is known to work.
-
-<p>You can replace the low-level HTML scanner with one based on Sean McGrath's
-<a href="http://gnosis.cx/publish/programming/xml_matters_17.html">PYX</a>
-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 <a href="http://jchardet.sourceforge.net/">Mozilla one</a>;
-if you succeed, let me know.</p>
-
-<h3>Note: TagSoup in Java 1.1</h3>
-
-<p>If you go through the TagSoup source and replace all references to
-<code>HashMap</code> with <code>Hashtable</code> and recompile,
-TagSoup will work fine in Java 1.1 VMs.  Thanks to Thorbj&oslash;rn
-Vinne for this discovery.<p>
-
-<h3>The TSaxon XSLT-for-HTML processor</h3>
-<p><a href="http://www.ccil.org/~cowan">I</a> am also distributing
-<a href="tsaxon">TSaxon</a>, 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.
-
-
-<h3>TagSoup as a stand-alone program</h3>
-<p>It is possible to run TagSoup as a program by saying <code>java
--jar tagsoup-1.0.1 [<i>option ...</i>] [<i>file ...</i>]</code>.
-Files mentioned on the command line will be parsed individually.  If no
-files are specified, the standard input is read.</p>
-
-<p>The following options are understood:</p>
-
-<dl>
-<dt><code>--files</code></dt>
-<dd>Output into individual files, with <code>html</code> extensions changed
-to <code>xhtml</code>.  Otherwise, all output is sent to the standard output.</dd>
-
-<dt><code>--html</code></dt>
-<dd>Output is in clean HTML: the XML declaration is suppressed, as are end-tags
-for the known empty elements.</dd>
-
-<dt><code>--omit-xml-declaration</code></dt>
-<dd>The XML declaration is suppressed.</dd>
-
-<dt><code>--method=html</code></dt>
-<dd>End-tags for the known empty HTML elements are suppressed.</dd>
-
-<dt><code>--doctype-system=<i>systemid</i></code></dt>
-<dd>Forces the output of a <code>DOCTYPE</code> declaration with the specified systemid.</dd>
-
-<dt><code>--doctype-public=<i>publicid</i></code></dt>
-<dd>Forces the output of a <code>DOCTYPE</code> declaration with the specified publicid.</dd>
-
-<dt><code>--version=<i>version</i></code></dt>
-<dd>Sets the version string in the XML declaration.</dd>
-
-<dt><code>--standalone=</code>[<code>yes</code>|<code>no</code>]</dt>
-<dd>Sets the standalone declaration to yes or no.</dd>
-
-<dt><code>--pyx</code></dt>
-<dd>Output is in PYX format.</dd>
-
-<dt><code>--pyxin</code></dt>
-<dd>Input is in PYXoid format (need not be well-formed).</dd>
-
-<dt><code>--nons</code></dt>
-<dd>Namespaces are suppressed.  Normally, all elements are in the XHTML 1.x
-namespace, and all attributes are in no namespace.</dd>
-
-<dt><code>--nobogons</code></dt>
-<dd>Bogons (unknown elements) are suppressed.</dd>
-
-<dt><code>--nodefaults</code></dt>
-<dd>suppress default attribute values</dd>
-
-<dt><code>--nocolons</code></dt>
-<dd>change  explicit colons in element and attribute names to underscores</dd>
-
-<dt><code>--norestart</code></dt>
-<dd>don't restart any normally restartable elements</dd>
-
-<dt><code>--ignorable</code></dt>
-<dd>output whitespace in elements with element-only content</dd>
-
-<dt><code>--emptybogons</code></dt>
-<dd>Bogons are given a content model of EMPTY rather than ANY.</dd>
-
-<dt><code>--any</code></dt>
-<dd>Bogons are given a content model of ANY rather than EMPTY (default).</dd>
-
-<dt><code>--norootbogons</code></dt>
-<dd>Don't allow bogons to be root elements; make them subordinate to the root.</dd>
-
-<dt><code>--lexical</code></dt>
-<dd>Pass through HTML comments and DOCTYPE declarations.  Has no effect
-when output is in PYX format.</dd>
-
-<dt><code>--reuse</code></dt>
-<dd>Reuse a single instance of TagSoup parser throughout.  Normally, a new one
-is instantiated for each input file.</dd>
-
-<dt><code>--nocdata</code></dt>
-<dd>Change the content models of the <code>script</code> and <code>style</code> elements
-to treat them as ordinary #PCDATA (text-only) elements, as in XHTML, rather than
-with the special CDATA content model.</dd>
-
-<dt><code>--encoding=</code><i>encoding</i></dt>
-<dd>Specify the input encoding.  The default is the Java platform default.</dd>
-
-<dt><code>--output-encoding=</code><i>encoding</i></dt>
-<dd>Specify the output encoding.  The default is the Java platform default.</dd>
-
-<dt><code>--help</code></dt>
-<dd>Print help.</dd>
-
-<dt><code>--version</code></dt>
-<dd>Print the version number.</dd>
-
-</dl>
-
-<a name="properties"></a><h3>SAX features and properties</h3>
-
-<p>TagSoup supports the following SAX features in addition to the
-standard ones:</p>
-
-<dl>
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/ignore-bogons</tt></dt>
-<dd>A value of "true" indicates that the parser will ignore
-unknown elements.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/bogons-empty</tt></dt>
-<dd>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.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/root-bogons</tt></dt>
-<dd>A value of "true" indicates that the parser will allow unknown
-elements to be the root of the output document.</dd>
-
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/default-attributes</tt></dt>
-<dd>A value of "true" indicates that the parser will return default
-attribute values for missing attributes that have default values.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/translate-colons</tt></dt>
-<dd>A value of "true" indicates that the parser will 
-translate colons into underscores in names.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/restart-elements</tt></dt>
-<dd>A value of "true" indicates that the parser will 
-attempt to restart the restartable elements.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/ignorable-whitespace</tt></dt>
-<dd>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.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/features/cdata-elements</tt></dt>
-<dd>A value of "true" indicates that the parser will 
-process the <tt>script</tt> and <tt>style</tt> elements
-(or any elements with <tt>type='cdata'</tt> in the TSSL schema)
-as SGML CDATA elements (that is, no markup is recognized except
-the matching end-tag).</dd>
-
-</dl>
-
-<p>TagSoup supports the following SAX properties in addition to
-the standard ones:</p>
-
-<dl>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/properties/scanner</tt></dt>
-<dd>Specifies the Scanner object this parser uses.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/properties/schema</tt></dt>
-<dd>Specifies the Schema object this parser uses.</dd>
-
-<dt><tt>http://www.ccil.org/~cowan/tagsoup/properties/auto-detector</tt></dt>
-<dd>Specifies the AutoDetector (for encoding detection) this parser uses.</dd>
-
-</dl>
- 
-<h3>More information</h3>
-<p>I gave a presentation (a nocturne, so it's not on the schedule) at
-<a href="http://www.extrememarkup.com/extreme/2004">Extreme Markup Languages 2004</a>
-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:
-<a href="tagsoup.odp">OpenDocument</a>
-<a href="tagsoup.ppt">Powerpoint</a>
-<a href="tagsoup.pdf">PDF</a>.
-
-<p>I also had people add <a href="extreme.html">"evil" HTML</a> to a large
-poster so that I could <a href="extreme.xhtml">clean it up</a>;
-View Source is probably more useful than ordinary browsing.
-The original instructions were:</p>
-
-<p align="center">SOUPE DE BALISES (BE EVIL)!</br>
-Ecritez une balise ouvrante (sans attributs)<br/> ou fermante HTML ici, s.v.p.<p/>
-
-
-<p>There is a <a href="http://groups.yahoo.com/group/tagsoup-friends">
-tagsoup-friends</a> mailing list hosted at <a href="http://groups.yahoo.com">
-Yahoo Groups</a>.  You can
-<a href="http://groups.yahoo.com/group/tagsoup-friends/join">join</a>
-via the Web, or by sending a blank email to
-<a href="mailto:tagsoup-friends-subscribe@yahoogroups.com"><i>
-tagsoup-friends-subscribe@yahoogroups.com</i></a>.
-The <a href="http://groups.yahoo.com/group/tagsoup-friends/messages">
-archives</a> are open to all.</p>
-
-<p>Online TagSoup processing for publicly accessible HTML documents
-is now <a href="http://xmlarmyknife.org/docs/xhtml/tagsoup/">available</a>
-courtesy of Leigh Dodds.</p>
diff --git a/src/definitions/html.stml b/src/definitions/html.stml
deleted file mode 100644
index 4cab973..0000000
--- a/src/definitions/html.stml
+++ /dev/null
@@ -1,249 +0,0 @@
-<!--
-// 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/src/definitions/html.tssl b/src/definitions/html.tssl
deleted file mode 100644
index 7207862..0000000
--- a/src/definitions/html.tssl
+++ /dev/null
@@ -1,2762 +0,0 @@
-<!--
-// 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/java/org/ccil/cowan/tagsoup/AttributesImpl.java b/src/org/ccil/cowan/tagsoup/AttributesImpl.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/AttributesImpl.java
rename to src/org/ccil/cowan/tagsoup/AttributesImpl.java
diff --git a/src/java/org/ccil/cowan/tagsoup/AutoDetector.java b/src/org/ccil/cowan/tagsoup/AutoDetector.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/AutoDetector.java
rename to src/org/ccil/cowan/tagsoup/AutoDetector.java
diff --git a/src/java/org/ccil/cowan/tagsoup/CommandLine.java b/src/org/ccil/cowan/tagsoup/CommandLine.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/CommandLine.java
rename to src/org/ccil/cowan/tagsoup/CommandLine.java
diff --git a/src/java/org/ccil/cowan/tagsoup/Element.java b/src/org/ccil/cowan/tagsoup/Element.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/Element.java
rename to src/org/ccil/cowan/tagsoup/Element.java
diff --git a/src/java/org/ccil/cowan/tagsoup/ElementType.java b/src/org/ccil/cowan/tagsoup/ElementType.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/ElementType.java
rename to src/org/ccil/cowan/tagsoup/ElementType.java
diff --git a/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt b/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt
new file mode 100644
index 0000000..7462b7a
--- /dev/null
+++ b/src/org/ccil/cowan/tagsoup/GOOGLE_README.txt
@@ -0,0 +1,8 @@
+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/HTMLModels.java b/src/org/ccil/cowan/tagsoup/HTMLModels.java
new file mode 100644
index 0000000..a6e413c
--- /dev/null
+++ b/src/org/ccil/cowan/tagsoup/HTMLModels.java
@@ -0,0 +1,53 @@
+// 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
+		public static final int M_AREA = 1 << 1;
+	public static final int M_BLOCK = 1 << 2;
+	public static final int M_BLOCKINLINE = 1 << 3;
+	public static final int M_BODY = 1 << 4;
+	public static final int M_CELL = 1 << 5;
+	public static final int M_COL = 1 << 6;
+	public static final int M_DEF = 1 << 7;
+	public static final int M_FORM = 1 << 8;
+	public static final int M_FRAME = 1 << 9;
+	public static final int M_HEAD = 1 << 10;
+	public static final int M_HTML = 1 << 11;
+	public static final int M_INLINE = 1 << 12;
+	public static final int M_LEGEND = 1 << 13;
+	public static final int M_LI = 1 << 14;
+	public static final int M_NOLINK = 1 << 15;
+	public static final int M_OPTION = 1 << 16;
+	public static final int M_OPTIONS = 1 << 17;
+	public static final int M_P = 1 << 18;
+	public static final int M_PARAM = 1 << 19;
+	public static final int M_TABLE = 1 << 20;
+	public static final int M_TABULAR = 1 << 21;
+	public static final int M_TR = 1 << 22;
+
+
+	// End of model definitions
+
+	}
diff --git a/src/org/ccil/cowan/tagsoup/HTMLScanner.java b/src/org/ccil/cowan/tagsoup/HTMLScanner.java
new file mode 100644
index 0000000..0d73ff7
--- /dev/null
+++ b/src/org/ccil/cowan/tagsoup/HTMLScanner.java
@@ -0,0 +1,648 @@
+// 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
+		private static final int S_ANAME = 1;
+	private static final int S_APOS = 2;
+	private static final int S_AVAL = 3;
+	private static final int S_BB = 4;
+	private static final int S_BBC = 5;
+	private static final int S_BBCD = 6;
+	private static final int S_BBCDA = 7;
+	private static final int S_BBCDAT = 8;
+	private static final int S_BBCDATA = 9;
+	private static final int S_CDATA = 10;
+	private static final int S_CDATA2 = 11;
+	private static final int S_CDSECT = 12;
+	private static final int S_CDSECT1 = 13;
+	private static final int S_CDSECT2 = 14;
+	private static final int S_COM = 15;
+	private static final int S_COM2 = 16;
+	private static final int S_COM3 = 17;
+	private static final int S_COM4 = 18;
+	private static final int S_DECL = 19;
+	private static final int S_DECL2 = 20;
+	private static final int S_DONE = 21;
+	private static final int S_EMPTYTAG = 22;
+	private static final int S_ENT = 23;
+	private static final int S_EQ = 24;
+	private static final int S_ETAG = 25;
+	private static final int S_GI = 26;
+	private static final int S_NCR = 27;
+	private static final int S_PCDATA = 28;
+	private static final int S_PI = 29;
+	private static final int S_PITARGET = 30;
+	private static final int S_QUOT = 31;
+	private static final int S_STAGC = 32;
+	private static final int S_TAG = 33;
+	private static final int S_TAGWS = 34;
+	private static final int S_XNCR = 35;
+	private static final int A_ADUP = 1;
+	private static final int A_ADUP_SAVE = 2;
+	private static final int A_ADUP_STAGC = 3;
+	private static final int A_ANAME = 4;
+	private static final int A_ANAME_ADUP = 5;
+	private static final int A_ANAME_ADUP_STAGC = 6;
+	private static final int A_AVAL = 7;
+	private static final int A_AVAL_STAGC = 8;
+	private static final int A_CDATA = 9;
+	private static final int A_CMNT = 10;
+	private static final int A_DECL = 11;
+	private static final int A_EMPTYTAG = 12;
+	private static final int A_ENTITY = 13;
+	private static final int A_ENTITY_START = 14;
+	private static final int A_ETAG = 15;
+	private static final int A_GI = 16;
+	private static final int A_GI_STAGC = 17;
+	private static final int A_LT = 18;
+	private static final int A_LT_PCDATA = 19;
+	private static final int A_MINUS = 20;
+	private static final int A_MINUS2 = 21;
+	private static final int A_MINUS3 = 22;
+	private static final int A_PCDATA = 23;
+	private static final int A_PI = 24;
+	private static final int A_PITARGET = 25;
+	private static final int A_PITARGET_PI = 26;
+	private static final int A_SAVE = 27;
+	private static final int A_SKIP = 28;
+	private static final int A_SP = 29;
+	private static final int A_STAGC = 30;
+	private static final int A_UNGET = 31;
+	private static final int A_UNSAVE_PCDATA = 32;
+	private static int[] statetable = {
+		S_ANAME, '/', A_ANAME_ADUP, S_EMPTYTAG,
+		S_ANAME, '=', A_ANAME, S_AVAL,
+		S_ANAME, '>', A_ANAME_ADUP_STAGC, S_PCDATA,
+		S_ANAME, 0, A_SAVE, S_ANAME,
+		S_ANAME, -1, A_ANAME_ADUP_STAGC, S_DONE,
+		S_ANAME, ' ', A_ANAME, S_EQ,
+		S_ANAME, '\n', A_ANAME, S_EQ,
+		S_ANAME, '\t', A_ANAME, S_EQ,
+		S_APOS, '\'', A_AVAL, S_TAGWS,
+		S_APOS, 0, A_SAVE, S_APOS,
+		S_APOS, -1, A_AVAL_STAGC, S_DONE,
+		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_AVAL_STAGC, S_PCDATA,
+		S_AVAL, 0, A_SAVE, S_STAGC,
+		S_AVAL, -1, A_AVAL_STAGC, S_DONE,
+		S_AVAL, ' ', A_SKIP, S_AVAL,
+		S_AVAL, '\n', A_SKIP, S_AVAL,
+		S_AVAL, '\t', A_SKIP, S_AVAL,
+		S_BB, 'C', A_SKIP, S_BBC,
+		S_BB, 0, A_SKIP, S_DECL,
+		S_BB, -1, A_SKIP, S_DONE,
+		S_BBC, 'D', A_SKIP, S_BBCD,
+		S_BBC, 0, A_SKIP, S_DECL,
+		S_BBC, -1, A_SKIP, S_DONE,
+		S_BBCD, 'A', A_SKIP, S_BBCDA,
+		S_BBCD, 0, A_SKIP, S_DECL,
+		S_BBCD, -1, A_SKIP, S_DONE,
+		S_BBCDA, 'T', A_SKIP, S_BBCDAT,
+		S_BBCDA, 0, A_SKIP, S_DECL,
+		S_BBCDA, -1, A_SKIP, S_DONE,
+		S_BBCDAT, 'A', A_SKIP, S_BBCDATA,
+		S_BBCDAT, 0, A_SKIP, S_DECL,
+		S_BBCDAT, -1, A_SKIP, S_DONE,
+		S_BBCDATA, '[', A_SKIP, S_CDSECT,
+		S_BBCDATA, 0, A_SKIP, S_DECL,
+		S_BBCDATA, -1, A_SKIP, S_DONE,
+		S_CDATA, '<', A_SAVE, S_CDATA2,
+		S_CDATA, 0, A_SAVE, S_CDATA,
+		S_CDATA, -1, A_PCDATA, S_DONE,
+		S_CDATA2, '/', A_UNSAVE_PCDATA, S_ETAG,
+		S_CDATA2, 0, A_SAVE, S_CDATA,
+		S_CDATA2, -1, A_UNSAVE_PCDATA, S_DONE,
+		S_CDSECT, ']', A_SAVE, S_CDSECT1,
+		S_CDSECT, 0, A_SAVE, S_CDSECT,
+		S_CDSECT, -1, A_SKIP, S_DONE,
+		S_CDSECT1, ']', A_SAVE, S_CDSECT2,
+		S_CDSECT1, 0, A_SAVE, S_CDSECT,
+		S_CDSECT1, -1, A_SKIP, S_DONE,
+		S_CDSECT2, '>', A_CDATA, S_PCDATA,
+		S_CDSECT2, 0, A_SAVE, S_CDSECT,
+		S_CDSECT2, -1, A_SKIP, S_DONE,
+		S_COM, '-', A_SKIP, S_COM2,
+		S_COM, 0, A_SAVE, S_COM2,
+		S_COM, -1, A_CMNT, S_DONE,
+		S_COM2, '-', A_SKIP, S_COM3,
+		S_COM2, 0, A_SAVE, S_COM2,
+		S_COM2, -1, A_CMNT, S_DONE,
+		S_COM3, '-', A_SKIP, S_COM4,
+		S_COM3, 0, A_MINUS, S_COM2,
+		S_COM3, -1, A_CMNT, S_DONE,
+		S_COM4, '-', A_MINUS3, S_COM4,
+		S_COM4, '>', A_CMNT, S_PCDATA,
+		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, 0, A_SAVE, S_DECL2,
+		S_DECL, -1, A_SKIP, S_DONE,
+		S_DECL2, '>', A_DECL, S_PCDATA,
+		S_DECL2, 0, A_SAVE, S_DECL2,
+		S_DECL2, -1, A_SKIP, S_DONE,
+		S_EMPTYTAG, '>', A_EMPTYTAG, S_PCDATA,
+		S_EMPTYTAG, 0, A_SAVE, S_ANAME,
+		S_EMPTYTAG, ' ', A_SKIP, S_TAGWS,
+		S_EMPTYTAG, '\n', A_SKIP, S_TAGWS,
+		S_EMPTYTAG, '\t', A_SKIP, S_TAGWS,
+		S_ENT, 0, A_ENTITY, S_ENT,
+		S_ENT, -1, A_ENTITY, S_DONE,
+		S_EQ, '=', A_SKIP, S_AVAL,
+		S_EQ, '>', A_ADUP_STAGC, S_PCDATA,
+		S_EQ, 0, A_ADUP_SAVE, S_ANAME,
+		S_EQ, -1, A_ADUP_STAGC, S_DONE,
+		S_EQ, ' ', A_SKIP, S_EQ,
+		S_EQ, '\n', A_SKIP, S_EQ,
+		S_EQ, '\t', A_SKIP, S_EQ,
+		S_ETAG, '>', A_ETAG, S_PCDATA,
+		S_ETAG, 0, A_SAVE, S_ETAG,
+		S_ETAG, -1, A_ETAG, S_DONE,
+		S_ETAG, ' ', A_SKIP, S_ETAG,
+		S_ETAG, '\n', A_SKIP, S_ETAG,
+		S_ETAG, '\t', A_SKIP, S_ETAG,
+		S_GI, '/', A_SKIP, S_EMPTYTAG,
+		S_GI, '>', A_GI_STAGC, S_PCDATA,
+		S_GI, 0, A_SAVE, S_GI,
+		S_GI, -1, A_SKIP, S_DONE,
+		S_GI, ' ', A_GI, S_TAGWS,
+		S_GI, '\n', A_GI, S_TAGWS,
+		S_GI, '\t', A_GI, S_TAGWS,
+		S_NCR, 0, A_ENTITY, S_NCR,
+		S_NCR, -1, A_ENTITY, S_DONE,
+		S_PCDATA, '&', A_ENTITY_START, S_ENT,
+		S_PCDATA, '<', A_PCDATA, S_TAG,
+		S_PCDATA, 0, A_SAVE, S_PCDATA,
+		S_PCDATA, -1, A_PCDATA, S_DONE,
+		S_PI, '>', A_PI, S_PCDATA,
+		S_PI, 0, A_SAVE, S_PI,
+		S_PI, -1, A_PI, S_DONE,
+		S_PITARGET, '>', A_PITARGET_PI, S_PCDATA,
+		S_PITARGET, 0, A_SAVE, S_PITARGET,
+		S_PITARGET, -1, A_PITARGET_PI, S_DONE,
+		S_PITARGET, ' ', A_PITARGET, S_PI,
+		S_PITARGET, '\n', A_PITARGET, S_PI,
+		S_PITARGET, '\t', A_PITARGET, S_PI,
+		S_QUOT, '"', A_AVAL, S_TAGWS,
+		S_QUOT, 0, A_SAVE, S_QUOT,
+		S_QUOT, -1, A_AVAL_STAGC, S_DONE,
+		S_QUOT, ' ', A_SP, S_QUOT,
+		S_QUOT, '\n', A_SP, S_QUOT,
+		S_QUOT, '\t', A_SP, S_QUOT,
+		S_STAGC, '>', A_AVAL_STAGC, S_PCDATA,
+		S_STAGC, 0, A_SAVE, S_STAGC,
+		S_STAGC, -1, A_AVAL_STAGC, S_DONE,
+		S_STAGC, ' ', A_AVAL, S_TAGWS,
+		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, 0, A_SAVE, S_GI,
+		S_TAG, -1, A_LT_PCDATA, S_DONE,
+		S_TAG, ' ', A_LT, S_PCDATA,
+		S_TAG, '\n', A_LT, S_PCDATA,
+		S_TAG, '\t', A_LT, S_PCDATA,
+		S_TAGWS, '/', A_SKIP, S_EMPTYTAG,
+		S_TAGWS, '>', A_STAGC, S_PCDATA,
+		S_TAGWS, 0, A_SAVE, S_ANAME,
+		S_TAGWS, -1, A_STAGC, S_DONE,
+		S_TAGWS, ' ', A_SKIP, S_TAGWS,
+		S_TAGWS, '\n', A_SKIP, S_TAGWS,
+		S_TAGWS, '\t', A_SKIP, S_TAGWS,
+		S_XNCR, 0, A_ENTITY, S_XNCR,
+		S_XNCR, -1, A_ENTITY, S_DONE,
+
+	};
+	private static final String[] debug_actionnames = { "", "A_ADUP", "A_ADUP_SAVE", "A_ADUP_STAGC", "A_ANAME", "A_ANAME_ADUP", "A_ANAME_ADUP_STAGC", "A_AVAL", "A_AVAL_STAGC", "A_CDATA", "A_CMNT", "A_DECL", "A_EMPTYTAG", "A_ENTITY", "A_ENTITY_START", "A_ETAG", "A_GI", "A_GI_STAGC", "A_LT", "A_LT_PCDATA", "A_MINUS", "A_MINUS2", "A_MINUS3", "A_PCDATA", "A_PI", "A_PITARGET", "A_PITARGET_PI", "A_SAVE", "A_SKIP", "A_SP", "A_STAGC", "A_UNGET", "A_UNSAVE_PCDATA"};
+	private static final String[] debug_statenames = { "", "S_ANAME", "S_APOS", "S_AVAL", "S_BB", "S_BBC", "S_BBCD", "S_BBCDA", "S_BBCDAT", "S_BBCDATA", "S_CDATA", "S_CDATA2", "S_CDSECT", "S_CDSECT1", "S_CDSECT2", "S_COM", "S_COM2", "S_COM3", "S_COM4", "S_DECL", "S_DECL2", "S_DONE", "S_EMPTYTAG", "S_ENT", "S_EQ", "S_ETAG", "S_GI", "S_NCR", "S_PCDATA", "S_PI", "S_PITARGET", "S_QUOT", "S_STAGC", "S_TAG", "S_TAGWS", "S_XNCR"};
+
+
+	// 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};
+
+	// 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 PushbackReader) {
+			r = (PushbackReader)r0;
+			}
+		else if (r0 instanceof BufferedReader) {
+			r = new PushbackReader(r0);
+			}
+		else {
+			r = new PushbackReader(new BufferedReader(r0));
+			}
+
+		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 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;
+					}
+				}
+//			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/src/org/ccil/cowan/tagsoup/HTMLSchema.java b/src/org/ccil/cowan/tagsoup/HTMLSchema.java
new file mode 100644
index 0000000..9b46a68
--- /dev/null
+++ b/src/org/ccil/cowan/tagsoup/HTMLSchema.java
@@ -0,0 +1,2895 @@
+// 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
+				setURI("http://www.w3.org/1999/xhtml");
+		setPrefix("html");
+		elementType("<pcdata>", M_EMPTY, M_PCDATA, 0);
+		elementType("<root>", M_ROOT, M_EMPTY, 0);
+		elementType("a", M_PCDATA|M_NOLINK, M_INLINE, 0);
+		elementType("abbr", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("acronym", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("address", M_PCDATA|M_INLINE|M_P, M_BLOCK, 0);
+		elementType("applet", M_PCDATA|M_PARAM|M_INLINE|M_BLOCK, M_INLINE|M_NOLINK, 0);
+		elementType("area", M_EMPTY, M_AREA, 0);
+		elementType("b", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("base", M_EMPTY, M_HEAD, 0);
+		elementType("basefont", M_EMPTY, M_INLINE|M_NOLINK, 0);
+		elementType("bdo", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("bgsound", M_EMPTY, M_HEAD, 0);
+		elementType("big", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("blink", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("blockquote", M_PCDATA|M_INLINE|M_BLOCK, M_BLOCK, 0);
+		elementType("body", M_PCDATA|M_INLINE|M_BLOCK, M_HTML|M_BODY, 0);
+		elementType("br", M_EMPTY, M_INLINE|M_NOLINK, 0);
+		elementType("button", M_PCDATA|M_INLINE|M_BLOCK, M_INLINE|M_NOLINK, 0);
+		elementType("canvas", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("caption", M_PCDATA|M_INLINE, M_TABULAR, 0);
+		elementType("center", M_PCDATA|M_INLINE|M_BLOCK, M_BLOCK, 0);
+		elementType("cite", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("code", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("col", M_EMPTY, M_COL|M_TABULAR, 0);
+		elementType("colgroup", M_COL, M_TABULAR, 0);
+		elementType("comment", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("dd", M_PCDATA|M_INLINE|M_BLOCK, M_DEF, 0);
+		elementType("del", M_PCDATA|M_INLINE|M_BLOCK, M_INLINE|M_BLOCKINLINE|M_BLOCK, F_RESTART);
+		elementType("dfn", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("dir", M_LI, M_BLOCK, 0);
+		elementType("div", M_PCDATA|M_INLINE|M_BLOCK, M_BLOCK, 0);
+		elementType("dl", M_DEF, M_BLOCK, 0);
+		elementType("dt", M_PCDATA|M_INLINE, M_DEF, 0);
+		elementType("em", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("fieldset", M_PCDATA|M_LEGEND|M_INLINE|M_BLOCK, M_BLOCK, 0);
+		elementType("font", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("form", M_PCDATA|M_INLINE|M_NOLINK|M_BLOCK|M_TR|M_CELL, M_BLOCK|M_FORM, F_NOFORCE);
+		elementType("frame", M_EMPTY, M_FRAME, 0);
+		elementType("frameset", M_FRAME, M_FRAME|M_HTML, 0);
+		elementType("h1", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("h2", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("h3", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("h4", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("h5", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("h6", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("head", M_HEAD, M_HTML, 0);
+		elementType("hr", M_EMPTY, M_BLOCK, 0);
+		elementType("html", M_HTML, M_ROOT, 0);
+		elementType("i", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("iframe", M_PCDATA|M_INLINE|M_BLOCK, M_INLINE|M_NOLINK, 0);
+		elementType("img", M_EMPTY, M_INLINE|M_NOLINK, 0);
+		elementType("input", M_EMPTY, M_INLINE|M_NOLINK, 0);
+		elementType("ins", M_PCDATA|M_INLINE|M_BLOCK, M_INLINE|M_BLOCK, F_RESTART);
+		elementType("isindex", M_EMPTY, M_HEAD, 0);
+		elementType("kbd", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("label", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("legend", M_PCDATA|M_INLINE, M_LEGEND, 0);
+		elementType("li", M_PCDATA|M_INLINE|M_BLOCK, M_LI, 0);
+		elementType("link", M_EMPTY, M_HEAD|M_INLINE, 0);
+		elementType("listing", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("map", M_BLOCK|M_AREA, M_INLINE, 0);
+		elementType("marquee", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("menu", M_LI, M_BLOCK, 0);
+		elementType("meta", M_EMPTY, M_HEAD, 0);
+		elementType("nobr", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("noframes", M_BODY|M_BLOCK|M_INLINE, M_BLOCK|M_HTML|M_FRAME, 0);
+		elementType("noscript", M_PCDATA|M_INLINE|M_BLOCK, M_BLOCK, 0);
+		elementType("object", M_PCDATA|M_PARAM|M_INLINE|M_BLOCK, M_HEAD|M_INLINE|M_NOLINK, 0);
+		elementType("ol", M_LI, M_BLOCK, 0);
+		elementType("optgroup", M_OPTIONS, M_OPTIONS, 0);
+		elementType("option", M_PCDATA, M_OPTION|M_OPTIONS, 0);
+		elementType("p", M_PCDATA|M_INLINE|M_TABLE, M_BLOCK|M_P, 0);
+		elementType("param", M_EMPTY, M_PARAM, 0);
+		elementType("pre", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		elementType("q", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("rb", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("rbc", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("rp", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("rt", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("rtc", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("ruby", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("s", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("samp", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("script", M_PCDATA, M_ANY & ~M_ROOT, F_CDATA);
+		elementType("select", M_OPTIONS, M_INLINE, 0);
+		elementType("small", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("span", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("strike", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("strong", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("style", M_PCDATA, M_HEAD|M_INLINE, F_CDATA);
+		elementType("sub", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("sup", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("table", M_FORM|M_TABULAR, M_BLOCK|M_TABLE, F_NOFORCE);
+		elementType("tbody", M_TR, M_TABULAR, 0);
+		elementType("td", M_PCDATA|M_INLINE|M_BLOCK, M_CELL, 0);
+		elementType("textarea", M_PCDATA, M_INLINE, 0);
+		elementType("tfoot", M_TR|M_FORM|M_CELL, M_TABULAR, 0);
+		elementType("th", M_PCDATA|M_INLINE|M_BLOCK, M_CELL, 0);
+		elementType("thead", M_TR|M_FORM|M_CELL, M_TABULAR, 0);
+		elementType("title", M_PCDATA, M_HEAD, 0);
+		elementType("tr", M_FORM|M_CELL, M_TR|M_TABULAR, 0);
+		elementType("tt", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("u", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, F_RESTART);
+		elementType("ul", M_LI, M_BLOCK, 0);
+		elementType("var", M_PCDATA|M_INLINE, M_INLINE|M_NOLINK, 0);
+		elementType("wbr", M_EMPTY, M_INLINE|M_NOLINK, 0);
+		elementType("xmp", M_PCDATA|M_INLINE, M_BLOCK, 0);
+		parent("<pcdata>", "body");
+		parent("html", "<root>");
+		parent("a", "body");
+		parent("abbr", "body");
+		parent("acronym", "body");
+		parent("address", "body");
+		parent("applet", "body");
+		parent("area", "map");
+		parent("b", "body");
+		parent("base", "head");
+		parent("basefont", "body");
+		parent("bdo", "body");
+		parent("bgsound", "head");
+		parent("big", "body");
+		parent("blink", "body");
+		parent("blockquote", "body");
+		parent("body", "html");
+		parent("br", "body");
+		parent("button", "form");
+		parent("canvas", "body");
+		parent("caption", "table");
+		parent("center", "body");
+		parent("cite", "body");
+		parent("code", "body");
+		parent("col", "table");
+		parent("colgroup", "table");
+		parent("comment", "body");
+		parent("dd", "dl");
+		parent("del", "body");
+		parent("dfn", "body");
+		parent("dir", "body");
+		parent("div", "body");
+		parent("dl", "body");
+		parent("dt", "dl");
+		parent("em", "body");
+		parent("fieldset", "form");
+		parent("font", "body");
+		parent("form", "body");
+		parent("frame", "frameset");
+		parent("frameset", "html");
+		parent("h1", "body");
+		parent("h2", "body");
+		parent("h3", "body");
+		parent("h4", "body");
+		parent("h5", "body");
+		parent("h6", "body");
+		parent("head", "html");
+		parent("hr", "body");
+		parent("i", "body");
+		parent("iframe", "body");
+		parent("img", "body");
+		parent("input", "form");
+		parent("ins", "body");
+		parent("isindex", "head");
+		parent("kbd", "body");
+		parent("label", "form");
+		parent("legend", "fieldset");
+		parent("li", "ul");
+		parent("link", "head");
+		parent("listing", "body");
+		parent("map", "body");
+		parent("marquee", "body");
+		parent("menu", "body");
+		parent("meta", "head");
+		parent("nobr", "body");
+		parent("noframes", "html");
+		parent("noscript", "body");
+		parent("object", "body");
+		parent("ol", "body");
+		parent("optgroup", "select");
+		parent("option", "select");
+		parent("p", "body");
+		parent("param", "object");
+		parent("pre", "body");
+		parent("q", "body");
+		parent("rb", "body");
+		parent("rbc", "body");
+		parent("rp", "body");
+		parent("rt", "body");
+		parent("rtc", "body");
+		parent("ruby", "body");
+		parent("s", "body");
+		parent("samp", "body");
+		parent("script", "html");
+		parent("select", "form");
+		parent("small", "body");
+		parent("span", "body");
+		parent("strike", "body");
+		parent("strong", "body");
+		parent("style", "head");
+		parent("sub", "body");
+		parent("sup", "body");
+		parent("table", "body");
+		parent("tbody", "table");
+		parent("td", "tr");
+		parent("textarea", "form");
+		parent("tfoot", "table");
+		parent("th", "tr");
+		parent("thead", "table");
+		parent("title", "head");
+		parent("tr", "tbody");
+		parent("tt", "body");
+		parent("u", "body");
+		parent("ul", "body");
+		parent("var", "body");
+		parent("wbr", "body");
+		parent("xmp", "body");
+		attribute("a", "hreflang", "NMTOKEN", null);
+		attribute("a", "shape", "CDATA", "rect");
+		attribute("a", "tabindex", "NMTOKEN", null);
+		attribute("applet", "align", "NMTOKEN", null);
+		attribute("area", "nohref", "BOOLEAN", null);
+		attribute("area", "shape", "CDATA", "rect");
+		attribute("area", "tabindex", "NMTOKEN", null);
+		attribute("br", "clear", "CDATA", "none");
+		attribute("button", "disabled", "BOOLEAN", null);
+		attribute("button", "tabindex", "NMTOKEN", null);
+		attribute("button", "type", "CDATA", "submit");
+		attribute("caption", "align", "NMTOKEN", null);
+		attribute("col", "align", "NMTOKEN", null);
+		attribute("col", "span", "CDATA", "1");
+		attribute("col", "valign", "NMTOKEN", null);
+		attribute("colgroup", "align", "NMTOKEN", null);
+		attribute("colgroup", "span", "CDATA", "1");
+		attribute("colgroup", "valign", "NMTOKEN", null);
+		attribute("dir", "compact", "BOOLEAN", null);
+		attribute("div", "align", "NMTOKEN", null);
+		attribute("dl", "compact", "BOOLEAN", null);
+		attribute("form", "enctype", "CDATA", "application/x-www-form-urlencoded");
+		attribute("form", "method", "CDATA", "get");
+		attribute("frame", "frameborder", "CDATA", "1");
+		attribute("frame", "noresize", "BOOLEAN", null);
+		attribute("frame", "scrolling", "CDATA", "auto");
+		attribute("h1", "align", "NMTOKEN", null);
+		attribute("h2", "align", "NMTOKEN", null);
+		attribute("h3", "align", "NMTOKEN", null);
+		attribute("h4", "align", "NMTOKEN", null);
+		attribute("h5", "align", "NMTOKEN", null);
+		attribute("h6", "align", "NMTOKEN", null);
+		attribute("hr", "align", "NMTOKEN", null);
+		attribute("hr", "noshade", "BOOLEAN", null);
+		attribute("iframe", "align", "NMTOKEN", null);
+		attribute("iframe", "frameborder", "CDATA", "1");
+		attribute("iframe", "scrolling", "CDATA", "auto");
+		attribute("img", "align", "NMTOKEN", null);
+		attribute("img", "ismap", "BOOLEAN", null);
+		attribute("input", "align", "NMTOKEN", null);
+		attribute("input", "checked", "BOOLEAN", null);
+		attribute("input", "disabled", "BOOLEAN", null);
+		attribute("input", "ismap", "BOOLEAN", null);
+		attribute("input", "maxlength", "NMTOKEN", null);
+		attribute("input", "readonly", "BOOLEAN", null);
+		attribute("input", "tabindex", "NMTOKEN", null);
+		attribute("input", "type", "CDATA", "text");
+		attribute("label", "for", "IDREF", null);
+		attribute("legend", "align", "NMTOKEN", null);
+		attribute("li", "value", "NMTOKEN", null);
+		attribute("link", "hreflang", "NMTOKEN", null);
+		attribute("marquee", "width", "NMTOKEN", null);
+		attribute("menu", "compact", "BOOLEAN", null);
+		attribute("meta", "http-equiv", "NMTOKEN", null);
+		attribute("meta", "name", "NMTOKEN", null);
+		attribute("object", "align", "NMTOKEN", null);
+		attribute("object", "declare", "BOOLEAN", null);
+		attribute("object", "tabindex", "NMTOKEN", null);
+		attribute("ol", "compact", "BOOLEAN", null);
+		attribute("ol", "start", "NMTOKEN", null);
+		attribute("optgroup", "disabled", "BOOLEAN", null);
+		attribute("option", "disabled", "BOOLEAN", null);
+		attribute("option", "selected", "BOOLEAN", null);
+		attribute("p", "align", "NMTOKEN", null);
+		attribute("param", "valuetype", "CDATA", "data");
+		attribute("pre", "width", "NMTOKEN", null);
+		attribute("rt", "rbspan", "CDATA", "1");
+		attribute("script", "defer", "BOOLEAN", null);
+		attribute("select", "disabled", "BOOLEAN", null);
+		attribute("select", "multiple", "BOOLEAN", null);
+		attribute("select", "size", "NMTOKEN", null);
+		attribute("select", "tabindex", "NMTOKEN", null);
+		attribute("table", "align", "NMTOKEN", null);
+		attribute("table", "frame", "NMTOKEN", null);
+		attribute("table", "rules", "NMTOKEN", null);
+		attribute("tbody", "align", "NMTOKEN", null);
+		attribute("tbody", "valign", "NMTOKEN", null);
+		attribute("td", "align", "NMTOKEN", null);
+		attribute("td", "colspan", "CDATA", "1");
+		attribute("td", "headers", "IDREFS", null);
+		attribute("td", "nowrap", "BOOLEAN", null);
+		attribute("td", "rowspan", "CDATA", "1");
+		attribute("td", "scope", "NMTOKEN", null);
+		attribute("td", "valign", "NMTOKEN", null);
+		attribute("textarea", "cols", "NMTOKEN", null);
+		attribute("textarea", "disabled", "BOOLEAN", null);
+		attribute("textarea", "readonly", "BOOLEAN", null);
+		attribute("textarea", "rows", "NMTOKEN", null);
+		attribute("textarea", "tabindex", "NMTOKEN", null);
+		attribute("tfoot", "align", "NMTOKEN", null);
+		attribute("tfoot", "valign", "NMTOKEN", null);
+		attribute("th", "align", "NMTOKEN", null);
+		attribute("th", "colspan", "CDATA", "1");
+		attribute("th", "headers", "IDREFS", null);
+		attribute("th", "nowrap", "BOOLEAN", null);
+		attribute("th", "rowspan", "CDATA", "1");
+		attribute("th", "scope", "NMTOKEN", null);
+		attribute("th", "valign", "NMTOKEN", null);
+		attribute("thead", "align", "NMTOKEN", null);
+		attribute("thead", "valign", "NMTOKEN", null);
+		attribute("tr", "align", "NMTOKEN", null);
+		attribute("tr", "valign", "NMTOKEN", null);
+		attribute("ul", "compact", "BOOLEAN", null);
+		attribute("ul", "type", "NMTOKEN", null);
+		attribute("xmp", "width", "NMTOKEN", null);
+		attribute("a", "class", "NMTOKEN", null);
+		attribute("abbr", "class", "NMTOKEN", null);
+		attribute("acronym", "class", "NMTOKEN", null);
+		attribute("address", "class", "NMTOKEN", null);
+		attribute("applet", "class", "NMTOKEN", null);
+		attribute("area", "class", "NMTOKEN", null);
+		attribute("b", "class", "NMTOKEN", null);
+		attribute("base", "class", "NMTOKEN", null);
+		attribute("basefont", "class", "NMTOKEN", null);
+		attribute("bdo", "class", "NMTOKEN", null);
+		attribute("bgsound", "class", "NMTOKEN", null);
+		attribute("big", "class", "NMTOKEN", null);
+		attribute("blink", "class", "NMTOKEN", null);
+		attribute("blockquote", "class", "NMTOKEN", null);
+		attribute("body", "class", "NMTOKEN", null);
+		attribute("br", "class", "NMTOKEN", null);
+		attribute("button", "class", "NMTOKEN", null);
+		attribute("canvas", "class", "NMTOKEN", null);
+		attribute("caption", "class", "NMTOKEN", null);
+		attribute("center", "class", "NMTOKEN", null);
+		attribute("cite", "class", "NMTOKEN", null);
+		attribute("code", "class", "NMTOKEN", null);
+		attribute("col", "class", "NMTOKEN", null);
+		attribute("colgroup", "class", "NMTOKEN", null);
+		attribute("comment", "class", "NMTOKEN", null);
+		attribute("dd", "class", "NMTOKEN", null);
+		attribute("del", "class", "NMTOKEN", null);
+		attribute("dfn", "class", "NMTOKEN", null);
+		attribute("dir", "class", "NMTOKEN", null);
+		attribute("div", "class", "NMTOKEN", null);
+		attribute("dl", "class", "NMTOKEN", null);
+		attribute("dt", "class", "NMTOKEN", null);
+		attribute("em", "class", "NMTOKEN", null);
+		attribute("fieldset", "class", "NMTOKEN", null);
+		attribute("font", "class", "NMTOKEN", null);
+		attribute("form", "class", "NMTOKEN", null);
+		attribute("frame", "class", "NMTOKEN", null);
+		attribute("frameset", "class", "NMTOKEN", null);
+		attribute("h1", "class", "NMTOKEN", null);
+		attribute("h2", "class", "NMTOKEN", null);
+		attribute("h3", "class", "NMTOKEN", null);
+		attribute("h4", "class", "NMTOKEN", null);
+		attribute("h5", "class", "NMTOKEN", null);
+		attribute("h6", "class", "NMTOKEN", null);
+		attribute("head", "class", "NMTOKEN", null);
+		attribute("hr", "class", "NMTOKEN", null);
+		attribute("html", "class", "NMTOKEN", null);
+		attribute("i", "class", "NMTOKEN", null);
+		attribute("iframe", "class", "NMTOKEN", null);
+		attribute("img", "class", "NMTOKEN", null);
+		attribute("input", "class", "NMTOKEN", null);
+		attribute("ins", "class", "NMTOKEN", null);
+		attribute("isindex", "class", "NMTOKEN", null);
+		attribute("kbd", "class", "NMTOKEN", null);
+		attribute("label", "class", "NMTOKEN", null);
+		attribute("legend", "class", "NMTOKEN", null);
+		attribute("li", "class", "NMTOKEN", null);
+		attribute("link", "class", "NMTOKEN", null);
+		attribute("listing", "class", "NMTOKEN", null);
+		attribute("map", "class", "NMTOKEN", null);
+		attribute("marquee", "class", "NMTOKEN", null);
+		attribute("menu", "class", "NMTOKEN", null);
+		attribute("meta", "class", "NMTOKEN", null);
+		attribute("nobr", "class", "NMTOKEN", null);
+		attribute("noframes", "class", "NMTOKEN", null);
+		attribute("noscript", "class", "NMTOKEN", null);
+		attribute("object", "class", "NMTOKEN", null);
+		attribute("ol", "class", "NMTOKEN", null);
+		attribute("optgroup", "class", "NMTOKEN", null);
+		attribute("option", "class", "NMTOKEN", null);
+		attribute("p", "class", "NMTOKEN", null);
+		attribute("param", "class", "NMTOKEN", null);
+		attribute("pre", "class", "NMTOKEN", null);
+		attribute("q", "class", "NMTOKEN", null);
+		attribute("rb", "class", "NMTOKEN", null);
+		attribute("rbc", "class", "NMTOKEN", null);
+		attribute("rp", "class", "NMTOKEN", null);
+		attribute("rt", "class", "NMTOKEN", null);
+		attribute("rtc", "class", "NMTOKEN", null);
+		attribute("ruby", "class", "NMTOKEN", null);
+		attribute("s", "class", "NMTOKEN", null);
+		attribute("samp", "class", "NMTOKEN", null);
+		attribute("script", "class", "NMTOKEN", null);
+		attribute("select", "class", "NMTOKEN", null);
+		attribute("small", "class", "NMTOKEN", null);
+		attribute("span", "class", "NMTOKEN", null);
+		attribute("strike", "class", "NMTOKEN", null);
+		attribute("strong", "class", "NMTOKEN", null);
+		attribute("style", "class", "NMTOKEN", null);
+		attribute("sub", "class", "NMTOKEN", null);
+		attribute("sup", "class", "NMTOKEN", null);
+		attribute("table", "class", "NMTOKEN", null);
+		attribute("tbody", "class", "NMTOKEN", null);
+		attribute("td", "class", "NMTOKEN", null);
+		attribute("textarea", "class", "NMTOKEN", null);
+		attribute("tfoot", "class", "NMTOKEN", null);
+		attribute("th", "class", "NMTOKEN", null);
+		attribute("thead", "class", "NMTOKEN", null);
+		attribute("title", "class", "NMTOKEN", null);
+		attribute("tr", "class", "NMTOKEN", null);
+		attribute("tt", "class", "NMTOKEN", null);
+		attribute("u", "class", "NMTOKEN", null);
+		attribute("ul", "class", "NMTOKEN", null);
+		attribute("var", "class", "NMTOKEN", null);
+		attribute("wbr", "class", "NMTOKEN", null);
+		attribute("xmp", "class", "NMTOKEN", null);
+		attribute("a", "dir", "NMTOKEN", null);
+		attribute("abbr", "dir", "NMTOKEN", null);
+		attribute("acronym", "dir", "NMTOKEN", null);
+		attribute("address", "dir", "NMTOKEN", null);
+		attribute("applet", "dir", "NMTOKEN", null);
+		attribute("area", "dir", "NMTOKEN", null);
+		attribute("b", "dir", "NMTOKEN", null);
+		attribute("base", "dir", "NMTOKEN", null);
+		attribute("basefont", "dir", "NMTOKEN", null);
+		attribute("bdo", "dir", "NMTOKEN", null);
+		attribute("bgsound", "dir", "NMTOKEN", null);
+		attribute("big", "dir", "NMTOKEN", null);
+		attribute("blink", "dir", "NMTOKEN", null);
+		attribute("blockquote", "dir", "NMTOKEN", null);
+		attribute("body", "dir", "NMTOKEN", null);
+		attribute("br", "dir", "NMTOKEN", null);
+		attribute("button", "dir", "NMTOKEN", null);
+		attribute("canvas", "dir", "NMTOKEN", null);
+		attribute("caption", "dir", "NMTOKEN", null);
+		attribute("center", "dir", "NMTOKEN", null);
+		attribute("cite", "dir", "NMTOKEN", null);
+		attribute("code", "dir", "NMTOKEN", null);
+		attribute("col", "dir", "NMTOKEN", null);
+		attribute("colgroup", "dir", "NMTOKEN", null);
+		attribute("comment", "dir", "NMTOKEN", null);
+		attribute("dd", "dir", "NMTOKEN", null);
+		attribute("del", "dir", "NMTOKEN", null);
+		attribute("dfn", "dir", "NMTOKEN", null);
+		attribute("dir", "dir", "NMTOKEN", null);
+		attribute("div", "dir", "NMTOKEN", null);
+		attribute("dl", "dir", "NMTOKEN", null);
+		attribute("dt", "dir", "NMTOKEN", null);
+		attribute("em", "dir", "NMTOKEN", null);
+		attribute("fieldset", "dir", "NMTOKEN", null);
+		attribute("font", "dir", "NMTOKEN", null);
+		attribute("form", "dir", "NMTOKEN", null);
+		attribute("frame", "dir", "NMTOKEN", null);
+		attribute("frameset", "dir", "NMTOKEN", null);
+		attribute("h1", "dir", "NMTOKEN", null);
+		attribute("h2", "dir", "NMTOKEN", null);
+		attribute("h3", "dir", "NMTOKEN", null);
+		attribute("h4", "dir", "NMTOKEN", null);
+		attribute("h5", "dir", "NMTOKEN", null);
+		attribute("h6", "dir", "NMTOKEN", null);
+		attribute("head", "dir", "NMTOKEN", null);
+		attribute("hr", "dir", "NMTOKEN", null);
+		attribute("html", "dir", "NMTOKEN", null);
+		attribute("i", "dir", "NMTOKEN", null);
+		attribute("iframe", "dir", "NMTOKEN", null);
+		attribute("img", "dir", "NMTOKEN", null);
+		attribute("input", "dir", "NMTOKEN", null);
+		attribute("ins", "dir", "NMTOKEN", null);
+		attribute("isindex", "dir", "NMTOKEN", null);
+		attribute("kbd", "dir", "NMTOKEN", null);
+		attribute("label", "dir", "NMTOKEN", null);
+		attribute("legend", "dir", "NMTOKEN", null);
+		attribute("li", "dir", "NMTOKEN", null);
+		attribute("link", "dir", "NMTOKEN", null);
+		attribute("listing", "dir", "NMTOKEN", null);
+		attribute("map", "dir", "NMTOKEN", null);
+		attribute("marquee", "dir", "NMTOKEN", null);
+		attribute("menu", "dir", "NMTOKEN", null);
+		attribute("meta", "dir", "NMTOKEN", null);
+		attribute("nobr", "dir", "NMTOKEN", null);
+		attribute("noframes", "dir", "NMTOKEN", null);
+		attribute("noscript", "dir", "NMTOKEN", null);
+		attribute("object", "dir", "NMTOKEN", null);
+		attribute("ol", "dir", "NMTOKEN", null);
+		attribute("optgroup", "dir", "NMTOKEN", null);
+		attribute("option", "dir", "NMTOKEN", null);
+		attribute("p", "dir", "NMTOKEN", null);
+		attribute("param", "dir", "NMTOKEN", null);
+		attribute("pre", "dir", "NMTOKEN", null);
+		attribute("q", "dir", "NMTOKEN", null);
+		attribute("rb", "dir", "NMTOKEN", null);
+		attribute("rbc", "dir", "NMTOKEN", null);
+		attribute("rp", "dir", "NMTOKEN", null);
+		attribute("rt", "dir", "NMTOKEN", null);
+		attribute("rtc", "dir", "NMTOKEN", null);
+		attribute("ruby", "dir", "NMTOKEN", null);
+		attribute("s", "dir", "NMTOKEN", null);
+		attribute("samp", "dir", "NMTOKEN", null);
+		attribute("script", "dir", "NMTOKEN", null);
+		attribute("select", "dir", "NMTOKEN", null);
+		attribute("small", "dir", "NMTOKEN", null);
+		attribute("span", "dir", "NMTOKEN", null);
+		attribute("strike", "dir", "NMTOKEN", null);
+		attribute("strong", "dir", "NMTOKEN", null);
+		attribute("style", "dir", "NMTOKEN", null);
+		attribute("sub", "dir", "NMTOKEN", null);
+		attribute("sup", "dir", "NMTOKEN", null);
+		attribute("table", "dir", "NMTOKEN", null);
+		attribute("tbody", "dir", "NMTOKEN", null);
+		attribute("td", "dir", "NMTOKEN", null);
+		attribute("textarea", "dir", "NMTOKEN", null);
+		attribute("tfoot", "dir", "NMTOKEN", null);
+		attribute("th", "dir", "NMTOKEN", null);
+		attribute("thead", "dir", "NMTOKEN", null);
+		attribute("title", "dir", "NMTOKEN", null);
+		attribute("tr", "dir", "NMTOKEN", null);
+		attribute("tt", "dir", "NMTOKEN", null);
+		attribute("u", "dir", "NMTOKEN", null);
+		attribute("ul", "dir", "NMTOKEN", null);
+		attribute("var", "dir", "NMTOKEN", null);
+		attribute("wbr", "dir", "NMTOKEN", null);
+		attribute("xmp", "dir", "NMTOKEN", null);
+		attribute("a", "id", "ID", null);
+		attribute("abbr", "id", "ID", null);
+		attribute("acronym", "id", "ID", null);
+		attribute("address", "id", "ID", null);
+		attribute("applet", "id", "ID", null);
+		attribute("area", "id", "ID", null);
+		attribute("b", "id", "ID", null);
+		attribute("base", "id", "ID", null);
+		attribute("basefont", "id", "ID", null);
+		attribute("bdo", "id", "ID", null);
+		attribute("bgsound", "id", "ID", null);
+		attribute("big", "id", "ID", null);
+		attribute("blink", "id", "ID", null);
+		attribute("blockquote", "id", "ID", null);
+		attribute("body", "id", "ID", null);
+		attribute("br", "id", "ID", null);
+		attribute("button", "id", "ID", null);
+		attribute("canvas", "id", "ID", null);
+		attribute("caption", "id", "ID", null);
+		attribute("center", "id", "ID", null);
+		attribute("cite", "id", "ID", null);
+		attribute("code", "id", "ID", null);
+		attribute("col", "id", "ID", null);
+		attribute("colgroup", "id", "ID", null);
+		attribute("comment", "id", "ID", null);
+		attribute("dd", "id", "ID", null);
+		attribute("del", "id", "ID", null);
+		attribute("dfn", "id", "ID", null);
+		attribute("dir", "id", "ID", null);
+		attribute("div", "id", "ID", null);
+		attribute("dl", "id", "ID", null);
+		attribute("dt", "id", "ID", null);
+		attribute("em", "id", "ID", null);
+		attribute("fieldset", "id", "ID", null);
+		attribute("font", "id", "ID", null);
+		attribute("form", "id", "ID", null);
+		attribute("frame", "id", "ID", null);
+		attribute("frameset", "id", "ID", null);
+		attribute("h1", "id", "ID", null);
+		attribute("h2", "id", "ID", null);
+		attribute("h3", "id", "ID", null);
+		attribute("h4", "id", "ID", null);
+		attribute("h5", "id", "ID", null);
+		attribute("h6", "id", "ID", null);
+		attribute("head", "id", "ID", null);
+		attribute("hr", "id", "ID", null);
+		attribute("html", "id", "ID", null);
+		attribute("i", "id", "ID", null);
+		attribute("iframe", "id", "ID", null);
+		attribute("img", "id", "ID", null);
+		attribute("input", "id", "ID", null);
+		attribute("ins", "id", "ID", null);
+		attribute("isindex", "id", "ID", null);
+		attribute("kbd", "id", "ID", null);
+		attribute("label", "id", "ID", null);
+		attribute("legend", "id", "ID", null);
+		attribute("li", "id", "ID", null);
+		attribute("link", "id", "ID", null);
+		attribute("listing", "id", "ID", null);
+		attribute("map", "id", "ID", null);
+		attribute("marquee", "id", "ID", null);
+		attribute("menu", "id", "ID", null);
+		attribute("meta", "id", "ID", null);
+		attribute("nobr", "id", "ID", null);
+		attribute("noframes", "id", "ID", null);
+		attribute("noscript", "id", "ID", null);
+		attribute("object", "id", "ID", null);
+		attribute("ol", "id", "ID", null);
+		attribute("optgroup", "id", "ID", null);
+		attribute("option", "id", "ID", null);
+		attribute("p", "id", "ID", null);
+		attribute("param", "id", "ID", null);
+		attribute("pre", "id", "ID", null);
+		attribute("q", "id", "ID", null);
+		attribute("rb", "id", "ID", null);
+		attribute("rbc", "id", "ID", null);
+		attribute("rp", "id", "ID", null);
+		attribute("rt", "id", "ID", null);
+		attribute("rtc", "id", "ID", null);
+		attribute("ruby", "id", "ID", null);
+		attribute("s", "id", "ID", null);
+		attribute("samp", "id", "ID", null);
+		attribute("script", "id", "ID", null);
+		attribute("select", "id", "ID", null);
+		attribute("small", "id", "ID", null);
+		attribute("span", "id", "ID", null);
+		attribute("strike", "id", "ID", null);
+		attribute("strong", "id", "ID", null);
+		attribute("style", "id", "ID", null);
+		attribute("sub", "id", "ID", null);
+		attribute("sup", "id", "ID", null);
+		attribute("table", "id", "ID", null);
+		attribute("tbody", "id", "ID", null);
+		attribute("td", "id", "ID", null);
+		attribute("textarea", "id", "ID", null);
+		attribute("tfoot", "id", "ID", null);
+		attribute("th", "id", "ID", null);
+		attribute("thead", "id", "ID", null);
+		attribute("title", "id", "ID", null);
+		attribute("tr", "id", "ID", null);
+		attribute("tt", "id", "ID", null);
+		attribute("u", "id", "ID", null);
+		attribute("ul", "id", "ID", null);
+		attribute("var", "id", "ID", null);
+		attribute("wbr", "id", "ID", null);
+		attribute("xmp", "id", "ID", null);
+		attribute("a", "lang", "NMTOKEN", null);
+		attribute("abbr", "lang", "NMTOKEN", null);
+		attribute("acronym", "lang", "NMTOKEN", null);
+		attribute("address", "lang", "NMTOKEN", null);
+		attribute("applet", "lang", "NMTOKEN", null);
+		attribute("area", "lang", "NMTOKEN", null);
+		attribute("b", "lang", "NMTOKEN", null);
+		attribute("base", "lang", "NMTOKEN", null);
+		attribute("basefont", "lang", "NMTOKEN", null);
+		attribute("bdo", "lang", "NMTOKEN", null);
+		attribute("bgsound", "lang", "NMTOKEN", null);
+		attribute("big", "lang", "NMTOKEN", null);
+		attribute("blink", "lang", "NMTOKEN", null);
+		attribute("blockquote", "lang", "NMTOKEN", null);
+		attribute("body", "lang", "NMTOKEN", null);
+		attribute("br", "lang", "NMTOKEN", null);
+		attribute("button", "lang", "NMTOKEN", null);
+		attribute("canvas", "lang", "NMTOKEN", null);
+		attribute("caption", "lang", "NMTOKEN", null);
+		attribute("center", "lang", "NMTOKEN", null);
+		attribute("cite", "lang", "NMTOKEN", null);
+		attribute("code", "lang", "NMTOKEN", null);
+		attribute("col", "lang", "NMTOKEN", null);
+		attribute("colgroup", "lang", "NMTOKEN", null);
+		attribute("comment", "lang", "NMTOKEN", null);
+		attribute("dd", "lang", "NMTOKEN", null);
+		attribute("del", "lang", "NMTOKEN", null);
+		attribute("dfn", "lang", "NMTOKEN", null);
+		attribute("dir", "lang", "NMTOKEN", null);
+		attribute("div", "lang", "NMTOKEN", null);
+		attribute("dl", "lang", "NMTOKEN", null);
+		attribute("dt", "lang", "NMTOKEN", null);
+		attribute("em", "lang", "NMTOKEN", null);
+		attribute("fieldset", "lang", "NMTOKEN", null);
+		attribute("font", "lang", "NMTOKEN", null);
+		attribute("form", "lang", "NMTOKEN", null);
+		attribute("frame", "lang", "NMTOKEN", null);
+		attribute("frameset", "lang", "NMTOKEN", null);
+		attribute("h1", "lang", "NMTOKEN", null);
+		attribute("h2", "lang", "NMTOKEN", null);
+		attribute("h3", "lang", "NMTOKEN", null);
+		attribute("h4", "lang", "NMTOKEN", null);
+		attribute("h5", "lang", "NMTOKEN", null);
+		attribute("h6", "lang", "NMTOKEN", null);
+		attribute("head", "lang", "NMTOKEN", null);
+		attribute("hr", "lang", "NMTOKEN", null);
+		attribute("html", "lang", "NMTOKEN", null);
+		attribute("i", "lang", "NMTOKEN", null);
+		attribute("iframe", "lang", "NMTOKEN", null);
+		attribute("img", "lang", "NMTOKEN", null);
+		attribute("input", "lang", "NMTOKEN", null);
+		attribute("ins", "lang", "NMTOKEN", null);
+		attribute("isindex", "lang", "NMTOKEN", null);
+		attribute("kbd", "lang", "NMTOKEN", null);
+		attribute("label", "lang", "NMTOKEN", null);
+		attribute("legend", "lang", "NMTOKEN", null);
+		attribute("li", "lang", "NMTOKEN", null);
+		attribute("link", "lang", "NMTOKEN", null);
+		attribute("listing", "lang", "NMTOKEN", null);
+		attribute("map", "lang", "NMTOKEN", null);
+		attribute("marquee", "lang", "NMTOKEN", null);
+		attribute("menu", "lang", "NMTOKEN", null);
+		attribute("meta", "lang", "NMTOKEN", null);
+		attribute("nobr", "lang", "NMTOKEN", null);
+		attribute("noframes", "lang", "NMTOKEN", null);
+		attribute("noscript", "lang", "NMTOKEN", null);
+		attribute("object", "lang", "NMTOKEN", null);
+		attribute("ol", "lang", "NMTOKEN", null);
+		attribute("optgroup", "lang", "NMTOKEN", null);
+		attribute("option", "lang", "NMTOKEN", null);
+		attribute("p", "lang", "NMTOKEN", null);
+		attribute("param", "lang", "NMTOKEN", null);
+		attribute("pre", "lang", "NMTOKEN", null);
+		attribute("q", "lang", "NMTOKEN", null);
+		attribute("rb", "lang", "NMTOKEN", null);
+		attribute("rbc", "lang", "NMTOKEN", null);
+		attribute("rp", "lang", "NMTOKEN", null);
+		attribute("rt", "lang", "NMTOKEN", null);
+		attribute("rtc", "lang", "NMTOKEN", null);
+		attribute("ruby", "lang", "NMTOKEN", null);
+		attribute("s", "lang", "NMTOKEN", null);
+		attribute("samp", "lang", "NMTOKEN", null);
+		attribute("script", "lang", "NMTOKEN", null);
+		attribute("select", "lang", "NMTOKEN", null);
+		attribute("small", "lang", "NMTOKEN", null);
+		attribute("span", "lang", "NMTOKEN", null);
+		attribute("strike", "lang", "NMTOKEN", null);
+		attribute("strong", "lang", "NMTOKEN", null);
+		attribute("style", "lang", "NMTOKEN", null);
+		attribute("sub", "lang", "NMTOKEN", null);
+		attribute("sup", "lang", "NMTOKEN", null);
+		attribute("table", "lang", "NMTOKEN", null);
+		attribute("tbody", "lang", "NMTOKEN", null);
+		attribute("td", "lang", "NMTOKEN", null);
+		attribute("textarea", "lang", "NMTOKEN", null);
+		attribute("tfoot", "lang", "NMTOKEN", null);
+		attribute("th", "lang", "NMTOKEN", null);
+		attribute("thead", "lang", "NMTOKEN", null);
+		attribute("title", "lang", "NMTOKEN", null);
+		attribute("tr", "lang", "NMTOKEN", null);
+		attribute("tt", "lang", "NMTOKEN", null);
+		attribute("u", "lang", "NMTOKEN", null);
+		attribute("ul", "lang", "NMTOKEN", null);
+		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("Aacute", 0x00C1);
+		entity("abreve", 0x0103);
+		entity("Abreve", 0x0102);
+		entity("ac", 0x223E);
+		entity("acd", 0x223F);
+		entity("acirc", 0x00E2);
+		entity("Acirc", 0x00C2);
+		entity("acute", 0x00B4);
+		entity("acy", 0x0430);
+		entity("Acy", 0x0410);
+		entity("aelig", 0x00E6);
+		entity("AElig", 0x00C6);
+		entity("af", 0x2061);
+		entity("afr", 0x1D51E);
+		entity("Afr", 0x1D504);
+		entity("agr", 0x03B1);
+		entity("Agr", 0x0391);
+		entity("agrave", 0x00E0);
+		entity("Agrave", 0x00C0);
+		entity("alefsym", 0x2135);
+		entity("aleph", 0x2135);
+		entity("alpha", 0x03B1);
+		entity("Alpha", 0x0391);
+		entity("amacr", 0x0101);
+		entity("Amacr", 0x0100);
+		entity("amalg", 0x2A3F);
+		entity("amp", 0x0026);
+		entity("and", 0x2227);
+		entity("And", 0x2A53);
+		entity("andand", 0x2A55);
+		entity("andd", 0x2A5C);
+		entity("andslope", 0x2A58);
+		entity("andv", 0x2A5A);
+		entity("ang", 0x2220);
+		entity("ange", 0x29A4);
+		entity("angle", 0x2220);
+		entity("angmsd", 0x2221);
+		entity("angmsdaa", 0x29A8);
+		entity("angmsdab", 0x29A9);
+		entity("angmsdac", 0x29AA);
+		entity("angmsdad", 0x29AB);
+		entity("angmsdae", 0x29AC);
+		entity("angmsdaf", 0x29AD);
+		entity("angmsdag", 0x29AE);
+		entity("angmsdah", 0x29AF);
+		entity("angrt", 0x221F);
+		entity("angrtvb", 0x22BE);
+		entity("angrtvbd", 0x299D);
+		entity("angsph", 0x2222);
+		entity("angst", 0x212B);
+		entity("angzarr", 0x237C);
+		entity("aogon", 0x0105);
+		entity("Aogon", 0x0104);
+		entity("aopf", 0x1D552);
+		entity("Aopf", 0x1D538);
+		entity("ap", 0x2248);
+		entity("apacir", 0x2A6F);
+		entity("ape", 0x224A);
+		entity("apE", 0x2A70);
+		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("Ascr", 0x1D49C);
+		entity("Assign", 0x2254);
+		entity("ast", 0x002A);
+		entity("asymp", 0x2248);
+		entity("asympeq", 0x224D);
+		entity("atilde", 0x00E3);
+		entity("Atilde", 0x00C3);
+		entity("auml", 0x00E4);
+		entity("Auml", 0x00C4);
+		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.epsi", 0x1D6C6);
+		entity("b.epsiv", 0x1D6DC);
+		entity("b.eta", 0x1D6C8);
+		entity("b.gamma", 0x1D6C4);
+		entity("b.Gamma", 0x1D6AA);
+		entity("b.gammad", 0x1D7CB);
+		entity("b.Gammad", 0x1D7CA);
+		entity("b.iota", 0x1D6CA);
+		entity("b.kappa", 0x1D6CB);
+		entity("b.kappav", 0x1D6DE);
+		entity("b.lambda", 0x1D6CC);
+		entity("b.Lambda", 0x1D6B2);
+		entity("b.mu", 0x1D6CD);
+		entity("b.nu", 0x1D6CE);
+		entity("b.omega", 0x1D6DA);
+		entity("b.Omega", 0x1D6C0);
+		entity("b.phi", 0x1D6D7);
+		entity("b.Phi", 0x1D6BD);
+		entity("b.phiv", 0x1D6DF);
+		entity("b.pi", 0x1D6D1);
+		entity("b.Pi", 0x1D6B7);
+		entity("b.piv", 0x1D6E1);
+		entity("b.psi", 0x1D6D9);
+		entity("b.Psi", 0x1D6BF);
+		entity("b.rho", 0x1D6D2);
+		entity("b.rhov", 0x1D6E0);
+		entity("b.sigma", 0x1D6D4);
+		entity("b.Sigma", 0x1D6BA);
+		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.Xi", 0x1D6B5);
+		entity("b.zeta", 0x1D6C7);
+		entity("backcong", 0x224C);
+		entity("backepsilon", 0x03F6);
+		entity("backprime", 0x2035);
+		entity("backsim", 0x223D);
+		entity("backsimeq", 0x22CD);
+		entity("Backslash", 0x2216);
+		entity("Barv", 0x2AE7);
+		entity("barvee", 0x22BD);
+		entity("barwed", 0x2305);
+		entity("Barwed", 0x2306);
+		entity("barwedge", 0x2305);
+		entity("bbrk", 0x23B5);
+		entity("bbrktbrk", 0x23B6);
+		entity("bcong", 0x224C);
+		entity("bcy", 0x0431);
+		entity("Bcy", 0x0411);
+		entity("bdquo", 0x201E);
+		entity("becaus", 0x2235);
+		entity("because", 0x2235);
+		entity("bemptyv", 0x29B0);
+		entity("bepsi", 0x03F6);
+		entity("bernou", 0x212C);
+		entity("Bernoullis", 0x212C);
+		entity("beta", 0x03B2);
+		entity("Beta", 0x0392);
+		entity("beth", 0x2136);
+		entity("between", 0x226C);
+		entity("bfr", 0x1D51F);
+		entity("Bfr", 0x1D505);
+		entity("bgr", 0x03B2);
+		entity("Bgr", 0x0392);
+		entity("bigcap", 0x22C2);
+		entity("bigcirc", 0x25EF);
+		entity("bigcup", 0x22C3);
+		entity("bigodot", 0x2A00);
+		entity("bigoplus", 0x2A01);
+		entity("bigotimes", 0x2A02);
+		entity("bigsqcup", 0x2A06);
+		entity("bigstar", 0x2605);
+		entity("bigtriangledown", 0x25BD);
+		entity("bigtriangleup", 0x25B3);
+		entity("biguplus", 0x2A04);
+		entity("bigvee", 0x22C1);
+		entity("bigwedge", 0x22C0);
+		entity("bkarow", 0x290D);
+		entity("blacklozenge", 0x29EB);
+		entity("blacksquare", 0x25AA);
+		entity("blacktriangle", 0x25B4);
+		entity("blacktriangledown", 0x25BE);
+		entity("blacktriangleleft", 0x25C2);
+		entity("blacktriangleright", 0x25B8);
+		entity("blank", 0x2423);
+		entity("blk12", 0x2592);
+		entity("blk14", 0x2591);
+		entity("blk34", 0x2593);
+		entity("block", 0x2588);
+		entity("bnot", 0x2310);
+		entity("bNot", 0x2AED);
+		entity("bopf", 0x1D553);
+		entity("Bopf", 0x1D539);
+		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("boxDR", 0x2554);
+		entity("boxh", 0x2500);
+		entity("boxH", 0x2550);
+		entity("boxhd", 0x252C);
+		entity("boxhD", 0x2565);
+		entity("boxHd", 0x2564);
+		entity("boxHD", 0x2566);
+		entity("boxhu", 0x2534);
+		entity("boxhU", 0x2568);
+		entity("boxHu", 0x2567);
+		entity("boxHU", 0x2569);
+		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("boxUR", 0x255A);
+		entity("boxv", 0x2502);
+		entity("boxV", 0x2551);
+		entity("boxvh", 0x253C);
+		entity("boxvH", 0x256A);
+		entity("boxVh", 0x256B);
+		entity("boxVH", 0x256C);
+		entity("boxvl", 0x2524);
+		entity("boxvL", 0x2561);
+		entity("boxVl", 0x2562);
+		entity("boxVL", 0x2563);
+		entity("boxvr", 0x251C);
+		entity("boxvR", 0x255E);
+		entity("boxVr", 0x255F);
+		entity("boxVR", 0x2560);
+		entity("bprime", 0x2035);
+		entity("breve", 0x02D8);
+		entity("brvbar", 0x00A6);
+		entity("bscr", 0x1D4B7);
+		entity("Bscr", 0x212C);
+		entity("bsemi", 0x204F);
+		entity("bsim", 0x223D);
+		entity("bsime", 0x22CD);
+		entity("bsol", 0x005C);
+		entity("bsolb", 0x29C5);
+		entity("bull", 0x2022);
+		entity("bullet", 0x2022);
+		entity("bump", 0x224E);
+		entity("bumpe", 0x224F);
+		entity("bumpE", 0x2AAE);
+		entity("bumpeq", 0x224F);
+		entity("Bumpeq", 0x224E);
+		entity("cacute", 0x0107);
+		entity("Cacute", 0x0106);
+		entity("cap", 0x2229);
+		entity("Cap", 0x22D2);
+		entity("capand", 0x2A44);
+		entity("capbrcup", 0x2A49);
+		entity("capcap", 0x2A4B);
+		entity("capcup", 0x2A47);
+		entity("capdot", 0x2A40);
+		entity("CapitalDifferentialD", 0x2145);
+		entity("caret", 0x2041);
+		entity("caron", 0x02C7);
+		entity("Cayleys", 0x212D);
+		entity("ccaps", 0x2A4D);
+		entity("ccaron", 0x010D);
+		entity("Ccaron", 0x010C);
+		entity("ccedil", 0x00E7);
+		entity("Ccedil", 0x00C7);
+		entity("ccirc", 0x0109);
+		entity("Ccirc", 0x0108);
+		entity("Cconint", 0x2230);
+		entity("ccups", 0x2A4C);
+		entity("ccupssm", 0x2A50);
+		entity("cdot", 0x010B);
+		entity("Cdot", 0x010A);
+		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("CHcy", 0x0427);
+		entity("check", 0x2713);
+		entity("checkmark", 0x2713);
+		entity("chi", 0x03C7);
+		entity("Chi", 0x03A7);
+		entity("cir", 0x25CB);
+		entity("circ", 0x02C6);
+		entity("circeq", 0x2257);
+		entity("circlearrowleft", 0x21BA);
+		entity("circlearrowright", 0x21BB);
+		entity("circledast", 0x229B);
+		entity("circledcirc", 0x229A);
+		entity("circleddash", 0x229D);
+		entity("CircleDot", 0x2299);
+		entity("circledR", 0x00AE);
+		entity("circledS", 0x24C8);
+		entity("CircleMinus", 0x2296);
+		entity("CirclePlus", 0x2295);
+		entity("CircleTimes", 0x2297);
+		entity("cire", 0x2257);
+		entity("cirE", 0x29C3);
+		entity("cirfnint", 0x2A10);
+		entity("cirmid", 0x2AEF);
+		entity("cirscir", 0x29C2);
+		entity("ClockwiseContourIntegral", 0x2232);
+		entity("CloseCurlyDoubleQuote", 0x201D);
+		entity("CloseCurlyQuote", 0x2019);
+		entity("clubs", 0x2663);
+		entity("clubsuit", 0x2663);
+		entity("colon", 0x003A);
+		entity("Colon", 0x2237);
+		entity("colone", 0x2254);
+		entity("Colone", 0x2A74);
+		entity("coloneq", 0x2254);
+		entity("comma", 0x002C);
+		entity("commat", 0x0040);
+		entity("comp", 0x2201);
+		entity("compfn", 0x2218);
+		entity("complement", 0x2201);
+		entity("complexes", 0x2102);
+		entity("cong", 0x2245);
+		entity("congdot", 0x2A6D);
+		entity("Congruent", 0x2261);
+		entity("conint", 0x222E);
+		entity("Conint", 0x222F);
+		entity("ContourIntegral", 0x222E);
+		entity("copf", 0x1D554);
+		entity("Copf", 0x2102);
+		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("Cscr", 0x1D49E);
+		entity("csub", 0x2ACF);
+		entity("csube", 0x2AD1);
+		entity("csup", 0x2AD0);
+		entity("csupe", 0x2AD2);
+		entity("ctdot", 0x22EF);
+		entity("cudarrl", 0x2938);
+		entity("cudarrr", 0x2935);
+		entity("cuepr", 0x22DE);
+		entity("cuesc", 0x22DF);
+		entity("cularr", 0x21B6);
+		entity("cularrp", 0x293D);
+		entity("cup", 0x222A);
+		entity("Cup", 0x22D3);
+		entity("cupbrcap", 0x2A48);
+		entity("cupcap", 0x2A46);
+		entity("CupCap", 0x224D);
+		entity("cupcup", 0x2A4A);
+		entity("cupdot", 0x228D);
+		entity("cupor", 0x2A45);
+		entity("curarr", 0x21B7);
+		entity("curarrm", 0x293C);
+		entity("curlyeqprec", 0x22DE);
+		entity("curlyeqsucc", 0x22DF);
+		entity("curlyvee", 0x22CE);
+		entity("curlywedge", 0x22CF);
+		entity("curren", 0x00A4);
+		entity("curvearrowleft", 0x21B6);
+		entity("curvearrowright", 0x21B7);
+		entity("cuvee", 0x22CE);
+		entity("cuwed", 0x22CF);
+		entity("cwconint", 0x2232);
+		entity("cwint", 0x2231);
+		entity("cylcty", 0x232D);
+		entity("dagger", 0x2020);
+		entity("Dagger", 0x2021);
+		entity("daleth", 0x2138);
+		entity("darr", 0x2193);
+		entity("dArr", 0x21D3);
+		entity("Darr", 0x21A1);
+		entity("dash", 0x2010);
+		entity("dashv", 0x22A3);
+		entity("Dashv", 0x2AE4);
+		entity("dbkarow", 0x290F);
+		entity("dblac", 0x02DD);
+		entity("dcaron", 0x010F);
+		entity("Dcaron", 0x010E);
+		entity("dcy", 0x0434);
+		entity("Dcy", 0x0414);
+		entity("dd", 0x2146);
+		entity("DD", 0x2145);
+		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("demptyv", 0x29B1);
+		entity("dfisht", 0x297F);
+		entity("dfr", 0x1D521);
+		entity("Dfr", 0x1D507);
+		entity("dgr", 0x03B4);
+		entity("Dgr", 0x0394);
+		entity("dHar", 0x2965);
+		entity("dharl", 0x21C3);
+		entity("dharr", 0x21C2);
+		entity("DiacriticalAcute", 0x00B4);
+		entity("DiacriticalDot", 0x02D9);
+		entity("DiacriticalDoubleAcute", 0x02DD);
+		entity("DiacriticalGrave", 0x0060);
+		entity("DiacriticalTilde", 0x02DC);
+		entity("diam", 0x22C4);
+		entity("diamond", 0x22C4);
+		entity("diamondsuit", 0x2666);
+		entity("diams", 0x2666);
+		entity("die", 0x00A8);
+		entity("DifferentialD", 0x2146);
+		entity("digamma", 0x03DD);
+		entity("disin", 0x22F2);
+		entity("div", 0x00F7);
+		entity("divide", 0x00F7);
+		entity("divideontimes", 0x22C7);
+		entity("divonx", 0x22C7);
+		entity("djcy", 0x0452);
+		entity("DJcy", 0x0402);
+		entity("dlcorn", 0x231E);
+		entity("dlcrop", 0x230D);
+		entity("dollar", 0x0024);
+		entity("dopf", 0x1D555);
+		entity("Dopf", 0x1D53B);
+		entity("dot", 0x02D9);
+		entity("Dot", 0x00A8);
+		entity("doteq", 0x2250);
+		entity("doteqdot", 0x2251);
+		entity("DotEqual", 0x2250);
+		entity("dotminus", 0x2238);
+		entity("dotplus", 0x2214);
+		entity("dotsquare", 0x22A1);
+		entity("doublebarwedge", 0x2306);
+		entity("DoubleContourIntegral", 0x222F);
+		entity("DoubleDot", 0x00A8);
+		entity("DoubleDownArrow", 0x21D3);
+		entity("DoubleLeftArrow", 0x21D0);
+		entity("DoubleLeftRightArrow", 0x21D4);
+		entity("DoubleLeftTee", 0x2AE4);
+		entity("DoubleLongLeftArrow", 0x27F8);
+		entity("DoubleLongLeftRightArrow", 0x27FA);
+		entity("DoubleLongRightArrow", 0x27F9);
+		entity("DoubleRightArrow", 0x21D2);
+		entity("DoubleRightTee", 0x22A8);
+		entity("DoubleUpArrow", 0x21D1);
+		entity("DoubleUpDownArrow", 0x21D5);
+		entity("DoubleVerticalBar", 0x2225);
+		entity("downarrow", 0x2193);
+		entity("Downarrow", 0x21D3);
+		entity("DownArrowBar", 0x2913);
+		entity("DownArrowUpArrow", 0x21F5);
+		entity("downdownarrows", 0x21CA);
+		entity("downharpoonleft", 0x21C3);
+		entity("downharpoonright", 0x21C2);
+		entity("DownLeftRightVector", 0x2950);
+		entity("DownLeftTeeVector", 0x295E);
+		entity("DownLeftVector", 0x21BD);
+		entity("DownLeftVectorBar", 0x2956);
+		entity("DownRightTeeVector", 0x295F);
+		entity("DownRightVector", 0x21C1);
+		entity("DownRightVectorBar", 0x2957);
+		entity("DownTee", 0x22A4);
+		entity("DownTeeArrow", 0x21A7);
+		entity("drbkarow", 0x2910);
+		entity("drcorn", 0x231F);
+		entity("drcrop", 0x230C);
+		entity("dscr", 0x1D4B9);
+		entity("Dscr", 0x1D49F);
+		entity("dscy", 0x0455);
+		entity("DScy", 0x0405);
+		entity("dsol", 0x29F6);
+		entity("dstrok", 0x0111);
+		entity("Dstrok", 0x0110);
+		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("dzigrarr", 0x27FF);
+		entity("eacgr", 0x03AD);
+		entity("Eacgr", 0x0388);
+		entity("eacute", 0x00E9);
+		entity("Eacute", 0x00C9);
+		entity("easter", 0x2A6E);
+		entity("ecaron", 0x011B);
+		entity("Ecaron", 0x011A);
+		entity("ecir", 0x2256);
+		entity("ecirc", 0x00EA);
+		entity("Ecirc", 0x00CA);
+		entity("ecolon", 0x2255);
+		entity("ecy", 0x044D);
+		entity("Ecy", 0x042D);
+		entity("eDDot", 0x2A77);
+		entity("edot", 0x0117);
+		entity("eDot", 0x2251);
+		entity("Edot", 0x0116);
+		entity("ee", 0x2147);
+		entity("eeacgr", 0x03AE);
+		entity("EEacgr", 0x0389);
+		entity("eegr", 0x03B7);
+		entity("EEgr", 0x0397);
+		entity("efDot", 0x2252);
+		entity("efr", 0x1D522);
+		entity("Efr", 0x1D508);
+		entity("eg", 0x2A9A);
+		entity("egr", 0x03B5);
+		entity("Egr", 0x0395);
+		entity("egrave", 0x00E8);
+		entity("Egrave", 0x00C8);
+		entity("egs", 0x2A96);
+		entity("egsdot", 0x2A98);
+		entity("el", 0x2A99);
+		entity("Element", 0x2208);
+		entity("elinters", 0x23E7);
+		entity("ell", 0x2113);
+		entity("els", 0x2A95);
+		entity("elsdot", 0x2A97);
+		entity("emacr", 0x0113);
+		entity("Emacr", 0x0112);
+		entity("empty", 0x2205);
+		entity("emptyset", 0x2205);
+		entity("EmptySmallSquare", 0x25FB);
+		entity("emptyv", 0x2205);
+		entity("EmptyVerySmallSquare", 0x25AB);
+		entity("emsp", 0x2003);
+		entity("emsp13", 0x2004);
+		entity("emsp14", 0x2005);
+		entity("eng", 0x014B);
+		entity("ENG", 0x014A);
+		entity("ensp", 0x2002);
+		entity("eogon", 0x0119);
+		entity("Eogon", 0x0118);
+		entity("eopf", 0x1D556);
+		entity("Eopf", 0x1D53C);
+		entity("epar", 0x22D5);
+		entity("eparsl", 0x29E3);
+		entity("eplus", 0x2A71);
+		entity("epsi", 0x03F5);
+		entity("epsilon", 0x03B5);
+		entity("Epsilon", 0x0395);
+		entity("epsiv", 0x03B5);
+		entity("eqcirc", 0x2256);
+		entity("eqcolon", 0x2255);
+		entity("eqsim", 0x2242);
+		entity("eqslantgtr", 0x2A96);
+		entity("eqslantless", 0x2A95);
+		entity("Equal", 0x2A75);
+		entity("equals", 0x003D);
+		entity("EqualTilde", 0x2242);
+		entity("equest", 0x225F);
+		entity("Equilibrium", 0x21CC);
+		entity("equiv", 0x2261);
+		entity("equivDD", 0x2A78);
+		entity("eqvparsl", 0x29E5);
+		entity("erarr", 0x2971);
+		entity("erDot", 0x2253);
+		entity("escr", 0x212F);
+		entity("Escr", 0x2130);
+		entity("esdot", 0x2250);
+		entity("esim", 0x2242);
+		entity("Esim", 0x2A73);
+		entity("eta", 0x03B7);
+		entity("Eta", 0x0397);
+		entity("eth", 0x00F0);
+		entity("ETH", 0x00D0);
+		entity("euml", 0x00EB);
+		entity("Euml", 0x00CB);
+		entity("euro", 0x20AC);
+		entity("excl", 0x0021);
+		entity("exist", 0x2203);
+		entity("Exists", 0x2203);
+		entity("expectation", 0x2130);
+		entity("exponentiale", 0x2147);
+		entity("fallingdotseq", 0x2252);
+		entity("fcy", 0x0444);
+		entity("Fcy", 0x0424);
+		entity("female", 0x2640);
+		entity("ffilig", 0xFB03);
+		entity("fflig", 0xFB00);
+		entity("ffllig", 0xFB04);
+		entity("ffr", 0x1D523);
+		entity("Ffr", 0x1D509);
+		entity("filig", 0xFB01);
+		entity("FilledSmallSquare", 0x25FC);
+		entity("FilledVerySmallSquare", 0x25AA);
+		entity("flat", 0x266D);
+		entity("fllig", 0xFB02);
+		entity("fltns", 0x25B1);
+		entity("fnof", 0x0192);
+		entity("fopf", 0x1D557);
+		entity("Fopf", 0x1D53D);
+		entity("forall", 0x2200);
+		entity("fork", 0x22D4);
+		entity("forkv", 0x2AD9);
+		entity("Fouriertrf", 0x2131);
+		entity("fpartint", 0x2A0D);
+		entity("frac12", 0x00BD);
+		entity("frac13", 0x2153);
+		entity("frac14", 0x00BC);
+		entity("frac15", 0x2155);
+		entity("frac16", 0x2159);
+		entity("frac18", 0x215B);
+		entity("frac23", 0x2154);
+		entity("frac25", 0x2156);
+		entity("frac34", 0x00BE);
+		entity("frac35", 0x2157);
+		entity("frac38", 0x215C);
+		entity("frac45", 0x2158);
+		entity("frac56", 0x215A);
+		entity("frac58", 0x215D);
+		entity("frac78", 0x215E);
+		entity("frasl", 0x2044);
+		entity("frown", 0x2322);
+		entity("fscr", 0x1D4BB);
+		entity("Fscr", 0x2131);
+		entity("gacute", 0x01F5);
+		entity("gamma", 0x03B3);
+		entity("Gamma", 0x0393);
+		entity("gammad", 0x03DD);
+		entity("Gammad", 0x03DC);
+		entity("gap", 0x2A86);
+		entity("gbreve", 0x011F);
+		entity("Gbreve", 0x011E);
+		entity("Gcedil", 0x0122);
+		entity("gcirc", 0x011D);
+		entity("Gcirc", 0x011C);
+		entity("gcy", 0x0433);
+		entity("Gcy", 0x0413);
+		entity("gdot", 0x0121);
+		entity("Gdot", 0x0120);
+		entity("ge", 0x2265);
+		entity("gE", 0x2267);
+		entity("gel", 0x22DB);
+		entity("gEl", 0x2A8C);
+		entity("geq", 0x2265);
+		entity("geqq", 0x2267);
+		entity("geqslant", 0x2A7E);
+		entity("ges", 0x2A7E);
+		entity("gescc", 0x2AA9);
+		entity("gesdot", 0x2A80);
+		entity("gesdoto", 0x2A82);
+		entity("gesdotol", 0x2A84);
+		entity("gesles", 0x2A94);
+		entity("gfr", 0x1D524);
+		entity("Gfr", 0x1D50A);
+		entity("gg", 0x226B);
+		entity("Gg", 0x22D9);
+		entity("ggg", 0x22D9);
+		entity("ggr", 0x03B3);
+		entity("Ggr", 0x0393);
+		entity("gimel", 0x2137);
+		entity("gjcy", 0x0453);
+		entity("GJcy", 0x0403);
+		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("gneq", 0x2A88);
+		entity("gneqq", 0x2269);
+		entity("gnsim", 0x22E7);
+		entity("gopf", 0x1D558);
+		entity("Gopf", 0x1D53E);
+		entity("grave", 0x0060);
+		entity("GreaterEqual", 0x2265);
+		entity("GreaterEqualLess", 0x22DB);
+		entity("GreaterFullEqual", 0x2267);
+		entity("GreaterGreater", 0x2AA2);
+		entity("GreaterLess", 0x2277);
+		entity("GreaterSlantEqual", 0x2A7E);
+		entity("GreaterTilde", 0x2273);
+		entity("gscr", 0x210A);
+		entity("Gscr", 0x1D4A2);
+		entity("gsim", 0x2273);
+		entity("gsime", 0x2A8E);
+		entity("gsiml", 0x2A90);
+		entity("gt", 0x003E);
+		entity("Gt", 0x226B);
+		entity("gtcc", 0x2AA7);
+		entity("gtcir", 0x2A7A);
+		entity("gtdot", 0x22D7);
+		entity("gtlPar", 0x2995);
+		entity("gtquest", 0x2A7C);
+		entity("gtrapprox", 0x2A86);
+		entity("gtrarr", 0x2978);
+		entity("gtrdot", 0x22D7);
+		entity("gtreqless", 0x22DB);
+		entity("gtreqqless", 0x2A8C);
+		entity("gtrless", 0x2277);
+		entity("gtrsim", 0x2273);
+		entity("Hacek", 0x02C7);
+		entity("hairsp", 0x200A);
+		entity("half", 0x00BD);
+		entity("hamilt", 0x210B);
+		entity("hardcy", 0x044A);
+		entity("HARDcy", 0x042A);
+		entity("harr", 0x2194);
+		entity("hArr", 0x21D4);
+		entity("harrcir", 0x2948);
+		entity("harrw", 0x21AD);
+		entity("Hat", 0x005E);
+		entity("hbar", 0x210F);
+		entity("hcirc", 0x0125);
+		entity("Hcirc", 0x0124);
+		entity("hearts", 0x2665);
+		entity("heartsuit", 0x2665);
+		entity("hellip", 0x2026);
+		entity("hercon", 0x22B9);
+		entity("hfr", 0x1D525);
+		entity("Hfr", 0x210C);
+		entity("HilbertSpace", 0x210B);
+		entity("hksearow", 0x2925);
+		entity("hkswarow", 0x2926);
+		entity("hoarr", 0x21FF);
+		entity("homtht", 0x223B);
+		entity("hookleftarrow", 0x21A9);
+		entity("hookrightarrow", 0x21AA);
+		entity("hopf", 0x1D559);
+		entity("Hopf", 0x210D);
+		entity("horbar", 0x2015);
+		entity("HorizontalLine", 0x2500);
+		entity("hscr", 0x1D4BD);
+		entity("Hscr", 0x210B);
+		entity("hslash", 0x210F);
+		entity("hstrok", 0x0127);
+		entity("Hstrok", 0x0126);
+		entity("HumpDownHump", 0x224E);
+		entity("HumpEqual", 0x224F);
+		entity("hybull", 0x2043);
+		entity("hyphen", 0x2010);
+		entity("iacgr", 0x03AF);
+		entity("Iacgr", 0x038A);
+		entity("iacute", 0x00ED);
+		entity("Iacute", 0x00CD);
+		entity("ic", 0x2063);
+		entity("icirc", 0x00EE);
+		entity("Icirc", 0x00CE);
+		entity("icy", 0x0438);
+		entity("Icy", 0x0418);
+		entity("idiagr", 0x0390);
+		entity("idigr", 0x03CA);
+		entity("Idigr", 0x03AA);
+		entity("Idot", 0x0130);
+		entity("iecy", 0x0435);
+		entity("IEcy", 0x0415);
+		entity("iexcl", 0x00A1);
+		entity("iff", 0x21D4);
+		entity("ifr", 0x1D526);
+		entity("Ifr", 0x2111);
+		entity("igr", 0x03B9);
+		entity("Igr", 0x0399);
+		entity("igrave", 0x00EC);
+		entity("Igrave", 0x00CC);
+		entity("ii", 0x2148);
+		entity("iiiint", 0x2A0C);
+		entity("iiint", 0x222D);
+		entity("iinfin", 0x29DC);
+		entity("iiota", 0x2129);
+		entity("ijlig", 0x0133);
+		entity("IJlig", 0x0132);
+		entity("Im", 0x2111);
+		entity("imacr", 0x012B);
+		entity("Imacr", 0x012A);
+		entity("image", 0x2111);
+		entity("ImaginaryI", 0x2148);
+		entity("imagline", 0x2110);
+		entity("imagpart", 0x2111);
+		entity("imath", 0x0131);
+		entity("imof", 0x22B7);
+		entity("imped", 0x01B5);
+		entity("Implies", 0x21D2);
+		entity("in", 0x2208);
+		entity("incare", 0x2105);
+		entity("infin", 0x221E);
+		entity("infintie", 0x29DD);
+		entity("inodot", 0x0131);
+		entity("int", 0x222B);
+		entity("Int", 0x222C);
+		entity("intcal", 0x22BA);
+		entity("integers", 0x2124);
+		entity("Integral", 0x222B);
+		entity("intercal", 0x22BA);
+		entity("Intersection", 0x22C2);
+		entity("intlarhk", 0x2A17);
+		entity("intprod", 0x2A3C);
+		entity("InvisibleComma", 0x2063);
+		entity("InvisibleTimes", 0x2062);
+		entity("iocy", 0x0451);
+		entity("IOcy", 0x0401);
+		entity("iogon", 0x012F);
+		entity("Iogon", 0x012E);
+		entity("iopf", 0x1D55A);
+		entity("Iopf", 0x1D540);
+		entity("iota", 0x03B9);
+		entity("Iota", 0x0399);
+		entity("iprod", 0x2A3C);
+		entity("iquest", 0x00BF);
+		entity("iscr", 0x1D4BE);
+		entity("Iscr", 0x2110);
+		entity("isin", 0x2208);
+		entity("isindot", 0x22F5);
+		entity("isinE", 0x22F9);
+		entity("isins", 0x22F4);
+		entity("isinsv", 0x22F3);
+		entity("isinv", 0x2208);
+		entity("it", 0x2062);
+		entity("itilde", 0x0129);
+		entity("Itilde", 0x0128);
+		entity("iukcy", 0x0456);
+		entity("Iukcy", 0x0406);
+		entity("iuml", 0x00EF);
+		entity("Iuml", 0x00CF);
+		entity("jcirc", 0x0135);
+		entity("Jcirc", 0x0134);
+		entity("jcy", 0x0439);
+		entity("Jcy", 0x0419);
+		entity("jfr", 0x1D527);
+		entity("Jfr", 0x1D50D);
+		entity("jmath", 0x0237);
+		entity("jopf", 0x1D55B);
+		entity("Jopf", 0x1D541);
+		entity("jscr", 0x1D4BF);
+		entity("Jscr", 0x1D4A5);
+		entity("jsercy", 0x0458);
+		entity("Jsercy", 0x0408);
+		entity("jukcy", 0x0454);
+		entity("Jukcy", 0x0404);
+		entity("kappa", 0x03BA);
+		entity("Kappa", 0x039A);
+		entity("kappav", 0x03F0);
+		entity("kcedil", 0x0137);
+		entity("Kcedil", 0x0136);
+		entity("kcy", 0x043A);
+		entity("Kcy", 0x041A);
+		entity("kfr", 0x1D528);
+		entity("Kfr", 0x1D50E);
+		entity("kgr", 0x03BA);
+		entity("Kgr", 0x039A);
+		entity("kgreen", 0x0138);
+		entity("khcy", 0x0445);
+		entity("KHcy", 0x0425);
+		entity("khgr", 0x03C7);
+		entity("KHgr", 0x03A7);
+		entity("kjcy", 0x045C);
+		entity("KJcy", 0x040C);
+		entity("kopf", 0x1D55C);
+		entity("Kopf", 0x1D542);
+		entity("kscr", 0x1D4C0);
+		entity("Kscr", 0x1D4A6);
+		entity("lAarr", 0x21DA);
+		entity("lacute", 0x013A);
+		entity("Lacute", 0x0139);
+		entity("laemptyv", 0x29B4);
+		entity("lagran", 0x2112);
+		entity("lambda", 0x03BB);
+		entity("Lambda", 0x039B);
+		entity("lang", 0x2329);
+		entity("Lang", 0x27EA);
+		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("larrb", 0x21E4);
+		entity("larrbfs", 0x291F);
+		entity("larrfs", 0x291D);
+		entity("larrhk", 0x21A9);
+		entity("larrlp", 0x21AB);
+		entity("larrpl", 0x2939);
+		entity("larrsim", 0x2973);
+		entity("larrtl", 0x21A2);
+		entity("lat", 0x2AAB);
+		entity("latail", 0x2919);
+		entity("lAtail", 0x291B);
+		entity("late", 0x2AAD);
+		entity("lbarr", 0x290C);
+		entity("lBarr", 0x290E);
+		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("Lcedil", 0x013B);
+		entity("lceil", 0x2308);
+		entity("lcub", 0x007B);
+		entity("lcy", 0x043B);
+		entity("Lcy", 0x041B);
+		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("LeftAngleBracket", 0x2329);
+		entity("leftarrow", 0x2190);
+		entity("Leftarrow", 0x21D0);
+		entity("LeftArrowBar", 0x21E4);
+		entity("LeftArrowRightArrow", 0x21C6);
+		entity("leftarrowtail", 0x21A2);
+		entity("LeftCeiling", 0x2308);
+		entity("LeftDoubleBracket", 0x27E6);
+		entity("LeftDownTeeVector", 0x2961);
+		entity("LeftDownVector", 0x21C3);
+		entity("LeftDownVectorBar", 0x2959);
+		entity("LeftFloor", 0x230A);
+		entity("leftharpoondown", 0x21BD);
+		entity("leftharpoonup", 0x21BC);
+		entity("leftleftarrows", 0x21C7);
+		entity("leftrightarrow", 0x2194);
+		entity("Leftrightarrow", 0x21D4);
+		entity("leftrightarrows", 0x21C6);
+		entity("leftrightharpoons", 0x21CB);
+		entity("leftrightsquigarrow", 0x21AD);
+		entity("LeftRightVector", 0x294E);
+		entity("LeftTee", 0x22A3);
+		entity("LeftTeeArrow", 0x21A4);
+		entity("LeftTeeVector", 0x295A);
+		entity("leftthreetimes", 0x22CB);
+		entity("LeftTriangle", 0x22B2);
+		entity("LeftTriangleBar", 0x29CF);
+		entity("LeftTriangleEqual", 0x22B4);
+		entity("LeftUpDownVector", 0x2951);
+		entity("LeftUpTeeVector", 0x2960);
+		entity("LeftUpVector", 0x21BF);
+		entity("LeftUpVectorBar", 0x2958);
+		entity("LeftVector", 0x21BC);
+		entity("LeftVectorBar", 0x2952);
+		entity("leg", 0x22DA);
+		entity("lEg", 0x2A8B);
+		entity("leq", 0x2264);
+		entity("leqq", 0x2266);
+		entity("leqslant", 0x2A7D);
+		entity("les", 0x2A7D);
+		entity("lescc", 0x2AA8);
+		entity("lesdot", 0x2A7F);
+		entity("lesdoto", 0x2A81);
+		entity("lesdotor", 0x2A83);
+		entity("lesges", 0x2A93);
+		entity("lessapprox", 0x2A85);
+		entity("lessdot", 0x22D6);
+		entity("lesseqgtr", 0x22DA);
+		entity("lesseqqgtr", 0x2A8B);
+		entity("LessEqualGreater", 0x22DA);
+		entity("LessFullEqual", 0x2266);
+		entity("LessGreater", 0x2276);
+		entity("lessgtr", 0x2276);
+		entity("LessLess", 0x2AA1);
+		entity("lesssim", 0x2272);
+		entity("LessSlantEqual", 0x2A7D);
+		entity("LessTilde", 0x2272);
+		entity("lfisht", 0x297C);
+		entity("lfloor", 0x230A);
+		entity("lfr", 0x1D529);
+		entity("Lfr", 0x1D50F);
+		entity("lg", 0x2276);
+		entity("lgE", 0x2A91);
+		entity("lgr", 0x03BB);
+		entity("Lgr", 0x039B);
+		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("Ll", 0x22D8);
+		entity("llarr", 0x21C7);
+		entity("llcorner", 0x231E);
+		entity("Lleftarrow", 0x21DA);
+		entity("llhard", 0x296B);
+		entity("lltri", 0x25FA);
+		entity("lmidot", 0x0140);
+		entity("Lmidot", 0x013F);
+		entity("lmoust", 0x23B0);
+		entity("lmoustache", 0x23B0);
+		entity("lnap", 0x2A89);
+		entity("lnapprox", 0x2A89);
+		entity("lne", 0x2A87);
+		entity("lnE", 0x2268);
+		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("Longleftrightarrow", 0x27FA);
+		entity("longmapsto", 0x27FC);
+		entity("longrightarrow", 0x27F6);
+		entity("Longrightarrow", 0x27F9);
+		entity("looparrowleft", 0x21AB);
+		entity("looparrowright", 0x21AC);
+		entity("lopar", 0x2985);
+		entity("lopf", 0x1D55D);
+		entity("Lopf", 0x1D543);
+		entity("loplus", 0x2A2D);
+		entity("lotimes", 0x2A34);
+		entity("lowast", 0x2217);
+		entity("lowbar", 0x005F);
+		entity("LowerLeftArrow", 0x2199);
+		entity("LowerRightArrow", 0x2198);
+		entity("loz", 0x25CA);
+		entity("lozenge", 0x25CA);
+		entity("lozf", 0x29EB);
+		entity("lpar", 0x0028);
+		entity("lparlt", 0x2993);
+		entity("lrarr", 0x21C6);
+		entity("lrcorner", 0x231F);
+		entity("lrhar", 0x21CB);
+		entity("lrhard", 0x296D);
+		entity("lrm", 0x200E);
+		entity("lrtri", 0x22BF);
+		entity("lsaquo", 0x2039);
+		entity("lscr", 0x1D4C1);
+		entity("Lscr", 0x2112);
+		entity("lsh", 0x21B0);
+		entity("lsim", 0x2272);
+		entity("lsime", 0x2A8D);
+		entity("lsimg", 0x2A8F);
+		entity("lsqb", 0x005B);
+		entity("lsquo", 0x2018);
+		entity("lsquor", 0x201A);
+		entity("lstrok", 0x0142);
+		entity("Lstrok", 0x0141);
+		entity("lt", 0x003C);
+		entity("Lt", 0x226A);
+		entity("ltcc", 0x2AA6);
+		entity("ltcir", 0x2A79);
+		entity("ltdot", 0x22D6);
+		entity("lthree", 0x22CB);
+		entity("ltimes", 0x22C9);
+		entity("ltlarr", 0x2976);
+		entity("ltquest", 0x2A7B);
+		entity("ltri", 0x25C3);
+		entity("ltrie", 0x22B4);
+		entity("ltrif", 0x25C2);
+		entity("ltrPar", 0x2996);
+		entity("lurdshar", 0x294A);
+		entity("luruhar", 0x2966);
+		entity("macr", 0x00AF);
+		entity("male", 0x2642);
+		entity("malt", 0x2720);
+		entity("maltese", 0x2720);
+		entity("map", 0x21A6);
+		entity("Map", 0x2905);
+		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("mdash", 0x2014);
+		entity("mDDot", 0x223A);
+		entity("measuredangle", 0x2221);
+		entity("MediumSpace", 0x205F);
+		entity("Mellintrf", 0x2133);
+		entity("mfr", 0x1D52A);
+		entity("Mfr", 0x1D510);
+		entity("mgr", 0x03BC);
+		entity("Mgr", 0x039C);
+		entity("mho", 0x2127);
+		entity("micro", 0x00B5);
+		entity("mid", 0x2223);
+		entity("midast", 0x002A);
+		entity("midcir", 0x2AF0);
+		entity("middot", 0x00B7);
+		entity("minus", 0x2212);
+		entity("minusb", 0x229F);
+		entity("minusd", 0x2238);
+		entity("minusdu", 0x2A2A);
+		entity("MinusPlus", 0x2213);
+		entity("mlcp", 0x2ADB);
+		entity("mldr", 0x2026);
+		entity("mnplus", 0x2213);
+		entity("models", 0x22A7);
+		entity("mopf", 0x1D55E);
+		entity("Mopf", 0x1D544);
+		entity("mp", 0x2213);
+		entity("mscr", 0x1D4C2);
+		entity("Mscr", 0x2133);
+		entity("mstpos", 0x223E);
+		entity("mu", 0x03BC);
+		entity("Mu", 0x039C);
+		entity("multimap", 0x22B8);
+		entity("mumap", 0x22B8);
+		entity("nabla", 0x2207);
+		entity("nacute", 0x0144);
+		entity("Nacute", 0x0143);
+		entity("nap", 0x2249);
+		entity("napos", 0x0149);
+		entity("napprox", 0x2249);
+		entity("natur", 0x266E);
+		entity("natural", 0x266E);
+		entity("naturals", 0x2115);
+		entity("nbsp", 0x00A0);
+		entity("ncap", 0x2A43);
+		entity("ncaron", 0x0148);
+		entity("Ncaron", 0x0147);
+		entity("ncedil", 0x0146);
+		entity("Ncedil", 0x0145);
+		entity("ncong", 0x2247);
+		entity("ncup", 0x2A42);
+		entity("ncy", 0x043D);
+		entity("Ncy", 0x041D);
+		entity("ndash", 0x2013);
+		entity("ne", 0x2260);
+		entity("nearhk", 0x2924);
+		entity("nearr", 0x2197);
+		entity("neArr", 0x21D7);
+		entity("nearrow", 0x2197);
+		entity("NegativeMediumSpace", 0x200B);
+		entity("NegativeThickSpace", 0x200B);
+		entity("NegativeThinSpace", 0x200B);
+		entity("NegativeVeryThinSpace", 0x200B);
+		entity("nequiv", 0x2262);
+		entity("nesear", 0x2928);
+		entity("NestedGreaterGreater", 0x226B);
+		entity("NestedLessLess", 0x226A);
+		entity("NewLine", 0x000A);
+		entity("nexist", 0x2204);
+		entity("nexists", 0x2204);
+		entity("nfr", 0x1D52B);
+		entity("Nfr", 0x1D511);
+		entity("nge", 0x2271);
+		entity("ngeq", 0x2271);
+		entity("ngr", 0x03BD);
+		entity("Ngr", 0x039D);
+		entity("ngsim", 0x2275);
+		entity("ngt", 0x226F);
+		entity("ngtr", 0x226F);
+		entity("nharr", 0x21AE);
+		entity("nhArr", 0x21CE);
+		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("nlArr", 0x21CD);
+		entity("nldr", 0x2025);
+		entity("nle", 0x2270);
+		entity("nleftarrow", 0x219A);
+		entity("nLeftarrow", 0x21CD);
+		entity("nleftrightarrow", 0x21AE);
+		entity("nLeftrightarrow", 0x21CE);
+		entity("nleq", 0x2270);
+		entity("nless", 0x226E);
+		entity("nlsim", 0x2274);
+		entity("nlt", 0x226E);
+		entity("nltri", 0x22EA);
+		entity("nltrie", 0x22EC);
+		entity("nmid", 0x2224);
+		entity("NoBreak", 0x2060);
+		entity("NonBreakingSpace", 0x00A0);
+		entity("nopf", 0x1D55F);
+		entity("Nopf", 0x2115);
+		entity("not", 0x00AC);
+		entity("Not", 0x2AEC);
+		entity("NotCongruent", 0x2262);
+		entity("NotCupCap", 0x226D);
+		entity("NotDoubleVerticalBar", 0x2226);
+		entity("NotElement", 0x2209);
+		entity("NotEqual", 0x2260);
+		entity("NotExists", 0x2204);
+		entity("NotGreater", 0x226F);
+		entity("NotGreaterEqual", 0x2271);
+		entity("NotGreaterLess", 0x2279);
+		entity("NotGreaterTilde", 0x2275);
+		entity("notin", 0x2209);
+		entity("notinva", 0x2209);
+		entity("notinvb", 0x22F7);
+		entity("notinvc", 0x22F6);
+		entity("NotLeftTriangle", 0x22EA);
+		entity("NotLeftTriangleEqual", 0x22EC);
+		entity("NotLess", 0x226E);
+		entity("NotLessEqual", 0x2270);
+		entity("NotLessGreater", 0x2278);
+		entity("NotLessTilde", 0x2274);
+		entity("notni", 0x220C);
+		entity("notniva", 0x220C);
+		entity("notnivb", 0x22FE);
+		entity("notnivc", 0x22FD);
+		entity("NotPrecedes", 0x2280);
+		entity("NotPrecedesSlantEqual", 0x22E0);
+		entity("NotReverseElement", 0x220C);
+		entity("NotRightTriangle", 0x22EB);
+		entity("NotRightTriangleEqual", 0x22ED);
+		entity("NotSquareSubsetEqual", 0x22E2);
+		entity("NotSquareSupersetEqual", 0x22E3);
+		entity("NotSubsetEqual", 0x2288);
+		entity("NotSucceeds", 0x2281);
+		entity("NotSucceedsSlantEqual", 0x22E1);
+		entity("NotSupersetEqual", 0x2289);
+		entity("NotTilde", 0x2241);
+		entity("NotTildeEqual", 0x2244);
+		entity("NotTildeFullEqual", 0x2247);
+		entity("NotTildeTilde", 0x2249);
+		entity("NotVerticalBar", 0x2224);
+		entity("npar", 0x2226);
+		entity("nparallel", 0x2226);
+		entity("npolint", 0x2A14);
+		entity("npr", 0x2280);
+		entity("nprcue", 0x22E0);
+		entity("nprec", 0x2280);
+		entity("nrarr", 0x219B);
+		entity("nrArr", 0x21CF);
+		entity("nrightarrow", 0x219B);
+		entity("nRightarrow", 0x21CF);
+		entity("nrtri", 0x22EB);
+		entity("nrtrie", 0x22ED);
+		entity("nsc", 0x2281);
+		entity("nsccue", 0x22E1);
+		entity("nscr", 0x1D4C3);
+		entity("Nscr", 0x1D4A9);
+		entity("nshortmid", 0x2224);
+		entity("nshortparallel", 0x2226);
+		entity("nsim", 0x2241);
+		entity("nsime", 0x2244);
+		entity("nsimeq", 0x2244);
+		entity("nsmid", 0x2224);
+		entity("nspar", 0x2226);
+		entity("nsqsube", 0x22E2);
+		entity("nsqsupe", 0x22E3);
+		entity("nsub", 0x2284);
+		entity("nsube", 0x2288);
+		entity("nsubseteq", 0x2288);
+		entity("nsucc", 0x2281);
+		entity("nsup", 0x2285);
+		entity("nsupe", 0x2289);
+		entity("nsupseteq", 0x2289);
+		entity("ntgl", 0x2279);
+		entity("ntilde", 0x00F1);
+		entity("Ntilde", 0x00D1);
+		entity("ntlg", 0x2278);
+		entity("ntriangleleft", 0x22EA);
+		entity("ntrianglelefteq", 0x22EC);
+		entity("ntriangleright", 0x22EB);
+		entity("ntrianglerighteq", 0x22ED);
+		entity("nu", 0x03BD);
+		entity("Nu", 0x039D);
+		entity("num", 0x0023);
+		entity("numero", 0x2116);
+		entity("numsp", 0x2007);
+		entity("nvdash", 0x22AC);
+		entity("nvDash", 0x22AD);
+		entity("nVdash", 0x22AE);
+		entity("nVDash", 0x22AF);
+		entity("nvHarr", 0x2904);
+		entity("nvinfin", 0x29DE);
+		entity("nvlArr", 0x2902);
+		entity("nvrArr", 0x2903);
+		entity("nwarhk", 0x2923);
+		entity("nwarr", 0x2196);
+		entity("nwArr", 0x21D6);
+		entity("nwarrow", 0x2196);
+		entity("nwnear", 0x2927);
+		entity("oacgr", 0x03CC);
+		entity("Oacgr", 0x038C);
+		entity("oacute", 0x00F3);
+		entity("Oacute", 0x00D3);
+		entity("oast", 0x229B);
+		entity("ocir", 0x229A);
+		entity("ocirc", 0x00F4);
+		entity("Ocirc", 0x00D4);
+		entity("ocy", 0x043E);
+		entity("Ocy", 0x041E);
+		entity("odash", 0x229D);
+		entity("odblac", 0x0151);
+		entity("Odblac", 0x0150);
+		entity("odiv", 0x2A38);
+		entity("odot", 0x2299);
+		entity("odsold", 0x29BC);
+		entity("oelig", 0x0153);
+		entity("OElig", 0x0152);
+		entity("ofcir", 0x29BF);
+		entity("ofr", 0x1D52C);
+		entity("Ofr", 0x1D512);
+		entity("ogon", 0x02DB);
+		entity("ogr", 0x03BF);
+		entity("Ogr", 0x039F);
+		entity("ograve", 0x00F2);
+		entity("Ograve", 0x00D2);
+		entity("ogt", 0x29C1);
+		entity("ohacgr", 0x03CE);
+		entity("OHacgr", 0x038F);
+		entity("ohbar", 0x29B5);
+		entity("ohgr", 0x03C9);
+		entity("OHgr", 0x03A9);
+		entity("ohm", 0x2126);
+		entity("oint", 0x222E);
+		entity("olarr", 0x21BA);
+		entity("olcir", 0x29BE);
+		entity("olcross", 0x29BB);
+		entity("oline", 0x203E);
+		entity("olt", 0x29C0);
+		entity("omacr", 0x014D);
+		entity("Omacr", 0x014C);
+		entity("omega", 0x03C9);
+		entity("Omega", 0x03A9);
+		entity("omicron", 0x03BF);
+		entity("Omicron", 0x039F);
+		entity("omid", 0x29B6);
+		entity("ominus", 0x2296);
+		entity("oopf", 0x1D560);
+		entity("Oopf", 0x1D546);
+		entity("opar", 0x29B7);
+		entity("OpenCurlyDoubleQuote", 0x201C);
+		entity("OpenCurlyQuote", 0x2018);
+		entity("operp", 0x29B9);
+		entity("oplus", 0x2295);
+		entity("or", 0x2228);
+		entity("Or", 0x2A54);
+		entity("orarr", 0x21BB);
+		entity("ord", 0x2A5D);
+		entity("order", 0x2134);
+		entity("orderof", 0x2134);
+		entity("ordf", 0x00AA);
+		entity("ordm", 0x00BA);
+		entity("origof", 0x22B6);
+		entity("oror", 0x2A56);
+		entity("orslope", 0x2A57);
+		entity("orv", 0x2A5B);
+		entity("oS", 0x24C8);
+		entity("oscr", 0x2134);
+		entity("Oscr", 0x1D4AA);
+		entity("oslash", 0x00F8);
+		entity("Oslash", 0x00D8);
+		entity("osol", 0x2298);
+		entity("otilde", 0x00F5);
+		entity("Otilde", 0x00D5);
+		entity("otimes", 0x2297);
+		entity("Otimes", 0x2A37);
+		entity("otimesas", 0x2A36);
+		entity("ouml", 0x00F6);
+		entity("Ouml", 0x00D6);
+		entity("ovbar", 0x233D);
+		entity("OverBar", 0x00AF);
+		entity("OverBrace", 0xFE37);
+		entity("OverBracket", 0x23B4);
+		entity("OverParenthesis", 0xFE35);
+		entity("par", 0x2225);
+		entity("para", 0x00B6);
+		entity("parallel", 0x2225);
+		entity("parsim", 0x2AF3);
+		entity("parsl", 0x2AFD);
+		entity("part", 0x2202);
+		entity("PartialD", 0x2202);
+		entity("pcy", 0x043F);
+		entity("Pcy", 0x041F);
+		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("Pgr", 0x03A0);
+		entity("phgr", 0x03C6);
+		entity("PHgr", 0x03A6);
+		entity("phi", 0x03D5);
+		entity("Phi", 0x03A6);
+		entity("phiv", 0x03C6);
+		entity("phmmat", 0x2133);
+		entity("phone", 0x260E);
+		entity("pi", 0x03C0);
+		entity("Pi", 0x03A0);
+		entity("pitchfork", 0x22D4);
+		entity("piv", 0x03D6);
+		entity("planck", 0x210F);
+		entity("planckh", 0x210E);
+		entity("plankv", 0x210F);
+		entity("plus", 0x002B);
+		entity("plusacir", 0x2A23);
+		entity("plusb", 0x229E);
+		entity("pluscir", 0x2A22);
+		entity("plusdo", 0x2214);
+		entity("plusdu", 0x2A25);
+		entity("pluse", 0x2A72);
+		entity("PlusMinus", 0x00B1);
+		entity("plusmn", 0x00B1);
+		entity("plussim", 0x2A26);
+		entity("plustwo", 0x2A27);
+		entity("pm", 0x00B1);
+		entity("Poincareplane", 0x210C);
+		entity("pointint", 0x2A15);
+		entity("popf", 0x1D561);
+		entity("Popf", 0x2119);
+		entity("pound", 0x00A3);
+		entity("pr", 0x227A);
+		entity("Pr", 0x2ABB);
+		entity("prap", 0x2AB7);
+		entity("prcue", 0x227C);
+		entity("pre", 0x2AAF);
+		entity("prE", 0x2AB3);
+		entity("prec", 0x227A);
+		entity("precapprox", 0x2AB7);
+		entity("preccurlyeq", 0x227C);
+		entity("Precedes", 0x227A);
+		entity("PrecedesEqual", 0x2AAF);
+		entity("PrecedesSlantEqual", 0x227C);
+		entity("PrecedesTilde", 0x227E);
+		entity("preceq", 0x2AAF);
+		entity("precnapprox", 0x2AB9);
+		entity("precneqq", 0x2AB5);
+		entity("precnsim", 0x22E8);
+		entity("precsim", 0x227E);
+		entity("prime", 0x2032);
+		entity("Prime", 0x2033);
+		entity("primes", 0x2119);
+		entity("prnap", 0x2AB9);
+		entity("prnE", 0x2AB5);
+		entity("prnsim", 0x22E8);
+		entity("prod", 0x220F);
+		entity("Product", 0x220F);
+		entity("profalar", 0x232E);
+		entity("profline", 0x2312);
+		entity("profsurf", 0x2313);
+		entity("prop", 0x221D);
+		entity("Proportion", 0x2237);
+		entity("Proportional", 0x221D);
+		entity("propto", 0x221D);
+		entity("prsim", 0x227E);
+		entity("prurel", 0x22B0);
+		entity("pscr", 0x1D4C5);
+		entity("Pscr", 0x1D4AB);
+		entity("psgr", 0x03C8);
+		entity("PSgr", 0x03A8);
+		entity("psi", 0x03C8);
+		entity("Psi", 0x03A8);
+		entity("puncsp", 0x2008);
+		entity("qfr", 0x1D52E);
+		entity("Qfr", 0x1D514);
+		entity("qint", 0x2A0C);
+		entity("qopf", 0x1D562);
+		entity("Qopf", 0x211A);
+		entity("qprime", 0x2057);
+		entity("qscr", 0x1D4C6);
+		entity("Qscr", 0x1D4AC);
+		entity("quaternions", 0x210D);
+		entity("quatint", 0x2A16);
+		entity("quest", 0x003F);
+		entity("questeq", 0x225F);
+		entity("quot", 0x0022);
+		entity("rAarr", 0x21DB);
+		entity("race", 0x29DA);
+		entity("racute", 0x0155);
+		entity("Racute", 0x0154);
+		entity("radic", 0x221A);
+		entity("raemptyv", 0x29B3);
+		entity("rang", 0x232A);
+		entity("Rang", 0x27EB);
+		entity("rangd", 0x2992);
+		entity("range", 0x29A5);
+		entity("rangle", 0x232A);
+		entity("raquo", 0x00BB);
+		entity("rarr", 0x2192);
+		entity("rArr", 0x21D2);
+		entity("Rarr", 0x21A0);
+		entity("rarrap", 0x2975);
+		entity("rarrb", 0x21E5);
+		entity("rarrbfs", 0x2920);
+		entity("rarrc", 0x2933);
+		entity("rarrfs", 0x291E);
+		entity("rarrhk", 0x21AA);
+		entity("rarrlp", 0x21AC);
+		entity("rarrpl", 0x2945);
+		entity("rarrsim", 0x2974);
+		entity("rarrtl", 0x21A3);
+		entity("Rarrtl", 0x2916);
+		entity("rarrw", 0x219D);
+		entity("ratail", 0x291A);
+		entity("rAtail", 0x291C);
+		entity("ratio", 0x2236);
+		entity("rationals", 0x211A);
+		entity("rbarr", 0x290D);
+		entity("rBarr", 0x290F);
+		entity("RBarr", 0x2910);
+		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("Rcedil", 0x0156);
+		entity("rceil", 0x2309);
+		entity("rcub", 0x007D);
+		entity("rcy", 0x0440);
+		entity("Rcy", 0x0420);
+		entity("rdca", 0x2937);
+		entity("rdldhar", 0x2969);
+		entity("rdquo", 0x201D);
+		entity("rdquor", 0x201D);
+		entity("rdsh", 0x21B3);
+		entity("Re", 0x211C);
+		entity("real", 0x211C);
+		entity("realine", 0x211B);
+		entity("realpart", 0x211C);
+		entity("reals", 0x211D);
+		entity("rect", 0x25AD);
+		entity("reg", 0x00AE);
+		entity("ReverseElement", 0x220B);
+		entity("ReverseEquilibrium", 0x21CB);
+		entity("ReverseUpEquilibrium", 0x296F);
+		entity("rfisht", 0x297D);
+		entity("rfloor", 0x230B);
+		entity("rfr", 0x1D52F);
+		entity("Rfr", 0x211C);
+		entity("rgr", 0x03C1);
+		entity("Rgr", 0x03A1);
+		entity("rHar", 0x2964);
+		entity("rhard", 0x21C1);
+		entity("rharu", 0x21C0);
+		entity("rharul", 0x296C);
+		entity("rho", 0x03C1);
+		entity("Rho", 0x03A1);
+		entity("rhov", 0x03F1);
+		entity("RightAngleBracket", 0x232A);
+		entity("rightarrow", 0x2192);
+		entity("Rightarrow", 0x21D2);
+		entity("RightArrowBar", 0x21E5);
+		entity("RightArrowLeftArrow", 0x21C4);
+		entity("rightarrowtail", 0x21A3);
+		entity("RightCeiling", 0x2309);
+		entity("RightDoubleBracket", 0x27E7);
+		entity("RightDownTeeVector", 0x295D);
+		entity("RightDownVector", 0x21C2);
+		entity("RightDownVectorBar", 0x2955);
+		entity("RightFloor", 0x230B);
+		entity("rightharpoondown", 0x21C1);
+		entity("rightharpoonup", 0x21C0);
+		entity("rightleftarrows", 0x21C4);
+		entity("rightleftharpoons", 0x21CC);
+		entity("rightrightarrows", 0x21C9);
+		entity("rightsquigarrow", 0x219D);
+		entity("RightTee", 0x22A2);
+		entity("RightTeeArrow", 0x21A6);
+		entity("RightTeeVector", 0x295B);
+		entity("rightthreetimes", 0x22CC);
+		entity("RightTriangle", 0x22B3);
+		entity("RightTriangleBar", 0x29D0);
+		entity("RightTriangleEqual", 0x22B5);
+		entity("RightUpDownVector", 0x294F);
+		entity("RightUpTeeVector", 0x295C);
+		entity("RightUpVector", 0x21BE);
+		entity("RightUpVectorBar", 0x2954);
+		entity("RightVector", 0x21C0);
+		entity("RightVectorBar", 0x2953);
+		entity("ring", 0x02DA);
+		entity("risingdotseq", 0x2253);
+		entity("rlarr", 0x21C4);
+		entity("rlhar", 0x21CC);
+		entity("rlm", 0x200F);
+		entity("rmoust", 0x23B1);
+		entity("rmoustache", 0x23B1);
+		entity("rnmid", 0x2AEE);
+		entity("roang", 0x27ED);
+		entity("roarr", 0x21FE);
+		entity("robrk", 0x27E7);
+		entity("ropar", 0x2986);
+		entity("ropf", 0x1D563);
+		entity("Ropf", 0x211D);
+		entity("roplus", 0x2A2E);
+		entity("rotimes", 0x2A35);
+		entity("RoundImplies", 0x2970);
+		entity("rpar", 0x0029);
+		entity("rpargt", 0x2994);
+		entity("rppolint", 0x2A12);
+		entity("rrarr", 0x21C9);
+		entity("Rrightarrow", 0x21DB);
+		entity("rsaquo", 0x203A);
+		entity("rscr", 0x1D4C7);
+		entity("Rscr", 0x211B);
+		entity("rsh", 0x21B1);
+		entity("rsqb", 0x005D);
+		entity("rsquo", 0x2019);
+		entity("rsquor", 0x2019);
+		entity("rthree", 0x22CC);
+		entity("rtimes", 0x22CA);
+		entity("rtri", 0x25B9);
+		entity("rtrie", 0x22B5);
+		entity("rtrif", 0x25B8);
+		entity("rtriltri", 0x29CE);
+		entity("RuleDelayed", 0x29F4);
+		entity("ruluhar", 0x2968);
+		entity("rx", 0x211E);
+		entity("sacute", 0x015B);
+		entity("Sacute", 0x015A);
+		entity("sbquo", 0x201A);
+		entity("sc", 0x227B);
+		entity("Sc", 0x2ABC);
+		entity("scap", 0x2AB8);
+		entity("scaron", 0x0161);
+		entity("Scaron", 0x0160);
+		entity("sccue", 0x227D);
+		entity("sce", 0x2AB0);
+		entity("scE", 0x2AB4);
+		entity("scedil", 0x015F);
+		entity("Scedil", 0x015E);
+		entity("scirc", 0x015D);
+		entity("Scirc", 0x015C);
+		entity("scnap", 0x2ABA);
+		entity("scnE", 0x2AB6);
+		entity("scnsim", 0x22E9);
+		entity("scpolint", 0x2A13);
+		entity("scsim", 0x227F);
+		entity("scy", 0x0441);
+		entity("Scy", 0x0421);
+		entity("sdot", 0x22C5);
+		entity("sdotb", 0x22A1);
+		entity("sdote", 0x2A66);
+		entity("searhk", 0x2925);
+		entity("searr", 0x2198);
+		entity("seArr", 0x21D8);
+		entity("searrow", 0x2198);
+		entity("sect", 0x00A7);
+		entity("semi", 0x003B);
+		entity("seswar", 0x2929);
+		entity("setminus", 0x2216);
+		entity("setmn", 0x2216);
+		entity("sext", 0x2736);
+		entity("sfgr", 0x03C2);
+		entity("sfr", 0x1D530);
+		entity("Sfr", 0x1D516);
+		entity("sfrown", 0x2322);
+		entity("sgr", 0x03C3);
+		entity("Sgr", 0x03A3);
+		entity("sharp", 0x266F);
+		entity("shchcy", 0x0449);
+		entity("SHCHcy", 0x0429);
+		entity("shcy", 0x0448);
+		entity("SHcy", 0x0428);
+		entity("ShortDownArrow", 0x2193);
+		entity("ShortLeftArrow", 0x2190);
+		entity("shortmid", 0x2223);
+		entity("shortparallel", 0x2225);
+		entity("ShortRightArrow", 0x2192);
+		entity("ShortUpArrow", 0x2191);
+		entity("shy", 0x00AD);
+		entity("sigma", 0x03C3);
+		entity("Sigma", 0x03A3);
+		entity("sigmaf", 0x03C2);
+		entity("sigmav", 0x03C2);
+		entity("sim", 0x223C);
+		entity("simdot", 0x2A6A);
+		entity("sime", 0x2243);
+		entity("simeq", 0x2243);
+		entity("simg", 0x2A9E);
+		entity("simgE", 0x2AA0);
+		entity("siml", 0x2A9D);
+		entity("simlE", 0x2A9F);
+		entity("simne", 0x2246);
+		entity("simplus", 0x2A24);
+		entity("simrarr", 0x2972);
+		entity("slarr", 0x2190);
+		entity("SmallCircle", 0x2218);
+		entity("smallsetminus", 0x2216);
+		entity("smashp", 0x2A33);
+		entity("smeparsl", 0x29E4);
+		entity("smid", 0x2223);
+		entity("smile", 0x2323);
+		entity("smt", 0x2AAA);
+		entity("smte", 0x2AAC);
+		entity("softcy", 0x044C);
+		entity("SOFTcy", 0x042C);
+		entity("sol", 0x002F);
+		entity("solb", 0x29C4);
+		entity("solbar", 0x233F);
+		entity("sopf", 0x1D564);
+		entity("Sopf", 0x1D54A);
+		entity("spades", 0x2660);
+		entity("spadesuit", 0x2660);
+		entity("spar", 0x2225);
+		entity("sqcap", 0x2293);
+		entity("sqcup", 0x2294);
+		entity("Sqrt", 0x221A);
+		entity("sqsub", 0x228F);
+		entity("sqsube", 0x2291);
+		entity("sqsubset", 0x228F);
+		entity("sqsubseteq", 0x2291);
+		entity("sqsup", 0x2290);
+		entity("sqsupe", 0x2292);
+		entity("sqsupset", 0x2290);
+		entity("sqsupseteq", 0x2292);
+		entity("squ", 0x25A1);
+		entity("square", 0x25A1);
+		entity("SquareIntersection", 0x2293);
+		entity("SquareSubset", 0x228F);
+		entity("SquareSubsetEqual", 0x2291);
+		entity("SquareSuperset", 0x2290);
+		entity("SquareSupersetEqual", 0x2292);
+		entity("SquareUnion", 0x2294);
+		entity("squarf", 0x25AA);
+		entity("squf", 0x25AA);
+		entity("srarr", 0x2192);
+		entity("sscr", 0x1D4C8);
+		entity("Sscr", 0x1D4AE);
+		entity("ssetmn", 0x2216);
+		entity("ssmile", 0x2323);
+		entity("sstarf", 0x22C6);
+		entity("star", 0x2606);
+		entity("Star", 0x22C6);
+		entity("starf", 0x2605);
+		entity("straightepsilon", 0x03F5);
+		entity("straightphi", 0x03D5);
+		entity("strns", 0x00AF);
+		entity("sub", 0x2282);
+		entity("Sub", 0x22D0);
+		entity("subdot", 0x2ABD);
+		entity("sube", 0x2286);
+		entity("subE", 0x2AC5);
+		entity("subedot", 0x2AC3);
+		entity("submult", 0x2AC1);
+		entity("subne", 0x228A);
+		entity("subnE", 0x2ACB);
+		entity("subplus", 0x2ABF);
+		entity("subrarr", 0x2979);
+		entity("subset", 0x2282);
+		entity("Subset", 0x22D0);
+		entity("subseteq", 0x2286);
+		entity("subseteqq", 0x2AC5);
+		entity("SubsetEqual", 0x2286);
+		entity("subsetneq", 0x228A);
+		entity("subsetneqq", 0x2ACB);
+		entity("subsim", 0x2AC7);
+		entity("subsub", 0x2AD5);
+		entity("subsup", 0x2AD3);
+		entity("succ", 0x227B);
+		entity("succapprox", 0x2AB8);
+		entity("succcurlyeq", 0x227D);
+		entity("Succeeds", 0x227B);
+		entity("SucceedsEqual", 0x2AB0);
+		entity("SucceedsSlantEqual", 0x227D);
+		entity("SucceedsTilde", 0x227F);
+		entity("succeq", 0x2AB0);
+		entity("succnapprox", 0x2ABA);
+		entity("succneqq", 0x2AB6);
+		entity("succnsim", 0x22E9);
+		entity("succsim", 0x227F);
+		entity("SuchThat", 0x220B);
+		entity("sum", 0x2211);
+		entity("sung", 0x266A);
+		entity("sup", 0x2283);
+		entity("Sup", 0x22D1);
+		entity("sup1", 0x00B9);
+		entity("sup2", 0x00B2);
+		entity("sup3", 0x00B3);
+		entity("supdot", 0x2ABE);
+		entity("supdsub", 0x2AD8);
+		entity("supe", 0x2287);
+		entity("supE", 0x2AC6);
+		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("supplus", 0x2AC0);
+		entity("supset", 0x2283);
+		entity("Supset", 0x22D1);
+		entity("supseteq", 0x2287);
+		entity("supseteqq", 0x2AC6);
+		entity("supsetneq", 0x228B);
+		entity("supsetneqq", 0x2ACC);
+		entity("supsim", 0x2AC8);
+		entity("supsub", 0x2AD4);
+		entity("supsup", 0x2AD6);
+		entity("swarhk", 0x2926);
+		entity("swarr", 0x2199);
+		entity("swArr", 0x21D9);
+		entity("swarrow", 0x2199);
+		entity("swnwar", 0x292A);
+		entity("szlig", 0x00DF);
+		entity("Tab", 0x0009);
+		entity("target", 0x2316);
+		entity("tau", 0x03C4);
+		entity("Tau", 0x03A4);
+		entity("tbrk", 0x23B4);
+		entity("tcaron", 0x0165);
+		entity("Tcaron", 0x0164);
+		entity("tcedil", 0x0163);
+		entity("Tcedil", 0x0162);
+		entity("tcy", 0x0442);
+		entity("Tcy", 0x0422);
+		entity("telrec", 0x2315);
+		entity("tfr", 0x1D531);
+		entity("Tfr", 0x1D517);
+		entity("tgr", 0x03C4);
+		entity("Tgr", 0x03A4);
+		entity("there4", 0x2234);
+		entity("therefore", 0x2234);
+		entity("theta", 0x03B8);
+		entity("Theta", 0x0398);
+		entity("thetasym", 0x03D1);
+		entity("thetav", 0x03D1);
+		entity("thgr", 0x03B8);
+		entity("THgr", 0x0398);
+		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("Tilde", 0x223C);
+		entity("TildeEqual", 0x2243);
+		entity("TildeFullEqual", 0x2245);
+		entity("TildeTilde", 0x2248);
+		entity("times", 0x00D7);
+		entity("timesb", 0x22A0);
+		entity("timesbar", 0x2A31);
+		entity("timesd", 0x2A30);
+		entity("tint", 0x222D);
+		entity("toea", 0x2928);
+		entity("top", 0x22A4);
+		entity("topbot", 0x2336);
+		entity("topcir", 0x2AF1);
+		entity("topf", 0x1D565);
+		entity("Topf", 0x1D54B);
+		entity("topfork", 0x2ADA);
+		entity("tosa", 0x2929);
+		entity("tprime", 0x2034);
+		entity("trade", 0x2122);
+		entity("triangle", 0x25B5);
+		entity("triangledown", 0x25BF);
+		entity("triangleleft", 0x25C3);
+		entity("trianglelefteq", 0x22B4);
+		entity("triangleq", 0x225C);
+		entity("triangleright", 0x25B9);
+		entity("trianglerighteq", 0x22B5);
+		entity("tridot", 0x25EC);
+		entity("trie", 0x225C);
+		entity("triminus", 0x2A3A);
+		entity("triplus", 0x2A39);
+		entity("trisb", 0x29CD);
+		entity("tritime", 0x2A3B);
+		entity("trpezium", 0x23E2);
+		entity("tscr", 0x1D4C9);
+		entity("Tscr", 0x1D4AF);
+		entity("tscy", 0x0446);
+		entity("TScy", 0x0426);
+		entity("tshcy", 0x045B);
+		entity("TSHcy", 0x040B);
+		entity("tstrok", 0x0167);
+		entity("Tstrok", 0x0166);
+		entity("twixt", 0x226C);
+		entity("twoheadleftarrow", 0x219E);
+		entity("twoheadrightarrow", 0x21A0);
+		entity("uacgr", 0x03CD);
+		entity("Uacgr", 0x038E);
+		entity("uacute", 0x00FA);
+		entity("Uacute", 0x00DA);
+		entity("uarr", 0x2191);
+		entity("uArr", 0x21D1);
+		entity("Uarr", 0x219F);
+		entity("Uarrocir", 0x2949);
+		entity("ubrcy", 0x045E);
+		entity("Ubrcy", 0x040E);
+		entity("ubreve", 0x016D);
+		entity("Ubreve", 0x016C);
+		entity("ucirc", 0x00FB);
+		entity("Ucirc", 0x00DB);
+		entity("ucy", 0x0443);
+		entity("Ucy", 0x0423);
+		entity("udarr", 0x21C5);
+		entity("udblac", 0x0171);
+		entity("Udblac", 0x0170);
+		entity("udhar", 0x296E);
+		entity("udiagr", 0x03B0);
+		entity("udigr", 0x03CB);
+		entity("Udigr", 0x03AB);
+		entity("ufisht", 0x297E);
+		entity("ufr", 0x1D532);
+		entity("Ufr", 0x1D518);
+		entity("ugr", 0x03C5);
+		entity("Ugr", 0x03A5);
+		entity("ugrave", 0x00F9);
+		entity("Ugrave", 0x00D9);
+		entity("uHar", 0x2963);
+		entity("uharl", 0x21BF);
+		entity("uharr", 0x21BE);
+		entity("uhblk", 0x2580);
+		entity("ulcorn", 0x231C);
+		entity("ulcorner", 0x231C);
+		entity("ulcrop", 0x230F);
+		entity("ultri", 0x25F8);
+		entity("umacr", 0x016B);
+		entity("Umacr", 0x016A);
+		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("Uopf", 0x1D54C);
+		entity("uparrow", 0x2191);
+		entity("Uparrow", 0x21D1);
+		entity("UpArrowBar", 0x2912);
+		entity("UpArrowDownArrow", 0x21C5);
+		entity("updownarrow", 0x2195);
+		entity("Updownarrow", 0x21D5);
+		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("upsih", 0x03D2);
+		entity("upsilon", 0x03C5);
+		entity("Upsilon", 0x03A5);
+		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("urtri", 0x25F9);
+		entity("uscr", 0x1D4CA);
+		entity("Uscr", 0x1D4B0);
+		entity("utdot", 0x22F0);
+		entity("utilde", 0x0169);
+		entity("Utilde", 0x0168);
+		entity("utri", 0x25B5);
+		entity("utrif", 0x25B4);
+		entity("uuarr", 0x21C8);
+		entity("uuml", 0x00FC);
+		entity("Uuml", 0x00DC);
+		entity("uwangle", 0x29A7);
+		entity("vangrt", 0x299C);
+		entity("varepsilon", 0x03B5);
+		entity("varkappa", 0x03F0);
+		entity("varnothing", 0x2205);
+		entity("varphi", 0x03C6);
+		entity("varpi", 0x03D6);
+		entity("varpropto", 0x221D);
+		entity("varr", 0x2195);
+		entity("vArr", 0x21D5);
+		entity("varrho", 0x03F1);
+		entity("varsigma", 0x03C2);
+		entity("vartheta", 0x03D1);
+		entity("vartriangleleft", 0x22B2);
+		entity("vartriangleright", 0x22B3);
+		entity("vBar", 0x2AE8);
+		entity("Vbar", 0x2AEB);
+		entity("vBarv", 0x2AE9);
+		entity("vcy", 0x0432);
+		entity("Vcy", 0x0412);
+		entity("vdash", 0x22A2);
+		entity("vDash", 0x22A8);
+		entity("Vdash", 0x22A9);
+		entity("VDash", 0x22AB);
+		entity("Vdashl", 0x2AE6);
+		entity("vee", 0x2228);
+		entity("Vee", 0x22C1);
+		entity("veebar", 0x22BB);
+		entity("veeeq", 0x225A);
+		entity("vellip", 0x22EE);
+		entity("verbar", 0x007C);
+		entity("Verbar", 0x2016);
+		entity("vert", 0x007C);
+		entity("Vert", 0x2016);
+		entity("VerticalBar", 0x2223);
+		entity("VerticalLine", 0x007C);
+		entity("VerticalSeparator", 0x2758);
+		entity("VerticalTilde", 0x2240);
+		entity("VeryThinSpace", 0x200A);
+		entity("vfr", 0x1D533);
+		entity("Vfr", 0x1D519);
+		entity("vltri", 0x22B2);
+		entity("vopf", 0x1D567);
+		entity("Vopf", 0x1D54D);
+		entity("vprop", 0x221D);
+		entity("vrtri", 0x22B3);
+		entity("vscr", 0x1D4CB);
+		entity("Vscr", 0x1D4B1);
+		entity("Vvdash", 0x22AA);
+		entity("vzigzag", 0x299A);
+		entity("wcirc", 0x0175);
+		entity("Wcirc", 0x0174);
+		entity("wedbar", 0x2A5F);
+		entity("wedge", 0x2227);
+		entity("Wedge", 0x22C0);
+		entity("wedgeq", 0x2259);
+		entity("weierp", 0x2118);
+		entity("wfr", 0x1D534);
+		entity("Wfr", 0x1D51A);
+		entity("wopf", 0x1D568);
+		entity("Wopf", 0x1D54E);
+		entity("wp", 0x2118);
+		entity("wr", 0x2240);
+		entity("wreath", 0x2240);
+		entity("wscr", 0x1D4CC);
+		entity("Wscr", 0x1D4B2);
+		entity("xcap", 0x22C2);
+		entity("xcirc", 0x25EF);
+		entity("xcup", 0x22C3);
+		entity("xdtri", 0x25BD);
+		entity("xfr", 0x1D535);
+		entity("Xfr", 0x1D51B);
+		entity("xgr", 0x03BE);
+		entity("Xgr", 0x039E);
+		entity("xharr", 0x27F7);
+		entity("xhArr", 0x27FA);
+		entity("xi", 0x03BE);
+		entity("Xi", 0x039E);
+		entity("xlarr", 0x27F5);
+		entity("xlArr", 0x27F8);
+		entity("xmap", 0x27FC);
+		entity("xnis", 0x22FB);
+		entity("xodot", 0x2A00);
+		entity("xopf", 0x1D569);
+		entity("Xopf", 0x1D54F);
+		entity("xoplus", 0x2A01);
+		entity("xotime", 0x2A02);
+		entity("xrarr", 0x27F6);
+		entity("xrArr", 0x27F9);
+		entity("xscr", 0x1D4CD);
+		entity("Xscr", 0x1D4B3);
+		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("YAcy", 0x042F);
+		entity("ycirc", 0x0177);
+		entity("Ycirc", 0x0176);
+		entity("ycy", 0x044B);
+		entity("Ycy", 0x042B);
+		entity("yen", 0x00A5);
+		entity("yfr", 0x1D536);
+		entity("Yfr", 0x1D51C);
+		entity("yicy", 0x0457);
+		entity("YIcy", 0x0407);
+		entity("yopf", 0x1D56A);
+		entity("Yopf", 0x1D550);
+		entity("yscr", 0x1D4CE);
+		entity("Yscr", 0x1D4B4);
+		entity("yucy", 0x044E);
+		entity("YUcy", 0x042E);
+		entity("yuml", 0x00FF);
+		entity("Yuml", 0x0178);
+		entity("zacute", 0x017A);
+		entity("Zacute", 0x0179);
+		entity("zcaron", 0x017E);
+		entity("Zcaron", 0x017D);
+		entity("zcy", 0x0437);
+		entity("Zcy", 0x0417);
+		entity("zdot", 0x017C);
+		entity("Zdot", 0x017B);
+		entity("zeetrf", 0x2128);
+		entity("ZeroWidthSpace", 0x200B);
+		entity("zeta", 0x03B6);
+		entity("Zeta", 0x0396);
+		entity("zfr", 0x1D537);
+		entity("Zfr", 0x2128);
+		entity("zgr", 0x03B6);
+		entity("Zgr", 0x0396);
+		entity("zhcy", 0x0436);
+		entity("ZHcy", 0x0416);
+		entity("zigrarr", 0x21DD);
+		entity("zopf", 0x1D56B);
+		entity("Zopf", 0x2124);
+		entity("zscr", 0x1D4CF);
+		entity("Zscr", 0x1D4B5);
+		entity("zwj", 0x200D);
+		entity("zwnj", 0x200C);
+
+		// End of Schema calls
+		}
+
+
+	}
diff --git a/LICENSE b/src/org/ccil/cowan/tagsoup/LICENSE
similarity index 100%
rename from LICENSE
rename to src/org/ccil/cowan/tagsoup/LICENSE
diff --git a/etc/build/taskdefs.txt b/src/org/ccil/cowan/tagsoup/MODULE_LICENSE_APACHE2
similarity index 100%
rename from etc/build/taskdefs.txt
rename to src/org/ccil/cowan/tagsoup/MODULE_LICENSE_APACHE2
diff --git a/src/java/org/ccil/cowan/tagsoup/PYXScanner.java b/src/org/ccil/cowan/tagsoup/PYXScanner.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/PYXScanner.java
rename to src/org/ccil/cowan/tagsoup/PYXScanner.java
diff --git a/src/java/org/ccil/cowan/tagsoup/PYXWriter.java b/src/org/ccil/cowan/tagsoup/PYXWriter.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/PYXWriter.java
rename to src/org/ccil/cowan/tagsoup/PYXWriter.java
diff --git a/src/java/org/ccil/cowan/tagsoup/Parser.java b/src/org/ccil/cowan/tagsoup/Parser.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/Parser.java
rename to src/org/ccil/cowan/tagsoup/Parser.java
diff --git a/src/java/org/ccil/cowan/tagsoup/ScanHandler.java b/src/org/ccil/cowan/tagsoup/ScanHandler.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/ScanHandler.java
rename to src/org/ccil/cowan/tagsoup/ScanHandler.java
diff --git a/src/java/org/ccil/cowan/tagsoup/Scanner.java b/src/org/ccil/cowan/tagsoup/Scanner.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/Scanner.java
rename to src/org/ccil/cowan/tagsoup/Scanner.java
diff --git a/src/java/org/ccil/cowan/tagsoup/Schema.java b/src/org/ccil/cowan/tagsoup/Schema.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/Schema.java
rename to src/org/ccil/cowan/tagsoup/Schema.java
diff --git a/src/java/org/ccil/cowan/tagsoup/XMLWriter.java b/src/org/ccil/cowan/tagsoup/XMLWriter.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/XMLWriter.java
rename to src/org/ccil/cowan/tagsoup/XMLWriter.java
diff --git a/src/java/org/ccil/cowan/tagsoup/jaxp/JAXPTest.java b/src/org/ccil/cowan/tagsoup/jaxp/JAXPTest.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/jaxp/JAXPTest.java
rename to src/org/ccil/cowan/tagsoup/jaxp/JAXPTest.java
diff --git a/src/java/org/ccil/cowan/tagsoup/jaxp/SAX1ParserAdapter.java b/src/org/ccil/cowan/tagsoup/jaxp/SAX1ParserAdapter.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/jaxp/SAX1ParserAdapter.java
rename to src/org/ccil/cowan/tagsoup/jaxp/SAX1ParserAdapter.java
diff --git a/src/java/org/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl.java b/src/org/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl.java
rename to src/org/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl.java
diff --git a/src/java/org/ccil/cowan/tagsoup/jaxp/SAXParserImpl.java b/src/org/ccil/cowan/tagsoup/jaxp/SAXParserImpl.java
similarity index 100%
rename from src/java/org/ccil/cowan/tagsoup/jaxp/SAXParserImpl.java
rename to src/org/ccil/cowan/tagsoup/jaxp/SAXParserImpl.java
diff --git a/src/templates/org/ccil/cowan/tagsoup/HTMLModels.java b/src/templates/org/ccil/cowan/tagsoup/HTMLModels.java
deleted file mode 100644
index e982bcf..0000000
--- a/src/templates/org/ccil/cowan/tagsoup/HTMLModels.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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/src/templates/org/ccil/cowan/tagsoup/HTMLScanner.java b/src/templates/org/ccil/cowan/tagsoup/HTMLScanner.java
deleted file mode 100644
index 568493a..0000000
--- a/src/templates/org/ccil/cowan/tagsoup/HTMLScanner.java
+++ /dev/null
@@ -1,427 +0,0 @@
-// 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};
-
-	// 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 PushbackReader) {
-			r = (PushbackReader)r0;
-			}
-		else if (r0 instanceof BufferedReader) {
-			r = new PushbackReader(r0);
-			}
-		else {
-			r = new PushbackReader(new BufferedReader(r0));
-			}
-
-		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 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;
-					}
-				}
-//			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/src/templates/org/ccil/cowan/tagsoup/HTMLSchema.java b/src/templates/org/ccil/cowan/tagsoup/HTMLSchema.java
deleted file mode 100644
index 8def657..0000000
--- a/src/templates/org/ccil/cowan/tagsoup/HTMLSchema.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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/stml/stml.rnc b/stml/stml.rnc
deleted file mode 100644
index b767640..0000000
--- a/stml/stml.rnc
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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
deleted file mode 100644
index 4cc6c9d..0000000
--- a/stml/stml.xslt
+++ /dev/null
@@ -1,150 +0,0 @@
-<!--
-// 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/tagsoup.1 b/tagsoup.1
deleted file mode 100644
index fba6ae4..0000000
--- a/tagsoup.1
+++ /dev/null
@@ -1,183 +0,0 @@
-\' 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.
-\'
-.TH TAGSOUP "1" "January 2008" "TagSoup 1.2" "User Commands"
-.SH NAME
-tagsoup \- convert nasty, ugly HTML to clean XHTML
-.SH SYNOPSIS
-.B java -jar tagsoup-1.2
-[
-.I options
-] [
-.I files
-]
-.SH DESCRIPTION
-.\" Add any additional description here
-.PP
-Rectify arbitrary HTML into clean XHTML,
-using a tailored description of HTML.
-The output will be well-formed XML, but not necessarily
-.I valid
-XHTML.
-.PP
-.TP
-.B --files
-multiple input
-.I files
-should be processed into corresponding output files
-.TP
-.BI --encoding= encoding
-specifies the encoding of input files
-.TP
-.BI --output-encoding= encoding
-specifies the encoding of the output
-(if the encoding name begins with ``utf'',
-the output will not contain character entities;
-otherwise, all non-ASCII characters are
-represented as entities)
-.TP
-.B --html
-output rectified HTML rather than XML,
-omitting the XML declaration
-and any namespace declarations
-.TP
-.B --method=html
-output rectified HTML rather than XML
-(end-tags are omitted for empty elements,
-and no character escaping is done in
-script and style elements)
-.TP
-.B --omit-xml-declaration
-omit the XML declaration
-.TP
-.B --lexical
-output lexical features (specifically comments and any DOCTYPE declaration)
-.TP
-.B --nons
-suppress namespaces in output
-.TP
-.B --nobogons
-suppress unknown non-HTML elements in output
-.TP
-.B --nodefaults
-suppress default attribute values
-.TP
-.B --nocolons
-change explicit colons
-in element and attribute names
-to underscores
-.TP
-.B --norestart
-don't restart any restartable elements
-.TP
-.B --ignorable
-pass through ignorable whitespace
-(whitespace in element-only content)
-via SAX method handler ignorableWhitespace
-.TP
-.B --any
-treat unknown non-HTML elements as allowing any content (default)
-.TP
-.B --emptybogons
-treat unknown non-HTML elements as empty elements
-.TP
-.B --norootbogons
-don't allow unknown non-HTML elements to be root elements
-.TP
-.BI --doctype-system= system-id
-force DOCTYPE declaration to be output with specified system identifier
-.TP
-.BI --doctype-public= public-id
-force DOCTYPE declaration to be output with specified public identifier
-.TP
-.B --standalone=[yes|no]
-specify standalone pseudo-attribute in output XML declaration
-.TP
-.BI --version= version
-specify version pseudo-attribute in output XML declaration
-(does not affect actual version of XML output)
-.TP
-.B --nocdata
-treat the CDATA-content elements
-.I script
-and
-.I style
-as ordinary elements
-(mostly for testing)
-.TP
-.B --pyx
-output PYX format rather than XML
-(mostly for testing)
-.TP
-.B --pyxin
-input is PYX-format HTML
-(mostly for testing)
-.TP
-.B --reuse
-reuse the same Parser object internally
-(for testing only)
-.TP
-.B --help
-output basic help
-.TP
-.B --version
-output version number
-.PP
-.B TagSoup
-is a parser and reformatter for nasty, ugly HTML.
-Its normal processing mode is to accept HTML files on the command line,
-or from the standard input if none are given, and output them
-as clean XML
-to the standard output.  The encoding is assumed to be the platform-local
-encoding on input, and is always UTF-8 on output.
-.PP
-When the
-.B --files
-option is given, each input file is processed into an output file of the
-corresponding name, with the extension changed to
-.IR xhtml .
-If the extension is already
-.IR xhtml ,
-it is changed to
-.IR xhtml_ .
-.PP
-TagSoup will repair, by whatever means necessary,
-violations of XML well-formedness.  In particular, it will fix up
-malformed attribute names and supply missing attribute-value quotation marks.
-More significantly, it supplies end-tags where HTML allows them
-to be omitted, and sometimes where it doesn't.  It will even supply
-start-tags where necessary; for example, if a document begins with a
-<li> tag, TagSoup will automatically prefix it with <html><body><ul>.
-.PP
-.SH BUGS
-TagSoup can be fooled by missing close quotes after attribute values, and by
-incorrect character encodings (it does not contain an encoding guesser).
-.PP
-TagSoup doesn't understand namespace declarations, which are not properly
-part of HTML.  Instead, any element or attribute name beginning
-.IR foo :
-will be put into the artificial namespace
-.RI urn:x-prefix: foo .
-.PP
-For the same reasons, namespace-qualified attributes like
-xml:space
-can't be returned as default values,
-though an explicit attribute in the xml namespace
-will be returned with the proper namespace URI.
-.SH AUTHOR
-John Cowan <cowan@ccil.org>
-.SH COPYRIGHT
-Copyright \(co 2002-2008 John Cowan
-.br
-TagSoup is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/tagsoup.txt b/tagsoup.txt
deleted file mode 100644
index 91b5090..0000000
--- a/tagsoup.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-´ This file is part of TagSoup and is Copyright 2002‐2008 by John
-Cowan.  ´ ´ TagSoup is licensed under the Apache License, ´  Ver‐
-sion   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  PUR‐
-TAGSOUP(1)                       User Commands                      TAGSOUP(1)
-
-
-
-POSE.  ´
-
-NAME
-       tagsoup - convert nasty, ugly HTML to clean XHTML
-
-SYNOPSIS
-       java -jar tagsoup-1.2 [ options ] [ files ]
-
-DESCRIPTION
-       Rectify  arbitrary  HTML into clean XHTML, using a tailored description
-       of HTML.  The output will be well-formed XML, but not necessarily valid
-       XHTML.
-
-
-       --files
-              multiple input files should be processed into corresponding out‐
-              put files
-
-       --encoding=encoding
-              specifies the encoding of input files
-
-       --output-encoding=encoding
-              specifies the encoding of  the  output  (if  the  encoding  name
-              begins with ‘‘utf’’, the output will not contain character enti‐
-              ties; otherwise, all non-ASCII  characters  are  represented  as
-              entities)
-
-       --html output rectified HTML rather than XML, omitting the XML declara‐
-              tion and any namespace declarations
-
-       --method=html
-              output rectified HTML rather than XML (end-tags are omitted  for
-              empty  elements, and no character escaping is done in script and
-              style elements)
-
-       --omit-xml-declaration
-              omit the XML declaration
-
-       --lexical
-              output lexical features (specifically comments and  any  DOCTYPE
-              declaration)
-
-       --nons suppress namespaces in output
-
-       --nobogons
-              suppress unknown non-HTML elements in output
-
-       --nodefaults
-              suppress default attribute values
-
-       --nocolons
-              change  explicit colons in element and attribute names to under‐
-              scores
-
-       --norestart
-              don’t restart any restartable elements
-
-       --ignorable
-              pass through ignorable whitespace  (whitespace  in  element-only
-              content) via SAX method handler ignorableWhitespace
-
-       --any  treat   unknown   non-HTML  elements  as  allowing  any  content
-              (default)
-
-       --emptybogons
-              treat unknown non-HTML elements as empty elements
-
-       --norootbogons
-              don’t allow unknown non-HTML elements to be root elements
-
-       --doctype-system=system-id
-              force DOCTYPE declaration to be  output  with  specified  system
-              identifier
-
-       --doctype-public=public-id
-              force  DOCTYPE  declaration  to  be output with specified public
-              identifier
-
-       --standalone=[yes|no]
-              specify standalone pseudo-attribute in output XML declaration
-
-       --version=version
-              specify version pseudo-attribute in output XML declaration (does
-              not affect actual version of XML output)
-
-       --nocdata
-              treat  the  CDATA-content  elements script and style as ordinary
-              elements (mostly for testing)
-
-       --pyx  output PYX format rather than XML (mostly for testing)
-
-       --pyxin
-              input is PYX-format HTML (mostly for testing)
-
-       --reuse
-              reuse the same Parser object internally (for testing only)
-
-       --help output basic help
-
-       --version
-              output version number
-
-       TagSoup is a parser and reformatter for nasty, ugly HTML.   Its  normal
-       processing  mode  is  to accept HTML files on the command line, or from
-       the standard input if none are given, and output them as clean  XML  to
-       the  standard output.  The encoding is assumed to be the platform-local
-       encoding on input, and is always UTF-8 on output.
-
-       When the --files option is given, each input file is processed into  an
-       output  file  of  the corresponding name, with the extension changed to
-       xhtml.  If the extension is already xhtml, it is changed to xhtml_.
-
-       TagSoup will repair, by whatever means  necessary,  violations  of  XML
-       well-formedness.   In  particular,  it  will fix up malformed attribute
-       names and supply missing attribute-value quotation marks.  More signif‐
-       icantly, it supplies end-tags where HTML allows them to be omitted, and
-       sometimes where it doesn’t.  It will even supply start-tags where  nec‐
-       essary; for example, if a document begins with a <li> tag, TagSoup will
-       automatically prefix it with <html><body><ul>.
-
-
-BUGS
-       TagSoup can be fooled by missing close quotes after  attribute  values,
-       and  by  incorrect character encodings (it does not contain an encoding
-       guesser).
-
-       TagSoup doesn’t understand namespace declarations, which are not  prop‐
-       erly  part  of  HTML.  Instead, any element or attribute name beginning
-       foo: will be put into the artificial namespace urn:x-prefix:foo.
-
-       For the same reasons,  namespace-qualified  attributes  like  xml:space
-       can’t  be  returned  as default values, though an explicit attribute in
-       the xml namespace will be returned with the proper namespace URI.
-
-AUTHOR
-       John Cowan <cowan@ccil.org>
-
-COPYRIGHT
-       Copyright © 2002-2008 John Cowan
-       TagSoup is free software; see the source for copying conditions.  There
-       is  NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU‐
-       LAR PURPOSE.
-
-
-
-TagSoup 1.2                      January 2008                       TAGSOUP(1)
diff --git a/tssl/tssl-models.xslt b/tssl/tssl-models.xslt
deleted file mode 100644
index 6a983b4..0000000
--- a/tssl/tssl-models.xslt
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- 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
deleted file mode 100644
index 81faab5..0000000
--- a/tssl/tssl-validate.xslt
+++ /dev/null
@@ -1,40 +0,0 @@
-<!-- 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
deleted file mode 100644
index 4443073..0000000
--- a/tssl/tssl.rnc
+++ /dev/null
@@ -1,75 +0,0 @@
-# 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
deleted file mode 100644
index a25be10..0000000
--- a/tssl/tssl.xslt
+++ /dev/null
@@ -1,220 +0,0 @@
-<!-- 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>