]> granicus.if.org Git - php/commitdiff
- Completed rewrite of html.c. Except for determine_charset, almost nothing
authorGustavo André dos Santos Lopes <cataphract@php.net>
Sun, 24 Oct 2010 15:01:02 +0000 (15:01 +0000)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Sun, 24 Oct 2010 15:01:02 +0000 (15:01 +0000)
  remains.
- Fixed bug on determine_charset that was preventing correct detection in
  combination with internal mbstring encoding "none", "pass" or "auto".
- Added profiles for entity encode/decode for HTMl 4.01, XHTML 1.0, XML 1.0
  and HTML 5. Added the constants ENT_HTML401, ENT_XML1, ENT_XHTML and
  ENT_HTML5.
- htmlentities()/htmlspecialchars(), when told not to double encode, verify
  the correctness of the existenting entities more thoroughly.
  It is checked whether the numerical entity represents a valid unicode code
  point (number is between 0 and 0x10FFFF). If using the flag ENT_DISALLOWED,
  it is also checked whether that numerical entity is valid in selected
  document. In HTML 4.01, all the numerical entities that represent a Unicode
  code point (< U+10FFFFFF) are valid, but that's not the case with other
  document types. If the entity is not valid, & is encoded to &amp;.
  For named entities, the check is also more thorough. While before the only
  check would be to determine if the entity was constituted by alphanumeric
  characters, now it is checked whether that entity is necessarily defined for
  the target document type. Otherwise, & is encoded to &amp;.
- For html_entity_decode(), only valid numerical and named entities (as defined
  above for htmlentities()/htmlspecialchars() + !double_encode) are decoded.
  But there is in this case one additional check. Entities that represent
  non-SGML or otherwise invalid characters are not decoded. Note that, in
  HTML5, U+000D is a valid literal character, but the entity &#x0D is not
  valid and is therefore not decoded.
- The hash tables lazily created for decoding in html_entity_decode() that were
  added recently were substituted by static hash tables. Instead of 1 hash
  table per encoding, there's only one hash table per document type defined in
  terms of unicode code points. This means that for charsets other than UTF-8
  and ISO-8859-1, a conversion to unicode code points is necessary before
  decoding.
- On the encoding side, the ad hoc ranges of entities of the translation
  tables, which mapped (in general) non-unicode code points to HTML entities
  were replaced by three-stage tables for HTML 4 and HTML 5. This mapping
  tables are defined only in terms of unicode code points, so a conversion
  is necessary for charsets other than UTF-8 and ISO-8859-1. Even so, the
  multi-stage table is much faster than the previous method, by a factor
  of 5; the conversion to unicode is a small penalty because it's just a
  simple table lookup.
  XML 1.0/htmlspecialchars() uses a simple table instead of a three-stage
  table.
- Added the flag ENT_SUBSTITUTE, which makes htmlentities()/htmlspecialchars()
  replace the invalid multibyte sequences with U+FFFD (UTF-8) or &#FFFD;
  (other encodings).
- Added the flag ENT_DISALLOWED. Implements FR #52860. Characters that cannot
  appear literally are replaced by U+FFFD (UTF-8) or &#FFFD; (otherwise).
  An alternative implementation would be to encode those characters into
  numerical entities, but that would only work in HTML 4.01 due to limitations
  on the values of numerical entities in other document types. See also the
  effects on htmlentities()/htmlspecialchars() with !double_encode above.

47 files changed:
ext/standard/basic_functions.c
ext/standard/basic_functions.h
ext/standard/html.c
ext/standard/html.h
ext/standard/html_tables.h
ext/standard/html_tables/ents_basic.txt [new file with mode: 0644]
ext/standard/html_tables/ents_basic_apos.txt [new file with mode: 0644]
ext/standard/html_tables/ents_html401.txt [new file with mode: 0644]
ext/standard/html_tables/ents_html5.txt [new file with mode: 0644]
ext/standard/html_tables/ents_xhtml.txt [new file with mode: 0644]
ext/standard/html_tables/html_table_gen.php [new file with mode: 0644]
ext/standard/html_tables/mappings/8859-1.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/8859-15.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/8859-5.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/CP1251.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/CP1252.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/CP866.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/KOI8-R.TXT [new file with mode: 0644]
ext/standard/html_tables/mappings/ROMAN.TXT [new file with mode: 0644]
ext/standard/tests/strings/bug49785.phpt
ext/standard/tests/strings/get_html_translation_table_basic1.phpt
ext/standard/tests/strings/get_html_translation_table_basic2.phpt
ext/standard/tests/strings/get_html_translation_table_basic3.phpt
ext/standard/tests/strings/get_html_translation_table_basic4.phpt
ext/standard/tests/strings/get_html_translation_table_basic5.phpt [new file with mode: 0644]
ext/standard/tests/strings/get_html_translation_table_basic6.phpt [new file with mode: 0644]
ext/standard/tests/strings/get_html_translation_table_basic7.phpt [new file with mode: 0644]
ext/standard/tests/strings/get_html_translation_table_basic8.phpt [new file with mode: 0644]
ext/standard/tests/strings/get_html_translation_table_basic9.phpt [new file with mode: 0644]
ext/standard/tests/strings/get_html_translation_table_variation1.phpt
ext/standard/tests/strings/html_entity_decode1.phpt [new file with mode: 0644]
ext/standard/tests/strings/html_entity_decode2.phpt [new file with mode: 0644]
ext/standard/tests/strings/html_entity_decode3.phpt [new file with mode: 0644]
ext/standard/tests/strings/html_entity_decode_cp866.phpt
ext/standard/tests/strings/html_entity_decode_html4.phpt
ext/standard/tests/strings/html_entity_decode_html5.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities13.phpt
ext/standard/tests/strings/htmlentities14.phpt
ext/standard/tests/strings/htmlentities16.phpt
ext/standard/tests/strings/htmlentities18.phpt
ext/standard/tests/strings/htmlentities19.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities20.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities21.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities22.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities23.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlentities_html5.phpt [new file with mode: 0644]
ext/standard/tests/strings/htmlspecialchars_decode_variation7.phpt [new file with mode: 0644]

index 699197211924423c98bac0ef1c8568521191b005..930bb30332c313e92a4c59fe3c359ed352b29c49 100644 (file)
@@ -3433,7 +3433,6 @@ static void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC) /*
        BG(left) = -1;
        BG(user_tick_functions) = NULL;
        BG(user_filter_map) = NULL;
-       BG(inverse_ent_maps) = NULL;
        
        memset(&BG(serialize), 0, sizeof(BG(serialize)));
        memset(&BG(unserialize), 0, sizeof(BG(unserialize)));
@@ -3456,10 +3455,6 @@ static void basic_globals_dtor(php_basic_globals *basic_globals_p TSRMLS_DC) /*
                zend_hash_destroy(BG(url_adapt_state_ex).tags);
                free(BG(url_adapt_state_ex).tags);
        }
-       if (BG(inverse_ent_maps)) {
-               zend_hash_destroy(BG(inverse_ent_maps));
-               pefree(BG(inverse_ent_maps), 1);
-       }
 }
 /* }}} */
 
index edc5846e0aaff2430b6cfd99c189c0491953271c..4498e6cf8f84083504f23e6e79c3b4849a07e0e9 100644 (file)
@@ -220,10 +220,6 @@ typedef struct _php_basic_globals {
 
        HashTable *user_filter_map;
 
-       /* html.c */
-       /* map entities to characters. Stores hash table pointers for each charset */
-       HashTable *inverse_ent_maps;
-
        /* file.c */
 #if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
        mbstate_t mblen_state;
index 5d683e237bb8226c99203663607cfca0026540f9..7ca8416fe30cf25624932ee4880a71fe6dd6f68f 100644 (file)
 /*
  * HTML entity resources:
  *
- * http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset2.asp
- * http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset3.asp
  * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/UNI2SGML.TXT
  *
+ * XHTML 1.0 DTD
  * http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#h-A2
  *
  * From HTML 4.01 strict DTD:
  * http://www.w3.org/TR/html4/HTMLlat1.ent
  * http://www.w3.org/TR/html4/HTMLsymbol.ent
  * http://www.w3.org/TR/html4/HTMLspecial.ent
+ *
+ * HTML 5:
+ * http://dev.w3.org/html5/spec/Overview.html#named-character-references
  */
 
 #include "php.h"
 ZEND_EXTERN_MODULE_GLOBALS(mbstring)
 #endif
 
+#include <zend_hash.h>
 #include "html_tables.h"
 
-#define MB_RETURN { \
-                       *newpos = pos;       \
-                       mbseq[mbpos] = '\0'; \
-                       *mbseqlen = mbpos;   \
-                       return this_char; }
-                                       
-#define MB_WRITE(mbchar) { \
-                       mbspace--;  \
-                       if (mbspace == 0) {      \
-                               MB_RETURN;           \
-                       }                        \
-                       mbseq[mbpos++] = (mbchar); }
-
-/* skip one byte and return */
-#define MB_FAILURE(pos) do { \
-       *newpos = pos + 1; \
+/* Macro for disabling flag of translation of non-basic entities where this isn't supported.
+ * Not appropriate for html_entity_decode/htmlspecialchars_decode */
+#define LIMIT_ALL(all, doctype, charset) do { \
+       if ((all) && (CHARSET_PARTIAL_SUPPORT((charset)) || (doctype) == ENT_HTML_DOC_XML1)) \
+               (all) = 0; \
+} while (0)
+
+#define MB_FAILURE(pos, advance) do { \
+       *cursor = pos + (advance); \
        *status = FAILURE; \
        return 0; \
 } while (0)
 
-#define CHECK_LEN(pos, chars_need)                     \
-       if (chars_need < 1) {                                           \
-               if((str_len - (pos)) < chars_need) {    \
-                       *newpos = pos;                                          \
-                       *status = FAILURE;                                      \
-                       return 0;                                                       \
-               }                                                                               \
-       } else {                                                                        \
-               if((str_len - (pos)) < chars_need) {    \
-                       *newpos = pos + 1;                                      \
-                       *status = FAILURE;                                      \
-                       return 0;                                                       \
-               }                                                                               \
-       }
+#define CHECK_LEN(pos, chars_need) ((str_len - (pos)) >= (chars_need))
+
+/* valid as single byte character or leading byte */
+#define utf8_lead(c)  ((c) < 0x80 || ((c) >= 0xC2 && (c) <= 0xF4))
+/* whether it's actually valid depends on other stuff;
+ * this macro cannot check for non-shortest forms, surrogates or
+ * code points above 0x10FFFF */
+#define utf8_trail(c) ((c) >= 0x80 && (c) <= 0xBF)
+
+#define gb2312_lead(c) ((c) != 0x8E && (c) != 0x8F && (c) != 0xA0 && (c) != 0xFF)
+#define gb2312_trail(c) ((c) >= 0xA1 && (c) <= 0xFE)
+
+#define sjis_lead(c) ((c) != 0x80 && (c) != 0xA0 && (c) < 0xFD)
+#define sjis_trail(c) ((c) >= 0x40  && (c) != 0x7F && (c) < 0xFD)
 
 /* {{{ get_next_char
  */
-inline static unsigned int get_next_char(enum entity_charset charset,
-               unsigned char * str,
-               int str_len,
-               int * newpos,
-               unsigned char * mbseq,
-               int * mbseqlen, 
+static unsigned int get_next_char(
+               enum entity_charset charset,
+               unsigned char *str,
+               size_t str_len,
+               size_t *cursor,
                int *status)
 {
-       int pos = *newpos;
-       int mbpos = 0;
-       int mbspace = *mbseqlen;
+       size_t pos = *cursor;
        unsigned int this_char = 0;
-       unsigned char next_char;
 
        *status = SUCCESS;
+       assert(pos <= str_len);
 
-       if (mbspace <= 0) {
-               *mbseqlen = 0;
-               CHECK_LEN(pos, 1);
-               *newpos = pos + 1;
-               return str[pos];
-       }
+       if (!CHECK_LEN(pos, 1))
+               MB_FAILURE(pos, 1);
 
        switch (charset) {
-               case cs_utf_8:
-                       {
-                               unsigned char c;
-                               CHECK_LEN(pos, 1);
-                               c = str[pos];
-                               if (c < 0x80) {
-                                       MB_WRITE(c);
-                                       this_char = c;
-                                       pos++;
-                               } else if (c < 0xc2) {
-                                       MB_FAILURE(pos);
-                               } else if (c < 0xe0) {
-                                       CHECK_LEN(pos, 2);
-                                       if (str[pos + 1] < 0x80 || str[pos + 1] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       this_char = ((c & 0x1f) << 6) | (str[pos + 1] & 0x3f);
-                                       if (this_char < 0x80) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       MB_WRITE((unsigned char)c);
-                                       MB_WRITE((unsigned char)str[pos + 1]);
-                                       pos += 2;
-                               } else if (c < 0xf0) {
-                                       CHECK_LEN(pos, 3);
-                                       if (str[pos + 1] < 0x80 || str[pos + 1] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       if (str[pos + 2] < 0x80 || str[pos + 2] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       this_char = ((c & 0x0f) << 12) | ((str[pos + 1] & 0x3f) << 6) | (str[pos + 2] & 0x3f);
-                                       if (this_char < 0x800) {
-                                               MB_FAILURE(pos);
-                                       } else if (this_char >= 0xd800 && this_char <= 0xdfff) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       MB_WRITE((unsigned char)c);
-                                       MB_WRITE((unsigned char)str[pos + 1]);
-                                       MB_WRITE((unsigned char)str[pos + 2]);
-                                       pos += 3;
-                               } else if (c < 0xf5) {
-                                       CHECK_LEN(pos, 4);
-                                       if (str[pos + 1] < 0x80 || str[pos + 1] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       if (str[pos + 2] < 0x80 || str[pos + 2] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       if (str[pos + 3] < 0x80 || str[pos + 3] > 0xbf) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       this_char = ((c & 0x07) << 18) | ((str[pos + 1] & 0x3f) << 12) | ((str[pos + 2] & 0x3f) << 6) | (str[pos + 3] & 0x3f);
-                                       if (this_char < 0x10000 || this_char > 0x10FFFF) {
-                                               MB_FAILURE(pos);
-                                       }
-                                       MB_WRITE((unsigned char)c);
-                                       MB_WRITE((unsigned char)str[pos + 1]);
-                                       MB_WRITE((unsigned char)str[pos + 2]);
-                                       MB_WRITE((unsigned char)str[pos + 3]);
-                                       pos += 4;
+       case cs_utf_8:
+               {
+                       /* We'll follow strategy 2. from section 3.6.1 of UTR #36:
+                        * "In a reported illegal byte sequence, do not include any
+                        *  non-initial byte that encodes a valid character or is a leading
+                        *  byte for a valid sequence.» */
+                       unsigned char c;
+                       c = str[pos];
+                       if (c < 0x80) {
+                               this_char = c;
+                               pos++;
+                       } else if (c < 0xc2) {
+                               MB_FAILURE(pos, 1);
+                       } else if (c < 0xe0) {
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               if (!utf8_trail(str[pos + 1])) {
+                                       MB_FAILURE(pos, utf8_lead(str[pos + 1]) ? 1 : 2);
+                               }
+                               this_char = ((c & 0x1f) << 6) | (str[pos + 1] & 0x3f);
+                               if (this_char < 0x80) { /* non-shortest form */
+                                       MB_FAILURE(pos, 2);
+                               }
+                               pos += 2;
+                       } else if (c < 0xf0) {
+                               size_t avail = str_len - pos;
+
+                               if (avail < 3 ||
+                                               !utf8_trail(str[pos + 1]) || !utf8_trail(str[pos + 2])) {
+                                       if (avail < 2 || utf8_lead(str[pos + 1]))
+                                               MB_FAILURE(pos, 1);
+                                       else if (avail < 3 || utf8_lead(str[pos + 2]))
+                                               MB_FAILURE(pos, 2);
+                                       else
+                                               MB_FAILURE(pos, 3);
+                               }
+
+                               this_char = ((c & 0x0f) << 12) | ((str[pos + 1] & 0x3f) << 6) | (str[pos + 2] & 0x3f);
+                               if (this_char < 0x800) { /* non-shortest form */
+                                       MB_FAILURE(pos, 3);
+                               } else if (this_char >= 0xd800 && this_char <= 0xdfff) { /* surrogate */
+                                       MB_FAILURE(pos, 3);
+                               }
+                               pos += 3;
+                       } else if (c < 0xf5) {
+                               size_t avail = str_len - pos;
+
+                               if (avail < 4 ||
+                                               !utf8_trail(str[pos + 1]) || !utf8_trail(str[pos + 2]) ||
+                                               !utf8_trail(str[pos + 3])) {
+                                       if (avail < 2 || utf8_lead(str[pos + 1]))
+                                               MB_FAILURE(pos, 1);
+                                       else if (avail < 3 || utf8_lead(str[pos + 2]))
+                                               MB_FAILURE(pos, 2);
+                                       else if (avail < 4 || utf8_lead(str[pos + 3]))
+                                               MB_FAILURE(pos, 3);
+                                       else
+                                               MB_FAILURE(pos, 4);
+                               }
+                               
+                               this_char = ((c & 0x07) << 18) | ((str[pos + 1] & 0x3f) << 12) | ((str[pos + 2] & 0x3f) << 6) | (str[pos + 3] & 0x3f);
+                               if (this_char < 0x10000 || this_char > 0x10FFFF) { /* non-shortest form or outside range */
+                                       MB_FAILURE(pos, 4);
+                               }
+                               pos += 4;
+                       } else {
+                               MB_FAILURE(pos, 1);
+                       }
+               }
+               break;
+
+       case cs_big5:
+               /* reference http://demo.icu-project.org/icu-bin/convexp?conv=big5 */
+               {
+                       unsigned char c = str[pos];
+                       if (c >= 0x81 && c <= 0xFE) {
+                               unsigned char next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               next = str[pos + 1];
+
+                               if ((next >= 0x40 && next <= 0x7E) ||
+                                               (next >= 0xA1 && next <= 0xFE)) {
+                                       this_char = (c << 8) | next;
                                } else {
-                                       MB_FAILURE(pos);
+                                       MB_FAILURE(pos, 1);
                                }
+                               pos += 2;
+                       } else {
+                               this_char = c;
+                               pos += 1;
                        }
-                       break;
-               case cs_big5:
-               case cs_gb2312:
-               case cs_big5hkscs:
-                       {
-                               CHECK_LEN(pos, 1);
-                               this_char = str[pos++];
-                               /* check if this is the first of a 2-byte sequence */
-                               if (this_char >= 0x81 && this_char <= 0xfe) {
-                                       /* peek at the next char */
-                                       CHECK_LEN(pos, 1);
-                                       next_char = str[pos++];
-                                       if ((next_char >= 0x40 && next_char <= 0x7e) ||
-                                                       (next_char >= 0xa1 && next_char <= 0xfe)) {
-                                               /* yes, this a wide char */
-                                               MB_WRITE(this_char);
-                                               MB_WRITE(next_char);
-                                               this_char = (this_char << 8) | next_char;
-                                       } else {
-                                               MB_FAILURE(pos);
-                                       }
+               }
+               break;
+
+       case cs_big5hkscs:
+               {
+                       unsigned char c = str[pos];
+                       if (c >= 0x81 && c <= 0xFE) {
+                               unsigned char next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               next = str[pos + 1];
+
+                               if ((next >= 0x40 && next <= 0x7E) ||
+                                               (next >= 0xA1 && next <= 0xFE)) {
+                                       this_char = (c << 8) | next;
+                               } else if (next != 0x80 && next != 0xFF) {
+                                       MB_FAILURE(pos, 1);
+                               } else {
+                                       MB_FAILURE(pos, 2);
+                               }
+                               pos += 2;
+                       } else {
+                               this_char = c;
+                               pos += 1;
+                       }
+               }
+               break;
+
+       case cs_gb2312: /* EUC-CN */
+               {
+                       unsigned char c = str[pos];
+                       if (c >= 0xA1 && c <= 0xFE) {
+                               unsigned char next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               next = str[pos + 1];
+
+                               if (gb2312_trail(next)) {
+                                       this_char = (c << 8) | next;
+                               } else if (gb2312_lead(next)) {
+                                       MB_FAILURE(pos, 1);
                                } else {
-                                       MB_WRITE(this_char);
+                                       MB_FAILURE(pos, 2);
                                }
+                               pos += 2;
+                       } else if (gb2312_lead(c)) {
+                               this_char = c;
+                               pos += 1;
+                       } else {
+                               MB_FAILURE(pos, 1);
                        }
-                       break;
-               case cs_sjis:
-                       {
-                               CHECK_LEN(pos, 1);
-                               this_char = str[pos++];
-                               /* check if this is the first of a 2-byte sequence */
-                               if ((this_char >= 0x81 && this_char <= 0x9f) ||
-                                       (this_char >= 0xe0 && this_char <= 0xfc)) {
-                                       /* peek at the next char */
-                                       CHECK_LEN(pos, 1);
-                                       next_char = str[pos++];
-                                       if ((next_char >= 0x40 && next_char <= 0x7e) ||
-                                               (next_char >= 0x80 && next_char <= 0xfc))
-                                       {
-                                               /* yes, this a wide char */
-                                               MB_WRITE(this_char);
-                                               MB_WRITE(next_char);
-                                               this_char = (this_char << 8) | next_char;
-                                       } else {
-                                               MB_FAILURE(pos);
-                                       }
+               }
+               break;
+
+       case cs_sjis:
+               {
+                       unsigned char c = str[pos];
+                       if ((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xFC)) {
+                               unsigned char next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               next = str[pos + 1];
+
+                               if (sjis_trail(next)) {
+                                       this_char = (c << 8) | next;
+                               } else if (sjis_lead(next)) {
+                                       MB_FAILURE(pos, 1);
                                } else {
-                                       MB_WRITE(this_char);
+                                       MB_FAILURE(pos, 2);
                                }
-                               break;
+                               pos += 2;
+                       } else if (c < 0x80 || c >= 0xA1 && c <= 0xDF) {
+                               this_char = c;
+                               pos += 1;
+                       } else {
+                               MB_FAILURE(pos, 1);
                        }
-               case cs_eucjp:
-                       {
-                               CHECK_LEN(pos, 1);
-                               this_char = str[pos++];
-                               /* check if this is the first of a multi-byte sequence */
-                               if (this_char >= 0xa1 && this_char <= 0xfe) {
-                                       /* peek at the next char */
-                                       CHECK_LEN(pos, 1);
-                                       next_char = str[pos++];
-                                       if (next_char >= 0xa1 && next_char <= 0xfe) {
-                                               /* yes, this a jis kanji char */
-                                               MB_WRITE(this_char);
-                                               MB_WRITE(next_char);
-                                               this_char = (this_char << 8) | next_char;
-                                       } else {
-                                               MB_FAILURE(pos);
-                                       }
-                               } else if (this_char == 0x8e) {
-                                       /* peek at the next char */
-                                       CHECK_LEN(pos, 1);
-                                       next_char = str[pos++];
-                                       if (next_char >= 0xa1 && next_char <= 0xdf) {
-                                               /* JIS X 0201 kana */
-                                               MB_WRITE(this_char);
-                                               MB_WRITE(next_char);
-                                               this_char = (this_char << 8) | next_char;
-                                       } else {
-                                               MB_FAILURE(pos);
-                                       }
-                               } else if (this_char == 0x8f) {
-                                       /* peek at the next two char */
-                                       unsigned char next2_char;
-                                       CHECK_LEN(pos, 2);
-                                       next_char = str[pos];
-                                       next2_char = str[pos + 1];
-                                       pos += 2;
-                                       if ((next_char >= 0xa1 && next_char <= 0xfe) &&
-                                               (next2_char >= 0xa1 && next2_char <= 0xfe)) {
-                                               /* JIS X 0212 hojo-kanji */
-                                               MB_WRITE(this_char);
-                                               MB_WRITE(next_char);
-                                               MB_WRITE(next2_char);
-                                               this_char = (this_char << 16) | (next_char << 8) | next2_char;
-                                       } else {
-                                               MB_FAILURE(pos);
-                                       }
+               }
+               break;
+
+       case cs_eucjp:
+               {
+                       unsigned char c = str[pos];
+
+                       if (c >= 0xA1 && c <= 0xFE) {
+                               unsigned next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+                               next = str[pos + 1];
+
+                               if (next >= 0xA1 && next <= 0xFE) {
+                                       /* this a jis kanji char */
+                                       this_char = (c << 8) | next;
                                } else {
-                                       MB_WRITE(this_char);
+                                       MB_FAILURE(pos, (next != 0xA0 && next != 0xFF) ? 1 : 2);
                                }
-                               break;
+                               pos += 2;
+                       } else if (c == 0x8E) {
+                               unsigned next;
+                               if (!CHECK_LEN(pos, 2))
+                                       MB_FAILURE(pos, 1);
+
+                               next = str[pos + 1];
+                               if (next >= 0xA1 && next <= 0xDF) {
+                                       /* JIS X 0201 kana */
+                                       this_char = (c << 8) | next;
+                               } else {
+                                       MB_FAILURE(pos, (next != 0xA0 && next != 0xFF) ? 1 : 2);
+                               }
+                               pos += 2;
+                       } else if (c == 0x8F) {
+                               size_t avail = str_len - pos;
+
+                               if (avail < 3 || !(str[pos + 1] >= 0xA1 && str[pos + 1] <= 0xFE) ||
+                                               !(str[pos + 2] >= 0xA1 && str[pos + 2] <= 0xFE)) {
+                                       if (avail < 2 || (str[pos + 1] != 0xA0 && str[pos + 1] != 0xFF))
+                                               MB_FAILURE(pos, 1);
+                                       else if (avail < 3 || (str[pos + 2] != 0xA0 && str[pos + 2] != 0xFF))
+                                               MB_FAILURE(pos, 2);
+                                       else
+                                               MB_FAILURE(pos, 3);
+                               } else {
+                                       /* JIS X 0212 hojo-kanji */
+                                       this_char = (c << 16) | (str[pos + 1] << 8) | str[pos + 2];
+                               }
+                               pos += 3;
+                       } else if (c != 0xA0 && c != 0xFF) {
+                               /* character encoded in 1 code unit */
+                               this_char = c;
+                               pos += 1;
+                       } else {
+                               MB_FAILURE(pos, 1);
                        }
-               default:
-                       /* single-byte charsets */
-                       CHECK_LEN(pos, 1);
-                       this_char = str[pos++];
-                       MB_WRITE(this_char);
-                       break;
+               }
+               break;
+       default:
+               /* single-byte charsets */
+               this_char = str[pos++];
+               break;
        }
-       MB_RETURN;
+
+       *cursor = pos;
+       return this_char;
 }
 /* }}} */
 
@@ -374,16 +428,16 @@ static enum entity_charset determine_charset(char *charset_hint TSRMLS_DC)
                        charset_hint = Z_STRVAL_P(uf_result);
                        len = Z_STRLEN_P(uf_result);
                        
-                       if (len == 4) { /* sizeof(none|auto|pass)-1 */
-                               if (!memcmp("pass", charset_hint, sizeof("pass") - 1) || 
-                                   !memcmp("auto", charset_hint, sizeof("auto") - 1) || 
-                                   !memcmp("none", charset_hint, sizeof("none") - 1)) {
+                       if ((len == 4) && /* sizeof(none|auto|pass)-1 */
+                                       (!memcmp("pass", charset_hint, sizeof("pass") - 1) || 
+                                       !memcmp("auto", charset_hint, sizeof("auto") - 1) || 
+                                   !memcmp("none", charset_hint, sizeof("none") - 1))) {
                                        
-                                       charset_hint = NULL;
-                                       len = 0;
-                               }
+                               charset_hint = NULL;
+                               len = 0;
+                       } else {
+                               goto det_charset;
                        }
-                       goto det_charset;
                }
        }
 #endif
@@ -456,7 +510,7 @@ det_charset:
 /* }}} */
 
 /* {{{ php_utf32_utf8 */
-static size_t php_utf32_utf8(unsigned char *buf, unsigned k)
+static inline size_t php_utf32_utf8(unsigned char *buf, unsigned k)
 {
        size_t retval = 0;
 
@@ -489,7 +543,7 @@ static size_t php_utf32_utf8(unsigned char *buf, unsigned k)
 
 /* {{{ php_mb2_int_to_char
  * Convert back big endian int representation of sequence of one or two 8-bit code units. */
-static size_t php_mb2_int_to_char(unsigned char *buf, unsigned k)
+static inline size_t php_mb2_int_to_char(unsigned char *buf, unsigned k)
 {
        assert(k <= 0xFFFFU);
        /* one or two bytes */
@@ -507,7 +561,7 @@ static size_t php_mb2_int_to_char(unsigned char *buf, unsigned k)
 /* {{{ php_mb3_int_to_char
  * Convert back big endian int representation of sequence of one to three 8-bit code units.
  * For EUC-JP. */
-static size_t php_mb3_int_to_char(unsigned char *buf, unsigned k)
+static inline size_t php_mb3_int_to_char(unsigned char *buf, unsigned k)
 {
        assert(k <= 0xFFFFFFU);
        /* one to three bytes */
@@ -533,11 +587,11 @@ static size_t php_mb3_int_to_char(unsigned char *buf, unsigned k)
  * Returns the code point in the target charset (whose mapping table was given) or 0 if
  * the unicode code point is not in the table.
  */
-static unsigned char unimap_bsearch(const unicode_mapping *table, unsigned code_key_a, size_t num)
+static inline unsigned char unimap_bsearch(const uni_to_enc *table, unsigned code_key_a, size_t num)
 {
-       const unicode_mapping *l = table,
-                                                 *h = &table[num-1],
-                                                 *m;
+       const uni_to_enc *l = table,
+                                        *h = &table[num-1],
+                                        *m;
        unsigned short code_key;
 
        /* we have no mappings outside the BMP */
@@ -545,7 +599,7 @@ static unsigned char unimap_bsearch(const unicode_mapping *table, unsigned code_
                return 0;
 
        code_key = (unsigned short) code_key_a;
-
+       
        while (l <= h) {
                m = l + (h - l) / 2;
                if (code_key < m->un_code_point)
@@ -560,10 +614,10 @@ static unsigned char unimap_bsearch(const unicode_mapping *table, unsigned code_
 /* }}} */
 
 /* {{{ map_from_unicode */
-static int map_from_unicode(unsigned code, enum entity_charset charset, unsigned *res)
+static inline int map_from_unicode(unsigned code, enum entity_charset charset, unsigned *res)
 {
        unsigned char found;
-       const unicode_mapping *table;
+       const uni_to_enc *table;
        size_t table_size;
 
        switch (charset) {
@@ -652,8 +706,10 @@ table_over_7F:
         * See <http://www.unicode.org/Public/6.0.0/ucd/Unihan.zip> */
        case cs_sjis:
        case cs_eucjp:
+               /* we interpret 0x5C as the Yen symbol. This is not universal.
+                * See <http://www.w3.org/Submission/japanese-xml/#ambiguity_of_yen> */
                if (code >= 0x20 && code <= 0x7D) {
-                       if (code == 0x5C) /* 0x5C is mapped to the yen symbol */
+                       if (code == 0x5C)
                                return FAILURE;
                        *res = code;
                } else {
@@ -679,17 +735,108 @@ table_over_7F:
 }
 /* }}} */
 
+/* {{{ */
+static inline void map_to_unicode(unsigned code, const enc_to_uni *table, unsigned *res)
+{
+       /* only single byte encodings are currently supported; assumed code <= 0xFF */
+       *res = table->inner[ENT_ENC_TO_UNI_STAGE1(code)]->uni_cp[ENT_ENC_TO_UNI_STAGE2(code)];
+}
+/* }}} */
+
+/* {{{ unicode_cp_is_allowed */
+static inline int unicode_cp_is_allowed(unsigned uni_cp, int document_type)
+{
+       /* XML 1.0                              HTML 4.01                       HTML 5
+        * 0x09..0x0A                   0x09..0x0A                      0x09..0x0A
+        * 0x0D                                 0x0D                            0x0C..0x0D
+        * 0x0020..0xD7FF               0x20..0x7E                      0x20..0x7E
+        *                                              0x00A0..0xD7FF          0x00A0..0xD7FF
+        * 0xE000..0xFFFD               0xE000..0x10FFFF        0xE000..0xFDCF
+        * 0x010000..0x10FFFF                                           0xFDF0..0x10FFFF (*)
+        *
+        * (*) exclude code points where ((code & 0xFFFF) >= 0xFFFE)
+        *
+        * References:
+        * XML 1.0:   <http://www.w3.org/TR/REC-xml/#charsets>
+        * HTML 4.01: <http://www.w3.org/TR/1999/PR-html40-19990824/sgml/sgmldecl.html>
+        * HTML 5:    <http://dev.w3.org/html5/spec/Overview.html#preprocessing-the-input-stream>
+        *
+        * Not sure this is the relevant part for HTML 5, though. I opted to
+        * disallow the characters that would result in a parse error when
+        * preprocessing of the input stream. See also section 8.1.3.
+        * 
+        * It's unclear if XHTML 1.0 allows C1 characters. I'll opt to apply to
+        * XHTML 1.0 the same rules as for XML 1.0.
+        * See <http://cmsmcq.com/2007/C1.xml>.
+        */
+
+       switch (document_type) {
+       case ENT_HTML_DOC_HTML401:
+               return (uni_cp >= 0x20 && uni_cp <= 0x7E) ||
+                       (uni_cp == 0x0A || uni_cp == 0x09 || uni_cp == 0x0D) ||
+                       (uni_cp >= 0xA0 && uni_cp <= 0xD7FF) ||
+                       (uni_cp >= 0xE000 && uni_cp <= 0x10FFFF);
+       case ENT_HTML_DOC_HTML5:
+               return (uni_cp >= 0x20 && uni_cp <= 0x7E) ||
+                       (uni_cp >= 0x09 && uni_cp <= 0x0D && uni_cp != 0x0B) || /* form feed U+0C allowed */
+                       (uni_cp >= 0xA0 && uni_cp <= 0xD7FF) ||
+                       (uni_cp >= 0xE000 && uni_cp <= 0x10FFFF &&
+                               ((uni_cp & 0xFFFF) < 0xFFFE) && /* last two of each plane (nonchars) disallowed */
+                               (uni_cp < 0xFDD0 || uni_cp > 0xFDEF)); /* U+FDD0-U+FDEF (nonchars) disallowed */
+       case ENT_HTML_DOC_XHTML:
+       case ENT_HTML_DOC_XML1:
+               return (uni_cp >= 0x20 && uni_cp <= 0xD7FF) ||
+                       (uni_cp == 0x0A || uni_cp == 0x09 || uni_cp == 0x0D) ||
+                       (uni_cp >= 0xE000 && uni_cp <= 0x10FFFF && uni_cp != 0xFFFE && uni_cp != 0xFFFF);
+       default:
+               return 1;
+       }
+}
+/* }}} */
+
+/* {{{ unicode_cp_is_allowed */
+static inline int numeric_entity_is_allowed(unsigned uni_cp, int document_type)
+{
+       /* less restrictive than unicode_cp_is_allowed */
+       switch (document_type) {
+       case ENT_HTML_DOC_HTML401:
+               /* all non-SGML characters (those marked with UNUSED in DESCSET) should be
+                * representable with numeric entities */
+               return uni_cp <= 0x10FFFF;
+       case ENT_HTML_DOC_HTML5:
+               /* 8.1.4. The numeric character reference forms described above are allowed to
+                * reference any Unicode code point other than U+0000, U+000D, permanently
+                * undefined Unicode characters (noncharacters), and control characters other
+                * than space characters (U+0009, U+000A, U+000C and U+000D) */
+               /* seems to allow surrogate characters, then */
+               return (uni_cp >= 0x20 && uni_cp <= 0x7E) ||
+                       (uni_cp >= 0x09 && uni_cp <= 0x0C && uni_cp != 0x0B) || /* form feed U+0C allowed, but not U+0D */
+                       (uni_cp >= 0xA0 && uni_cp <= 0x10FFFF &&
+                               ((uni_cp & 0xFFFF) < 0xFFFE) && /* last two of each plane (nonchars) disallowed */
+                               (uni_cp < 0xFDD0 || uni_cp > 0xFDEF)); /* U+FDD0-U+FDEF (nonchars) disallowed */
+       case ENT_HTML_DOC_XHTML:
+       case ENT_HTML_DOC_XML1:
+               /* OTOH, XML 1.0 requires "character references to match the production for Char
+                * See <http://www.w3.org/TR/REC-xml/#NT-CharRef> */
+               return unicode_cp_is_allowed(uni_cp, document_type);
+       default:
+               return 1;
+       }
+}
+/* }}} */
+
 /* {{{ process_numeric_entity
  * Auxiliary function to traverse_for_entities.
  * On input, *buf should point to the first character after # and on output, it's the last
  * byte read, no matter if there was success or insuccess. 
  */
-static int process_numeric_entity(char **buf, unsigned *code_point, int all)
+static inline int process_numeric_entity(const char **buf, unsigned *code_point)
 {
        long code_l;
-       int hexadecimal = (**buf == 'x' || **buf == 'X');
+       int hexadecimal = (**buf == 'x' || **buf == 'X'); /* TODO: XML apparently disallows "X" */
+       char *endptr;
 
-       if (hexadecimal)
+       if (hexadecimal && (**buf != '\0'))
                (*buf)++;
                        
        /* strtol allows whitespace and other stuff in the beginning
@@ -699,34 +846,29 @@ static int process_numeric_entity(char **buf, unsigned *code_point, int all)
                return FAILURE;
        }
 
-       code_l = strtol(*buf, buf, hexadecimal ? 16 : 10);
+       code_l = strtol(*buf, &endptr, hexadecimal ? 16 : 10);
+       /* we're guaranteed there were valid digits, so *endptr > buf */
+       *buf = endptr;
 
        if (**buf != ';')
                return FAILURE;
 
        /* many more are invalid, but that depends on whether it's HTML
-               * (and which version) or XML. Rejecting 0 is handy because that's
-               * the return of strtol if no character was read */
-       if (code_l <= 0L || code_l > 0x10FFFFL)
+        * (and which version) or XML. */
+       if (code_l > 0x10FFFFL)
                return FAILURE;
-       
-       *code_point = (unsigned)code_l;
 
-       if (!all) {
-               if (*code_point != '\'' && *code_point != '"')
-                       return FAILURE;
-       }
+       if (code_point != NULL)
+               *code_point = (unsigned)code_l;
 
        return SUCCESS;
 }
 /* }}} */
 
 /* {{{ process_named_entity */
-static int process_named_entity(char **buf, unsigned *code_unit_seq, HashTable *inv_map)
+static inline int process_named_entity_html(const char **buf, const char **start, size_t *length)
 {
-       size_t length;
-       char *start = *buf;
-       unsigned *stored_code;
+       *start = *buf;
 
        /* "&" is represented by a 0x26 in all supported encodings. That means
         * the byte after represents a character or is the leading byte of an
@@ -743,53 +885,117 @@ static int process_named_entity(char **buf, unsigned *code_unit_seq, HashTable *
                return FAILURE;
 
        /* cast to size_t OK as the quantity is always non-negative */
-       length = *buf - start;
-       if (length == 0 || length > 31) /* 31 is arbitrary */
-               return FAILURE;
+       *length = *buf - *start;
 
-       if (zend_hash_find(inv_map, start, (uint)length, (void**)&stored_code) == FAILURE)
+       if (*length == 0)
                return FAILURE;
 
-       *code_unit_seq = *stored_code;
-
        return SUCCESS;
 }
 /* }}} */
 
+/* {{{ resolve_named_entity_html */
+static inline int resolve_named_entity_html(const char *start, size_t length, const entity_ht *ht, unsigned *uni_cp1, unsigned *uni_cp2)
+{
+       const entity_cp_map *s;
+       ulong hash = zend_inline_hash_func(start, length);
+
+       s = ht->buckets[hash % ht->num_elems];
+       while (s->entity) {
+               if (s->entity_len == length) {
+                       if (memcmp(start, s->entity, length) == 0) {
+                               *uni_cp1 = s->codepoint1;
+                               *uni_cp2 = s->codepoint2;
+                               return SUCCESS;
+                       }
+               }
+               s++;
+       }
+       return FAILURE;
+}
+/* }}} */
+
+static inline size_t write_octet_sequence(unsigned char *buf, enum entity_charset charset, unsigned code) {
+       /* code is not necessarily a unicode code point */
+       switch (charset) {
+       case cs_utf_8:
+               return php_utf32_utf8(buf, code);
+
+       case cs_8859_1:
+       case cs_cp1252:
+       case cs_8859_15:
+       case cs_koi8r:
+       case cs_cp1251:
+       case cs_8859_5:
+       case cs_cp866:
+       case cs_macroman:
+               /* single byte stuff */
+               *buf = code;
+               return 1;
+
+       case cs_big5:
+       case cs_big5hkscs:
+       case cs_sjis:
+       case cs_gb2312:
+               /* we don't have complete unicode mappings for these yet in entity_decode,
+                * and we opt to pass through the octet sequences for these in htmlentities
+                * instead of converting to an int and then converting back. */
+#if 0
+               return php_mb2_int_to_char(buf, code);
+#else
+#ifdef ZEND_DEBUG
+               assert(code <= 0xFFU);
+#endif
+               *buf = code;
+               return 1;
+#endif
+
+       case cs_eucjp:
+#if 0 /* idem */
+               return php_mb2_int_to_char(buf, code);
+#else
+#ifdef ZEND_DEBUG
+               assert(code <= 0xFFU);
+#endif
+               *buf = code;
+               return 1;
+#endif
+
+       default:
+               assert(0);
+               return 0;
+       }
+}
+
 /* {{{ traverse_for_entities
  * Auxiliary function to php_unescape_html_entities().
  * - The argument "all" determines if all numeric entities are decode or only those
- *   that correspond to quotes (depending on quote_style). Typically used with the inv_map
- *   stored under the key 0 in BG(inverse_ent_maps).
- * - Using cs_terminator as charset is legal and has the effect of defaulting to UTF-8. Used
- *   when the encoding doesn't (or shouldn't...) matter.
+ *   that correspond to quotes (depending on quote_style).
  */
-static void traverse_for_entities(char *ret, int *retlen_p, int all, int quote_style, HashTable *inv_map, enum entity_charset charset)
+/* maximum expansion (factor 1.2) for HTML 5 with &nGt; and &nLt; */
+/* +2 is 1 because of rest (probably unnecessary), 1 because of terminating 0 */
+#define TRAVERSE_FOR_ENTITIES_EXPAND_SIZE(oldlen) ((oldlen) + (oldlen) / 5 + 2)
+static void traverse_for_entities(
+       const char *old,
+       size_t oldlen,
+       char *ret, /* should have allocated TRAVERSE_FOR_ENTITIES_EXPAND_SIZE(olden) */
+       size_t *retlen,
+       int all,
+       int flags,
+       const entity_ht *inv_map,
+       enum entity_charset charset)
 {
-       int retlen;
-       char *p, *q, *lim;
-
-       /* note: this function assumes the entities always take equal or more space
-        * than the characters they represent in whatever supported external encoding.
-        * The supported encoding that can generate the longest code unit sequences is
-        * UTF-8 (4 bytes). Theoretically, there could be entities with only 3 chars
-        * (e.g. &z;) that would map to outside-the-BMP unicode code points and hence
-        * needed 4 bytes and would overflow, but we have no such thing. */
-
-       if (charset == cs_terminator) /* caller doesn't care; we choose one */
-               charset = cs_utf_8;
-
-       retlen = *retlen_p;
+       const char *p,
+                          *lim;
+       char       *q;
+       int doctype = flags & ENT_HTML_DOC_TYPE_MASK;
 
-       lim = ret + retlen; /* terminator address */
+       lim = old + oldlen; /* terminator address */
        assert(*lim == '\0');
 
-       for (p = ret, q = ret; p < lim;) {
-               unsigned code;
-               char *next = NULL;
-               /* code is unicode code point or a set of 8-bit code units packed into
-                * an integer with the least significant bit being the last byte? */
-               int unicode;
+       for (p = old, q = ret; p < lim;) {
+               unsigned code, code2 = 0;
+               const char *next = NULL; /* when set, next > p, otherwise possible inf loop */
 
                /* Shift JIS, Big5 and HKSCS use multi-byte encodings where an
                 * ASCII range byte can be part of a multi-byte sequence.
@@ -807,80 +1013,61 @@ static void traverse_for_entities(char *ret, int *retlen_p, int all, int quote_s
                /* numerical entity */
                if (p[1] == '#') {
                        next = &p[2];
-                       if (process_numeric_entity(&next, &code, all) == FAILURE)
+                       if (process_numeric_entity(&next, &code) == FAILURE)
                                goto invalid_code;
-                       unicode = 1;
-               } else if (inv_map != NULL) {
-                       next = &p[1];
-                       if (process_named_entity(&next, &code, inv_map) == FAILURE)
+
+                       /* If we're in htmlspecialchars_decode, we're only decoding entities
+                        * that represent &, <, >, " and '. Is this one of them? */
+                       if (!all && (code > 63U ||
+                                       stage3_table_be_apos_00000[code].data.ent.entity == NULL))
+                               goto invalid_code;
+
+                       /* are we allowed to decode this entity in this document type?
+                        * HTML 5 is the only that has a character that cannot be used in 
+                        * a numeric entity but is allowed literally (U+000D). The
+                        * unoptimized version would be ... || !numeric_entity_is_allowed(code) */
+                       if (!unicode_cp_is_allowed(code, doctype) ||
+                                       (doctype == ENT_HTML_DOC_HTML5 && code == 0x0D))
                                goto invalid_code;
-                       unicode = 0;
                } else {
-                       goto invalid_code;
+                       const char *start;
+                       size_t ent_len;
+
+                       next = &p[1];
+                       start = next;
+
+                       if (process_named_entity_html(&next, &start, &ent_len) == FAILURE)
+                               goto invalid_code;
+
+                       if (resolve_named_entity_html(start, ent_len, inv_map, &code, &code2) == FAILURE) {
+                               if (doctype == ENT_HTML_DOC_XHTML && ent_len == 4 && start[0] == 'a'
+                                                       && start[1] == 'p' && start[2] == 'o' && start[3] == 's') {
+                                       /* uses html4 inv_map, which doesn't include apos;. This is a
+                                        * hack to support it */
+                                       code = (unsigned) '\'';
+                               } else {
+                                       goto invalid_code;
+                               }
+                       }
                }
                
                assert(*next == ';');
                
-               if (code == '\'' && !(quote_style & ENT_HTML_QUOTE_SINGLE) ||
-                               code == '"' && !(quote_style & ENT_HTML_QUOTE_DOUBLE))
+               if (((code == '\'' && !(flags & ENT_HTML_QUOTE_SINGLE)) ||
+                               (code == '"' && !(flags & ENT_HTML_QUOTE_DOUBLE)))
+                               /* && code2 == '\0' always true for current maps */)
                        goto invalid_code;
 
-               if (unicode && charset != cs_utf_8) {
+               /* deal with encodings other than utf-8/iso-8859-1 */
+               if (!CHARSET_UNICODE_COMPAT(charset)) {
                        /* replace unicode code point */
-                       if (map_from_unicode(code, charset, &code) == FAILURE)
+                       if (map_from_unicode(code, charset, &code) == FAILURE || code2 != 0)
                                goto invalid_code; /* not representable in target charset */
                }
-               
-               switch (charset) {
-               case cs_utf_8:
-                       {
-                               size_t written;
-                               written = php_utf32_utf8((unsigned char*)q, code);
-                               q += written;
-                               /* Since we're writing in place, we hope we didn't write more than we read */
-                               assert(written <= (size_t)(next - p) + 1);
-                               break;
-                       }
-
-               case cs_8859_1:
-               case cs_cp1252:
-               case cs_8859_15:
-               case cs_koi8r:
-               case cs_cp1251:
-               case cs_8859_5:
-               case cs_cp866:
-               case cs_macroman:
-                       /* single byte stuff */
-                       *(q++) = code;
-                       break;
-
-               case cs_big5:
-               case cs_big5hkscs:
-               case cs_sjis:
-               case cs_gb2312:
-                       /* we don't have named entity or unicode mappings for these yet,
-                        * so we're guaranteed code <= 0xFF */
-#if 0
-                       q += php_mb2_int_to_char((unsigned char*)q, code);
-#else
-                       assert(code <= 0xFFU);
-                       *(q++) = code;
-#endif
-                       break;
-
-               case cs_eucjp:
-#if 0 /* idem */
-                       q += php_mb2_int_to_char((unsigned char*)q, code);
-#else
-                       assert(code <= 0xFFU);
-                       *(q++) = code;
-#endif
-                       break;
 
-               default:
-                       /* for backwards compatilibity */
-                       goto invalid_code;
-                       break;
+               q += write_octet_sequence(q, charset, code);
+               if (code2) {
+                       q += write_octet_sequence(q, charset, code2);
                }
 
                /* jump over the valid entity; may go beyond size of buffer; np */
@@ -894,114 +1081,94 @@ invalid_code:
        }
        
        *q = '\0';
-       *retlen_p = (size_t)(q - ret);
-}
-/* }}} */
-
-/* {{{ inv_ent_maps_dtor
- * Hash table destructor for BG(inverse_ent_maps)
- */
-static void inv_ent_maps_dtor(HashTable **ht) {
-       zend_hash_destroy(*ht);
-       pefree(*ht, 1);
+       *retlen = (size_t)(q - ret);
 }
 /* }}} */
 
-/* {{{ unescape_inverse_map
- *     Auxiliary function to php_unescape_html_entities()
- * charset can be cs_terminator for only basic entities.
- */
-static HashTable *unescape_inverse_map(enum entity_charset charset TSRMLS_DC)
+/* {{{ unescape_inverse_map */
+static const entity_ht *unescape_inverse_map(int all, int flags)
 {
-       HashTable **inverse_map;
-
-       /* we accept charset = cs_terminator (for specialchars) */
-
-       if (!BG(inverse_ent_maps)) {
-               BG(inverse_ent_maps) = pemalloc(sizeof *BG(inverse_ent_maps), 1);
-               zend_hash_init(BG(inverse_ent_maps), cs_numelems, NULL, (dtor_func_t)inv_ent_maps_dtor, 1);
-       }
-       if (zend_hash_index_find(BG(inverse_ent_maps), (ulong)charset, (void**)&inverse_map) == FAILURE) {
-               HashTable *ht = pemalloc(sizeof *ht, 1);
-               uint capacity = 0;
-               int j, t;
-
-               /* determine upper bound for capacity of hashtable */
-               for (j = 0; entity_map[j].charset != cs_terminator; j++) {
-                       if (entity_map[j].charset == charset)
-                               capacity += entity_map[j].endchar - entity_map[j].basechar + 1;
-               }
-
-               /* no destructor as we'll be storing ints */
-               zend_hash_init(ht, capacity, NULL, NULL, 1);
-
-               /* store new hash table */
-               t = zend_hash_index_update(BG(inverse_ent_maps), (ulong)charset, &ht, sizeof(ht), (void**)&inverse_map);
-               assert(t == SUCCESS);
-
-               /* build inverse map */
-               for (j = 0; entity_map[j].charset != cs_terminator; j++) {
-                       unsigned k;
-
-                       if (entity_map[j].charset != charset)
-                               continue;
-
-                       for (k = entity_map[j].basechar; k <= entity_map[j].endchar; k++) {
-                               unsigned table_offset   = k - entity_map[j].basechar;
-                               const char* entity_name = entity_map[j].table[table_offset];
+       int document_type = flags & ENT_HTML_DOC_TYPE_MASK;
 
-                               if (entity_name == NULL || *entity_name == '#')
-                                       continue;
-
-                               t = zend_hash_update(ht, entity_name, strlen(entity_name), &k, sizeof(k), NULL);
-                               assert(t == SUCCESS);
-                       }
+       if (all) {
+               switch (document_type) {
+               case ENT_HTML_DOC_HTML401:
+               case ENT_HTML_DOC_XHTML: /* but watch out for &apos;...*/
+                       return &ent_ht_html4;
+               case ENT_HTML_DOC_HTML5:
+                       return &ent_ht_html5;
+               default:
+                       return &ent_ht_be_apos;
                }
-
-               /* and add the basic entitites */
-               for (j = 0; basic_entities_ex[j].charcode != 0; j++) {
-                       const basic_entity_t *ent = &basic_entities_ex[j];
-                       unsigned k = ent->charcode;
-               
-                       t = zend_hash_update(ht, &ent->entity[1] /* skip & */,
-                               ent->entitylen - 2 /* skip & and ; */, &k, sizeof(k), NULL);
-                       assert(t == SUCCESS);
+       } else {
+               switch (document_type) {
+               case ENT_HTML_DOC_HTML401:
+                       return &ent_ht_be_noapos;
+               default:
+                       return &ent_ht_be_apos;
                }
        }
+}
+/* }}} */
+
+/* {{{ determine_entity_table
+ * Entity table to use. Note that entity tables are defined in terms of
+ * unicode code points */
+static entity_table_opt determine_entity_table(int all, int doctype)
+{
+       entity_table_opt retval = {NULL};
 
-       return *inverse_map;
+       assert(!(doctype == ENT_HTML_DOC_XML1 && all));
+       
+       if (all) {
+               retval.ms_table = (doctype == ENT_HTML_DOC_HTML5) ?
+                       entity_ms_table_html5 : entity_ms_table_html4;
+       } else {
+               retval.table = (doctype == ENT_HTML_DOC_HTML401) ?
+                       stage3_table_be_noapos_00000 : stage3_table_be_apos_00000;
+       }
+       return retval;
 }
+/* }}} */
 
 /* {{{ php_unescape_html_entities
  * The parameter "all" should be true to decode all possible entities, false to decode
  * only the basic ones, i.e., those in basic_entities_ex + the numeric entities
  * that correspond to quotes.
  */
-PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC)
+PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC)
 {
-       int retlen;
+       size_t retlen;
        char *ret;
        enum entity_charset charset;
-       HashTable *inverse_map = NULL;
+       const entity_ht *inverse_map = NULL;
+       size_t new_size = TRAVERSE_FOR_ENTITIES_EXPAND_SIZE(oldlen);
 
        if (all) {
                charset = determine_charset(hint_charset TSRMLS_CC);
        } else {
-               charset = cs_terminator;
+               charset = cs_8859_1; /* charset shouldn't matter, use ISO-8859-1 for performance */
        }
 
-       ret = estrndup(old, oldlen);
+       /* don't use LIMIT_ALL! */
+
+       if (oldlen > new_size) {
+               /* overflow, refuse to do anything */
+               ret = estrndup((char*)old, oldlen);
+               retlen = oldlen;
+               goto empty_source;
+       }
+       ret = emalloc(new_size);
+       *ret = '\0';
        retlen = oldlen;
        if (retlen == 0) {
                goto empty_source;
        }
-
-       /* charset == cs_terminator if !all */
-       inverse_map = unescape_inverse_map(charset TSRMLS_CC);
+       
+       inverse_map = unescape_inverse_map(all, flags);
        
        /* replace numeric entities */
-       /* !all implies charset == cs_terminator && inverse_map == BG(inverse_ent_maps)[0] */
-       traverse_for_entities(ret, &retlen, all, quote_style, inverse_map, charset);
+       traverse_for_entities(old, oldlen, ret, &retlen, all, flags, inverse_map, charset);
 
 empty_source:  
        *newlen = retlen;
@@ -1009,152 +1176,287 @@ empty_source:
 }
 /* }}} */
 
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC)
+PHPAPI char *php_escape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC)
 {
-       return php_escape_html_entities_ex(old, oldlen, newlen, all, quote_style, hint_charset, 1 TSRMLS_CC);
+       return php_escape_html_entities_ex(old, oldlen, newlen, all, flags, hint_charset, 1 TSRMLS_CC);
+}
+
+/* {{{ find_entity_for_char */
+static inline void find_entity_for_char(
+       unsigned int k,
+       enum entity_charset charset,
+       const entity_stage1_row *table,
+       const unsigned char **entity,
+       size_t *entity_len,
+       unsigned char *old,
+       size_t oldlen,
+       size_t *cursor)
+{
+       unsigned stage1_idx = ENT_STAGE1_INDEX(k);
+       const entity_stage3_row *c;
+       
+       if (stage1_idx > 0x1D) {
+               *entity     = NULL;
+               *entity_len = 0;
+               return;
+       }
+
+       c = &table[stage1_idx][ENT_STAGE2_INDEX(k)][ENT_STAGE3_INDEX(k)];
+
+       if (!c->ambiguous) {
+               *entity     = (const unsigned char *)c->data.ent.entity;
+               *entity_len = c->data.ent.entity_len;
+       } else {
+               /* peek at next char */
+               size_t   cursor_before  = *cursor;
+               int              status                 = SUCCESS;
+               unsigned next_char;
+
+               if (!(*cursor < oldlen))
+                       goto no_suitable_2nd;
+
+               next_char = get_next_char(charset, old, oldlen, cursor, &status); 
+
+               if (status == FAILURE)
+                       goto no_suitable_2nd;
+
+               {
+                       const entity_multicodepoint_row *s, *e;
+
+                       s = &c->data.multicodepoint_table[1];
+                       e = s - 1 + c->data.multicodepoint_table[0].leading_entry.size;
+                       /* we could do a binary search but it's not worth it since we have
+                        * at most two entries... */
+                       for ( ; s <= e; s++) {
+                               if (s->normal_entry.second_cp == next_char) {
+                                       *entity     = s->normal_entry.entity;
+                                       *entity_len = s->normal_entry.entity_len;
+                                       return;
+                               }
+                       }
+               }
+no_suitable_2nd:
+               *cursor = cursor_before;
+               *entity = (const unsigned char *)
+                       c->data.multicodepoint_table[0].leading_entry.default_entity;
+               *entity_len = c->data.multicodepoint_table[0].leading_entry.default_entity_len;
+       }       
 }
+/* }}} */
+
+/* {{{ find_entity_for_char_basic */
+static inline void find_entity_for_char_basic(
+       unsigned int k,
+       const entity_stage3_row *table,
+       const unsigned char **entity,
+       size_t *entity_len)
+{
+       if (k >= 64U) {
+               *entity     = NULL;
+               *entity_len = 0;
+               return;
+       }
 
+       *entity     = table[k].data.ent.entity;
+       *entity_len = table[k].data.ent.entity_len;
+}
+/* }}} */
 
 /* {{{ php_escape_html_entities
  */
-PHPAPI char *php_escape_html_entities_ex(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset, zend_bool double_encode TSRMLS_DC)
+PHPAPI char *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset, zend_bool double_encode TSRMLS_DC)
 {
-       int i, j, maxlen, len;
+       size_t cursor, maxlen, len;
        char *replaced;
        enum entity_charset charset = determine_charset(hint_charset TSRMLS_CC);
        int matches_map;
+       int doctype = flags & ENT_HTML_DOC_TYPE_MASK;
+       entity_table_opt entity_table;
+       const enc_to_uni *to_uni_table = NULL;
+       const entity_ht *inv_map = NULL; /* used for !double_encode */
+       /* only used if flags includes ENT_HTML_IGNORE_ERRORS or ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS */
+       const unsigned char *replacement;
+       size_t replacement_len;
+
+       if (all) { /* replace with all named entities */
+               if (CHARSET_PARTIAL_SUPPORT(charset)) {
+                       php_error_docref0(NULL TSRMLS_CC, E_STRICT, "Only basic entities "
+                               "substitution is supported for multi-byte encodings other than UTF-8; "
+                               "functionality is equivalent to htmlspecialchars");
+               }
+               LIMIT_ALL(all, doctype, charset);
+       }
+       entity_table = determine_entity_table(all, doctype);
+       if (all && !CHARSET_UNICODE_COMPAT(charset)) {
+               to_uni_table = enc_to_uni_index[charset];
+       }
+
+       if (!double_encode) {
+               /* first arg is 1 because we want to identify valid named entities
+                * even if we are only encoding the basic ones */
+               inv_map = unescape_inverse_map(1, flags);
+       }
+
+       if (flags & (ENT_HTML_SUBSTITUTE_ERRORS | ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS)) {
+               if (charset == cs_utf_8) {
+                       replacement = (const unsigned char*)"\xEF\xBF\xBD";
+                       replacement_len = sizeof("\xEF\xBF\xBD") - 1;
+               } else {
+                       replacement = (const unsigned char*)"&#xFFFD;";
+                       replacement_len = sizeof("&#xFFFD;") - 1;
+               }
+       }
 
        maxlen = 2 * oldlen;
        if (maxlen < 128)
                maxlen = 128;
-       replaced = emalloc (maxlen);
+       replaced = emalloc(maxlen);
        len = 0;
-       i = 0;
-       while (i < oldlen) {
-               unsigned char mbsequence[16];   /* allow up to 15 characters in a multibyte sequence */
-               int mbseqlen = sizeof(mbsequence);
-               int status = SUCCESS;
-               unsigned int this_char = get_next_char(charset, old, oldlen, &i, mbsequence, &mbseqlen, &status);
-
-               if(status == FAILURE) {
+       cursor = 0;
+       while (cursor < oldlen) {
+               const unsigned char *mbsequence = NULL;
+               size_t mbseqlen                                 = 0,
+                      cursor_before                    = cursor;
+               int status                                              = SUCCESS;
+               unsigned int this_char                  = get_next_char(charset, old, oldlen, &cursor, &status);
+
+               /* guarantee we have at least 40 bytes to write.
+                * In HTML5, entities may take up to 33 bytes */
+               if (len + 40 > maxlen)
+                       replaced = erealloc(replaced, maxlen += 128);
+
+               if (status == FAILURE) {
                        /* invalid MB sequence */
-                       if (quote_style & ENT_HTML_IGNORE_ERRORS) {
+                       if (flags & ENT_HTML_IGNORE_ERRORS) {
                                continue;
+                       } else if (flags & ENT_HTML_SUBSTITUTE_ERRORS) {
+                               memcpy(&replaced[len], replacement, replacement_len);
+                               len += replacement_len;
+                               continue;
+                       } else {
+                               efree(replaced);
+                               if(!PG(display_errors)) {
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid multibyte sequence in argument");
+                               }
+                               *newlen = 0;
+                               return STR_EMPTY_ALLOC();
                        }
-                       efree(replaced);
-                       if(!PG(display_errors)) {
-                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid multibyte sequence in argument");
-                       }
-                       *newlen = 0;
-                       return STR_EMPTY_ALLOC();
+               } else { /* SUCCESS */
+                       mbsequence = &old[cursor_before];
+                       mbseqlen = cursor - cursor_before;
                }
                matches_map = 0;
 
-               if (len + 16 > maxlen)
-                       replaced = erealloc (replaced, maxlen += 128);
-
-               if (all) {
-                       /* look for a match in the maps for this charset */
-                       unsigned char *rep = NULL;
-
-
-                       for (j = 0; entity_map[j].charset != cs_terminator; j++) {
-                               if (entity_map[j].charset == charset
-                                               && this_char >= entity_map[j].basechar
-                                               && this_char <= entity_map[j].endchar) {
-                                       rep = (unsigned char*)entity_map[j].table[this_char - entity_map[j].basechar];
-                                       if (rep == NULL) {
-                                               /* there is no entity for this position; fall through and
-                                                * just output the character itself */
-                                               break;
-                                       }
-
-                                       matches_map = 1;
-                                       break;
+               if (this_char != '&') { /* no entity on this position */
+                       int                                     found   = 0;
+                       const unsigned char *rep        = NULL;
+                       size_t                          rep_len = 0;
+
+                       if (((this_char == '\'' && !(flags & ENT_HTML_QUOTE_SINGLE)) ||
+                                       (this_char == '"' && !(flags & ENT_HTML_QUOTE_DOUBLE))))
+                               goto pass_char_through;
+
+                       if (all) { /* false that CHARSET_PARTIAL_SUPPORT(charset) */
+                               /* look for entity for this char */
+                               if (to_uni_table != NULL) {
+                                       map_to_unicode(this_char, to_uni_table, &this_char);
+                                       if (this_char == 0xFFFF) /* no mapping; pass through */
+                                               goto pass_char_through;
                                }
+                               find_entity_for_char(this_char, charset, entity_table.ms_table, &rep,
+                                       &rep_len, old, oldlen, &cursor);
+                       } else {
+                               find_entity_for_char_basic(this_char, entity_table.table, &rep, &rep_len);
                        }
 
-                       if (matches_map) {
-                               int l = strlen(rep);
-                               /* increase the buffer size */
-                               if (len + 2 + l >= maxlen) {
-                                       replaced = erealloc(replaced, maxlen += 128);
-                               }
-
+                       if (rep != NULL) {
                                replaced[len++] = '&';
-                               strlcpy(replaced + len, rep, maxlen);
-                               len += l;
+                               memcpy(&replaced[len], rep, rep_len);
+                               len += rep_len;
                                replaced[len++] = ';';
-                       }
-               }
-               if (!matches_map) {     
-                       int is_basic = 0;
-
-                       if (this_char == '&') {
-                               if (double_encode) {
-encode_amp:
-                                       memcpy(replaced + len, "&amp;", sizeof("&amp;") - 1);
-                                       len += sizeof("&amp;") - 1;
-                               } else {
-                                       char *e = memchr(old + i, ';', oldlen - i);
-                                       char *s = old + i;
-
-                                       if (!e || (e - s) > 10) { /* minor optimization to avoid "entities" over 10 chars in length */
-                                               goto encode_amp;
+                       } else {
+                               /* we did not find an entity for this char.
+                                * check for its validity, if its valid pass it unchanged */
+                               if (flags & ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS) {
+                                       if (CHARSET_UNICODE_COMPAT(charset)) {
+                                               if (!unicode_cp_is_allowed(this_char, doctype)) {
+                                                       mbsequence = replacement;
+                                                       mbseqlen = replacement_len;
+                                               }
+                                       } else if (to_uni_table) {
+                                               if (!all) /* otherwise we already did this */
+                                                       map_to_unicode(this_char, to_uni_table, &this_char);
+                                               if (!unicode_cp_is_allowed(this_char, doctype)) {
+                                                       mbsequence = replacement;
+                                                       mbseqlen = replacement_len;
+                                               }
                                        } else {
-                                               if (*s == '#') { /* numeric entities */
-                                                       s++;
-                                                       /* Hex (&#x5A;) */
-                                                       if (*s == 'x' || *s == 'X') {
-                                                               s++;
-                                                               while (s < e) {
-                                                                       if (!isxdigit((int)*(unsigned char *)s++)) {
-                                                                               goto encode_amp;
-                                                                       }
-                                                               }
-                                                       /* Dec (&#90;)*/
-                                                       } else {
-                                                               while (s < e) {
-                                                                       if (!isdigit((int)*(unsigned char *)s++)) {
-                                                                               goto encode_amp;
-                                                                       }
-                                                               }
-                                                       }
-                                               } else { /* text entities */
-                                                       while (s < e) {
-                                                               if (!isalnum((int)*(unsigned char *)s++)) {
-                                                                       goto encode_amp;
-                                                               }
-                                                       }
+                                               /* not a unicode code point, unless, coincidentally, it's in
+                                                * the 0x20..0x7D range (except 0x5C in sjis). We know nothing
+                                                * about other code points, because we have no tables. Since
+                                                * Unicode code points in that range are not disallowed in any
+                                                * document type, we could do nothing. However, conversion
+                                                * tables frequently map 0x00-0x1F to the respective C0 code
+                                                * points. Let's play it safe and admit that's the case */
+                                               if (this_char <= 0x7D &&
+                                                               !unicode_cp_is_allowed(this_char, doctype)) {
+                                                       mbsequence = replacement;
+                                                       mbseqlen = replacement_len;
                                                }
-                                               replaced[len++] = '&';
-                                       }
-                               }
-                               is_basic = 1;
-                       } else {
-                               for (j = 0; basic_entities[j].charcode != 0; j++) {
-                                       if ((basic_entities[j].charcode != this_char) ||
-                                                       (basic_entities[j].flags &&
-                                                       (quote_style & basic_entities[j].flags) == 0)) {
-                                               continue;
                                        }
-
-                                       memcpy(replaced + len, basic_entities[j].entity, basic_entities[j].entitylen);
-                                       len += basic_entities[j].entitylen;
-               
-                                       is_basic = 1;
-                                       break;
                                }
-                       }
-
-                       if (!is_basic) {
-                               /* a wide char without a named entity; pass through the original sequence */
+pass_char_through:
                                if (mbseqlen > 1) {
                                        memcpy(replaced + len, mbsequence, mbseqlen);
                                        len += mbseqlen;
                                } else {
-                                       replaced[len++] = (unsigned char)this_char;
+                                       replaced[len++] = mbsequence[0];
+                               }
+                       }
+               } else { /* this_char == '&' */
+                       if (double_encode) {
+encode_amp:
+                               memcpy(&replaced[len], "&amp;", sizeof("&amp;") - 1);
+                               len += sizeof("&amp;") - 1;
+                       } else { /* no double encode */
+                               /* check if entity is valid */
+                               size_t ent_len; /* not counting & or ; */
+                               /* peek at next char */
+                               if (old[cursor] == '#') { /* numeric entity */
+                                       unsigned code_point;
+                                       int valid;
+                                       char *pos = (char*)&old[cursor+1];
+                                       valid = process_numeric_entity(&pos, &code_point);
+                                       if (valid == FAILURE)
+                                               goto encode_amp;
+                                       if (flags & ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS) {
+                                               if (!numeric_entity_is_allowed(code_point, doctype))
+                                                       goto encode_amp;
+                                       }
+                                       ent_len = pos - (char*)&old[cursor];
+                               } else { /* named entity */
+                                       /* check for vality of named entity */
+                                       const char *start = &old[cursor],
+                                                          *next = start;
+                                       unsigned   dummy1, dummy2;
+
+                                       if (process_named_entity_html(&next, &start, &ent_len) == FAILURE)
+                                               goto encode_amp;
+                                       if (resolve_named_entity_html(start, ent_len, inv_map, &dummy1, &dummy2) == FAILURE) {
+                                               if (!(doctype == ENT_HTML_DOC_XHTML && ent_len == 4 && start[0] == 'a'
+                                                                       && start[1] == 'p' && start[2] == 'o' && start[3] == 's')) {
+                                                       /* uses html4 inv_map, which doesn't include apos;. This is a
+                                                        * hack to support it */
+                                                       goto encode_amp;
+                                               }
+                                       }
                                }
+                               /* checks passed; copy entity to result */
+                               replaced[len++] = '&';
+                               memcpy(&replaced[len], &old[cursor], ent_len);
+                               len += ent_len;
+                               replaced[len++] = ';';
+                               cursor += ent_len + 1;
                        }
                }
        }
@@ -1162,8 +1464,6 @@ encode_amp:
        *newlen = len;
 
        return replaced;
-
-
 }
 /* }}} */
 
@@ -1174,15 +1474,15 @@ static void php_html_entities(INTERNAL_FUNCTION_PARAMETERS, int all)
        char *str, *hint_charset = NULL;
        int str_len, hint_charset_len = 0;
        int len;
-       long quote_style = ENT_COMPAT;
+       long flags = ENT_COMPAT;
        char *replaced;
        zend_bool double_encode = 1;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls!b", &str, &str_len, &quote_style, &hint_charset, &hint_charset_len, &double_encode) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls!b", &str, &str_len, &flags, &hint_charset, &hint_charset_len, &double_encode) == FAILURE) {
                return;
        }
 
-       replaced = php_escape_html_entities_ex(str, str_len, &len, all, quote_style, hint_charset, double_encode TSRMLS_CC);
+       replaced = php_escape_html_entities_ex(str, str_len, &len, all, (int) flags, hint_charset, double_encode TSRMLS_CC);
        RETVAL_STRINGL(replaced, len, 0);
 }
 /* }}} */
@@ -1200,6 +1500,12 @@ void register_html_constants(INIT_FUNC_ARGS)
        REGISTER_LONG_CONSTANT("ENT_QUOTES", ENT_QUOTES, CONST_PERSISTENT|CONST_CS);
        REGISTER_LONG_CONSTANT("ENT_NOQUOTES", ENT_NOQUOTES, CONST_PERSISTENT|CONST_CS);
        REGISTER_LONG_CONSTANT("ENT_IGNORE", ENT_IGNORE, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_SUBSTITUTE", ENT_SUBSTITUTE, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_DISALLOWED", ENT_DISALLOWED, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_HTML401", ENT_HTML401, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_XML1", ENT_XML1, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_XHTML", ENT_XHTML, CONST_PERSISTENT|CONST_CS);
+       REGISTER_LONG_CONSTANT("ENT_HTML5", ENT_HTML5, CONST_PERSISTENT|CONST_CS);
 }
 /* }}} */
 
@@ -1263,91 +1569,172 @@ PHP_FUNCTION(htmlentities)
 }
 /* }}} */
 
-/* {{{ proto array get_html_translation_table([int table [, int quote_style [, string charset_hint]]])
+/* {{{ write_s3row_data */
+static inline void write_s3row_data(
+       const entity_stage3_row *r,
+       unsigned orig_cp,
+       unsigned uni_cp,
+       enum entity_charset charset,
+       zval *arr)
+{
+       char key[8]; /* two unicode code points in UTF-8 */
+       char entity[LONGEST_ENTITY_LENGTH + 2] = {'&'};
+       size_t written_k1;
+
+       written_k1 = write_octet_sequence(key, charset, orig_cp);
+
+       if (!r->ambiguous) {
+               size_t l = r->data.ent.entity_len;
+               memcpy(&entity[1], r->data.ent.entity, l);
+               entity[l + 1] = ';';
+               add_assoc_stringl_ex(arr, key, written_k1 + 1, entity, l + 2, 1);
+       } else {
+               unsigned i,
+                            num_entries;
+               const entity_multicodepoint_row *mcpr = r->data.multicodepoint_table;
+
+               if (mcpr[0].leading_entry.default_entity != NULL) {
+                       size_t l = mcpr[0].leading_entry.default_entity_len;
+                       memcpy(&entity[1], mcpr[0].leading_entry.default_entity, l);
+                       entity[l + 1] = ';';
+                       add_assoc_stringl_ex(arr, key, written_k1 + 1, entity, l + 2, 1);
+               }
+               num_entries = mcpr[0].leading_entry.size;
+               for (i = 1; i <= num_entries; i++) {
+                       size_t   l,
+                                    written_k2;
+                       unsigned uni_cp,
+                                        spe_cp;
+
+                       uni_cp = mcpr[i].normal_entry.second_cp;
+                       l = mcpr[i].normal_entry.entity_len;
+
+                       if (!CHARSET_UNICODE_COMPAT(charset)) {
+                               if (map_from_unicode(uni_cp, charset, &spe_cp) == FAILURE)
+                                       continue; /* non representable in this charset */
+                       } else {
+                               spe_cp = uni_cp;
+                       }
+                       
+                       written_k2 = write_octet_sequence(&key[written_k1], charset, spe_cp);
+                       memcpy(&entity[1], mcpr[i].normal_entry.entity, l);
+                       entity[l + 1] = ';';
+                       entity[l + 1] = '\0';
+                       add_assoc_stringl_ex(arr, key, written_k1 + written_k2 + 1, entity, l + 1, 1);
+               }
+       }
+}
+/* }}} */
+
+/* {{{ proto array get_html_translation_table([int table [, int flags [, string charset_hint]]])
    Returns the internal translation table used by htmlspecialchars and htmlentities */
 PHP_FUNCTION(get_html_translation_table)
 {
-       long which = HTML_SPECIALCHARS, quote_style = ENT_COMPAT;
-       unsigned int i;
-       int j;
-       unsigned char ind[5]; /* max # of 8-bit code units (4; for UTF-8) + 1 for \0 */
-       void *dummy;
+       long all = HTML_SPECIALCHARS,
+                flags = ENT_COMPAT;
+       int doctype;
+       entity_table_opt entity_table;
+       const enc_to_uni *to_uni_table;
        char *charset_hint = NULL;
        int charset_hint_len;
        enum entity_charset charset;
 
+       /* in this function we have to jump through some loops because we're
+        * getting the translated table from data structures that are optimized for
+        * random access, not traversal */
+
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lls",
-                       &which, &quote_style, &charset_hint, &charset_hint_len) == FAILURE) {
+                       &all, &flags, &charset_hint, &charset_hint_len) == FAILURE) {
                return;
        }
 
        charset = determine_charset(charset_hint TSRMLS_CC);
+       doctype = flags & ENT_HTML_DOC_TYPE_MASK;
+       LIMIT_ALL(all, doctype, charset);
 
        array_init(return_value);
 
-       switch (which) {
-       case HTML_ENTITIES:
-               for (j = 0; entity_map[j].charset != cs_terminator; j++) {
-                       if (entity_map[j].charset != charset)
-                               continue;
-                       for (i = 0; i <= entity_map[j].endchar - entity_map[j].basechar; i++) {
-                               char buffer[16];
-                               unsigned k;
-                               size_t written;
+       if (CHARSET_PARTIAL_SUPPORT(charset)) {
+               all = 0;
+       }
+       entity_table = determine_entity_table(all, doctype);
+       if (all && !CHARSET_UNICODE_COMPAT(charset)) {
+               to_uni_table = enc_to_uni_index[charset];
+       }
+
+       if (all) { /* HTML_ENTITIES (actually, any non-zero value for 1st param) */
+               const entity_stage1_row *ms_table = entity_table.ms_table;
 
-                               if (entity_map[j].table[i] == NULL)
+               if (CHARSET_UNICODE_COMPAT(charset)) {
+                       unsigned i, j, k,
+                                        max_i, max_j, max_k;
+                       /* no mapping to unicode required */
+                       if (CHARSET_SINGLE_BYTE(charset)) {
+                               max_i = 1; max_j = 1; max_k = 64;
+                       } else {
+                               max_i = 0x1E; max_j = 64; max_k = 64;
+                       }
+
+                       for (i = 0; i < max_i; i++) {
+                               if (ms_table[i] == empty_stage2_table)
                                        continue;
-                                       
-                               k = i + entity_map[j].basechar;
-
-                               switch (charset) {
-                               case cs_utf_8:
-                                       written = php_utf32_utf8(ind, k);
-                                       ind[written] = '\0';
-                                       break;
-                               /* we have no mappings for these, but if we had... */
-                               case cs_big5:
-                               case cs_gb2312:
-                               case cs_big5hkscs:
-                               case cs_sjis:
-                                       written = php_mb2_int_to_char(ind, k);
-                                       ind[written] = '\0';
-                                       break;
-                               case cs_eucjp:
-                                       written = php_mb3_int_to_char(ind, k);
-                                       ind[written] = '\0';
-                                       break;
-                               default: /* one byte */
-                                       written = 1;
-                                       ind[0] = (unsigned char)k;
-                                       ind[1] = '\0';
-                                       break;
+                               for (j = 0; j < max_j; j++) {
+                                       if (ms_table[i][j] == empty_stage3_table)
+                                               continue;
+                                       for (k = 0; k < max_k; k++) {
+                                               const entity_stage3_row *r = &ms_table[i][j][k];
+                                               unsigned code;
+
+                                               if (r->data.ent.entity == NULL)
+                                                       continue;
+
+                                               code = ENT_CODE_POINT_FROM_STAGES(i, j, k);
+                                               if (((code == '\'' && !(flags & ENT_HTML_QUOTE_SINGLE)) ||
+                                                               (code == '"' && !(flags & ENT_HTML_QUOTE_DOUBLE))))
+                                                       continue;
+                                               write_s3row_data(r, code, code, charset, return_value);
+                                       }
                                }
+                       }
+               } else {
+                       /* we have to iterate through the set of code points for this
+                        * encoding and map them to unicode code points */
+                       unsigned i;
+                       for (i = 0; i <= 0xFF; i++) {
+                               const entity_stage3_row *r;
+                               unsigned uni_cp;
+
+                               /* can be done before mapping, they're invariant */
+                               if (((i == '\'' && !(flags & ENT_HTML_QUOTE_SINGLE)) ||
+                                               (i == '"' && !(flags & ENT_HTML_QUOTE_DOUBLE))))
+                                       continue;
 
-                               snprintf(buffer, sizeof(buffer), "&%s;", entity_map[j].table[i]);
-                               if (zend_hash_find(Z_ARRVAL_P(return_value), (const char*)ind, written+1, &dummy) == FAILURE) {
-                                       /* in case of the single quote, which is repeated, the first one wins,
-                                               * so don't replace the existint mapping */
-                                       add_assoc_string(return_value, (const char*)ind, buffer, 1);
-                               }
+                               map_to_unicode(i, to_uni_table, &uni_cp);
+                               r = &ms_table[ENT_STAGE1_INDEX(uni_cp)][ENT_STAGE2_INDEX(uni_cp)][ENT_STAGE3_INDEX(uni_cp)];
+                               if (r->data.ent.entity == NULL)
+                                       continue;
+
+                               write_s3row_data(r, i, uni_cp, charset, return_value);
                        }
                }
-               /* break thru */
+       } else {
+               /* we could use sizeof(stage3_table_be_apos_00000) as well */
+               unsigned          j,
+                                         numelems = sizeof(stage3_table_be_noapos_00000) /
+                                                       sizeof(*stage3_table_be_noapos_00000);
+
+               for (j = 0; j < numelems; j++) {
+                       const entity_stage3_row *r = &entity_table.table[j];
+                       if (r->data.ent.entity == NULL)
+                               continue;
 
-       case HTML_SPECIALCHARS:
-               for (j = 0; basic_entities_ex[j].charcode != 0; j++) {
-                       if (basic_entities_ex[j].flags && (quote_style & basic_entities_ex[j].flags) == 0)
+                       if (((j == '\'' && !(flags & ENT_HTML_QUOTE_SINGLE)) ||
+                                       (j == '"' && !(flags & ENT_HTML_QUOTE_DOUBLE))))
                                continue;
-                               
-                       ind[0] = (unsigned char)basic_entities_ex[j].charcode;
-                       ind[1] = '\0';
-                       if (zend_hash_find(Z_ARRVAL_P(return_value), (const char*)ind, 2, &dummy) == FAILURE) {
-                               add_assoc_stringl(return_value, ind, basic_entities_ex[j].entity,
-                                       basic_entities_ex[j].entitylen, 1);
-                       }
-               }
 
-               break;
+                       /* charset is indifferent, used cs_8859_1 for efficiency */
+                       write_s3row_data(r, j, j, cs_8859_1, return_value);
+               }
        }
 }
 /* }}} */
index c50a1be20b69b1fa161fbed94e2ca376dc96445b..4915e171cb927e311aa9d13375e9920308f520bf 100644 (file)
 #ifndef HTML_H
 #define HTML_H
 
-#define ENT_HTML_QUOTE_NONE            0
-#define ENT_HTML_QUOTE_SINGLE  1
-#define ENT_HTML_QUOTE_DOUBLE  2
-#define ENT_HTML_IGNORE_ERRORS 4
-
-#define ENT_COMPAT    ENT_HTML_QUOTE_DOUBLE
-#define ENT_QUOTES    (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
-#define ENT_NOQUOTES  ENT_HTML_QUOTE_NONE
-#define ENT_IGNORE    ENT_HTML_IGNORE_ERRORS
+#define ENT_HTML_QUOTE_NONE                    0
+#define ENT_HTML_QUOTE_SINGLE          1
+#define ENT_HTML_QUOTE_DOUBLE          2
+#define ENT_HTML_IGNORE_ERRORS         4
+#define ENT_HTML_SUBSTITUTE_ERRORS     8
+#define ENT_HTML_DOC_TYPE_MASK         (16|32)
+#define ENT_HTML_DOC_HTML401           0
+#define ENT_HTML_DOC_XML1                      16
+#define ENT_HTML_DOC_XHTML                     32
+#define ENT_HTML_DOC_HTML5                     (16|32)
+/* reserve bit 6 */
+#define ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS   128
+
+
+#define ENT_COMPAT             ENT_HTML_QUOTE_DOUBLE
+#define ENT_QUOTES             (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
+#define ENT_NOQUOTES   ENT_HTML_QUOTE_NONE
+#define ENT_IGNORE             ENT_HTML_IGNORE_ERRORS
+#define ENT_SUBSTITUTE ENT_HTML_SUBSTITUTE_ERRORS
+#define ENT_HTML401            0
+#define ENT_XML1               16
+#define ENT_XHTML              32
+#define ENT_HTML5              (16|32)
+#define ENT_DISALLOWED 128
 
 void register_html_constants(INIT_FUNC_ARGS);
 
@@ -39,8 +54,8 @@ PHP_FUNCTION(htmlspecialchars_decode);
 PHP_FUNCTION(html_entity_decode);
 PHP_FUNCTION(get_html_translation_table);
 
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC);
-PHPAPI char *php_escape_html_entities_ex(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset, zend_bool double_encode TSRMLS_DC);
-PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC);
+PHPAPI char *php_escape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
+PHPAPI char *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset, zend_bool double_encode TSRMLS_DC);
+PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
 
 #endif /* HTML_H */
index d3a638b6959f6b186afb9d36040f6a243b533bbc..8d4de82c5ae19fb440518e99ac964a19e06bbf9b 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
    | obtain it through the world-wide-web, please send a note to          |
    | license@php.net so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+
-   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
-   +----------------------------------------------------------------------+
 */
 
-/* $Id: html.h 293036 2010-01-03 09:23:27Z sebastian $ */
+/* $Id$ */
 
 #ifndef HTML_TABLES_H
 #define HTML_TABLES_H
 
+/**************************************************************************
+***************************************************************************
+**        THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY IT.        **
+***************************************************************************
+** Please change html_tables/html_table_gen.php instead and then         **
+** run it in order to generate this file                                 **
+***************************************************************************
+**************************************************************************/
+
 /* cs_terminator is overloaded in the following fashion:
  * - It terminates the list entity maps.
  * - In BG(inverse_ent_maps), it's the key of the inverse map that stores
  *   we don't care about the encoding (UTF-8 is chosen, but it should be used
  *   when it doesn't matter).
  */
-enum entity_charset { cs_terminator, cs_8859_1, cs_cp1252,
-                                         cs_8859_15, cs_utf_8, cs_big5, cs_gb2312, 
-                                         cs_big5hkscs, cs_sjis, cs_eucjp, cs_koi8r,
-                                         cs_cp1251, cs_8859_5, cs_cp866, cs_macroman,
+enum entity_charset { cs_terminator, cs_utf_8, cs_8859_1, cs_cp1252, cs_8859_15,
+                                         cs_cp1251, cs_8859_5, cs_cp866, cs_macroman, cs_koi8r,
+                                         cs_big5, cs_gb2312, cs_big5hkscs, cs_sjis, cs_eucjp,
                                          cs_numelems /* used to count the number of charsets */
                                        };
-typedef const char *const entity_table_t;
-
-/* codepage 1252 is a Windows extension to iso-8859-1. */
-static entity_table_t ent_cp_1252[] = {
-       "euro", NULL, "sbquo", "fnof", "bdquo", "hellip", "dagger",
-       "Dagger", "circ", "permil", "Scaron", "lsaquo", "OElig",
-       NULL, NULL, NULL, NULL, "lsquo", "rsquo", "ldquo", "rdquo",
-       "bull", "ndash", "mdash", "tilde", "trade", "scaron", "rsaquo",
-       "oelig", NULL, NULL, "Yuml" 
-};
-
-static entity_table_t ent_iso_8859_1[] = {
-       "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar",
-       "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg",
-       "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro",
-       "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14",
-       "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc",
-       "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
-       "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
-       "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
-       "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
-       "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
-       "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
-       "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
-       "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
-       "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
-       "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_iso_8859_15[] = {
-       "nbsp", "iexcl", "cent", "pound", "euro", "yen", "Scaron",
-       "sect", "scaron", "copy", "ordf", "laquo", "not", "shy", "reg",
-       "macr", "deg", "plusmn", "sup2", "sup3", NULL, /* Zcaron */
-       "micro", "para", "middot", NULL, /* zcaron */ "sup1", "ordm",
-       "raquo", "OElig", "oelig", "Yuml", "iquest", "Agrave", "Aacute",
-       "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
-       "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
-       "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
-       "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
-       "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
-       "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
-       "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
-       "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
-       "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
-       "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_uni_338_402[] = {
-       /* 338 (0x0152) */
-       "OElig", "oelig", NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 352 (0x0160) */
-       "Scaron", "scaron", NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 376 (0x0178) */
-       "Yuml", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 400 (0x0190) */
-       NULL, NULL, "fnof"
-};
-
-static entity_table_t ent_uni_spacing[] = {
-       /* 710 */
-       "circ",
-       /* 711 - 730 */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 731 - 732 */
-       NULL, "tilde"
-};
-
-static entity_table_t ent_uni_greek[] = {
-       /* 913 */
-       "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta",
-       "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho",
-       NULL, "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega",
-       /* 938 - 944 are not mapped */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta",
-       "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho",
-       "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
-       /* 970 - 976 are not mapped */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "thetasym", "upsih",
-       NULL, NULL, NULL,
-       "piv"
-};
-
-static entity_table_t ent_uni_punct[] = {
-       /* 8194 */
-       "ensp", "emsp", NULL, NULL, NULL, NULL, NULL,
-       "thinsp", NULL, NULL, "zwnj", "zwj", "lrm", "rlm",
-       NULL, NULL, NULL, "ndash", "mdash", NULL, NULL, NULL,
-       /* 8216 */
-       "lsquo", "rsquo", "sbquo", NULL, "ldquo", "rdquo", "bdquo", NULL,
-       "dagger", "Dagger", "bull", NULL, NULL, NULL, "hellip",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "permil", NULL,
-       /* 8242 */
-       "prime", "Prime", NULL, NULL, NULL, NULL, NULL, "lsaquo", "rsaquo", NULL,
-       NULL, NULL, "oline", NULL, NULL, NULL, NULL, NULL,
-       "frasl"
-};
-
-static entity_table_t ent_uni_euro[] = {
-       "euro"
-};
-
-static entity_table_t ent_uni_8465_8501[] = {
-       /* 8465 */
-       "image", NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8472 */
-       "weierp", NULL, NULL, NULL,
-       /* 8476 */
-       "real", NULL, NULL, NULL, NULL, NULL,
-       /* 8482 */
-       "trade", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8501 */
-       "alefsym",
-};
-
-static entity_table_t ent_uni_8592_9002[] = {
-       /* 8592 (0x2190) */
-       "larr", "uarr", "rarr", "darr", "harr", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8608 (0x21a0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8624 (0x21b0) */
-       NULL, NULL, NULL, NULL, NULL, "crarr", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8640 (0x21c0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8656 (0x21d0) */
-       "lArr", "uArr", "rArr", "dArr", "hArr", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8672 (0x21e0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8704 (0x2200) */
-       "forall", NULL, "part", "exist", NULL, "empty", NULL, "nabla",
-       "isin", "notin", NULL, "ni", NULL, NULL, NULL, "prod",
-       /* 8720 (0x2210) */
-       NULL, "sum", "minus", NULL, NULL, NULL, NULL, "lowast",
-       NULL, NULL, "radic", NULL, NULL, "prop", "infin", NULL,
-       /* 8736 (0x2220) */
-       "ang", NULL, NULL, NULL, NULL, NULL, NULL, "and",
-       "or", "cap", "cup", "int", NULL, NULL, NULL, NULL,
-       /* 8752 (0x2230) */
-       NULL, NULL, NULL, NULL, "there4", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, "sim", NULL, NULL, NULL,
-       /* 8768 (0x2240) */
-       NULL, NULL, NULL, NULL, NULL, "cong", NULL, NULL,
-       "asymp", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8784 (0x2250) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8800 (0x2260) */
-       "ne", "equiv", NULL, NULL, "le", "ge", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8816 (0x2270) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8832 (0x2280) */
-       NULL, NULL, "sub", "sup", "nsub", NULL, "sube", "supe",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8848 (0x2290) */
-       NULL, NULL, NULL, NULL, NULL, "oplus", NULL, "otimes",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8864 (0x22a0) */
-       NULL, NULL, NULL, NULL, NULL, "perp", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8880 (0x22b0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8896 (0x22c0) */
-       NULL, NULL, NULL, NULL, NULL, "sdot", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8912 (0x22d0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8928 (0x22e0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8944 (0x22f0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8960 (0x2300) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "lceil", "rceil", "lfloor", "rfloor", NULL, NULL, NULL, NULL,
-       /* 8976 (0x2310) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8992 (0x2320) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, "lang", "rang"
-};
-
-static entity_table_t ent_uni_9674[] = {
-       /* 9674 */
-       "loz"
-};
-
-static entity_table_t ent_uni_9824_9830[] = {
-       /* 9824 */
-       "spades", NULL, NULL, "clubs", NULL, "hearts", "diams"
-};
-
-static entity_table_t ent_koi8r[] = {
-       "#1105", /* "jo "*/
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
-       NULL, NULL, NULL, NULL, NULL, "#1025", /* "JO" */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
-       "#1102", "#1072", "#1073", "#1094", "#1076", "#1077", "#1092", 
-       "#1075", "#1093", "#1080", "#1081", "#1082", "#1083", "#1084", 
-       "#1085", "#1086", "#1087", "#1103", "#1088", "#1089", "#1090", 
-       "#1091", "#1078", "#1074", "#1100", "#1099", "#1079", "#1096", 
-       "#1101", "#1097", "#1095", "#1098", "#1070", "#1040", "#1041", 
-       "#1062", "#1044", "#1045", "#1060", "#1043", "#1061", "#1048", 
-       "#1049", "#1050", "#1051", "#1052", "#1053", "#1054", "#1055", 
-       "#1071", "#1056", "#1057", "#1058", "#1059", "#1046", "#1042",
-       "#1068", "#1067", "#1047", "#1064", "#1069", "#1065", "#1063", 
-       "#1066"
-};
-
-static entity_table_t ent_cp_1251[] = {
-       "#1026", "#1027", "#8218", "#1107", "#8222", "hellip", "dagger",
-       "Dagger", "euro", "permil", "#1033", "#8249", "#1034", "#1036",
-       "#1035", "#1039", "#1106", "#8216", "#8217", "#8219", "#8220",
-       "bull", "ndash", "mdash", NULL, "trade", "#1113", "#8250",
-       "#1114", "#1116", "#1115", "#1119", "nbsp", "#1038", "#1118",
-       "#1032", "curren", "#1168", "brvbar", "sect", "#1025", "copy",
-       "#1028", "laquo", "not", "shy", "reg", "#1031", "deg", "plusmn",
-       "#1030", "#1110", "#1169", "micro", "para", "middot", "#1105",
-       "#8470", "#1108", "raquo", "#1112", "#1029", "#1109", "#1111",
-       "#1040", "#1041", "#1042", "#1043", "#1044", "#1045", "#1046",
-       "#1047", "#1048", "#1049", "#1050", "#1051", "#1052", "#1053",
-       "#1054", "#1055", "#1056", "#1057", "#1058", "#1059", "#1060",
-       "#1061", "#1062", "#1063", "#1064", "#1065", "#1066", "#1067",
-       "#1068", "#1069", "#1070", "#1071", "#1072", "#1073", "#1074",
-       "#1075", "#1076", "#1077", "#1078", "#1079", "#1080", "#1081",
-       "#1082", "#1083", "#1084", "#1085", "#1086", "#1087", "#1088",
-       "#1089", "#1090", "#1091", "#1092", "#1093", "#1094", "#1095",
-       "#1096", "#1097", "#1098", "#1099", "#1100", "#1101", "#1102",
-       "#1103"
-};
-
-static entity_table_t ent_iso_8859_5[] = {
-       "#1056", "#1057", "#1058", "#1059", "#1060", "#1061", "#1062",
-       "#1063", "#1064", "#1065", "#1066", "#1067", "#1068", "#1069",
-       "#1070", "#1071", "#1072", "#1073", "#1074", "#1075", "#1076",
-       "#1077", "#1078", "#1079", "#1080", "#1081", "#1082", "#1083",
-       "#1084", "#1085", "#1086", "#1087", "#1088", "#1089", "#1090",
-       "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097",
-       "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1104",
-       "#1105", "#1106", "#1107", "#1108", "#1109", "#1110", "#1111",
-       "#1112", "#1113", "#1114", "#1115", "#1116", "#1117", "#1118",
-       "#1119"
-};
-
-static entity_table_t ent_cp_866[] = {
-
-       "#9492", "#9524", "#9516", "#9500", "#9472", "#9532", "#9566", 
-       "#9567", "#9562", "#9556", "#9577", "#9574", "#9568", "#9552", 
-       "#9580", "#9575", "#9576", "#9572", "#9573", "#9561", "#9560", 
-       "#9554", "#9555", "#9579", "#9578", "#9496", "#9484", "#9608", 
-       "#9604", "#9612", "#9616", "#9600", "#1088", "#1089", "#1090", 
-       "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097", 
-       "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1025", 
-       "#1105", "#1028", "#1108", "#1031", "#1111", "#1038", "#1118", 
-       "#176", "#8729", "#183", "#8730", "#8470", "#164",  "#9632", 
-       "#160"
-};
-
-/* MacRoman has a couple of low-ascii chars that need mapping too */
-/* Vertical tab (ASCII 11) is often used to store line breaks inside */
-/* DB exports, this mapping changes it to a space */
-static entity_table_t ent_macroman[] = {
-       "sp", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, "quot", NULL,
-       NULL, NULL, "amp", NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, "lt", NULL, "gt", NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, "Auml", "Aring", "Ccedil", "Eacute", "Ntilde", "Ouml",
-       "Uuml", "aacute", "agrave", "acirc", "auml", "atilde", "aring",
-       "ccedil", "eacute", "egrave", "ecirc", "euml", "iacute", "igrave",
-       "icirc", "iuml", "ntilde", "oacute", "ograve", "ocirc", "ouml",
-       "otilde", "uacute", "ugrave", "ucirc", "uuml", "dagger", "deg",
-       "cent", "pound", "sect", "bull", "para", "szlig", "reg",
-       "copy", "trade", "acute", "uml", "ne", "AElig", "Oslash",
-       "infin", "plusmn", "le", "ge", "yen", "micro", "part",
-       "sum", "prod", "pi", "int", "ordf", "ordm", "Omega",
-       "aelig", "oslash", "iquest", "iexcl", "not", "radic", "fnof",
-       "asymp", "#8710", "laquo", "raquo", "hellip", "nbsp", "Agrave",
-       "Atilde", "Otilde", "OElig", "oelig", "ndash", "mdash", "ldquo",
-       "rdquo", "lsquo", "rsquo", "divide", "loz", "yuml", "Yuml",
-       "frasl", "euro", "lsaquo", "rsaquo", "#xFB01", "#xFB02", "Dagger",
-       "middot", "sbquo", "bdquo", "permil", "Acirc", "Ecirc", "Aacute",
-       "Euml", "Egrave", "Iacute", "Icirc", "Iuml", "Igrave", "Oacute",
-       "Ocirc", "#xF8FF", "Ograve", "Uacute", "Ucirc", "Ugrave", "#305",
-       "circ", "tilde", "macr", "#728", "#729", "#730", "cedil",
-       "#733", "#731", "#711"
-};
-
-struct html_entity_map {
-       enum entity_charset charset;    /* charset identifier */
-       unsigned int basechar;                  /* char code at start of table */
-       unsigned int endchar;                   /* last char code in the table */
-       entity_table_t *table;                  /* the table of mappings */
-};
-
-static const struct html_entity_map entity_map[] = {
-       { cs_cp1252,            0x80, 0x9f, ent_cp_1252 },
-       { cs_cp1252,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_8859_1,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_8859_15,           0xa0, 0xff, ent_iso_8859_15 },
-       { cs_utf_8,             0xa0, 0xff, ent_iso_8859_1 },
-       { cs_utf_8,             338,  402,  ent_uni_338_402 },
-       { cs_utf_8,             710,  732,  ent_uni_spacing },
-       { cs_utf_8,             913,  982,  ent_uni_greek },
-       { cs_utf_8,             8194, 8260, ent_uni_punct },
-       { cs_utf_8,             8364, 8364, ent_uni_euro }, 
-       { cs_utf_8,             8465, 8501, ent_uni_8465_8501 },
-       { cs_utf_8,             8592, 9002, ent_uni_8592_9002 },
-       { cs_utf_8,             9674, 9674, ent_uni_9674 },
-       { cs_utf_8,             9824, 9830, ent_uni_9824_9830 },
-       { cs_big5,                      0xa0, 0xff, ent_iso_8859_1 },
-       { cs_gb2312,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_big5hkscs,         0xa0, 0xff, ent_iso_8859_1 },
-       { cs_sjis,                      0xa0, 0xff, ent_iso_8859_1 },
-       { cs_eucjp,                     0xa0, 0xff, ent_iso_8859_1 },
-       { cs_koi8r,                 0xa3, 0xff, ent_koi8r },
-       { cs_cp1251,            0x80, 0xff, ent_cp_1251 },
-       { cs_8859_5,            0xc0, 0xff, ent_iso_8859_5 },
-       { cs_cp866,                 0xc0, 0xff, ent_cp_866 },
-       { cs_macroman,          0x0b, 0xff, ent_macroman },
-       { cs_terminator }
-};
+#define CHARSET_UNICODE_COMPAT(cs)     ((cs) <= cs_utf_8)
+#define CHARSET_SINGLE_BYTE(cs)                ((cs) > cs_utf_8 && (cs) < cs_big5)
+#define CHARSET_PARTIAL_SUPPORT(cs)    ((cs) >= cs_big5)
 
 static const struct {
        const char *codeset;
@@ -428,74 +82,463 @@ static const struct {
        { NULL }
 };
 
+/* longest entity name length excluding & and ; */
+#define LONGEST_ENTITY_LENGTH 31
+
+/* Definitions for mappings *to* Unicode.
+ * The origin charset must have at most 256 code points.
+ * The multi-byte encodings are not supported */
 typedef struct {
-       unsigned short charcode;
-       char *entity;
-       int entitylen;
-       int flags;
-} basic_entity_t;
-
-static const basic_entity_t basic_entities_ex[] = {
-       { '&',  "&amp;",    5,  0 },
-       { '"',  "&quot;",       6,      ENT_HTML_QUOTE_DOUBLE },
-       /* PHP traditionally encodes ' as &#039;, not &apos;, so leave this entry here */
-       { '\'', "&#039;",       6,      ENT_HTML_QUOTE_SINGLE },
-       { '\'', "&apos;",       6,      ENT_HTML_QUOTE_SINGLE },
-       { '<',  "&lt;",         4,      0 },
-       { '>',  "&gt;",         4,      0 },
-       { 0, NULL, 0, 0 }
-};
-
-/* In some cases, we need to give special treatment to &, so we
- * use this instead */
-static const basic_entity_t *basic_entities = &basic_entities_ex[1];
+    unsigned short uni_cp[64];
+} enc_to_uni_stage2;
+
+typedef struct {
+    const enc_to_uni_stage2 *inner[4];
+} enc_to_uni;
+
+/* bits 7-8 bits (only single bytes encodings supported )*/
+#define ENT_ENC_TO_UNI_STAGE1(k) ((k & 0xC0) >> 6)
+/* bits 1-6 */
+#define ENT_ENC_TO_UNI_STAGE2(k) ((k) & 0x3F)
+
+/* {{{ Mappings *to* Unicode for ISO-8859-1 */
+
+/* {{{ Stage 2 tables for ISO-8859-1 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_00 = {
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+       0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B,
+       0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011,
+       0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D,
+       0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023,
+       0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
+       0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
+       0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B,
+       0x003C, 0x003D, 0x003E, 0x003F,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_40 = {
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
+       0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B,
+       0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051,
+       0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D,
+       0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063,
+       0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069,
+       0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
+       0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B,
+       0x007C, 0x007D, 0x007E, 0x007F,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_80 = {
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
+       0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
+       0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
+       0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
+       0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
+       0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9,
+       0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
+       0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB,
+       0x00BC, 0x00BD, 0x00BE, 0x00BF,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_C0 = {
+       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5,
+       0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB,
+       0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1,
+       0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD,
+       0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3,
+       0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9,
+       0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+       0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5,
+       0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB,
+       0x00FC, 0x00FD, 0x00FE, 0x00FF,
+};
+
+/* end of stage 2 tables for ISO-8859-1 }}} */
+
+/* {{{ Stage 1 table for ISO-8859-1 */
+static const enc_to_uni enc_to_uni_iso88591 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_iso88591_80,
+       &enc_to_uni_s2_iso88591_C0,
+};
+/* end of stage 1 table for ISO-8859-1 }}} */
+
+/* {{{ Mappings *to* Unicode for ISO-8859-5 */
+
+/* {{{ Stage 2 tables for ISO-8859-5 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_80 = {
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
+       0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
+       0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
+       0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
+       0x009E, 0x009F, 0x00A0, 0x0401, 0x0402, 0x0403,
+       0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409,
+       0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+       0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
+       0x041C, 0x041D, 0x041E, 0x041F,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_C0 = {
+       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
+       0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B,
+       0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431,
+       0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D,
+       0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443,
+       0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
+       0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+       0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455,
+       0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B,
+       0x045C, 0x00A7, 0x045E, 0x045F,
+};
+
+/* end of stage 2 tables for ISO-8859-5 }}} */
+
+/* {{{ Stage 1 table for ISO-8859-5 */
+static const enc_to_uni enc_to_uni_iso88595 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_iso88595_80,
+       &enc_to_uni_s2_iso88595_C0,
+};
+/* end of stage 1 table for ISO-8859-5 }}} */
+
+/* {{{ Mappings *to* Unicode for ISO-8859-15 */
+
+/* {{{ Stage 2 tables for ISO-8859-15 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_iso885915_80 = {
+       0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
+       0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
+       0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
+       0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+       0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
+       0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
+       0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9,
+       0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5,
+       0x00B6, 0x00B7, 0x017E, 0x00B9, 0x00BA, 0x00BB,
+       0x0152, 0x0153, 0x0178, 0x00BF,
+};
+
+/* end of stage 2 tables for ISO-8859-15 }}} */
+
+/* {{{ Stage 1 table for ISO-8859-15 */
+static const enc_to_uni enc_to_uni_iso885915 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_iso885915_80,
+       &enc_to_uni_s2_iso88591_C0,
+};
+/* end of stage 1 table for ISO-8859-15 }}} */
+
+/* {{{ Mappings *to* Unicode for Windows-1252 */
+
+/* {{{ Stage 2 tables for Windows-1252 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_win1252_80 = {
+       0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026,
+       0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039,
+       0x0152, 0xFFFF, 0x017D, 0xFFFF, 0xFFFF, 0x2018,
+       0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+       0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF,
+       0x017E, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
+       0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9,
+       0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
+       0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB,
+       0x00BC, 0x00BD, 0x00BE, 0x00BF,
+};
+
+/* end of stage 2 tables for Windows-1252 }}} */
+
+/* {{{ Stage 1 table for Windows-1252 */
+static const enc_to_uni enc_to_uni_win1252 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_win1252_80,
+       &enc_to_uni_s2_iso88591_C0,
+};
+/* end of stage 1 table for Windows-1252 }}} */
+
+/* {{{ Mappings *to* Unicode for Windows-1251 */
+
+/* {{{ Stage 2 tables for Windows-1251 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_win1251_80 = {
+       0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026,
+       0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039,
+       0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018,
+       0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+       0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C,
+       0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408,
+       0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9,
+       0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
+       0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5,
+       0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB,
+       0x0458, 0x0405, 0x0455, 0x0457,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_win1251_C0 = {
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+       0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
+       0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421,
+       0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D,
+       0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433,
+       0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439,
+       0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
+       0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B,
+       0x044C, 0x044D, 0x044E, 0x044F,
+};
+
+/* end of stage 2 tables for Windows-1251 }}} */
+
+/* {{{ Stage 1 table for Windows-1251 */
+static const enc_to_uni enc_to_uni_win1251 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_win1251_80,
+       &enc_to_uni_s2_win1251_C0,
+};
+/* end of stage 1 table for Windows-1251 }}} */
+
+/* {{{ Mappings *to* Unicode for KOI8-R */
+
+/* {{{ Stage 2 tables for KOI8-R */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_80 = {
+       0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518,
+       0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580,
+       0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592,
+       0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248,
+       0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2,
+       0x00B7, 0x00F7, 0x2550, 0x2551, 0x2552, 0x0451,
+       0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558,
+       0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
+       0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563,
+       0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569,
+       0x256A, 0x256B, 0x256C, 0x00A9,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_C0 = {
+       0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435,
+       0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043A,
+       0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x044F,
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+       0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449,
+       0x0447, 0x044A, 0x042E, 0x0410, 0x0411, 0x0426,
+       0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418,
+       0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
+       0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423,
+       0x0416, 0x0412, 0x042C, 0x042B, 0x0417, 0x0428,
+       0x042D, 0x0429, 0x0427, 0x042A,
+};
+
+/* end of stage 2 tables for KOI8-R }}} */
+
+/* {{{ Stage 1 table for KOI8-R */
+static const enc_to_uni enc_to_uni_koi8r = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_koi8r_80,
+       &enc_to_uni_s2_koi8r_C0,
+};
+/* end of stage 1 table for KOI8-R }}} */
+
+/* {{{ Mappings *to* Unicode for CP-866 */
+
+/* {{{ Stage 2 tables for CP-866 */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_cp866_80 = {
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+       0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
+       0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421,
+       0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D,
+       0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433,
+       0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439,
+       0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561,
+       0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
+       0x255D, 0x255C, 0x255B, 0x2510,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_cp866_C0 = {
+       0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C,
+       0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
+       0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564,
+       0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
+       0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C,
+       0x2590, 0x2580, 0x0440, 0x0441, 0x0442, 0x0443,
+       0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
+       0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+       0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457,
+       0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A,
+       0x2116, 0x00A4, 0x25A0, 0x00A0,
+};
+
+/* end of stage 2 tables for CP-866 }}} */
+
+/* {{{ Stage 1 table for CP-866 */
+static const enc_to_uni enc_to_uni_cp866 = {
+       &enc_to_uni_s2_iso88591_00,
+       &enc_to_uni_s2_iso88591_40,
+       &enc_to_uni_s2_cp866_80,
+       &enc_to_uni_s2_cp866_C0,
+};
+/* end of stage 1 table for CP-866 }}} */
+
+/* {{{ Mappings *to* Unicode for MacRoman */
+
+/* {{{ Stage 2 tables for MacRoman */
+
+static const enc_to_uni_stage2 enc_to_uni_s2_macroman_00 = {
+       0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+       0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+       0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+       0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+       0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+       0xFFFF, 0xFFFF, 0x0020, 0x0021, 0x0022, 0x0023,
+       0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
+       0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
+       0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B,
+       0x003C, 0x003D, 0x003E, 0x003F,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_macroman_40 = {
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
+       0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B,
+       0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051,
+       0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D,
+       0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063,
+       0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069,
+       0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
+       0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B,
+       0x007C, 0x007D, 0x007E, 0xFFFF,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_macroman_80 = {
+       0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6,
+       0x00DC, 0x00E1, 0x00E0, 0x00E2, 0x00E4, 0x00E3,
+       0x00E5, 0x00E7, 0x00E9, 0x00E8, 0x00EA, 0x00EB,
+       0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3,
+       0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9,
+       0x00FB, 0x00FC, 0x2020, 0x00B0, 0x00A2, 0x00A3,
+       0x00A7, 0x2022, 0x00B6, 0x00DF, 0x00AE, 0x00A9,
+       0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8,
+       0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5,
+       0x2202, 0x2211, 0x220F, 0x03C0, 0x222B, 0x00AA,
+       0x00BA, 0x03A9, 0x00E6, 0x00F8,
+};
+
+static const enc_to_uni_stage2 enc_to_uni_s2_macroman_C0 = {
+       0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248,
+       0x2206, 0x00AB, 0x00BB, 0x2026, 0x00A0, 0x00C0,
+       0x00C3, 0x00D5, 0x0152, 0x0153, 0x2013, 0x2014,
+       0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA,
+       0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A,
+       0xFB01, 0xFB02, 0x2021, 0x00B7, 0x201A, 0x201E,
+       0x2030, 0x00C2, 0x00CA, 0x00C1, 0x00CB, 0x00C8,
+       0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4,
+       0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131,
+       0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, 0x02DA,
+       0x00B8, 0x02DD, 0x02DB, 0x02C7,
+};
+
+/* end of stage 2 tables for MacRoman }}} */
+
+/* {{{ Stage 1 table for MacRoman */
+static const enc_to_uni enc_to_uni_macroman = {
+       &enc_to_uni_s2_macroman_00,
+       &enc_to_uni_s2_macroman_40,
+       &enc_to_uni_s2_macroman_80,
+       &enc_to_uni_s2_macroman_C0,
+};
+/* end of stage 1 table for MacRoman }}} */
+
+/* {{{ Index of tables for encoding conversion */
+static const enc_to_uni *const enc_to_uni_index[cs_numelems] = {
+       NULL,
+       NULL,
+       &enc_to_uni_iso88591,
+       &enc_to_uni_win1252,
+       &enc_to_uni_iso885915,
+       &enc_to_uni_win1251,
+       &enc_to_uni_iso88595,
+       &enc_to_uni_cp866,
+       &enc_to_uni_macroman,
+       &enc_to_uni_koi8r,
+};
+/* }}} */
+
+/* Definitions for mappings *from* Unicode */
 
 typedef struct {
        unsigned short un_code_point; /* we don't need bigger */
        unsigned char cs_code; /* currently, we only have maps to single-byte encodings */
-} unicode_mapping;
-
-static const unicode_mapping unimap_iso885915[] = {
-       { 0xA5,   0xA5 },       /* yen sign */
-       { 0xA7,   0xA7 },       /* section sign */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAA,   0xAA },       /* feminine ordinal indicator */
-       { 0xAB,   0xAB },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xAC },       /* not sign */
-       { 0xAD,   0xAD },       /* soft hyphen */
-       { 0xAE,   0xAE },       /* registered sign */
-       { 0xAF,   0xAF },       /* macron */
-       { 0xB0,   0xB0 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB2,   0xB2 },       /* superscript two */
-       { 0xB3,   0xB3 },       /* superscript three */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xB6 },       /* pilcrow sign */
-       { 0xB7,   0xB7 },       /* middle dot */
-       { 0xB9,   0xB9 },       /* superscript one */
-       { 0xBA,   0xBA },       /* masculine ordinal indicator */
-       { 0xBB,   0xBB },       /* right-pointing double angle quotation mark */
-       { 0x152,  0xBC },       /* latin capital ligature oe */
-       { 0x153,  0xBD },       /* latin small ligature oe */
-       { 0x160,  0xA6 },       /* latin capital letter s with caron */
-       { 0x161,  0xA8 },       /* latin small letter s with caron */
-       { 0x178,  0xBE },       /* latin capital letter y with diaeresis */
-       { 0x17D,  0xB4 },       /* latin capital letter z with caron */
-       { 0x17E,  0xB8 },       /* latin small letter z with caron */
+} uni_to_enc;
+
+/* {{{ Mappings *from* Unicode for ISO-8859-15 */
+static const uni_to_enc unimap_iso885915[] = {
+       { 0x00A5, 0xA5 },       /* yen sign */
+       { 0x00A7, 0xA7 },       /* section sign */
+       { 0x00A9, 0xA9 },       /* copyright sign */
+       { 0x00AA, 0xAA },       /* feminine ordinal indicator */
+       { 0x00AB, 0xAB },       /* left-pointing double angle quotation mark */
+       { 0x00AC, 0xAC },       /* not sign */
+       { 0x00AD, 0xAD },       /* soft hyphen */
+       { 0x00AE, 0xAE },       /* registered sign */
+       { 0x00AF, 0xAF },       /* macron */
+       { 0x00B0, 0xB0 },       /* degree sign */
+       { 0x00B1, 0xB1 },       /* plus-minus sign */
+       { 0x00B2, 0xB2 },       /* superscript two */
+       { 0x00B3, 0xB3 },       /* superscript three */
+       { 0x00B5, 0xB5 },       /* micro sign */
+       { 0x00B6, 0xB6 },       /* pilcrow sign */
+       { 0x00B7, 0xB7 },       /* middle dot */
+       { 0x00B9, 0xB9 },       /* superscript one */
+       { 0x00BA, 0xBA },       /* masculine ordinal indicator */
+       { 0x00BB, 0xBB },       /* right-pointing double angle quotation mark */
+       { 0x0152, 0xBC },       /* latin capital ligature oe */
+       { 0x0153, 0xBD },       /* latin small ligature oe */
+       { 0x0160, 0xA6 },       /* latin capital letter s with caron */
+       { 0x0161, 0xA8 },       /* latin small letter s with caron */
+       { 0x0178, 0xBE },       /* latin capital letter y with diaeresis */
+       { 0x017D, 0xB4 },       /* latin capital letter z with caron */
+       { 0x017E, 0xB8 },       /* latin small letter z with caron */
        { 0x20AC, 0xA4 },       /* euro sign */
 };
+/* {{{ end of mappings *from* Unicode for ISO-8859-15 */
 
-static const unicode_mapping unimap_win1252[] = {
-       { 0x152,  0x8C },       /* latin capital ligature oe */
-       { 0x153,  0x9C },       /* latin small ligature oe */
-       { 0x160,  0x8A },       /* latin capital letter s with caron */
-       { 0x161,  0x9A },       /* latin small letter s with caron */
-       { 0x178,  0x9F },       /* latin capital letter y with diaeresis */
-       { 0x17D,  0x8E },       /* latin capital letter z with caron */
-       { 0x17E,  0x9E },       /* latin small letter z with caron */
-       { 0x192,  0x83 },       /* latin small letter f with hook */
-       { 0x2C6,  0x88 },       /* modifier letter circumflex accent */
-       { 0x2DC,  0x98 },       /* small tilde */
+/* {{{ Mappings *from* Unicode for Windows-1252 */
+static const uni_to_enc unimap_win1252[] = {
+       { 0x0152, 0x8C },       /* latin capital ligature oe */
+       { 0x0153, 0x9C },       /* latin small ligature oe */
+       { 0x0160, 0x8A },       /* latin capital letter s with caron */
+       { 0x0161, 0x9A },       /* latin small letter s with caron */
+       { 0x0178, 0x9F },       /* latin capital letter y with diaeresis */
+       { 0x017D, 0x8E },       /* latin capital letter z with caron */
+       { 0x017E, 0x9E },       /* latin small letter z with caron */
+       { 0x0192, 0x83 },       /* latin small letter f with hook */
+       { 0x02C6, 0x88 },       /* modifier letter circumflex accent */
+       { 0x02DC, 0x98 },       /* small tilde */
        { 0x2013, 0x96 },       /* en dash */
        { 0x2014, 0x97 },       /* em dash */
        { 0x2018, 0x91 },       /* left single quotation mark */
@@ -514,117 +557,119 @@ static const unicode_mapping unimap_win1252[] = {
        { 0x20AC, 0x80 },       /* euro sign */
        { 0x2122, 0x99 },       /* trade mark sign */
 };
+/* {{{ end of mappings *from* Unicode for Windows-1252 */
 
-static const unicode_mapping unimap_win1251[] = {
-       { 0xA0,   0xA0 },       /* no-break space */
-       { 0xA4,   0xA4 },       /* currency sign */
-       { 0xA6,   0xA6 },       /* broken bar */
-       { 0xA7,   0xA7 },       /* section sign */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAB,   0xAB },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xAC },       /* not sign */
-       { 0xAD,   0xAD },       /* soft hyphen */
-       { 0xAE,   0xAE },       /* registered sign */
-       { 0xB0,   0xB0 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xB6 },       /* pilcrow sign */
-       { 0xB7,   0xB7 },       /* middle dot */
-       { 0xBB,   0xBB },       /* right-pointing double angle quotation mark */
-       { 0x401,  0xA8 },       /* cyrillic capital letter io */
-       { 0x402,  0x80 },       /* cyrillic capital letter dje */
-       { 0x403,  0x81 },       /* cyrillic capital letter gje */
-       { 0x404,  0xAA },       /* cyrillic capital letter ukrainian ie */
-       { 0x405,  0xBD },       /* cyrillic capital letter dze */
-       { 0x406,  0xB2 },       /* cyrillic capital letter byelorussian-ukrainian i */
-       { 0x407,  0xAF },       /* cyrillic capital letter yi */
-       { 0x408,  0xA3 },       /* cyrillic capital letter je */
-       { 0x409,  0x8A },       /* cyrillic capital letter lje */
-       { 0x40A,  0x8C },       /* cyrillic capital letter nje */
-       { 0x40B,  0x8E },       /* cyrillic capital letter tshe */
-       { 0x40C,  0x8D },       /* cyrillic capital letter kje */
-       { 0x40E,  0xA1 },       /* cyrillic capital letter short u */
-       { 0x40F,  0x8F },       /* cyrillic capital letter dzhe */
-       { 0x410,  0xC0 },       /* cyrillic capital letter a */
-       { 0x411,  0xC1 },       /* cyrillic capital letter be */
-       { 0x412,  0xC2 },       /* cyrillic capital letter ve */
-       { 0x413,  0xC3 },       /* cyrillic capital letter ghe */
-       { 0x414,  0xC4 },       /* cyrillic capital letter de */
-       { 0x415,  0xC5 },       /* cyrillic capital letter ie */
-       { 0x416,  0xC6 },       /* cyrillic capital letter zhe */
-       { 0x417,  0xC7 },       /* cyrillic capital letter ze */
-       { 0x418,  0xC8 },       /* cyrillic capital letter i */
-       { 0x419,  0xC9 },       /* cyrillic capital letter short i */
-       { 0x41A,  0xCA },       /* cyrillic capital letter ka */
-       { 0x41B,  0xCB },       /* cyrillic capital letter el */
-       { 0x41C,  0xCC },       /* cyrillic capital letter em */
-       { 0x41D,  0xCD },       /* cyrillic capital letter en */
-       { 0x41E,  0xCE },       /* cyrillic capital letter o */
-       { 0x41F,  0xCF },       /* cyrillic capital letter pe */
-       { 0x420,  0xD0 },       /* cyrillic capital letter er */
-       { 0x421,  0xD1 },       /* cyrillic capital letter es */
-       { 0x422,  0xD2 },       /* cyrillic capital letter te */
-       { 0x423,  0xD3 },       /* cyrillic capital letter u */
-       { 0x424,  0xD4 },       /* cyrillic capital letter ef */
-       { 0x425,  0xD5 },       /* cyrillic capital letter ha */
-       { 0x426,  0xD6 },       /* cyrillic capital letter tse */
-       { 0x427,  0xD7 },       /* cyrillic capital letter che */
-       { 0x428,  0xD8 },       /* cyrillic capital letter sha */
-       { 0x429,  0xD9 },       /* cyrillic capital letter shcha */
-       { 0x42A,  0xDA },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0xDB },       /* cyrillic capital letter yeru */
-       { 0x42C,  0xDC },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0xDD },       /* cyrillic capital letter e */
-       { 0x42E,  0xDE },       /* cyrillic capital letter yu */
-       { 0x42F,  0xDF },       /* cyrillic capital letter ya */
-       { 0x430,  0xE0 },       /* cyrillic small letter a */
-       { 0x431,  0xE1 },       /* cyrillic small letter be */
-       { 0x432,  0xE2 },       /* cyrillic small letter ve */
-       { 0x433,  0xE3 },       /* cyrillic small letter ghe */
-       { 0x434,  0xE4 },       /* cyrillic small letter de */
-       { 0x435,  0xE5 },       /* cyrillic small letter ie */
-       { 0x436,  0xE6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xE7 },       /* cyrillic small letter ze */
-       { 0x438,  0xE8 },       /* cyrillic small letter i */
-       { 0x439,  0xE9 },       /* cyrillic small letter short i */
-       { 0x43A,  0xEA },       /* cyrillic small letter ka */
-       { 0x43B,  0xEB },       /* cyrillic small letter el */
-       { 0x43C,  0xEC },       /* cyrillic small letter em */
-       { 0x43D,  0xED },       /* cyrillic small letter en */
-       { 0x43E,  0xEE },       /* cyrillic small letter o */
-       { 0x43F,  0xEF },       /* cyrillic small letter pe */
-       { 0x440,  0xF0 },       /* cyrillic small letter er */
-       { 0x441,  0xF1 },       /* cyrillic small letter es */
-       { 0x442,  0xF2 },       /* cyrillic small letter te */
-       { 0x443,  0xF3 },       /* cyrillic small letter u */
-       { 0x444,  0xF4 },       /* cyrillic small letter ef */
-       { 0x445,  0xF5 },       /* cyrillic small letter ha */
-       { 0x446,  0xF6 },       /* cyrillic small letter tse */
-       { 0x447,  0xF7 },       /* cyrillic small letter che */
-       { 0x448,  0xF8 },       /* cyrillic small letter sha */
-       { 0x449,  0xF9 },       /* cyrillic small letter shcha */
-       { 0x44A,  0xFA },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xFB },       /* cyrillic small letter yeru */
-       { 0x44C,  0xFC },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xFD },       /* cyrillic small letter e */
-       { 0x44E,  0xFE },       /* cyrillic small letter yu */
-       { 0x44F,  0xFF },       /* cyrillic small letter ya */
-       { 0x451,  0xB8 },       /* cyrillic small letter io */
-       { 0x452,  0x90 },       /* cyrillic small letter dje */
-       { 0x453,  0x83 },       /* cyrillic small letter gje */
-       { 0x454,  0xBA },       /* cyrillic small letter ukrainian ie */
-       { 0x455,  0xBE },       /* cyrillic small letter dze */
-       { 0x456,  0xB3 },       /* cyrillic small letter byelorussian-ukrainian i */
-       { 0x457,  0xBF },       /* cyrillic small letter yi */
-       { 0x458,  0xBC },       /* cyrillic small letter je */
-       { 0x459,  0x9A },       /* cyrillic small letter lje */
-       { 0x45A,  0x9C },       /* cyrillic small letter nje */
-       { 0x45B,  0x9E },       /* cyrillic small letter tshe */
-       { 0x45C,  0x9D },       /* cyrillic small letter kje */
-       { 0x45E,  0xA2 },       /* cyrillic small letter short u */
-       { 0x45F,  0x9F },       /* cyrillic small letter dzhe */
-       { 0x490,  0xA5 },       /* cyrillic capital letter ghe with upturn */
-       { 0x491,  0xB4 },       /* cyrillic small letter ghe with upturn */
+/* {{{ Mappings *from* Unicode for Windows-1251 */
+static const uni_to_enc unimap_win1251[] = {
+       { 0x00A0, 0xA0 },       /* no-break space */
+       { 0x00A4, 0xA4 },       /* currency sign */
+       { 0x00A6, 0xA6 },       /* broken bar */
+       { 0x00A7, 0xA7 },       /* section sign */
+       { 0x00A9, 0xA9 },       /* copyright sign */
+       { 0x00AB, 0xAB },       /* left-pointing double angle quotation mark */
+       { 0x00AC, 0xAC },       /* not sign */
+       { 0x00AD, 0xAD },       /* soft hyphen */
+       { 0x00AE, 0xAE },       /* registered sign */
+       { 0x00B0, 0xB0 },       /* degree sign */
+       { 0x00B1, 0xB1 },       /* plus-minus sign */
+       { 0x00B5, 0xB5 },       /* micro sign */
+       { 0x00B6, 0xB6 },       /* pilcrow sign */
+       { 0x00B7, 0xB7 },       /* middle dot */
+       { 0x00BB, 0xBB },       /* right-pointing double angle quotation mark */
+       { 0x0401, 0xA8 },       /* cyrillic capital letter io */
+       { 0x0402, 0x80 },       /* cyrillic capital letter dje */
+       { 0x0403, 0x81 },       /* cyrillic capital letter gje */
+       { 0x0404, 0xAA },       /* cyrillic capital letter ukrainian ie */
+       { 0x0405, 0xBD },       /* cyrillic capital letter dze */
+       { 0x0406, 0xB2 },       /* cyrillic capital letter byelorussian-ukrainian i */
+       { 0x0407, 0xAF },       /* cyrillic capital letter yi */
+       { 0x0408, 0xA3 },       /* cyrillic capital letter je */
+       { 0x0409, 0x8A },       /* cyrillic capital letter lje */
+       { 0x040A, 0x8C },       /* cyrillic capital letter nje */
+       { 0x040B, 0x8E },       /* cyrillic capital letter tshe */
+       { 0x040C, 0x8D },       /* cyrillic capital letter kje */
+       { 0x040E, 0xA1 },       /* cyrillic capital letter short u */
+       { 0x040F, 0x8F },       /* cyrillic capital letter dzhe */
+       { 0x0410, 0xC0 },       /* cyrillic capital letter a */
+       { 0x0411, 0xC1 },       /* cyrillic capital letter be */
+       { 0x0412, 0xC2 },       /* cyrillic capital letter ve */
+       { 0x0413, 0xC3 },       /* cyrillic capital letter ghe */
+       { 0x0414, 0xC4 },       /* cyrillic capital letter de */
+       { 0x0415, 0xC5 },       /* cyrillic capital letter ie */
+       { 0x0416, 0xC6 },       /* cyrillic capital letter zhe */
+       { 0x0417, 0xC7 },       /* cyrillic capital letter ze */
+       { 0x0418, 0xC8 },       /* cyrillic capital letter i */
+       { 0x0419, 0xC9 },       /* cyrillic capital letter short i */
+       { 0x041A, 0xCA },       /* cyrillic capital letter ka */
+       { 0x041B, 0xCB },       /* cyrillic capital letter el */
+       { 0x041C, 0xCC },       /* cyrillic capital letter em */
+       { 0x041D, 0xCD },       /* cyrillic capital letter en */
+       { 0x041E, 0xCE },       /* cyrillic capital letter o */
+       { 0x041F, 0xCF },       /* cyrillic capital letter pe */
+       { 0x0420, 0xD0 },       /* cyrillic capital letter er */
+       { 0x0421, 0xD1 },       /* cyrillic capital letter es */
+       { 0x0422, 0xD2 },       /* cyrillic capital letter te */
+       { 0x0423, 0xD3 },       /* cyrillic capital letter u */
+       { 0x0424, 0xD4 },       /* cyrillic capital letter ef */
+       { 0x0425, 0xD5 },       /* cyrillic capital letter ha */
+       { 0x0426, 0xD6 },       /* cyrillic capital letter tse */
+       { 0x0427, 0xD7 },       /* cyrillic capital letter che */
+       { 0x0428, 0xD8 },       /* cyrillic capital letter sha */
+       { 0x0429, 0xD9 },       /* cyrillic capital letter shcha */
+       { 0x042A, 0xDA },       /* cyrillic capital letter hard sign */
+       { 0x042B, 0xDB },       /* cyrillic capital letter yeru */
+       { 0x042C, 0xDC },       /* cyrillic capital letter soft sign */
+       { 0x042D, 0xDD },       /* cyrillic capital letter e */
+       { 0x042E, 0xDE },       /* cyrillic capital letter yu */
+       { 0x042F, 0xDF },       /* cyrillic capital letter ya */
+       { 0x0430, 0xE0 },       /* cyrillic small letter a */
+       { 0x0431, 0xE1 },       /* cyrillic small letter be */
+       { 0x0432, 0xE2 },       /* cyrillic small letter ve */
+       { 0x0433, 0xE3 },       /* cyrillic small letter ghe */
+       { 0x0434, 0xE4 },       /* cyrillic small letter de */
+       { 0x0435, 0xE5 },       /* cyrillic small letter ie */
+       { 0x0436, 0xE6 },       /* cyrillic small letter zhe */
+       { 0x0437, 0xE7 },       /* cyrillic small letter ze */
+       { 0x0438, 0xE8 },       /* cyrillic small letter i */
+       { 0x0439, 0xE9 },       /* cyrillic small letter short i */
+       { 0x043A, 0xEA },       /* cyrillic small letter ka */
+       { 0x043B, 0xEB },       /* cyrillic small letter el */
+       { 0x043C, 0xEC },       /* cyrillic small letter em */
+       { 0x043D, 0xED },       /* cyrillic small letter en */
+       { 0x043E, 0xEE },       /* cyrillic small letter o */
+       { 0x043F, 0xEF },       /* cyrillic small letter pe */
+       { 0x0440, 0xF0 },       /* cyrillic small letter er */
+       { 0x0441, 0xF1 },       /* cyrillic small letter es */
+       { 0x0442, 0xF2 },       /* cyrillic small letter te */
+       { 0x0443, 0xF3 },       /* cyrillic small letter u */
+       { 0x0444, 0xF4 },       /* cyrillic small letter ef */
+       { 0x0445, 0xF5 },       /* cyrillic small letter ha */
+       { 0x0446, 0xF6 },       /* cyrillic small letter tse */
+       { 0x0447, 0xF7 },       /* cyrillic small letter che */
+       { 0x0448, 0xF8 },       /* cyrillic small letter sha */
+       { 0x0449, 0xF9 },       /* cyrillic small letter shcha */
+       { 0x044A, 0xFA },       /* cyrillic small letter hard sign */
+       { 0x044B, 0xFB },       /* cyrillic small letter yeru */
+       { 0x044C, 0xFC },       /* cyrillic small letter soft sign */
+       { 0x044D, 0xFD },       /* cyrillic small letter e */
+       { 0x044E, 0xFE },       /* cyrillic small letter yu */
+       { 0x044F, 0xFF },       /* cyrillic small letter ya */
+       { 0x0451, 0xB8 },       /* cyrillic small letter io */
+       { 0x0452, 0x90 },       /* cyrillic small letter dje */
+       { 0x0453, 0x83 },       /* cyrillic small letter gje */
+       { 0x0454, 0xBA },       /* cyrillic small letter ukrainian ie */
+       { 0x0455, 0xBE },       /* cyrillic small letter dze */
+       { 0x0456, 0xB3 },       /* cyrillic small letter byelorussian-ukrainian i */
+       { 0x0457, 0xBF },       /* cyrillic small letter yi */
+       { 0x0458, 0xBC },       /* cyrillic small letter je */
+       { 0x0459, 0x9A },       /* cyrillic small letter lje */
+       { 0x045A, 0x9C },       /* cyrillic small letter nje */
+       { 0x045B, 0x9E },       /* cyrillic small letter tshe */
+       { 0x045C, 0x9D },       /* cyrillic small letter kje */
+       { 0x045E, 0xA2 },       /* cyrillic small letter short u */
+       { 0x045F, 0x9F },       /* cyrillic small letter dzhe */
+       { 0x0490, 0xA5 },       /* cyrillic capital letter ghe with upturn */
+       { 0x0491, 0xB4 },       /* cyrillic small letter ghe with upturn */
        { 0x2013, 0x96 },       /* en dash */
        { 0x2014, 0x97 },       /* em dash */
        { 0x2018, 0x91 },       /* left single quotation mark */
@@ -644,80 +689,82 @@ static const unicode_mapping unimap_win1251[] = {
        { 0x2116, 0xB9 },       /* numero sign */
        { 0x2122, 0x99 },       /* trade mark sign */
 };
+/* {{{ end of mappings *from* Unicode for Windows-1251 */
 
-static const unicode_mapping unimap_koi8r[] = {
-       { 0xA0,   0x9A },       /* no-break space */
-       { 0xA9,   0xBF },       /* copyright sign */
-       { 0xB0,   0x9C },       /* degree sign */
-       { 0xB2,   0x9D },       /* superscript two */
-       { 0xB7,   0x9E },       /* middle dot */
-       { 0xF7,   0x9F },       /* division sign */
-       { 0x401,  0xB3 },       /* cyrillic capital letter io */
-       { 0x410,  0xE1 },       /* cyrillic capital letter a */
-       { 0x411,  0xE2 },       /* cyrillic capital letter be */
-       { 0x412,  0xF7 },       /* cyrillic capital letter ve */
-       { 0x413,  0xE7 },       /* cyrillic capital letter ghe */
-       { 0x414,  0xE4 },       /* cyrillic capital letter de */
-       { 0x415,  0xE5 },       /* cyrillic capital letter ie */
-       { 0x416,  0xF6 },       /* cyrillic capital letter zhe */
-       { 0x417,  0xFA },       /* cyrillic capital letter ze */
-       { 0x418,  0xE9 },       /* cyrillic capital letter i */
-       { 0x419,  0xEA },       /* cyrillic capital letter short i */
-       { 0x41A,  0xEB },       /* cyrillic capital letter ka */
-       { 0x41B,  0xEC },       /* cyrillic capital letter el */
-       { 0x41C,  0xED },       /* cyrillic capital letter em */
-       { 0x41D,  0xEE },       /* cyrillic capital letter en */
-       { 0x41E,  0xEF },       /* cyrillic capital letter o */
-       { 0x41F,  0xF0 },       /* cyrillic capital letter pe */
-       { 0x420,  0xF2 },       /* cyrillic capital letter er */
-       { 0x421,  0xF3 },       /* cyrillic capital letter es */
-       { 0x422,  0xF4 },       /* cyrillic capital letter te */
-       { 0x423,  0xF5 },       /* cyrillic capital letter u */
-       { 0x424,  0xE6 },       /* cyrillic capital letter ef */
-       { 0x425,  0xE8 },       /* cyrillic capital letter ha */
-       { 0x426,  0xE3 },       /* cyrillic capital letter tse */
-       { 0x427,  0xFE },       /* cyrillic capital letter che */
-       { 0x428,  0xFB },       /* cyrillic capital letter sha */
-       { 0x429,  0xFD },       /* cyrillic capital letter shcha */
-       { 0x42A,  0xFF },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0xF9 },       /* cyrillic capital letter yeru */
-       { 0x42C,  0xF8 },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0xFC },       /* cyrillic capital letter e */
-       { 0x42E,  0xE0 },       /* cyrillic capital letter yu */
-       { 0x42F,  0xF1 },       /* cyrillic capital letter ya */
-       { 0x430,  0xC1 },       /* cyrillic small letter a */
-       { 0x431,  0xC2 },       /* cyrillic small letter be */
-       { 0x432,  0xD7 },       /* cyrillic small letter ve */
-       { 0x433,  0xC7 },       /* cyrillic small letter ghe */
-       { 0x434,  0xC4 },       /* cyrillic small letter de */
-       { 0x435,  0xC5 },       /* cyrillic small letter ie */
-       { 0x436,  0xD6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xDA },       /* cyrillic small letter ze */
-       { 0x438,  0xC9 },       /* cyrillic small letter i */
-       { 0x439,  0xCA },       /* cyrillic small letter short i */
-       { 0x43A,  0xCB },       /* cyrillic small letter ka */
-       { 0x43B,  0xCC },       /* cyrillic small letter el */
-       { 0x43C,  0xCD },       /* cyrillic small letter em */
-       { 0x43D,  0xCE },       /* cyrillic small letter en */
-       { 0x43E,  0xCF },       /* cyrillic small letter o */
-       { 0x43F,  0xD0 },       /* cyrillic small letter pe */
-       { 0x440,  0xD2 },       /* cyrillic small letter er */
-       { 0x441,  0xD3 },       /* cyrillic small letter es */
-       { 0x442,  0xD4 },       /* cyrillic small letter te */
-       { 0x443,  0xD5 },       /* cyrillic small letter u */
-       { 0x444,  0xC6 },       /* cyrillic small letter ef */
-       { 0x445,  0xC8 },       /* cyrillic small letter ha */
-       { 0x446,  0xC3 },       /* cyrillic small letter tse */
-       { 0x447,  0xDE },       /* cyrillic small letter che */
-       { 0x448,  0xDB },       /* cyrillic small letter sha */
-       { 0x449,  0xDD },       /* cyrillic small letter shcha */
-       { 0x44A,  0xDF },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xD9 },       /* cyrillic small letter yeru */
-       { 0x44C,  0xD8 },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xDC },       /* cyrillic small letter e */
-       { 0x44E,  0xC0 },       /* cyrillic small letter yu */
-       { 0x44F,  0xD1 },       /* cyrillic small letter ya */
-       { 0x451,  0xA3 },       /* cyrillic small letter io */
+/* {{{ Mappings *from* Unicode for KOI8-R */
+static const uni_to_enc unimap_koi8r[] = {
+       { 0x00A0, 0x9A },       /* no-break space */
+       { 0x00A9, 0xBF },       /* copyright sign */
+       { 0x00B0, 0x9C },       /* degree sign */
+       { 0x00B2, 0x9D },       /* superscript two */
+       { 0x00B7, 0x9E },       /* middle dot */
+       { 0x00F7, 0x9F },       /* division sign */
+       { 0x0401, 0xB3 },       /* cyrillic capital letter io */
+       { 0x0410, 0xE1 },       /* cyrillic capital letter a */
+       { 0x0411, 0xE2 },       /* cyrillic capital letter be */
+       { 0x0412, 0xF7 },       /* cyrillic capital letter ve */
+       { 0x0413, 0xE7 },       /* cyrillic capital letter ghe */
+       { 0x0414, 0xE4 },       /* cyrillic capital letter de */
+       { 0x0415, 0xE5 },       /* cyrillic capital letter ie */
+       { 0x0416, 0xF6 },       /* cyrillic capital letter zhe */
+       { 0x0417, 0xFA },       /* cyrillic capital letter ze */
+       { 0x0418, 0xE9 },       /* cyrillic capital letter i */
+       { 0x0419, 0xEA },       /* cyrillic capital letter short i */
+       { 0x041A, 0xEB },       /* cyrillic capital letter ka */
+       { 0x041B, 0xEC },       /* cyrillic capital letter el */
+       { 0x041C, 0xED },       /* cyrillic capital letter em */
+       { 0x041D, 0xEE },       /* cyrillic capital letter en */
+       { 0x041E, 0xEF },       /* cyrillic capital letter o */
+       { 0x041F, 0xF0 },       /* cyrillic capital letter pe */
+       { 0x0420, 0xF2 },       /* cyrillic capital letter er */
+       { 0x0421, 0xF3 },       /* cyrillic capital letter es */
+       { 0x0422, 0xF4 },       /* cyrillic capital letter te */
+       { 0x0423, 0xF5 },       /* cyrillic capital letter u */
+       { 0x0424, 0xE6 },       /* cyrillic capital letter ef */
+       { 0x0425, 0xE8 },       /* cyrillic capital letter ha */
+       { 0x0426, 0xE3 },       /* cyrillic capital letter tse */
+       { 0x0427, 0xFE },       /* cyrillic capital letter che */
+       { 0x0428, 0xFB },       /* cyrillic capital letter sha */
+       { 0x0429, 0xFD },       /* cyrillic capital letter shcha */
+       { 0x042A, 0xFF },       /* cyrillic capital letter hard sign */
+       { 0x042B, 0xF9 },       /* cyrillic capital letter yeru */
+       { 0x042C, 0xF8 },       /* cyrillic capital letter soft sign */
+       { 0x042D, 0xFC },       /* cyrillic capital letter e */
+       { 0x042E, 0xE0 },       /* cyrillic capital letter yu */
+       { 0x042F, 0xF1 },       /* cyrillic capital letter ya */
+       { 0x0430, 0xC1 },       /* cyrillic small letter a */
+       { 0x0431, 0xC2 },       /* cyrillic small letter be */
+       { 0x0432, 0xD7 },       /* cyrillic small letter ve */
+       { 0x0433, 0xC7 },       /* cyrillic small letter ghe */
+       { 0x0434, 0xC4 },       /* cyrillic small letter de */
+       { 0x0435, 0xC5 },       /* cyrillic small letter ie */
+       { 0x0436, 0xD6 },       /* cyrillic small letter zhe */
+       { 0x0437, 0xDA },       /* cyrillic small letter ze */
+       { 0x0438, 0xC9 },       /* cyrillic small letter i */
+       { 0x0439, 0xCA },       /* cyrillic small letter short i */
+       { 0x043A, 0xCB },       /* cyrillic small letter ka */
+       { 0x043B, 0xCC },       /* cyrillic small letter el */
+       { 0x043C, 0xCD },       /* cyrillic small letter em */
+       { 0x043D, 0xCE },       /* cyrillic small letter en */
+       { 0x043E, 0xCF },       /* cyrillic small letter o */
+       { 0x043F, 0xD0 },       /* cyrillic small letter pe */
+       { 0x0440, 0xD2 },       /* cyrillic small letter er */
+       { 0x0441, 0xD3 },       /* cyrillic small letter es */
+       { 0x0442, 0xD4 },       /* cyrillic small letter te */
+       { 0x0443, 0xD5 },       /* cyrillic small letter u */
+       { 0x0444, 0xC6 },       /* cyrillic small letter ef */
+       { 0x0445, 0xC8 },       /* cyrillic small letter ha */
+       { 0x0446, 0xC3 },       /* cyrillic small letter tse */
+       { 0x0447, 0xDE },       /* cyrillic small letter che */
+       { 0x0448, 0xDB },       /* cyrillic small letter sha */
+       { 0x0449, 0xDD },       /* cyrillic small letter shcha */
+       { 0x044A, 0xDF },       /* cyrillic small letter hard sign */
+       { 0x044B, 0xD9 },       /* cyrillic small letter yeru */
+       { 0x044C, 0xD8 },       /* cyrillic small letter soft sign */
+       { 0x044D, 0xDC },       /* cyrillic small letter e */
+       { 0x044E, 0xC0 },       /* cyrillic small letter yu */
+       { 0x044F, 0xD1 },       /* cyrillic small letter ya */
+       { 0x0451, 0xA3 },       /* cyrillic small letter io */
        { 0x2219, 0x95 },       /* bullet operator */
        { 0x221A, 0x96 },       /* square root */
        { 0x2248, 0x97 },       /* almost equal to */
@@ -775,83 +822,86 @@ static const unicode_mapping unimap_koi8r[] = {
        { 0x2593, 0x92 },       /* dark shade */
        { 0x25A0, 0x94 },       /* black square */
 };
+/* {{{ end of mappings *from* Unicode for KOI8-R */
 
-static const unicode_mapping unimap_cp866[] = {
-       { 0xA0,   0xFF },       /* no-break space */
-       { 0xA4,   0xFD },       /* currency sign */
-       { 0xB0,   0xF8 },       /* degree sign */
-       { 0xB7,   0xFA },       /* middle dot */
-       { 0x401,  0xF0 },       /* cyrillic capital letter io */
-       { 0x404,  0xF2 },       /* cyrillic capital letter ukrainian ie */
-       { 0x407,  0xF4 },       /* cyrillic capital letter yi */
-       { 0x40E,  0xF6 },       /* cyrillic capital letter short u */
-       { 0x410,  0x80 },       /* cyrillic capital letter a */
-       { 0x411,  0x81 },       /* cyrillic capital letter be */
-       { 0x412,  0x82 },       /* cyrillic capital letter ve */
-       { 0x413,  0x83 },       /* cyrillic capital letter ghe */
-       { 0x414,  0x84 },       /* cyrillic capital letter de */
-       { 0x415,  0x85 },       /* cyrillic capital letter ie */
-       { 0x416,  0x86 },       /* cyrillic capital letter zhe */
-       { 0x417,  0x87 },       /* cyrillic capital letter ze */
-       { 0x418,  0x88 },       /* cyrillic capital letter i */
-       { 0x419,  0x89 },       /* cyrillic capital letter short i */
-       { 0x41A,  0x8A },       /* cyrillic capital letter ka */
-       { 0x41B,  0x8B },       /* cyrillic capital letter el */
-       { 0x41C,  0x8C },       /* cyrillic capital letter em */
-       { 0x41D,  0x8D },       /* cyrillic capital letter en */
-       { 0x41E,  0x8E },       /* cyrillic capital letter o */
-       { 0x41F,  0x8F },       /* cyrillic capital letter pe */
-       { 0x420,  0x90 },       /* cyrillic capital letter er */
-       { 0x421,  0x91 },       /* cyrillic capital letter es */
-       { 0x422,  0x92 },       /* cyrillic capital letter te */
-       { 0x423,  0x93 },       /* cyrillic capital letter u */
-       { 0x424,  0x94 },       /* cyrillic capital letter ef */
-       { 0x425,  0x95 },       /* cyrillic capital letter ha */
-       { 0x426,  0x96 },       /* cyrillic capital letter tse */
-       { 0x427,  0x97 },       /* cyrillic capital letter che */
-       { 0x428,  0x98 },       /* cyrillic capital letter sha */
-       { 0x429,  0x99 },       /* cyrillic capital letter shcha */
-       { 0x42A,  0x9A },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0x9B },       /* cyrillic capital letter yeru */
-       { 0x42C,  0x9C },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0x9D },       /* cyrillic capital letter e */
-       { 0x42E,  0x9F },       /* cyrillic capital letter ya */
-       { 0x430,  0xA0 },       /* cyrillic small letter a */
-       { 0x431,  0xA1 },       /* cyrillic small letter be */
-       { 0x432,  0xA2 },       /* cyrillic small letter ve */
-       { 0x433,  0xA3 },       /* cyrillic small letter ghe */
-       { 0x434,  0xA4 },       /* cyrillic small letter de */
-       { 0x435,  0xA5 },       /* cyrillic small letter ie */
-       { 0x436,  0xA6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xA7 },       /* cyrillic small letter ze */
-       { 0x438,  0xA8 },       /* cyrillic small letter i */
-       { 0x439,  0xA9 },       /* cyrillic small letter short i */
-       { 0x43A,  0xAA },       /* cyrillic small letter ka */
-       { 0x43B,  0xAB },       /* cyrillic small letter el */
-       { 0x43C,  0xAC },       /* cyrillic small letter em */
-       { 0x43D,  0xAD },       /* cyrillic small letter en */
-       { 0x43E,  0xAE },       /* cyrillic small letter o */
-       { 0x43F,  0xAF },       /* cyrillic small letter pe */
-       { 0x440,  0xE0 },       /* cyrillic small letter er */
-       { 0x441,  0xE1 },       /* cyrillic small letter es */
-       { 0x442,  0xE2 },       /* cyrillic small letter te */
-       { 0x443,  0xE3 },       /* cyrillic small letter u */
-       { 0x444,  0xE4 },       /* cyrillic small letter ef */
-       { 0x445,  0xE5 },       /* cyrillic small letter ha */
-       { 0x446,  0xE6 },       /* cyrillic small letter tse */
-       { 0x447,  0xE7 },       /* cyrillic small letter che */
-       { 0x448,  0xE8 },       /* cyrillic small letter sha */
-       { 0x449,  0xE9 },       /* cyrillic small letter shcha */
-       { 0x44A,  0xEA },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xEB },       /* cyrillic small letter yeru */
-       { 0x44C,  0xEC },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xED },       /* cyrillic small letter e */
-       { 0x44E,  0xEE },       /* cyrillic small letter yu */
-       { 0x44F,  0xEF },       /* cyrillic small letter ya */
-       { 0x451,  0xF1 },       /* cyrillic small letter io */
-       { 0x454,  0xF3 },       /* cyrillic small letter ukrainian ie */
-       { 0x457,  0xF5 },       /* cyrillic small letter yi */
-       { 0x45E,  0xF7 },       /* cyrillic small letter short u */
+/* {{{ Mappings *from* Unicode for CP-866 */
+static const uni_to_enc unimap_cp866[] = {
+       { 0x00A0, 0xFF },       /* no-break space */
+       { 0x00A4, 0xFD },       /* currency sign */
+       { 0x00B0, 0xF8 },       /* degree sign */
+       { 0x00B7, 0xFA },       /* middle dot */
+       { 0x0401, 0xF0 },       /* cyrillic capital letter io */
+       { 0x0404, 0xF2 },       /* cyrillic capital letter ukrainian ie */
+       { 0x0407, 0xF4 },       /* cyrillic capital letter yi */
+       { 0x040E, 0xF6 },       /* cyrillic capital letter short u */
+       { 0x0410, 0x80 },       /* cyrillic capital letter a */
+       { 0x0411, 0x81 },       /* cyrillic capital letter be */
+       { 0x0412, 0x82 },       /* cyrillic capital letter ve */
+       { 0x0413, 0x83 },       /* cyrillic capital letter ghe */
+       { 0x0414, 0x84 },       /* cyrillic capital letter de */
+       { 0x0415, 0x85 },       /* cyrillic capital letter ie */
+       { 0x0416, 0x86 },       /* cyrillic capital letter zhe */
+       { 0x0417, 0x87 },       /* cyrillic capital letter ze */
+       { 0x0418, 0x88 },       /* cyrillic capital letter i */
+       { 0x0419, 0x89 },       /* cyrillic capital letter short i */
+       { 0x041A, 0x8A },       /* cyrillic capital letter ka */
+       { 0x041B, 0x8B },       /* cyrillic capital letter el */
+       { 0x041C, 0x8C },       /* cyrillic capital letter em */
+       { 0x041D, 0x8D },       /* cyrillic capital letter en */
+       { 0x041E, 0x8E },       /* cyrillic capital letter o */
+       { 0x041F, 0x8F },       /* cyrillic capital letter pe */
+       { 0x0420, 0x90 },       /* cyrillic capital letter er */
+       { 0x0421, 0x91 },       /* cyrillic capital letter es */
+       { 0x0422, 0x92 },       /* cyrillic capital letter te */
+       { 0x0423, 0x93 },       /* cyrillic capital letter u */
+       { 0x0424, 0x94 },       /* cyrillic capital letter ef */
+       { 0x0425, 0x95 },       /* cyrillic capital letter ha */
+       { 0x0426, 0x96 },       /* cyrillic capital letter tse */
+       { 0x0427, 0x97 },       /* cyrillic capital letter che */
+       { 0x0428, 0x98 },       /* cyrillic capital letter sha */
+       { 0x0429, 0x99 },       /* cyrillic capital letter shcha */
+       { 0x042A, 0x9A },       /* cyrillic capital letter hard sign */
+       { 0x042B, 0x9B },       /* cyrillic capital letter yeru */
+       { 0x042C, 0x9C },       /* cyrillic capital letter soft sign */
+       { 0x042D, 0x9D },       /* cyrillic capital letter e */
+       { 0x042E, 0x9E },       /* cyrillic capital letter yu */
+       { 0x042F, 0x9F },       /* cyrillic capital letter ya */
+       { 0x0430, 0xA0 },       /* cyrillic small letter a */
+       { 0x0431, 0xA1 },       /* cyrillic small letter be */
+       { 0x0432, 0xA2 },       /* cyrillic small letter ve */
+       { 0x0433, 0xA3 },       /* cyrillic small letter ghe */
+       { 0x0434, 0xA4 },       /* cyrillic small letter de */
+       { 0x0435, 0xA5 },       /* cyrillic small letter ie */
+       { 0x0436, 0xA6 },       /* cyrillic small letter zhe */
+       { 0x0437, 0xA7 },       /* cyrillic small letter ze */
+       { 0x0438, 0xA8 },       /* cyrillic small letter i */
+       { 0x0439, 0xA9 },       /* cyrillic small letter short i */
+       { 0x043A, 0xAA },       /* cyrillic small letter ka */
+       { 0x043B, 0xAB },       /* cyrillic small letter el */
+       { 0x043C, 0xAC },       /* cyrillic small letter em */
+       { 0x043D, 0xAD },       /* cyrillic small letter en */
+       { 0x043E, 0xAE },       /* cyrillic small letter o */
+       { 0x043F, 0xAF },       /* cyrillic small letter pe */
+       { 0x0440, 0xE0 },       /* cyrillic small letter er */
+       { 0x0441, 0xE1 },       /* cyrillic small letter es */
+       { 0x0442, 0xE2 },       /* cyrillic small letter te */
+       { 0x0443, 0xE3 },       /* cyrillic small letter u */
+       { 0x0444, 0xE4 },       /* cyrillic small letter ef */
+       { 0x0445, 0xE5 },       /* cyrillic small letter ha */
+       { 0x0446, 0xE6 },       /* cyrillic small letter tse */
+       { 0x0447, 0xE7 },       /* cyrillic small letter che */
+       { 0x0448, 0xE8 },       /* cyrillic small letter sha */
+       { 0x0449, 0xE9 },       /* cyrillic small letter shcha */
+       { 0x044A, 0xEA },       /* cyrillic small letter hard sign */
+       { 0x044B, 0xEB },       /* cyrillic small letter yeru */
+       { 0x044C, 0xEC },       /* cyrillic small letter soft sign */
+       { 0x044D, 0xED },       /* cyrillic small letter e */
+       { 0x044E, 0xEE },       /* cyrillic small letter yu */
+       { 0x044F, 0xEF },       /* cyrillic small letter ya */
+       { 0x0451, 0xF1 },       /* cyrillic small letter io */
+       { 0x0454, 0xF3 },       /* cyrillic small letter ukrainian ie */
+       { 0x0457, 0xF5 },       /* cyrillic small letter yi */
+       { 0x045E, 0xF7 },       /* cyrillic small letter short u */
        { 0x2116, 0xFC },       /* numero sign */
        { 0x2219, 0xF9 },       /* bullet operator */
        { 0x221A, 0xFB },       /* square root */
@@ -905,103 +955,105 @@ static const unicode_mapping unimap_cp866[] = {
        { 0x2593, 0xB2 },       /* dark shade */
        { 0x25A0, 0xFE },       /* black square */
 };
+/* {{{ end of mappings *from* Unicode for CP-866 */
 
-static const unicode_mapping unimap_macroman[] = {
-       { 0xA0,   0xCA },       /* no-break space */
-       { 0xA1,   0xC1 },       /* inverted exclamation mark */
-       { 0xA2,   0xA2 },       /* cent sign */
-       { 0xA3,   0xA3 },       /* pound sign */
-       { 0xA5,   0xB4 },       /* yen sign */
-       { 0xA7,   0xA4 },       /* section sign */
-       { 0xA8,   0xAC },       /* diaeresis */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAA,   0xBB },       /* feminine ordinal indicator */
-       { 0xAB,   0xC7 },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xC2 },       /* not sign */
-       { 0xAE,   0xA8 },       /* registered sign */
-       { 0xAF,   0xF8 },       /* macron */
-       { 0xB0,   0xA1 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB4,   0xAB },       /* acute accent */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xA6 },       /* pilcrow sign */
-       { 0xB7,   0xE1 },       /* middle dot */
-       { 0xB8,   0xFC },       /* cedilla */
-       { 0xBA,   0xBC },       /* masculine ordinal indicator */
-       { 0xBB,   0xC8 },       /* right-pointing double angle quotation mark */
-       { 0xBF,   0xC0 },       /* inverted question mark */
-       { 0xC0,   0xCB },       /* latin capital letter a with grave */
-       { 0xC1,   0xE7 },       /* latin capital letter a with acute */
-       { 0xC2,   0xE5 },       /* latin capital letter a with circumflex */
-       { 0xC3,   0xCC },       /* latin capital letter a with tilde */
-       { 0xC4,   0x80 },       /* latin capital letter a with diaeresis */
-       { 0xC5,   0x81 },       /* latin capital letter a with ring above */
-       { 0xC6,   0xAE },       /* latin capital letter ae */
-       { 0xC7,   0x82 },       /* latin capital letter c with cedilla */
-       { 0xC8,   0xE9 },       /* latin capital letter e with grave */
-       { 0xC9,   0x83 },       /* latin capital letter e with acute */
-       { 0xCA,   0xE6 },       /* latin capital letter e with circumflex */
-       { 0xCB,   0xE8 },       /* latin capital letter e with diaeresis */
-       { 0xCC,   0xED },       /* latin capital letter i with grave */
-       { 0xCD,   0xEA },       /* latin capital letter i with acute */
-       { 0xCE,   0xEB },       /* latin capital letter i with circumflex */
-       { 0xCF,   0xEC },       /* latin capital letter i with diaeresis */
-       { 0xD1,   0x84 },       /* latin capital letter n with tilde */
-       { 0xD2,   0xF1 },       /* latin capital letter o with grave */
-       { 0xD3,   0xEE },       /* latin capital letter o with acute */
-       { 0xD4,   0xEF },       /* latin capital letter o with circumflex */
-       { 0xD5,   0xCD },       /* latin capital letter o with tilde */
-       { 0xD6,   0x85 },       /* latin capital letter o with diaeresis */
-       { 0xD8,   0xAF },       /* latin capital letter o with stroke */
-       { 0xD9,   0xF4 },       /* latin capital letter u with grave */
-       { 0xDA,   0xF2 },       /* latin capital letter u with acute */
-       { 0xDB,   0xF3 },       /* latin capital letter u with circumflex */
-       { 0xDC,   0x86 },       /* latin capital letter u with diaeresis */
-       { 0xDF,   0xA7 },       /* latin small letter sharp s */
-       { 0xE0,   0x88 },       /* latin small letter a with grave */
-       { 0xE1,   0x87 },       /* latin small letter a with acute */
-       { 0xE2,   0x89 },       /* latin small letter a with circumflex */
-       { 0xE3,   0x8B },       /* latin small letter a with tilde */
-       { 0xE4,   0x8A },       /* latin small letter a with diaeresis */
-       { 0xE5,   0x8C },       /* latin small letter a with ring above */
-       { 0xE6,   0xBE },       /* latin small letter ae */
-       { 0xE7,   0x8D },       /* latin small letter c with cedilla */
-       { 0xE8,   0x8F },       /* latin small letter e with grave */
-       { 0xE9,   0x8E },       /* latin small letter e with acute */
-       { 0xEA,   0x90 },       /* latin small letter e with circumflex */
-       { 0xEB,   0x91 },       /* latin small letter e with diaeresis */
-       { 0xEC,   0x93 },       /* latin small letter i with grave */
-       { 0xED,   0x92 },       /* latin small letter i with acute */
-       { 0xEE,   0x94 },       /* latin small letter i with circumflex */
-       { 0xEF,   0x95 },       /* latin small letter i with diaeresis */
-       { 0xF1,   0x96 },       /* latin small letter n with tilde */
-       { 0xF2,   0x98 },       /* latin small letter o with grave */
-       { 0xF3,   0x97 },       /* latin small letter o with acute */
-       { 0xF4,   0x99 },       /* latin small letter o with circumflex */
-       { 0xF5,   0x9B },       /* latin small letter o with tilde */
-       { 0xF6,   0x9A },       /* latin small letter o with diaeresis */
-       { 0xF7,   0xD6 },       /* division sign */
-       { 0xF8,   0xBF },       /* latin small letter o with stroke */
-       { 0xF9,   0x9D },       /* latin small letter u with grave */
-       { 0xFA,   0x9C },       /* latin small letter u with acute */
-       { 0xFB,   0x9E },       /* latin small letter u with circumflex */
-       { 0xFC,   0x9F },       /* latin small letter u with diaeresis */
-       { 0xFF,   0xD8 },       /* latin small letter y with diaeresis */
-       { 0x131,  0xF5 },       /* latin small letter dotless i */
-       { 0x152,  0xCE },       /* latin capital ligature oe */
-       { 0x153,  0xCF },       /* latin small ligature oe */
-       { 0x178,  0xD9 },       /* latin capital letter y with diaeresis */
-       { 0x192,  0xC4 },       /* latin small letter f with hook */
-       { 0x2C6,  0xF6 },       /* modifier letter circumflex accent */
-       { 0x2C7,  0xFF },       /* caron */
-       { 0x2D8,  0xF9 },       /* breve */
-       { 0x2D9,  0xFA },       /* dot above */
-       { 0x2DA,  0xFB },       /* ring above */
-       { 0x2DB,  0xFE },       /* ogonek */
-       { 0x2DC,  0xF7 },       /* small tilde */
-       { 0x2DD,  0xFD },       /* double acute accent */
-       { 0x3A9,  0xBD },       /* greek capital letter omega */
-       { 0x3C0,  0xB9 },       /* greek small letter pi */
+/* {{{ Mappings *from* Unicode for MacRoman */
+static const uni_to_enc unimap_macroman[] = {
+       { 0x00A0, 0xCA },       /* no-break space */
+       { 0x00A1, 0xC1 },       /* inverted exclamation mark */
+       { 0x00A2, 0xA2 },       /* cent sign */
+       { 0x00A3, 0xA3 },       /* pound sign */
+       { 0x00A5, 0xB4 },       /* yen sign */
+       { 0x00A7, 0xA4 },       /* section sign */
+       { 0x00A8, 0xAC },       /* diaeresis */
+       { 0x00A9, 0xA9 },       /* copyright sign */
+       { 0x00AA, 0xBB },       /* feminine ordinal indicator */
+       { 0x00AB, 0xC7 },       /* left-pointing double angle quotation mark */
+       { 0x00AC, 0xC2 },       /* not sign */
+       { 0x00AE, 0xA8 },       /* registered sign */
+       { 0x00AF, 0xF8 },       /* macron */
+       { 0x00B0, 0xA1 },       /* degree sign */
+       { 0x00B1, 0xB1 },       /* plus-minus sign */
+       { 0x00B4, 0xAB },       /* acute accent */
+       { 0x00B5, 0xB5 },       /* micro sign */
+       { 0x00B6, 0xA6 },       /* pilcrow sign */
+       { 0x00B7, 0xE1 },       /* middle dot */
+       { 0x00B8, 0xFC },       /* cedilla */
+       { 0x00BA, 0xBC },       /* masculine ordinal indicator */
+       { 0x00BB, 0xC8 },       /* right-pointing double angle quotation mark */
+       { 0x00BF, 0xC0 },       /* inverted question mark */
+       { 0x00C0, 0xCB },       /* latin capital letter a with grave */
+       { 0x00C1, 0xE7 },       /* latin capital letter a with acute */
+       { 0x00C2, 0xE5 },       /* latin capital letter a with circumflex */
+       { 0x00C3, 0xCC },       /* latin capital letter a with tilde */
+       { 0x00C4, 0x80 },       /* latin capital letter a with diaeresis */
+       { 0x00C5, 0x81 },       /* latin capital letter a with ring above */
+       { 0x00C6, 0xAE },       /* latin capital letter ae */
+       { 0x00C7, 0x82 },       /* latin capital letter c with cedilla */
+       { 0x00C8, 0xE9 },       /* latin capital letter e with grave */
+       { 0x00C9, 0x83 },       /* latin capital letter e with acute */
+       { 0x00CA, 0xE6 },       /* latin capital letter e with circumflex */
+       { 0x00CB, 0xE8 },       /* latin capital letter e with diaeresis */
+       { 0x00CC, 0xED },       /* latin capital letter i with grave */
+       { 0x00CD, 0xEA },       /* latin capital letter i with acute */
+       { 0x00CE, 0xEB },       /* latin capital letter i with circumflex */
+       { 0x00CF, 0xEC },       /* latin capital letter i with diaeresis */
+       { 0x00D1, 0x84 },       /* latin capital letter n with tilde */
+       { 0x00D2, 0xF1 },       /* latin capital letter o with grave */
+       { 0x00D3, 0xEE },       /* latin capital letter o with acute */
+       { 0x00D4, 0xEF },       /* latin capital letter o with circumflex */
+       { 0x00D5, 0xCD },       /* latin capital letter o with tilde */
+       { 0x00D6, 0x85 },       /* latin capital letter o with diaeresis */
+       { 0x00D8, 0xAF },       /* latin capital letter o with stroke */
+       { 0x00D9, 0xF4 },       /* latin capital letter u with grave */
+       { 0x00DA, 0xF2 },       /* latin capital letter u with acute */
+       { 0x00DB, 0xF3 },       /* latin capital letter u with circumflex */
+       { 0x00DC, 0x86 },       /* latin capital letter u with diaeresis */
+       { 0x00DF, 0xA7 },       /* latin small letter sharp s */
+       { 0x00E0, 0x88 },       /* latin small letter a with grave */
+       { 0x00E1, 0x87 },       /* latin small letter a with acute */
+       { 0x00E2, 0x89 },       /* latin small letter a with circumflex */
+       { 0x00E3, 0x8B },       /* latin small letter a with tilde */
+       { 0x00E4, 0x8A },       /* latin small letter a with diaeresis */
+       { 0x00E5, 0x8C },       /* latin small letter a with ring above */
+       { 0x00E6, 0xBE },       /* latin small letter ae */
+       { 0x00E7, 0x8D },       /* latin small letter c with cedilla */
+       { 0x00E8, 0x8F },       /* latin small letter e with grave */
+       { 0x00E9, 0x8E },       /* latin small letter e with acute */
+       { 0x00EA, 0x90 },       /* latin small letter e with circumflex */
+       { 0x00EB, 0x91 },       /* latin small letter e with diaeresis */
+       { 0x00EC, 0x93 },       /* latin small letter i with grave */
+       { 0x00ED, 0x92 },       /* latin small letter i with acute */
+       { 0x00EE, 0x94 },       /* latin small letter i with circumflex */
+       { 0x00EF, 0x95 },       /* latin small letter i with diaeresis */
+       { 0x00F1, 0x96 },       /* latin small letter n with tilde */
+       { 0x00F2, 0x98 },       /* latin small letter o with grave */
+       { 0x00F3, 0x97 },       /* latin small letter o with acute */
+       { 0x00F4, 0x99 },       /* latin small letter o with circumflex */
+       { 0x00F5, 0x9B },       /* latin small letter o with tilde */
+       { 0x00F6, 0x9A },       /* latin small letter o with diaeresis */
+       { 0x00F7, 0xD6 },       /* division sign */
+       { 0x00F8, 0xBF },       /* latin small letter o with stroke */
+       { 0x00F9, 0x9D },       /* latin small letter u with grave */
+       { 0x00FA, 0x9C },       /* latin small letter u with acute */
+       { 0x00FB, 0x9E },       /* latin small letter u with circumflex */
+       { 0x00FC, 0x9F },       /* latin small letter u with diaeresis */
+       { 0x00FF, 0xD8 },       /* latin small letter y with diaeresis */
+       { 0x0131, 0xF5 },       /* latin small letter dotless i */
+       { 0x0152, 0xCE },       /* latin capital ligature oe */
+       { 0x0153, 0xCF },       /* latin small ligature oe */
+       { 0x0178, 0xD9 },       /* latin capital letter y with diaeresis */
+       { 0x0192, 0xC4 },       /* latin small letter f with hook */
+       { 0x02C6, 0xF6 },       /* modifier letter circumflex accent */
+       { 0x02C7, 0xFF },       /* caron */
+       { 0x02D8, 0xF9 },       /* breve */
+       { 0x02D9, 0xFA },       /* dot above */
+       { 0x02DA, 0xFB },       /* ring above */
+       { 0x02DB, 0xFE },       /* ogonek */
+       { 0x02DC, 0xF7 },       /* small tilde */
+       { 0x02DD, 0xFD },       /* double acute accent */
+       { 0x03A9, 0xBD },       /* greek capital letter omega */
+       { 0x03C0, 0xB9 },       /* greek small letter pi */
        { 0x2013, 0xD0 },       /* en dash */
        { 0x2014, 0xD1 },       /* em dash */
        { 0x2018, 0xD4 },       /* left single quotation mark */
@@ -1036,1045 +1088,5154 @@ static const unicode_mapping unimap_macroman[] = {
        { 0xFB01, 0xDE },       /* latin small ligature fi */
        { 0xFB02, 0xDF },       /* latin small ligature fl */
 };
+/* {{{ end of mappings *from* Unicode for MacRoman */
 
-#endif /* HTML_TABLES_H */
-/* 
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2010 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.01 of the PHP license,      |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_01.txt                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
-   +----------------------------------------------------------------------+
-*/
+/* HTML 5 has many more named entities.
+ * Some of them map to two unicode code points, not one.
+ * We're going to use a three-stage table (with an extra one for the entities
+ * with two code points). */
 
-/* $Id: html.h 293036 2010-01-03 09:23:27Z sebastian $ */
+#define ENT_STAGE1_INDEX(k) (((k) & 0xFFF000) >> 12) /* > 1D, we have no mapping */
+#define ENT_STAGE2_INDEX(k) (((k) & 0xFC0) >> 6)
+#define ENT_STAGE3_INDEX(k) ((k) & 0x3F)
+#define ENT_CODE_POINT_FROM_STAGES(i,j,k) (((i) << 12) | ((j) << 6) | (k))
 
-#ifndef HTML_TABLES_H
-#define HTML_TABLES_H
+/* Table should be organized with a leading row telling the size of
+ * the table and the default entity (maybe NULL) and the rest being
+ * normal rows ordered by code point so that we can do a binary search */
+typedef union {
+       struct {
+               unsigned size; /* number of remaining entries in the table */
+               const char *default_entity;
+               unsigned short default_entity_len;
+       } leading_entry;
+       struct {
+               unsigned second_cp; /* second code point */
+               const char *entity;
+               unsigned short entity_len;
+       } normal_entry;
+} entity_multicodepoint_row;
 
-/* cs_terminator is overloaded in the following fashion:
- * - It terminates the list entity maps.
- * - In BG(inverse_ent_maps), it's the key of the inverse map that stores
- *   only the basic entities.
- * - When passed to traverse_for_entities (or via php_unescape_entities with !all),
- *   we don't care about the encoding (UTF-8 is chosen, but it should be used
- *   when it doesn't matter).
- */
-enum entity_charset { cs_terminator, cs_8859_1, cs_cp1252,
-                                         cs_8859_15, cs_utf_8, cs_big5, cs_gb2312, 
-                                         cs_big5hkscs, cs_sjis, cs_eucjp, cs_koi8r,
-                                         cs_cp1251, cs_8859_5, cs_cp866, cs_macroman,
-                                         cs_numelems /* used to count the number of charsets */
-                                       };
-typedef const char *const entity_table_t;
-
-/* codepage 1252 is a Windows extension to iso-8859-1. */
-static entity_table_t ent_cp_1252[] = {
-       "euro", NULL, "sbquo", "fnof", "bdquo", "hellip", "dagger",
-       "Dagger", "circ", "permil", "Scaron", "lsaquo", "OElig",
-       NULL, NULL, NULL, NULL, "lsquo", "rsquo", "ldquo", "rdquo",
-       "bull", "ndash", "mdash", "tilde", "trade", "scaron", "rsaquo",
-       "oelig", NULL, NULL, "Yuml" 
-};
-
-static entity_table_t ent_iso_8859_1[] = {
-       "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar",
-       "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg",
-       "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro",
-       "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14",
-       "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc",
-       "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
-       "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
-       "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
-       "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
-       "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
-       "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
-       "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
-       "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
-       "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
-       "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_iso_8859_15[] = {
-       "nbsp", "iexcl", "cent", "pound", "euro", "yen", "Scaron",
-       "sect", "scaron", "copy", "ordf", "laquo", "not", "shy", "reg",
-       "macr", "deg", "plusmn", "sup2", "sup3", NULL, /* Zcaron */
-       "micro", "para", "middot", NULL, /* zcaron */ "sup1", "ordm",
-       "raquo", "OElig", "oelig", "Yuml", "iquest", "Agrave", "Aacute",
-       "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
-       "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
-       "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
-       "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
-       "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
-       "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
-       "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
-       "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
-       "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
-       "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_uni_338_402[] = {
-       /* 338 (0x0152) */
-       "OElig", "oelig", NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 352 (0x0160) */
-       "Scaron", "scaron", NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 376 (0x0178) */
-       "Yuml", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 400 (0x0190) */
-       NULL, NULL, "fnof"
-};
-
-static entity_table_t ent_uni_spacing[] = {
-       /* 710 */
-       "circ",
-       /* 711 - 730 */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 731 - 732 */
-       NULL, "tilde"
-};
-
-static entity_table_t ent_uni_greek[] = {
-       /* 913 */
-       "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta",
-       "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho",
-       NULL, "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega",
-       /* 938 - 944 are not mapped */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta",
-       "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho",
-       "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
-       /* 970 - 976 are not mapped */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "thetasym", "upsih",
-       NULL, NULL, NULL,
-       "piv"
-};
-
-static entity_table_t ent_uni_punct[] = {
-       /* 8194 */
-       "ensp", "emsp", NULL, NULL, NULL, NULL, NULL,
-       "thinsp", NULL, NULL, "zwnj", "zwj", "lrm", "rlm",
-       NULL, NULL, NULL, "ndash", "mdash", NULL, NULL, NULL,
-       /* 8216 */
-       "lsquo", "rsquo", "sbquo", NULL, "ldquo", "rdquo", "bdquo", NULL,
-       "dagger", "Dagger", "bull", NULL, NULL, NULL, "hellip",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "permil", NULL,
-       /* 8242 */
-       "prime", "Prime", NULL, NULL, NULL, NULL, NULL, "lsaquo", "rsaquo", NULL,
-       NULL, NULL, "oline", NULL, NULL, NULL, NULL, NULL,
-       "frasl"
-};
-
-static entity_table_t ent_uni_euro[] = {
-       "euro"
-};
-
-static entity_table_t ent_uni_8465_8501[] = {
-       /* 8465 */
-       "image", NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8472 */
-       "weierp", NULL, NULL, NULL,
-       /* 8476 */
-       "real", NULL, NULL, NULL, NULL, NULL,
-       /* 8482 */
-       "trade", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8501 */
-       "alefsym",
-};
-
-static entity_table_t ent_uni_8592_9002[] = {
-       /* 8592 (0x2190) */
-       "larr", "uarr", "rarr", "darr", "harr", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8608 (0x21a0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8624 (0x21b0) */
-       NULL, NULL, NULL, NULL, NULL, "crarr", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8640 (0x21c0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8656 (0x21d0) */
-       "lArr", "uArr", "rArr", "dArr", "hArr", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8672 (0x21e0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8704 (0x2200) */
-       "forall", NULL, "part", "exist", NULL, "empty", NULL, "nabla",
-       "isin", "notin", NULL, "ni", NULL, NULL, NULL, "prod",
-       /* 8720 (0x2210) */
-       NULL, "sum", "minus", NULL, NULL, NULL, NULL, "lowast",
-       NULL, NULL, "radic", NULL, NULL, "prop", "infin", NULL,
-       /* 8736 (0x2220) */
-       "ang", NULL, NULL, NULL, NULL, NULL, NULL, "and",
-       "or", "cap", "cup", "int", NULL, NULL, NULL, NULL,
-       /* 8752 (0x2230) */
-       NULL, NULL, NULL, NULL, "there4", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, "sim", NULL, NULL, NULL,
-       /* 8768 (0x2240) */
-       NULL, NULL, NULL, NULL, NULL, "cong", NULL, NULL,
-       "asymp", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8784 (0x2250) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8800 (0x2260) */
-       "ne", "equiv", NULL, NULL, "le", "ge", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8816 (0x2270) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8832 (0x2280) */
-       NULL, NULL, "sub", "sup", "nsub", NULL, "sube", "supe",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8848 (0x2290) */
-       NULL, NULL, NULL, NULL, NULL, "oplus", NULL, "otimes",
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8864 (0x22a0) */
-       NULL, NULL, NULL, NULL, NULL, "perp", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8880 (0x22b0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8896 (0x22c0) */
-       NULL, NULL, NULL, NULL, NULL, "sdot", NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8912 (0x22d0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8928 (0x22e0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8944 (0x22f0) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8960 (0x2300) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       "lceil", "rceil", "lfloor", "rfloor", NULL, NULL, NULL, NULL,
-       /* 8976 (0x2310) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       /* 8992 (0x2320) */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, "lang", "rang"
-};
-
-static entity_table_t ent_uni_9674[] = {
-       /* 9674 */
-       "loz"
-};
-
-static entity_table_t ent_uni_9824_9830[] = {
-       /* 9824 */
-       "spades", NULL, NULL, "clubs", NULL, "hearts", "diams"
-};
-
-static entity_table_t ent_koi8r[] = {
-       "#1105", /* "jo "*/
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
-       NULL, NULL, NULL, NULL, NULL, "#1025", /* "JO" */
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
-       "#1102", "#1072", "#1073", "#1094", "#1076", "#1077", "#1092", 
-       "#1075", "#1093", "#1080", "#1081", "#1082", "#1083", "#1084", 
-       "#1085", "#1086", "#1087", "#1103", "#1088", "#1089", "#1090", 
-       "#1091", "#1078", "#1074", "#1100", "#1099", "#1079", "#1096", 
-       "#1101", "#1097", "#1095", "#1098", "#1070", "#1040", "#1041", 
-       "#1062", "#1044", "#1045", "#1060", "#1043", "#1061", "#1048", 
-       "#1049", "#1050", "#1051", "#1052", "#1053", "#1054", "#1055", 
-       "#1071", "#1056", "#1057", "#1058", "#1059", "#1046", "#1042",
-       "#1068", "#1067", "#1047", "#1064", "#1069", "#1065", "#1063", 
-       "#1066"
-};
-
-static entity_table_t ent_cp_1251[] = {
-       "#1026", "#1027", "#8218", "#1107", "#8222", "hellip", "dagger",
-       "Dagger", "euro", "permil", "#1033", "#8249", "#1034", "#1036",
-       "#1035", "#1039", "#1106", "#8216", "#8217", "#8219", "#8220",
-       "bull", "ndash", "mdash", NULL, "trade", "#1113", "#8250",
-       "#1114", "#1116", "#1115", "#1119", "nbsp", "#1038", "#1118",
-       "#1032", "curren", "#1168", "brvbar", "sect", "#1025", "copy",
-       "#1028", "laquo", "not", "shy", "reg", "#1031", "deg", "plusmn",
-       "#1030", "#1110", "#1169", "micro", "para", "middot", "#1105",
-       "#8470", "#1108", "raquo", "#1112", "#1029", "#1109", "#1111",
-       "#1040", "#1041", "#1042", "#1043", "#1044", "#1045", "#1046",
-       "#1047", "#1048", "#1049", "#1050", "#1051", "#1052", "#1053",
-       "#1054", "#1055", "#1056", "#1057", "#1058", "#1059", "#1060",
-       "#1061", "#1062", "#1063", "#1064", "#1065", "#1066", "#1067",
-       "#1068", "#1069", "#1070", "#1071", "#1072", "#1073", "#1074",
-       "#1075", "#1076", "#1077", "#1078", "#1079", "#1080", "#1081",
-       "#1082", "#1083", "#1084", "#1085", "#1086", "#1087", "#1088",
-       "#1089", "#1090", "#1091", "#1092", "#1093", "#1094", "#1095",
-       "#1096", "#1097", "#1098", "#1099", "#1100", "#1101", "#1102",
-       "#1103"
-};
-
-static entity_table_t ent_iso_8859_5[] = {
-       "#1056", "#1057", "#1058", "#1059", "#1060", "#1061", "#1062",
-       "#1063", "#1064", "#1065", "#1066", "#1067", "#1068", "#1069",
-       "#1070", "#1071", "#1072", "#1073", "#1074", "#1075", "#1076",
-       "#1077", "#1078", "#1079", "#1080", "#1081", "#1082", "#1083",
-       "#1084", "#1085", "#1086", "#1087", "#1088", "#1089", "#1090",
-       "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097",
-       "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1104",
-       "#1105", "#1106", "#1107", "#1108", "#1109", "#1110", "#1111",
-       "#1112", "#1113", "#1114", "#1115", "#1116", "#1117", "#1118",
-       "#1119"
-};
-
-static entity_table_t ent_cp_866[] = {
-
-       "#9492", "#9524", "#9516", "#9500", "#9472", "#9532", "#9566", 
-       "#9567", "#9562", "#9556", "#9577", "#9574", "#9568", "#9552", 
-       "#9580", "#9575", "#9576", "#9572", "#9573", "#9561", "#9560", 
-       "#9554", "#9555", "#9579", "#9578", "#9496", "#9484", "#9608", 
-       "#9604", "#9612", "#9616", "#9600", "#1088", "#1089", "#1090", 
-       "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097", 
-       "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1025", 
-       "#1105", "#1028", "#1108", "#1031", "#1111", "#1038", "#1118", 
-       "#176", "#8729", "#183", "#8730", "#8470", "#164",  "#9632", 
-       "#160"
-};
-
-/* MacRoman has a couple of low-ascii chars that need mapping too */
-/* Vertical tab (ASCII 11) is often used to store line breaks inside */
-/* DB exports, this mapping changes it to a space */
-static entity_table_t ent_macroman[] = {
-       "sp", NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, "quot", NULL,
-       NULL, NULL, "amp", NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, "lt", NULL, "gt", NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, "Auml", "Aring", "Ccedil", "Eacute", "Ntilde", "Ouml",
-       "Uuml", "aacute", "agrave", "acirc", "auml", "atilde", "aring",
-       "ccedil", "eacute", "egrave", "ecirc", "euml", "iacute", "igrave",
-       "icirc", "iuml", "ntilde", "oacute", "ograve", "ocirc", "ouml",
-       "otilde", "uacute", "ugrave", "ucirc", "uuml", "dagger", "deg",
-       "cent", "pound", "sect", "bull", "para", "szlig", "reg",
-       "copy", "trade", "acute", "uml", "ne", "AElig", "Oslash",
-       "infin", "plusmn", "le", "ge", "yen", "micro", "part",
-       "sum", "prod", "pi", "int", "ordf", "ordm", "Omega",
-       "aelig", "oslash", "iquest", "iexcl", "not", "radic", "fnof",
-       "asymp", "#8710", "laquo", "raquo", "hellip", "nbsp", "Agrave",
-       "Atilde", "Otilde", "OElig", "oelig", "ndash", "mdash", "ldquo",
-       "rdquo", "lsquo", "rsquo", "divide", "loz", "yuml", "Yuml",
-       "frasl", "euro", "lsaquo", "rsaquo", "#xFB01", "#xFB02", "Dagger",
-       "middot", "sbquo", "bdquo", "permil", "Acirc", "Ecirc", "Aacute",
-       "Euml", "Egrave", "Iacute", "Icirc", "Iuml", "Igrave", "Oacute",
-       "Ocirc", "#xF8FF", "Ograve", "Uacute", "Ucirc", "Ugrave", "#305",
-       "circ", "tilde", "macr", "#728", "#729", "#730", "cedil",
-       "#733", "#731", "#711"
-};
-
-struct html_entity_map {
-       enum entity_charset charset;    /* charset identifier */
-       unsigned int basechar;                  /* char code at start of table */
-       unsigned int endchar;                   /* last char code in the table */
-       entity_table_t *table;                  /* the table of mappings */
-};
-
-static const struct html_entity_map entity_map[] = {
-       { cs_cp1252,            0x80, 0x9f, ent_cp_1252 },
-       { cs_cp1252,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_8859_1,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_8859_15,           0xa0, 0xff, ent_iso_8859_15 },
-       { cs_utf_8,             0xa0, 0xff, ent_iso_8859_1 },
-       { cs_utf_8,             338,  402,  ent_uni_338_402 },
-       { cs_utf_8,             710,  732,  ent_uni_spacing },
-       { cs_utf_8,             913,  982,  ent_uni_greek },
-       { cs_utf_8,             8194, 8260, ent_uni_punct },
-       { cs_utf_8,             8364, 8364, ent_uni_euro }, 
-       { cs_utf_8,             8465, 8501, ent_uni_8465_8501 },
-       { cs_utf_8,             8592, 9002, ent_uni_8592_9002 },
-       { cs_utf_8,             9674, 9674, ent_uni_9674 },
-       { cs_utf_8,             9824, 9830, ent_uni_9824_9830 },
-       { cs_big5,                      0xa0, 0xff, ent_iso_8859_1 },
-       { cs_gb2312,            0xa0, 0xff, ent_iso_8859_1 },
-       { cs_big5hkscs,         0xa0, 0xff, ent_iso_8859_1 },
-       { cs_sjis,                      0xa0, 0xff, ent_iso_8859_1 },
-       { cs_eucjp,                     0xa0, 0xff, ent_iso_8859_1 },
-       { cs_koi8r,                 0xa3, 0xff, ent_koi8r },
-       { cs_cp1251,            0x80, 0xff, ent_cp_1251 },
-       { cs_8859_5,            0xc0, 0xff, ent_iso_8859_5 },
-       { cs_cp866,                 0xc0, 0xff, ent_cp_866 },
-       { cs_macroman,          0x0b, 0xff, ent_macroman },
-       { cs_terminator }
+/* blocks of these should start at code points k where k % 0xFC0 == 0 */
+typedef struct {
+       char ambiguous; /* if 0 look into entity */
+       union {
+               struct {
+                       const char *entity; /* may be NULL */
+                       unsigned short entity_len;
+               } ent;
+               const entity_multicodepoint_row *multicodepoint_table;
+       } data;
+} entity_stage3_row;
+
+/* Calculate k & 0x3F Use as offset */
+typedef const entity_stage3_row *entity_stage2_row; /* 64 elements */
+
+/* Calculate k & 0xFC0 >> 6. Use as offset */
+typedef const entity_stage3_row *const *entity_stage1_row; /* 64 elements */
+
+/* For stage 1, Calculate k & 0xFFF000 >> 3*4.
+ * If larger than 1D, we have no mapping. Otherwise lookup that index */
+typedef struct {
+       const entity_stage1_row *ms_table;
+       /* for tables with only basic entities, this member is to be accessed
+        * directly for better performance: */
+       const entity_stage3_row *table;
+} entity_table_opt;
+
+/* Replaced "GT" > "gt" and "QUOT" > "quot" for consistentcy's sake. */
+
+/* {{{ Start of HTML5 multi-stage table for codepoint -> entity */
+
+/* {{{ Start of double code point tables for HTML5 */
+
+static const entity_multicodepoint_row multi_cp_html5_0003C[] = {
+       {01,            "lt",                    2},
+       {0x020D2,       "nvlt",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_0003D[] = {
+       {01,            "equals",                6},
+       {0x020E5,       "bne",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_0003E[] = {
+       {01,            "gt",                    2},
+       {0x020D2,       "nvgt",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_00066[] = {
+       {01,            NULL                  , 0},
+       {0x0006A,       "fjlig",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_0205F[] = {
+       {01,            "MediumSpace",          11},
+       {0x0200A,       "ThickSpace",           10},
+};
+static const entity_multicodepoint_row multi_cp_html5_0219D[] = {
+       {01,            "rarrw",                 5},
+       {0x00338,       "nrarrw",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_02202[] = {
+       {01,            "part",                  4},
+       {0x00338,       "npart",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02220[] = {
+       {01,            "angle",                 5},
+       {0x020D2,       "nang",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02229[] = {
+       {01,            "cap",                   3},
+       {0x0FE00,       "caps",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_0222A[] = {
+       {01,            "cup",                   3},
+       {0x0FE00,       "cups",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_0223C[] = {
+       {01,            "sim",                   3},
+       {0x020D2,       "nvsim",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_0223D[] = {
+       {01,            "bsim",                  4},
+       {0x00331,       "race",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_0223E[] = {
+       {01,            "ac",                    2},
+       {0x00333,       "acE",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_02242[] = {
+       {01,            "esim",                  4},
+       {0x00338,       "nesim",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_0224B[] = {
+       {01,            "apid",                  4},
+       {0x00338,       "napid",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_0224D[] = {
+       {01,            "CupCap",                6},
+       {0x020D2,       "nvap",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_0224E[] = {
+       {01,            "bump",                  4},
+       {0x00338,       "nbump",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_0224F[] = {
+       {01,            "HumpEqual",             9},
+       {0x00338,       "nbumpe",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_02250[] = {
+       {01,            "esdot",                 5},
+       {0x00338,       "nedot",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02261[] = {
+       {01,            "Congruent",             9},
+       {0x020E5,       "bnequiv",               7},
+};
+static const entity_multicodepoint_row multi_cp_html5_02264[] = {
+       {01,            "leq",                   3},
+       {0x020D2,       "nvle",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02265[] = {
+       {01,            "ge",                    2},
+       {0x020D2,       "nvge",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02266[] = {
+       {01,            "lE",                    2},
+       {0x00338,       "nlE",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_02267[] = {
+       {01,            "geqq",                  4},
+       {0x00338,       "NotGreaterFullEqual",  19},
+};
+static const entity_multicodepoint_row multi_cp_html5_02268[] = {
+       {01,            "lneqq",                 5},
+       {0x0FE00,       "lvertneqq",             9},
+};
+static const entity_multicodepoint_row multi_cp_html5_02269[] = {
+       {01,            "gneqq",                 5},
+       {0x0FE00,       "gvertneqq",             9},
+};
+static const entity_multicodepoint_row multi_cp_html5_0226A[] = {
+       {02,            "ll",                    2},
+       {0x00338,       "nLtv",                  4},
+       {0x020D2,       "nLt",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_0226B[] = {
+       {02,            "gg",                    2},
+       {0x00338,       "NotGreaterGreater",    17},
+       {0x020D2,       "nGt",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_0227F[] = {
+       {01,            "SucceedsTilde",        13},
+       {0x00338,       "NotSucceedsTilde",     16},
+};
+static const entity_multicodepoint_row multi_cp_html5_02282[] = {
+       {01,            "sub",                   3},
+       {0x020D2,       "vnsub",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02283[] = {
+       {01,            "sup",                   3},
+       {0x020D2,       "nsupset",               7},
+};
+static const entity_multicodepoint_row multi_cp_html5_0228A[] = {
+       {01,            "subsetneq",             9},
+       {0x0FE00,       "vsubne",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_0228B[] = {
+       {01,            "supsetneq",             9},
+       {0x0FE00,       "vsupne",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_0228F[] = {
+       {01,            "sqsub",                 5},
+       {0x00338,       "NotSquareSubset",      15},
+};
+static const entity_multicodepoint_row multi_cp_html5_02290[] = {
+       {01,            "sqsupset",              8},
+       {0x00338,       "NotSquareSuperset",    17},
+};
+static const entity_multicodepoint_row multi_cp_html5_02293[] = {
+       {01,            "sqcap",                 5},
+       {0x0FE00,       "sqcaps",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_02294[] = {
+       {01,            "sqcup",                 5},
+       {0x0FE00,       "sqcups",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_022B4[] = {
+       {01,            "LeftTriangleEqual",    17},
+       {0x020D2,       "nvltrie",               7},
+};
+static const entity_multicodepoint_row multi_cp_html5_022B5[] = {
+       {01,            "RightTriangleEqual",   18},
+       {0x020D2,       "nvrtrie",               7},
+};
+static const entity_multicodepoint_row multi_cp_html5_022D8[] = {
+       {01,            "Ll",                    2},
+       {0x00338,       "nLl",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_022D9[] = {
+       {01,            "Gg",                    2},
+       {0x00338,       "nGg",                   3},
+};
+static const entity_multicodepoint_row multi_cp_html5_022DA[] = {
+       {01,            "lesseqgtr",             9},
+       {0x0FE00,       "lesg",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_022DB[] = {
+       {01,            "gtreqless",             9},
+       {0x0FE00,       "gesl",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_022F5[] = {
+       {01,            "isindot",               7},
+       {0x00338,       "notindot",              8},
+};
+static const entity_multicodepoint_row multi_cp_html5_022F9[] = {
+       {01,            "isinE",                 5},
+       {0x00338,       "notinE",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_02933[] = {
+       {01,            "rarrc",                 5},
+       {0x00338,       "nrarrc",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_029CF[] = {
+       {01,            "LeftTriangleBar",      15},
+       {0x00338,       "NotLeftTriangleBar",   18},
+};
+static const entity_multicodepoint_row multi_cp_html5_029D0[] = {
+       {01,            "RightTriangleBar",     16},
+       {0x00338,       "NotRightTriangleBar",  19},
+};
+static const entity_multicodepoint_row multi_cp_html5_02A6D[] = {
+       {01,            "congdot",               7},
+       {0x00338,       "ncongdot",              8},
+};
+static const entity_multicodepoint_row multi_cp_html5_02A70[] = {
+       {01,            "apE",                   3},
+       {0x00338,       "napE",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02A7D[] = {
+       {01,            "les",                   3},
+       {0x00338,       "nles",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02A7E[] = {
+       {01,            "ges",                   3},
+       {0x00338,       "nges",                  4},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AA1[] = {
+       {01,            "LessLess",              8},
+       {0x00338,       "NotNestedLessLess",    17},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AA2[] = {
+       {01,            "GreaterGreater",       14},
+       {0x00338,       "NotNestedGreaterGreater",      23},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AAC[] = {
+       {01,            "smte",                  4},
+       {0x0FE00,       "smtes",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AAD[] = {
+       {01,            "late",                  4},
+       {0x0FE00,       "lates",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AAF[] = {
+       {01,            "preceq",                6},
+       {0x00338,       "NotPrecedesEqual",     16},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AB0[] = {
+       {01,            "SucceedsEqual",        13},
+       {0x00338,       "NotSucceedsEqual",     16},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AC5[] = {
+       {01,            "subE",                  4},
+       {0x00338,       "nsubE",                 5},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AC6[] = {
+       {01,            "supseteqq",             9},
+       {0x00338,       "nsupseteqq",           10},
+};
+static const entity_multicodepoint_row multi_cp_html5_02ACB[] = {
+       {01,            "subsetneqq",           10},
+       {0x0FE00,       "vsubnE",                6},
+};
+static const entity_multicodepoint_row multi_cp_html5_02ACC[] = {
+       {01,            "supnE",                 5},
+       {0x0FE00,       "varsupsetneqq",        13},
+};
+static const entity_multicodepoint_row multi_cp_html5_02AFD[] = {
+       {01,            NULL                  , 0},
+       {0x0FE00,       "varsupsetneqq",        13},
 };
 
-static const struct {
-       const char *codeset;
-       enum entity_charset charset;
-} charset_map[] = {
-       { "ISO-8859-1",         cs_8859_1 },
-       { "ISO8859-1",          cs_8859_1 },
-       { "ISO-8859-15",        cs_8859_15 },
-       { "ISO8859-15",         cs_8859_15 },
-       { "utf-8",                      cs_utf_8 },
-       { "cp1252",             cs_cp1252 },
-       { "Windows-1252",       cs_cp1252 },
-       { "1252",           cs_cp1252 }, 
-       { "BIG5",                       cs_big5 },
-       { "950",            cs_big5 },
-       { "GB2312",                     cs_gb2312 },
-       { "936",            cs_gb2312 },
-       { "BIG5-HKSCS",         cs_big5hkscs },
-       { "Shift_JIS",          cs_sjis },
-       { "SJIS",               cs_sjis },
-       { "932",            cs_sjis },
-       { "EUCJP",              cs_eucjp },
-       { "EUC-JP",             cs_eucjp },
-       { "KOI8-R",         cs_koi8r },
-       { "koi8-ru",        cs_koi8r },
-       { "koi8r",          cs_koi8r },
-       { "cp1251",         cs_cp1251 },
-       { "Windows-1251",   cs_cp1251 },
-       { "win-1251",       cs_cp1251 },
-       { "iso8859-5",      cs_8859_5 },
-       { "iso-8859-5",     cs_8859_5 },
-       { "cp866",          cs_cp866 },
-       { "866",            cs_cp866 },    
-       { "ibm866",         cs_cp866 },
-       { "MacRoman",       cs_macroman },
-       { NULL }
+/* End of double code point tables }}} */
+
+/* {{{ Stage 3 Tables for HTML5 */
+
+static const entity_stage3_row empty_stage3_table[] = {
+       /* 64 elements */
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+static const entity_stage3_row stage3_table_html5_00000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Tab", 3}, {0, "NewLine", 7}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "excl", 4}, {0, "quot", 4}, {0, "num", 3},
+       {0, "dollar", 6}, {0, "percnt", 6}, {0, "amp", 3}, {0, "apos", 4},
+       {0, "lpar", 4}, {0, "rpar", 4}, {0, "ast", 3}, {0, "plus", 4},
+       {0, "comma", 5}, {0, NULL, 0}, {0, "period", 6}, {0, "sol", 3},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "colon", 5}, {0, "semi", 4},
+       {1, (void*)multi_cp_html5_0003C}, {1, (void*)multi_cp_html5_0003D}, {1, (void*)multi_cp_html5_0003E}, {0, "quest", 5},
 };
 
-typedef struct {
-       unsigned short charcode;
-       char *entity;
-       int entitylen;
-       int flags;
-} basic_entity_t;
-
-static const basic_entity_t basic_entities_ex[] = {
-       { '&',  "&amp;",    5,  0 },
-       { '"',  "&quot;",       6,      ENT_HTML_QUOTE_DOUBLE },
-       /* PHP traditionally encodes ' as &#039;, not &apos;, so leave this entry here */
-       { '\'', "&#039;",       6,      ENT_HTML_QUOTE_SINGLE },
-       { '\'', "&apos;",       6,      ENT_HTML_QUOTE_SINGLE },
-       { '<',  "&lt;",         4,      0 },
-       { '>',  "&gt;",         4,      0 },
-       { 0, NULL, 0, 0 }
-};
-
-/* In some cases, we need to give special treatment to &, so we
- * use this instead */
-static const basic_entity_t *basic_entities = &basic_entities_ex[1];
+static const entity_stage3_row stage3_table_html5_00040[] = {
+       {0, "commat", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "lbrack", 6},
+       {0, "bsol", 4}, {0, "rsqb", 4}, {0, "Hat", 3}, {0, "lowbar", 6},
+       {0, "grave", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {1, (void*)multi_cp_html5_00066}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "lbrace", 6},
+       {0, "vert", 4}, {0, "rcub", 4}, {0, NULL, 0}, {0, NULL, 0},
+};
 
-typedef struct {
-       unsigned short un_code_point; /* we don't need bigger */
-       unsigned char cs_code; /* currently, we only have maps to single-byte encodings */
-} unicode_mapping;
-
-static const unicode_mapping unimap_iso885915[] = {
-       { 0xA5,   0xA5 },       /* yen sign */
-       { 0xA7,   0xA7 },       /* section sign */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAA,   0xAA },       /* feminine ordinal indicator */
-       { 0xAB,   0xAB },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xAC },       /* not sign */
-       { 0xAD,   0xAD },       /* soft hyphen */
-       { 0xAE,   0xAE },       /* registered sign */
-       { 0xAF,   0xAF },       /* macron */
-       { 0xB0,   0xB0 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB2,   0xB2 },       /* superscript two */
-       { 0xB3,   0xB3 },       /* superscript three */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xB6 },       /* pilcrow sign */
-       { 0xB7,   0xB7 },       /* middle dot */
-       { 0xB9,   0xB9 },       /* superscript one */
-       { 0xBA,   0xBA },       /* masculine ordinal indicator */
-       { 0xBB,   0xBB },       /* right-pointing double angle quotation mark */
-       { 0x152,  0xBC },       /* latin capital ligature oe */
-       { 0x153,  0xBD },       /* latin small ligature oe */
-       { 0x160,  0xA6 },       /* latin capital letter s with caron */
-       { 0x161,  0xA8 },       /* latin small letter s with caron */
-       { 0x178,  0xBE },       /* latin capital letter y with diaeresis */
-       { 0x17D,  0xB4 },       /* latin capital letter z with caron */
-       { 0x17E,  0xB8 },       /* latin small letter z with caron */
-       { 0x20AC, 0xA4 },       /* euro sign */
+static const entity_stage3_row stage3_table_html5_00080[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "nbsp", 4}, {0, "iexcl", 5}, {0, "cent", 4}, {0, "pound", 5},
+       {0, "curren", 6}, {0, "yen", 3}, {0, "brvbar", 6}, {0, "sect", 4},
+       {0, "DoubleDot", 9}, {0, "copy", 4}, {0, "ordf", 4}, {0, "laquo", 5},
+       {0, "not", 3}, {0, "shy", 3}, {0, "reg", 3}, {0, "macr", 4},
+       {0, "deg", 3}, {0, "plusmn", 6}, {0, "sup2", 4}, {0, "sup3", 4},
+       {0, "DiacriticalAcute", 16}, {0, "micro", 5}, {0, "para", 4}, {0, "CenterDot", 9},
+       {0, "Cedilla", 7}, {0, "sup1", 4}, {0, "ordm", 4}, {0, "raquo", 5},
+       {0, "frac14", 6}, {0, "half", 4}, {0, "frac34", 6}, {0, "iquest", 6},
 };
 
-static const unicode_mapping unimap_win1252[] = {
-       { 0x152,  0x8C },       /* latin capital ligature oe */
-       { 0x153,  0x9C },       /* latin small ligature oe */
-       { 0x160,  0x8A },       /* latin capital letter s with caron */
-       { 0x161,  0x9A },       /* latin small letter s with caron */
-       { 0x178,  0x9F },       /* latin capital letter y with diaeresis */
-       { 0x17D,  0x8E },       /* latin capital letter z with caron */
-       { 0x17E,  0x9E },       /* latin small letter z with caron */
-       { 0x192,  0x83 },       /* latin small letter f with hook */
-       { 0x2C6,  0x88 },       /* modifier letter circumflex accent */
-       { 0x2DC,  0x98 },       /* small tilde */
-       { 0x2013, 0x96 },       /* en dash */
-       { 0x2014, 0x97 },       /* em dash */
-       { 0x2018, 0x91 },       /* left single quotation mark */
-       { 0x2019, 0x92 },       /* right single quotation mark */
-       { 0x201A, 0x82 },       /* single low-9 quotation mark */
-       { 0x201C, 0x93 },       /* left double quotation mark */
-       { 0x201D, 0x94 },       /* right double quotation mark */
-       { 0x201E, 0x84 },       /* double low-9 quotation mark */
-       { 0x2020, 0x86 },       /* dagger */
-       { 0x2021, 0x87 },       /* double dagger */
-       { 0x2022, 0x95 },       /* bullet */
-       { 0x2026, 0x85 },       /* horizontal ellipsis */
-       { 0x2030, 0x89 },       /* per mille sign */
-       { 0x2039, 0x8B },       /* single left-pointing angle quotation mark */
-       { 0x203A, 0x9B },       /* single right-pointing angle quotation mark */
-       { 0x20AC, 0x80 },       /* euro sign */
-       { 0x2122, 0x99 },       /* trade mark sign */
+static const entity_stage3_row stage3_table_html5_000C0[] = {
+       {0, "Agrave", 6}, {0, "Aacute", 6}, {0, "Acirc", 5}, {0, "Atilde", 6},
+       {0, "Auml", 4}, {0, "Aring", 5}, {0, "AElig", 5}, {0, "Ccedil", 6},
+       {0, "Egrave", 6}, {0, "Eacute", 6}, {0, "Ecirc", 5}, {0, "Euml", 4},
+       {0, "Igrave", 6}, {0, "Iacute", 6}, {0, "Icirc", 5}, {0, "Iuml", 4},
+       {0, "ETH", 3}, {0, "Ntilde", 6}, {0, "Ograve", 6}, {0, "Oacute", 6},
+       {0, "Ocirc", 5}, {0, "Otilde", 6}, {0, "Ouml", 4}, {0, "times", 5},
+       {0, "Oslash", 6}, {0, "Ugrave", 6}, {0, "Uacute", 6}, {0, "Ucirc", 5},
+       {0, "Uuml", 4}, {0, "Yacute", 6}, {0, "THORN", 5}, {0, "szlig", 5},
+       {0, "agrave", 6}, {0, "aacute", 6}, {0, "acirc", 5}, {0, "atilde", 6},
+       {0, "auml", 4}, {0, "aring", 5}, {0, "aelig", 5}, {0, "ccedil", 6},
+       {0, "egrave", 6}, {0, "eacute", 6}, {0, "ecirc", 5}, {0, "euml", 4},
+       {0, "igrave", 6}, {0, "iacute", 6}, {0, "icirc", 5}, {0, "iuml", 4},
+       {0, "eth", 3}, {0, "ntilde", 6}, {0, "ograve", 6}, {0, "oacute", 6},
+       {0, "ocirc", 5}, {0, "otilde", 6}, {0, "ouml", 4}, {0, "divide", 6},
+       {0, "oslash", 6}, {0, "ugrave", 6}, {0, "uacute", 6}, {0, "ucirc", 5},
+       {0, "uuml", 4}, {0, "yacute", 6}, {0, "thorn", 5}, {0, "yuml", 4},
 };
 
-static const unicode_mapping unimap_win1251[] = {
-       { 0xA0,   0xA0 },       /* no-break space */
-       { 0xA4,   0xA4 },       /* currency sign */
-       { 0xA6,   0xA6 },       /* broken bar */
-       { 0xA7,   0xA7 },       /* section sign */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAB,   0xAB },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xAC },       /* not sign */
-       { 0xAD,   0xAD },       /* soft hyphen */
-       { 0xAE,   0xAE },       /* registered sign */
-       { 0xB0,   0xB0 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xB6 },       /* pilcrow sign */
-       { 0xB7,   0xB7 },       /* middle dot */
-       { 0xBB,   0xBB },       /* right-pointing double angle quotation mark */
-       { 0x401,  0xA8 },       /* cyrillic capital letter io */
-       { 0x402,  0x80 },       /* cyrillic capital letter dje */
-       { 0x403,  0x81 },       /* cyrillic capital letter gje */
-       { 0x404,  0xAA },       /* cyrillic capital letter ukrainian ie */
-       { 0x405,  0xBD },       /* cyrillic capital letter dze */
-       { 0x406,  0xB2 },       /* cyrillic capital letter byelorussian-ukrainian i */
-       { 0x407,  0xAF },       /* cyrillic capital letter yi */
-       { 0x408,  0xA3 },       /* cyrillic capital letter je */
-       { 0x409,  0x8A },       /* cyrillic capital letter lje */
-       { 0x40A,  0x8C },       /* cyrillic capital letter nje */
-       { 0x40B,  0x8E },       /* cyrillic capital letter tshe */
-       { 0x40C,  0x8D },       /* cyrillic capital letter kje */
-       { 0x40E,  0xA1 },       /* cyrillic capital letter short u */
-       { 0x40F,  0x8F },       /* cyrillic capital letter dzhe */
-       { 0x410,  0xC0 },       /* cyrillic capital letter a */
-       { 0x411,  0xC1 },       /* cyrillic capital letter be */
-       { 0x412,  0xC2 },       /* cyrillic capital letter ve */
-       { 0x413,  0xC3 },       /* cyrillic capital letter ghe */
-       { 0x414,  0xC4 },       /* cyrillic capital letter de */
-       { 0x415,  0xC5 },       /* cyrillic capital letter ie */
-       { 0x416,  0xC6 },       /* cyrillic capital letter zhe */
-       { 0x417,  0xC7 },       /* cyrillic capital letter ze */
-       { 0x418,  0xC8 },       /* cyrillic capital letter i */
-       { 0x419,  0xC9 },       /* cyrillic capital letter short i */
-       { 0x41A,  0xCA },       /* cyrillic capital letter ka */
-       { 0x41B,  0xCB },       /* cyrillic capital letter el */
-       { 0x41C,  0xCC },       /* cyrillic capital letter em */
-       { 0x41D,  0xCD },       /* cyrillic capital letter en */
-       { 0x41E,  0xCE },       /* cyrillic capital letter o */
-       { 0x41F,  0xCF },       /* cyrillic capital letter pe */
-       { 0x420,  0xD0 },       /* cyrillic capital letter er */
-       { 0x421,  0xD1 },       /* cyrillic capital letter es */
-       { 0x422,  0xD2 },       /* cyrillic capital letter te */
-       { 0x423,  0xD3 },       /* cyrillic capital letter u */
-       { 0x424,  0xD4 },       /* cyrillic capital letter ef */
-       { 0x425,  0xD5 },       /* cyrillic capital letter ha */
-       { 0x426,  0xD6 },       /* cyrillic capital letter tse */
-       { 0x427,  0xD7 },       /* cyrillic capital letter che */
-       { 0x428,  0xD8 },       /* cyrillic capital letter sha */
-       { 0x429,  0xD9 },       /* cyrillic capital letter shcha */
-       { 0x42A,  0xDA },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0xDB },       /* cyrillic capital letter yeru */
-       { 0x42C,  0xDC },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0xDD },       /* cyrillic capital letter e */
-       { 0x42E,  0xDE },       /* cyrillic capital letter yu */
-       { 0x42F,  0xDF },       /* cyrillic capital letter ya */
-       { 0x430,  0xE0 },       /* cyrillic small letter a */
-       { 0x431,  0xE1 },       /* cyrillic small letter be */
-       { 0x432,  0xE2 },       /* cyrillic small letter ve */
-       { 0x433,  0xE3 },       /* cyrillic small letter ghe */
-       { 0x434,  0xE4 },       /* cyrillic small letter de */
-       { 0x435,  0xE5 },       /* cyrillic small letter ie */
-       { 0x436,  0xE6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xE7 },       /* cyrillic small letter ze */
-       { 0x438,  0xE8 },       /* cyrillic small letter i */
-       { 0x439,  0xE9 },       /* cyrillic small letter short i */
-       { 0x43A,  0xEA },       /* cyrillic small letter ka */
-       { 0x43B,  0xEB },       /* cyrillic small letter el */
-       { 0x43C,  0xEC },       /* cyrillic small letter em */
-       { 0x43D,  0xED },       /* cyrillic small letter en */
-       { 0x43E,  0xEE },       /* cyrillic small letter o */
-       { 0x43F,  0xEF },       /* cyrillic small letter pe */
-       { 0x440,  0xF0 },       /* cyrillic small letter er */
-       { 0x441,  0xF1 },       /* cyrillic small letter es */
-       { 0x442,  0xF2 },       /* cyrillic small letter te */
-       { 0x443,  0xF3 },       /* cyrillic small letter u */
-       { 0x444,  0xF4 },       /* cyrillic small letter ef */
-       { 0x445,  0xF5 },       /* cyrillic small letter ha */
-       { 0x446,  0xF6 },       /* cyrillic small letter tse */
-       { 0x447,  0xF7 },       /* cyrillic small letter che */
-       { 0x448,  0xF8 },       /* cyrillic small letter sha */
-       { 0x449,  0xF9 },       /* cyrillic small letter shcha */
-       { 0x44A,  0xFA },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xFB },       /* cyrillic small letter yeru */
-       { 0x44C,  0xFC },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xFD },       /* cyrillic small letter e */
-       { 0x44E,  0xFE },       /* cyrillic small letter yu */
-       { 0x44F,  0xFF },       /* cyrillic small letter ya */
-       { 0x451,  0xB8 },       /* cyrillic small letter io */
-       { 0x452,  0x90 },       /* cyrillic small letter dje */
-       { 0x453,  0x83 },       /* cyrillic small letter gje */
-       { 0x454,  0xBA },       /* cyrillic small letter ukrainian ie */
-       { 0x455,  0xBE },       /* cyrillic small letter dze */
-       { 0x456,  0xB3 },       /* cyrillic small letter byelorussian-ukrainian i */
-       { 0x457,  0xBF },       /* cyrillic small letter yi */
-       { 0x458,  0xBC },       /* cyrillic small letter je */
-       { 0x459,  0x9A },       /* cyrillic small letter lje */
-       { 0x45A,  0x9C },       /* cyrillic small letter nje */
-       { 0x45B,  0x9E },       /* cyrillic small letter tshe */
-       { 0x45C,  0x9D },       /* cyrillic small letter kje */
-       { 0x45E,  0xA2 },       /* cyrillic small letter short u */
-       { 0x45F,  0x9F },       /* cyrillic small letter dzhe */
-       { 0x490,  0xA5 },       /* cyrillic capital letter ghe with upturn */
-       { 0x491,  0xB4 },       /* cyrillic small letter ghe with upturn */
-       { 0x2013, 0x96 },       /* en dash */
-       { 0x2014, 0x97 },       /* em dash */
-       { 0x2018, 0x91 },       /* left single quotation mark */
-       { 0x2019, 0x92 },       /* right single quotation mark */
-       { 0x201A, 0x82 },       /* single low-9 quotation mark */
-       { 0x201C, 0x93 },       /* left double quotation mark */
-       { 0x201D, 0x94 },       /* right double quotation mark */
-       { 0x201E, 0x84 },       /* double low-9 quotation mark */
-       { 0x2020, 0x86 },       /* dagger */
-       { 0x2021, 0x87 },       /* double dagger */
-       { 0x2022, 0x95 },       /* bullet */
-       { 0x2026, 0x85 },       /* horizontal ellipsis */
-       { 0x2030, 0x89 },       /* per mille sign */
-       { 0x2039, 0x8B },       /* single left-pointing angle quotation mark */
-       { 0x203A, 0x9B },       /* single right-pointing angle quotation mark */
-       { 0x20AC, 0x88 },       /* euro sign */
-       { 0x2116, 0xB9 },       /* numero sign */
-       { 0x2122, 0x99 },       /* trade mark sign */
+static const entity_stage3_row stage3_table_html5_00100[] = {
+       {0, "Amacr", 5}, {0, "amacr", 5}, {0, "Abreve", 6}, {0, "abreve", 6},
+       {0, "Aogon", 5}, {0, "aogon", 5}, {0, "Cacute", 6}, {0, "cacute", 6},
+       {0, "Ccirc", 5}, {0, "ccirc", 5}, {0, "Cdot", 4}, {0, "cdot", 4},
+       {0, "Ccaron", 6}, {0, "ccaron", 6}, {0, "Dcaron", 6}, {0, "dcaron", 6},
+       {0, "Dstrok", 6}, {0, "dstrok", 6}, {0, "Emacr", 5}, {0, "emacr", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "Edot", 4}, {0, "edot", 4},
+       {0, "Eogon", 5}, {0, "eogon", 5}, {0, "Ecaron", 6}, {0, "ecaron", 6},
+       {0, "Gcirc", 5}, {0, "gcirc", 5}, {0, "Gbreve", 6}, {0, "gbreve", 6},
+       {0, "Gdot", 4}, {0, "gdot", 4}, {0, "Gcedil", 6}, {0, NULL, 0},
+       {0, "Hcirc", 5}, {0, "hcirc", 5}, {0, "Hstrok", 6}, {0, "hstrok", 6},
+       {0, "Itilde", 6}, {0, "itilde", 6}, {0, "Imacr", 5}, {0, "imacr", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "Iogon", 5}, {0, "iogon", 5},
+       {0, "Idot", 4}, {0, "inodot", 6}, {0, "IJlig", 5}, {0, "ijlig", 5},
+       {0, "Jcirc", 5}, {0, "jcirc", 5}, {0, "Kcedil", 6}, {0, "kcedil", 6},
+       {0, "kgreen", 6}, {0, "Lacute", 6}, {0, "lacute", 6}, {0, "Lcedil", 6},
+       {0, "lcedil", 6}, {0, "Lcaron", 6}, {0, "lcaron", 6}, {0, "Lmidot", 6},
 };
 
-static const unicode_mapping unimap_koi8r[] = {
-       { 0xA0,   0x9A },       /* no-break space */
-       { 0xA9,   0xBF },       /* copyright sign */
-       { 0xB0,   0x9C },       /* degree sign */
-       { 0xB2,   0x9D },       /* superscript two */
-       { 0xB7,   0x9E },       /* middle dot */
-       { 0xF7,   0x9F },       /* division sign */
-       { 0x401,  0xB3 },       /* cyrillic capital letter io */
-       { 0x410,  0xE1 },       /* cyrillic capital letter a */
-       { 0x411,  0xE2 },       /* cyrillic capital letter be */
-       { 0x412,  0xF7 },       /* cyrillic capital letter ve */
-       { 0x413,  0xE7 },       /* cyrillic capital letter ghe */
-       { 0x414,  0xE4 },       /* cyrillic capital letter de */
-       { 0x415,  0xE5 },       /* cyrillic capital letter ie */
-       { 0x416,  0xF6 },       /* cyrillic capital letter zhe */
-       { 0x417,  0xFA },       /* cyrillic capital letter ze */
-       { 0x418,  0xE9 },       /* cyrillic capital letter i */
-       { 0x419,  0xEA },       /* cyrillic capital letter short i */
-       { 0x41A,  0xEB },       /* cyrillic capital letter ka */
-       { 0x41B,  0xEC },       /* cyrillic capital letter el */
-       { 0x41C,  0xED },       /* cyrillic capital letter em */
-       { 0x41D,  0xEE },       /* cyrillic capital letter en */
-       { 0x41E,  0xEF },       /* cyrillic capital letter o */
-       { 0x41F,  0xF0 },       /* cyrillic capital letter pe */
-       { 0x420,  0xF2 },       /* cyrillic capital letter er */
-       { 0x421,  0xF3 },       /* cyrillic capital letter es */
-       { 0x422,  0xF4 },       /* cyrillic capital letter te */
-       { 0x423,  0xF5 },       /* cyrillic capital letter u */
-       { 0x424,  0xE6 },       /* cyrillic capital letter ef */
-       { 0x425,  0xE8 },       /* cyrillic capital letter ha */
-       { 0x426,  0xE3 },       /* cyrillic capital letter tse */
-       { 0x427,  0xFE },       /* cyrillic capital letter che */
-       { 0x428,  0xFB },       /* cyrillic capital letter sha */
-       { 0x429,  0xFD },       /* cyrillic capital letter shcha */
-       { 0x42A,  0xFF },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0xF9 },       /* cyrillic capital letter yeru */
-       { 0x42C,  0xF8 },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0xFC },       /* cyrillic capital letter e */
-       { 0x42E,  0xE0 },       /* cyrillic capital letter yu */
-       { 0x42F,  0xF1 },       /* cyrillic capital letter ya */
-       { 0x430,  0xC1 },       /* cyrillic small letter a */
-       { 0x431,  0xC2 },       /* cyrillic small letter be */
-       { 0x432,  0xD7 },       /* cyrillic small letter ve */
-       { 0x433,  0xC7 },       /* cyrillic small letter ghe */
-       { 0x434,  0xC4 },       /* cyrillic small letter de */
-       { 0x435,  0xC5 },       /* cyrillic small letter ie */
-       { 0x436,  0xD6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xDA },       /* cyrillic small letter ze */
-       { 0x438,  0xC9 },       /* cyrillic small letter i */
-       { 0x439,  0xCA },       /* cyrillic small letter short i */
-       { 0x43A,  0xCB },       /* cyrillic small letter ka */
-       { 0x43B,  0xCC },       /* cyrillic small letter el */
-       { 0x43C,  0xCD },       /* cyrillic small letter em */
-       { 0x43D,  0xCE },       /* cyrillic small letter en */
-       { 0x43E,  0xCF },       /* cyrillic small letter o */
-       { 0x43F,  0xD0 },       /* cyrillic small letter pe */
-       { 0x440,  0xD2 },       /* cyrillic small letter er */
-       { 0x441,  0xD3 },       /* cyrillic small letter es */
-       { 0x442,  0xD4 },       /* cyrillic small letter te */
-       { 0x443,  0xD5 },       /* cyrillic small letter u */
-       { 0x444,  0xC6 },       /* cyrillic small letter ef */
-       { 0x445,  0xC8 },       /* cyrillic small letter ha */
-       { 0x446,  0xC3 },       /* cyrillic small letter tse */
-       { 0x447,  0xDE },       /* cyrillic small letter che */
-       { 0x448,  0xDB },       /* cyrillic small letter sha */
-       { 0x449,  0xDD },       /* cyrillic small letter shcha */
-       { 0x44A,  0xDF },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xD9 },       /* cyrillic small letter yeru */
-       { 0x44C,  0xD8 },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xDC },       /* cyrillic small letter e */
-       { 0x44E,  0xC0 },       /* cyrillic small letter yu */
-       { 0x44F,  0xD1 },       /* cyrillic small letter ya */
-       { 0x451,  0xA3 },       /* cyrillic small letter io */
-       { 0x2219, 0x95 },       /* bullet operator */
-       { 0x221A, 0x96 },       /* square root */
-       { 0x2248, 0x97 },       /* almost equal to */
-       { 0x2264, 0x98 },       /* less-than or equal to */
-       { 0x2265, 0x99 },       /* greater-than or equal to */
-       { 0x2320, 0x93 },       /* top half integral */
-       { 0x2321, 0x9B },       /* bottom half integral */
-       { 0x2500, 0x80 },       /* box drawings light horizontal */
-       { 0x2502, 0x81 },       /* box drawings light vertical */
-       { 0x250C, 0x82 },       /* box drawings light down and right */
-       { 0x2510, 0x83 },       /* box drawings light down and left */
-       { 0x2514, 0x84 },       /* box drawings light up and right */
-       { 0x2518, 0x85 },       /* box drawings light up and left */
-       { 0x251C, 0x86 },       /* box drawings light vertical and right */
-       { 0x2524, 0x87 },       /* box drawings light vertical and left */
-       { 0x252C, 0x88 },       /* box drawings light down and horizontal */
-       { 0x2534, 0x89 },       /* box drawings light up and horizontal */
-       { 0x253C, 0x8A },       /* box drawings light vertical and horizontal */
-       { 0x2550, 0xA0 },       /* box drawings double horizontal */
-       { 0x2551, 0xA1 },       /* box drawings double vertical */
-       { 0x2552, 0xA2 },       /* box drawings down single and right double */
-       { 0x2553, 0xA4 },       /* box drawings down double and right single */
-       { 0x2554, 0xA5 },       /* box drawings double down and right */
-       { 0x2555, 0xA6 },       /* box drawings down single and left double */
-       { 0x2556, 0xA7 },       /* box drawings down double and left single */
-       { 0x2557, 0xA8 },       /* box drawings double down and left */
-       { 0x2558, 0xA9 },       /* box drawings up single and right double */
-       { 0x2559, 0xAA },       /* box drawings up double and right single */
-       { 0x255A, 0xAB },       /* box drawings double up and right */
-       { 0x255B, 0xAC },       /* box drawings up single and left double */
-       { 0x255C, 0xAD },       /* box drawings up double and left single */
-       { 0x255D, 0xAE },       /* box drawings double up and left */
-       { 0x255E, 0xAF },       /* box drawings vertical single and right double */
-       { 0x255F, 0xB0 },       /* box drawings vertical double and right single */
-       { 0x2560, 0xB1 },       /* box drawings double vertical and right */
-       { 0x2561, 0xB2 },       /* box drawings vertical single and left double */
-       { 0x2562, 0xB4 },       /* box drawings vertical double and left single */
-       { 0x2563, 0xB5 },       /* box drawings double vertical and left */
-       { 0x2564, 0xB6 },       /* box drawings down single and horizontal double */
-       { 0x2565, 0xB7 },       /* box drawings down double and horizontal single */
-       { 0x2566, 0xB8 },       /* box drawings double down and horizontal */
-       { 0x2567, 0xB9 },       /* box drawings up single and horizontal double */
-       { 0x2568, 0xBA },       /* box drawings up double and horizontal single */
-       { 0x2569, 0xBB },       /* box drawings double up and horizontal */
-       { 0x256A, 0xBC },       /* box drawings vertical single and horizontal double */
-       { 0x256B, 0xBD },       /* box drawings vertical double and horizontal single */
-       { 0x256C, 0xBE },       /* box drawings double vertical and horizontal */
-       { 0x2580, 0x8B },       /* upper half block */
-       { 0x2584, 0x8C },       /* lower half block */
-       { 0x2588, 0x8D },       /* full block */
-       { 0x258C, 0x8E },       /* left half block */
-       { 0x2590, 0x8F },       /* right half block */
-       { 0x2591, 0x90 },       /* light shade */
-       { 0x2592, 0x91 },       /* medium shade */
-       { 0x2593, 0x92 },       /* dark shade */
-       { 0x25A0, 0x94 },       /* black square */
+static const entity_stage3_row stage3_table_html5_00140[] = {
+       {0, "lmidot", 6}, {0, "Lstrok", 6}, {0, "lstrok", 6}, {0, "Nacute", 6},
+       {0, "nacute", 6}, {0, "Ncedil", 6}, {0, "ncedil", 6}, {0, "Ncaron", 6},
+       {0, "ncaron", 6}, {0, "napos", 5}, {0, "ENG", 3}, {0, "eng", 3},
+       {0, "Omacr", 5}, {0, "omacr", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Odblac", 6}, {0, "odblac", 6}, {0, "OElig", 5}, {0, "oelig", 5},
+       {0, "Racute", 6}, {0, "racute", 6}, {0, "Rcedil", 6}, {0, "rcedil", 6},
+       {0, "Rcaron", 6}, {0, "rcaron", 6}, {0, "Sacute", 6}, {0, "sacute", 6},
+       {0, "Scirc", 5}, {0, "scirc", 5}, {0, "Scedil", 6}, {0, "scedil", 6},
+       {0, "Scaron", 6}, {0, "scaron", 6}, {0, "Tcedil", 6}, {0, "tcedil", 6},
+       {0, "Tcaron", 6}, {0, "tcaron", 6}, {0, "Tstrok", 6}, {0, "tstrok", 6},
+       {0, "Utilde", 6}, {0, "utilde", 6}, {0, "Umacr", 5}, {0, "umacr", 5},
+       {0, "Ubreve", 6}, {0, "ubreve", 6}, {0, "Uring", 5}, {0, "uring", 5},
+       {0, "Udblac", 6}, {0, "udblac", 6}, {0, "Uogon", 5}, {0, "uogon", 5},
+       {0, "Wcirc", 5}, {0, "wcirc", 5}, {0, "Ycirc", 5}, {0, "ycirc", 5},
+       {0, "Yuml", 4}, {0, "Zacute", 6}, {0, "zacute", 6}, {0, "Zdot", 4},
+       {0, "zdot", 4}, {0, "Zcaron", 6}, {0, "zcaron", 6}, {0, NULL, 0},
 };
 
-static const unicode_mapping unimap_cp866[] = {
-       { 0xA0,   0xFF },       /* no-break space */
-       { 0xA4,   0xFD },       /* currency sign */
-       { 0xB0,   0xF8 },       /* degree sign */
-       { 0xB7,   0xFA },       /* middle dot */
-       { 0x401,  0xF0 },       /* cyrillic capital letter io */
-       { 0x404,  0xF2 },       /* cyrillic capital letter ukrainian ie */
-       { 0x407,  0xF4 },       /* cyrillic capital letter yi */
-       { 0x40E,  0xF6 },       /* cyrillic capital letter short u */
-       { 0x410,  0x80 },       /* cyrillic capital letter a */
-       { 0x411,  0x81 },       /* cyrillic capital letter be */
-       { 0x412,  0x82 },       /* cyrillic capital letter ve */
-       { 0x413,  0x83 },       /* cyrillic capital letter ghe */
-       { 0x414,  0x84 },       /* cyrillic capital letter de */
-       { 0x415,  0x85 },       /* cyrillic capital letter ie */
-       { 0x416,  0x86 },       /* cyrillic capital letter zhe */
-       { 0x417,  0x87 },       /* cyrillic capital letter ze */
-       { 0x418,  0x88 },       /* cyrillic capital letter i */
-       { 0x419,  0x89 },       /* cyrillic capital letter short i */
-       { 0x41A,  0x8A },       /* cyrillic capital letter ka */
-       { 0x41B,  0x8B },       /* cyrillic capital letter el */
-       { 0x41C,  0x8C },       /* cyrillic capital letter em */
-       { 0x41D,  0x8D },       /* cyrillic capital letter en */
-       { 0x41E,  0x8E },       /* cyrillic capital letter o */
-       { 0x41F,  0x8F },       /* cyrillic capital letter pe */
-       { 0x420,  0x90 },       /* cyrillic capital letter er */
-       { 0x421,  0x91 },       /* cyrillic capital letter es */
-       { 0x422,  0x92 },       /* cyrillic capital letter te */
-       { 0x423,  0x93 },       /* cyrillic capital letter u */
-       { 0x424,  0x94 },       /* cyrillic capital letter ef */
-       { 0x425,  0x95 },       /* cyrillic capital letter ha */
-       { 0x426,  0x96 },       /* cyrillic capital letter tse */
-       { 0x427,  0x97 },       /* cyrillic capital letter che */
-       { 0x428,  0x98 },       /* cyrillic capital letter sha */
-       { 0x429,  0x99 },       /* cyrillic capital letter shcha */
-       { 0x42A,  0x9A },       /* cyrillic capital letter hard sign */
-       { 0x42B,  0x9B },       /* cyrillic capital letter yeru */
-       { 0x42C,  0x9C },       /* cyrillic capital letter soft sign */
-       { 0x42D,  0x9D },       /* cyrillic capital letter e */
-       { 0x42E,  0x9F },       /* cyrillic capital letter ya */
-       { 0x430,  0xA0 },       /* cyrillic small letter a */
-       { 0x431,  0xA1 },       /* cyrillic small letter be */
-       { 0x432,  0xA2 },       /* cyrillic small letter ve */
-       { 0x433,  0xA3 },       /* cyrillic small letter ghe */
-       { 0x434,  0xA4 },       /* cyrillic small letter de */
-       { 0x435,  0xA5 },       /* cyrillic small letter ie */
-       { 0x436,  0xA6 },       /* cyrillic small letter zhe */
-       { 0x437,  0xA7 },       /* cyrillic small letter ze */
-       { 0x438,  0xA8 },       /* cyrillic small letter i */
-       { 0x439,  0xA9 },       /* cyrillic small letter short i */
-       { 0x43A,  0xAA },       /* cyrillic small letter ka */
-       { 0x43B,  0xAB },       /* cyrillic small letter el */
-       { 0x43C,  0xAC },       /* cyrillic small letter em */
-       { 0x43D,  0xAD },       /* cyrillic small letter en */
-       { 0x43E,  0xAE },       /* cyrillic small letter o */
-       { 0x43F,  0xAF },       /* cyrillic small letter pe */
-       { 0x440,  0xE0 },       /* cyrillic small letter er */
-       { 0x441,  0xE1 },       /* cyrillic small letter es */
-       { 0x442,  0xE2 },       /* cyrillic small letter te */
-       { 0x443,  0xE3 },       /* cyrillic small letter u */
-       { 0x444,  0xE4 },       /* cyrillic small letter ef */
-       { 0x445,  0xE5 },       /* cyrillic small letter ha */
-       { 0x446,  0xE6 },       /* cyrillic small letter tse */
-       { 0x447,  0xE7 },       /* cyrillic small letter che */
-       { 0x448,  0xE8 },       /* cyrillic small letter sha */
-       { 0x449,  0xE9 },       /* cyrillic small letter shcha */
-       { 0x44A,  0xEA },       /* cyrillic small letter hard sign */
-       { 0x44B,  0xEB },       /* cyrillic small letter yeru */
-       { 0x44C,  0xEC },       /* cyrillic small letter soft sign */
-       { 0x44D,  0xED },       /* cyrillic small letter e */
-       { 0x44E,  0xEE },       /* cyrillic small letter yu */
-       { 0x44F,  0xEF },       /* cyrillic small letter ya */
-       { 0x451,  0xF1 },       /* cyrillic small letter io */
-       { 0x454,  0xF3 },       /* cyrillic small letter ukrainian ie */
-       { 0x457,  0xF5 },       /* cyrillic small letter yi */
-       { 0x45E,  0xF7 },       /* cyrillic small letter short u */
-       { 0x2116, 0xFC },       /* numero sign */
-       { 0x2219, 0xF9 },       /* bullet operator */
-       { 0x221A, 0xFB },       /* square root */
-       { 0x2500, 0xC4 },       /* box drawings light horizontal */
-       { 0x2502, 0xB3 },       /* box drawings light vertical */
-       { 0x250C, 0xDA },       /* box drawings light down and right */
-       { 0x2510, 0xBF },       /* box drawings light down and left */
-       { 0x2514, 0xC0 },       /* box drawings light up and right */
-       { 0x2518, 0xD9 },       /* box drawings light up and left */
-       { 0x251C, 0xC3 },       /* box drawings light vertical and right */
-       { 0x2524, 0xB4 },       /* box drawings light vertical and left */
-       { 0x252C, 0xC2 },       /* box drawings light down and horizontal */
-       { 0x2534, 0xC1 },       /* box drawings light up and horizontal */
-       { 0x253C, 0xC5 },       /* box drawings light vertical and horizontal */
-       { 0x2550, 0xCD },       /* box drawings double horizontal */
-       { 0x2551, 0xBA },       /* box drawings double vertical */
-       { 0x2552, 0xD5 },       /* box drawings down single and right double */
-       { 0x2553, 0xD6 },       /* box drawings down double and right single */
-       { 0x2554, 0xC9 },       /* box drawings double down and right */
-       { 0x2555, 0xB8 },       /* box drawings down single and left double */
-       { 0x2556, 0xB7 },       /* box drawings down double and left single */
-       { 0x2557, 0xBB },       /* box drawings double down and left */
-       { 0x2558, 0xD4 },       /* box drawings up single and right double */
-       { 0x2559, 0xD3 },       /* box drawings up double and right single */
-       { 0x255A, 0xC8 },       /* box drawings double up and right */
-       { 0x255B, 0xBE },       /* box drawings up single and left double */
-       { 0x255C, 0xBD },       /* box drawings up double and left single */
-       { 0x255D, 0xBC },       /* box drawings double up and left */
-       { 0x255E, 0xC6 },       /* box drawings vertical single and right double */
-       { 0x255F, 0xC7 },       /* box drawings vertical double and right single */
-       { 0x2560, 0xCC },       /* box drawings double vertical and right */
-       { 0x2561, 0xB5 },       /* box drawings vertical single and left double */
-       { 0x2562, 0xB6 },       /* box drawings vertical double and left single */
-       { 0x2563, 0xB9 },       /* box drawings double vertical and left */
-       { 0x2564, 0xD1 },       /* box drawings down single and horizontal double */
-       { 0x2565, 0xD2 },       /* box drawings down double and horizontal single */
-       { 0x2566, 0xCB },       /* box drawings double down and horizontal */
-       { 0x2567, 0xCF },       /* box drawings up single and horizontal double */
-       { 0x2568, 0xD0 },       /* box drawings up double and horizontal single */
-       { 0x2569, 0xCA },       /* box drawings double up and horizontal */
-       { 0x256A, 0xD8 },       /* box drawings vertical single and horizontal double */
-       { 0x256B, 0xD7 },       /* box drawings vertical double and horizontal single */
-       { 0x256C, 0xCE },       /* box drawings double vertical and horizontal */
-       { 0x2580, 0xDF },       /* upper half block */
-       { 0x2584, 0xDC },       /* lower half block */
-       { 0x2588, 0xDB },       /* full block */
-       { 0x258C, 0xDD },       /* left half block */
-       { 0x2590, 0xDE },       /* right half block */
-       { 0x2591, 0xB0 },       /* light shade */
-       { 0x2592, 0xB1 },       /* medium shade */
-       { 0x2593, 0xB2 },       /* dark shade */
-       { 0x25A0, 0xFE },       /* black square */
+static const entity_stage3_row stage3_table_html5_00180[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "fnof", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "imped", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
 };
 
-static const unicode_mapping unimap_macroman[] = {
-       { 0xA0,   0xCA },       /* no-break space */
-       { 0xA1,   0xC1 },       /* inverted exclamation mark */
-       { 0xA2,   0xA2 },       /* cent sign */
-       { 0xA3,   0xA3 },       /* pound sign */
-       { 0xA5,   0xB4 },       /* yen sign */
-       { 0xA7,   0xA4 },       /* section sign */
-       { 0xA8,   0xAC },       /* diaeresis */
-       { 0xA9,   0xA9 },       /* copyright sign */
-       { 0xAA,   0xBB },       /* feminine ordinal indicator */
-       { 0xAB,   0xC7 },       /* left-pointing double angle quotation mark */
-       { 0xAC,   0xC2 },       /* not sign */
-       { 0xAE,   0xA8 },       /* registered sign */
-       { 0xAF,   0xF8 },       /* macron */
-       { 0xB0,   0xA1 },       /* degree sign */
-       { 0xB1,   0xB1 },       /* plus-minus sign */
-       { 0xB4,   0xAB },       /* acute accent */
-       { 0xB5,   0xB5 },       /* micro sign */
-       { 0xB6,   0xA6 },       /* pilcrow sign */
-       { 0xB7,   0xE1 },       /* middle dot */
-       { 0xB8,   0xFC },       /* cedilla */
-       { 0xBA,   0xBC },       /* masculine ordinal indicator */
-       { 0xBB,   0xC8 },       /* right-pointing double angle quotation mark */
-       { 0xBF,   0xC0 },       /* inverted question mark */
-       { 0xC0,   0xCB },       /* latin capital letter a with grave */
-       { 0xC1,   0xE7 },       /* latin capital letter a with acute */
-       { 0xC2,   0xE5 },       /* latin capital letter a with circumflex */
-       { 0xC3,   0xCC },       /* latin capital letter a with tilde */
-       { 0xC4,   0x80 },       /* latin capital letter a with diaeresis */
-       { 0xC5,   0x81 },       /* latin capital letter a with ring above */
-       { 0xC6,   0xAE },       /* latin capital letter ae */
-       { 0xC7,   0x82 },       /* latin capital letter c with cedilla */
-       { 0xC8,   0xE9 },       /* latin capital letter e with grave */
-       { 0xC9,   0x83 },       /* latin capital letter e with acute */
-       { 0xCA,   0xE6 },       /* latin capital letter e with circumflex */
-       { 0xCB,   0xE8 },       /* latin capital letter e with diaeresis */
-       { 0xCC,   0xED },       /* latin capital letter i with grave */
-       { 0xCD,   0xEA },       /* latin capital letter i with acute */
-       { 0xCE,   0xEB },       /* latin capital letter i with circumflex */
-       { 0xCF,   0xEC },       /* latin capital letter i with diaeresis */
-       { 0xD1,   0x84 },       /* latin capital letter n with tilde */
-       { 0xD2,   0xF1 },       /* latin capital letter o with grave */
-       { 0xD3,   0xEE },       /* latin capital letter o with acute */
-       { 0xD4,   0xEF },       /* latin capital letter o with circumflex */
-       { 0xD5,   0xCD },       /* latin capital letter o with tilde */
-       { 0xD6,   0x85 },       /* latin capital letter o with diaeresis */
-       { 0xD8,   0xAF },       /* latin capital letter o with stroke */
-       { 0xD9,   0xF4 },       /* latin capital letter u with grave */
-       { 0xDA,   0xF2 },       /* latin capital letter u with acute */
-       { 0xDB,   0xF3 },       /* latin capital letter u with circumflex */
-       { 0xDC,   0x86 },       /* latin capital letter u with diaeresis */
-       { 0xDF,   0xA7 },       /* latin small letter sharp s */
-       { 0xE0,   0x88 },       /* latin small letter a with grave */
-       { 0xE1,   0x87 },       /* latin small letter a with acute */
-       { 0xE2,   0x89 },       /* latin small letter a with circumflex */
-       { 0xE3,   0x8B },       /* latin small letter a with tilde */
-       { 0xE4,   0x8A },       /* latin small letter a with diaeresis */
-       { 0xE5,   0x8C },       /* latin small letter a with ring above */
-       { 0xE6,   0xBE },       /* latin small letter ae */
-       { 0xE7,   0x8D },       /* latin small letter c with cedilla */
-       { 0xE8,   0x8F },       /* latin small letter e with grave */
-       { 0xE9,   0x8E },       /* latin small letter e with acute */
-       { 0xEA,   0x90 },       /* latin small letter e with circumflex */
-       { 0xEB,   0x91 },       /* latin small letter e with diaeresis */
-       { 0xEC,   0x93 },       /* latin small letter i with grave */
-       { 0xED,   0x92 },       /* latin small letter i with acute */
-       { 0xEE,   0x94 },       /* latin small letter i with circumflex */
-       { 0xEF,   0x95 },       /* latin small letter i with diaeresis */
-       { 0xF1,   0x96 },       /* latin small letter n with tilde */
-       { 0xF2,   0x98 },       /* latin small letter o with grave */
-       { 0xF3,   0x97 },       /* latin small letter o with acute */
-       { 0xF4,   0x99 },       /* latin small letter o with circumflex */
-       { 0xF5,   0x9B },       /* latin small letter o with tilde */
-       { 0xF6,   0x9A },       /* latin small letter o with diaeresis */
-       { 0xF7,   0xD6 },       /* division sign */
-       { 0xF8,   0xBF },       /* latin small letter o with stroke */
-       { 0xF9,   0x9D },       /* latin small letter u with grave */
-       { 0xFA,   0x9C },       /* latin small letter u with acute */
-       { 0xFB,   0x9E },       /* latin small letter u with circumflex */
-       { 0xFC,   0x9F },       /* latin small letter u with diaeresis */
-       { 0xFF,   0xD8 },       /* latin small letter y with diaeresis */
-       { 0x131,  0xF5 },       /* latin small letter dotless i */
-       { 0x152,  0xCE },       /* latin capital ligature oe */
-       { 0x153,  0xCF },       /* latin small ligature oe */
-       { 0x178,  0xD9 },       /* latin capital letter y with diaeresis */
-       { 0x192,  0xC4 },       /* latin small letter f with hook */
-       { 0x2C6,  0xF6 },       /* modifier letter circumflex accent */
-       { 0x2C7,  0xFF },       /* caron */
-       { 0x2D8,  0xF9 },       /* breve */
-       { 0x2D9,  0xFA },       /* dot above */
-       { 0x2DA,  0xFB },       /* ring above */
-       { 0x2DB,  0xFE },       /* ogonek */
-       { 0x2DC,  0xF7 },       /* small tilde */
-       { 0x2DD,  0xFD },       /* double acute accent */
-       { 0x3A9,  0xBD },       /* greek capital letter omega */
-       { 0x3C0,  0xB9 },       /* greek small letter pi */
-       { 0x2013, 0xD0 },       /* en dash */
-       { 0x2014, 0xD1 },       /* em dash */
-       { 0x2018, 0xD4 },       /* left single quotation mark */
-       { 0x2019, 0xD5 },       /* right single quotation mark */
-       { 0x201A, 0xE2 },       /* single low-9 quotation mark */
-       { 0x201C, 0xD2 },       /* left double quotation mark */
-       { 0x201D, 0xD3 },       /* right double quotation mark */
-       { 0x201E, 0xE3 },       /* double low-9 quotation mark */
-       { 0x2020, 0xA0 },       /* dagger */
-       { 0x2021, 0xE0 },       /* double dagger */
-       { 0x2022, 0xA5 },       /* bullet */
-       { 0x2026, 0xC9 },       /* horizontal ellipsis */
-       { 0x2030, 0xE4 },       /* per mille sign */
-       { 0x2039, 0xDC },       /* single left-pointing angle quotation mark */
-       { 0x203A, 0xDD },       /* single right-pointing angle quotation mark */
-       { 0x2044, 0xDA },       /* fraction slash */
-       { 0x20AC, 0xDB },       /* euro sign */
-       { 0x2122, 0xAA },       /* trade mark sign */
-       { 0x2202, 0xB6 },       /* partial differential */
-       { 0x2206, 0xC6 },       /* increment */
-       { 0x220F, 0xB8 },       /* n-ary product */
-       { 0x2211, 0xB7 },       /* n-ary summation */
-       { 0x221A, 0xC3 },       /* square root */
-       { 0x221E, 0xB0 },       /* infinity */
-       { 0x222B, 0xBA },       /* integral */
-       { 0x2248, 0xC5 },       /* almost equal to */
-       { 0x2260, 0xAD },       /* not equal to */
-       { 0x2264, 0xB2 },       /* less-than or equal to */
-       { 0x2265, 0xB3 },       /* greater-than or equal to */
-       { 0x25CA, 0xD7 },       /* lozenge */
-       { 0xF8FF, 0xF0 },       /* apple logo */
-       { 0xFB01, 0xDE },       /* latin small ligature fi */
-       { 0xFB02, 0xDF },       /* latin small ligature fl */
+static const entity_stage3_row stage3_table_html5_001C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "gacute", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_00200[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "jmath", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_002C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "circ", 4}, {0, "Hacek", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Breve", 5}, {0, "dot", 3}, {0, "ring", 4}, {0, "ogon", 4},
+       {0, "DiacriticalTilde", 16}, {0, "DiacriticalDoubleAcute", 22}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_00300[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "DownBreve", 9}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_00380[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Alpha", 5}, {0, "Beta", 4}, {0, "Gamma", 5},
+       {0, "Delta", 5}, {0, "Epsilon", 7}, {0, "Zeta", 4}, {0, "Eta", 3},
+       {0, "Theta", 5}, {0, "Iota", 4}, {0, "Kappa", 5}, {0, "Lambda", 6},
+       {0, "Mu", 2}, {0, "Nu", 2}, {0, "Xi", 2}, {0, "Omicron", 7},
+       {0, "Pi", 2}, {0, "Rho", 3}, {0, NULL, 0}, {0, "Sigma", 5},
+       {0, "Tau", 3}, {0, "Upsilon", 7}, {0, "Phi", 3}, {0, "Chi", 3},
+       {0, "Psi", 3}, {0, "Omega", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "alpha", 5}, {0, "beta", 4}, {0, "gamma", 5},
+       {0, "delta", 5}, {0, "epsi", 4}, {0, "zeta", 4}, {0, "eta", 3},
+       {0, "theta", 5}, {0, "iota", 4}, {0, "kappa", 5}, {0, "lambda", 6},
+       {0, "mu", 2}, {0, "nu", 2}, {0, "xi", 2}, {0, "omicron", 7},
+};
+
+static const entity_stage3_row stage3_table_html5_003C0[] = {
+       {0, "pi", 2}, {0, "rho", 3}, {0, "sigmav", 6}, {0, "sigma", 5},
+       {0, "tau", 3}, {0, "upsi", 4}, {0, "phi", 3}, {0, "chi", 3},
+       {0, "psi", 3}, {0, "omega", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "thetasym", 8}, {0, "upsih", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "straightphi", 11}, {0, "piv", 3}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Gammad", 6}, {0, "gammad", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "varkappa", 8}, {0, "rhov", 4}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "straightepsilon", 15}, {0, "backepsilon", 11}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_00400[] = {
+       {0, NULL, 0}, {0, "IOcy", 4}, {0, "DJcy", 4}, {0, "GJcy", 4},
+       {0, "Jukcy", 5}, {0, "DScy", 4}, {0, "Iukcy", 5}, {0, "YIcy", 4},
+       {0, "Jsercy", 6}, {0, "LJcy", 4}, {0, "NJcy", 4}, {0, "TSHcy", 5},
+       {0, "KJcy", 4}, {0, NULL, 0}, {0, "Ubrcy", 5}, {0, "DZcy", 4},
+       {0, "Acy", 3}, {0, "Bcy", 3}, {0, "Vcy", 3}, {0, "Gcy", 3},
+       {0, "Dcy", 3}, {0, "IEcy", 4}, {0, "ZHcy", 4}, {0, "Zcy", 3},
+       {0, "Icy", 3}, {0, "Jcy", 3}, {0, "Kcy", 3}, {0, "Lcy", 3},
+       {0, "Mcy", 3}, {0, "Ncy", 3}, {0, "Ocy", 3}, {0, "Pcy", 3},
+       {0, "Rcy", 3}, {0, "Scy", 3}, {0, "Tcy", 3}, {0, "Ucy", 3},
+       {0, "Fcy", 3}, {0, "KHcy", 4}, {0, "TScy", 4}, {0, "CHcy", 4},
+       {0, "SHcy", 4}, {0, "SHCHcy", 6}, {0, "HARDcy", 6}, {0, "Ycy", 3},
+       {0, "SOFTcy", 6}, {0, "Ecy", 3}, {0, "YUcy", 4}, {0, "YAcy", 4},
+       {0, "acy", 3}, {0, "bcy", 3}, {0, "vcy", 3}, {0, "gcy", 3},
+       {0, "dcy", 3}, {0, "iecy", 4}, {0, "zhcy", 4}, {0, "zcy", 3},
+       {0, "icy", 3}, {0, "jcy", 3}, {0, "kcy", 3}, {0, "lcy", 3},
+       {0, "mcy", 3}, {0, "ncy", 3}, {0, "ocy", 3}, {0, "pcy", 3},
+};
+
+static const entity_stage3_row stage3_table_html5_00440[] = {
+       {0, "rcy", 3}, {0, "scy", 3}, {0, "tcy", 3}, {0, "ucy", 3},
+       {0, "fcy", 3}, {0, "khcy", 4}, {0, "tscy", 4}, {0, "chcy", 4},
+       {0, "shcy", 4}, {0, "shchcy", 6}, {0, "hardcy", 6}, {0, "ycy", 3},
+       {0, "softcy", 6}, {0, "ecy", 3}, {0, "yucy", 4}, {0, "yacy", 4},
+       {0, NULL, 0}, {0, "iocy", 4}, {0, "djcy", 4}, {0, "gjcy", 4},
+       {0, "jukcy", 5}, {0, "dscy", 4}, {0, "iukcy", 5}, {0, "yicy", 4},
+       {0, "jsercy", 6}, {0, "ljcy", 4}, {0, "njcy", 4}, {0, "tshcy", 5},
+       {0, "kjcy", 4}, {0, NULL, 0}, {0, "ubrcy", 5}, {0, "dzcy", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "ensp", 4}, {0, "emsp", 4},
+       {0, "emsp13", 6}, {0, "emsp14", 6}, {0, NULL, 0}, {0, "numsp", 5},
+       {0, "puncsp", 6}, {0, "ThinSpace", 9}, {0, "hairsp", 6}, {0, "ZeroWidthSpace", 14},
+       {0, "zwnj", 4}, {0, "zwj", 3}, {0, "lrm", 3}, {0, "rlm", 3},
+       {0, "hyphen", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, "ndash", 5},
+       {0, "mdash", 5}, {0, "horbar", 6}, {0, "Verbar", 6}, {0, NULL, 0},
+       {0, "OpenCurlyQuote", 14}, {0, "rsquo", 5}, {0, "sbquo", 5}, {0, NULL, 0},
+       {0, "OpenCurlyDoubleQuote", 20}, {0, "rdquo", 5}, {0, "bdquo", 5}, {0, NULL, 0},
+       {0, "dagger", 6}, {0, "Dagger", 6}, {0, "bull", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "nldr", 4}, {0, "hellip", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "permil", 6}, {0, "pertenk", 7}, {0, "prime", 5}, {0, "Prime", 5},
+       {0, "tprime", 6}, {0, "backprime", 9}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "lsaquo", 6}, {0, "rsaquo", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "oline", 5}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02040[] = {
+       {0, NULL, 0}, {0, "caret", 5}, {0, NULL, 0}, {0, "hybull", 6},
+       {0, "frasl", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "bsemi", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "qprime", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {1, (void*)multi_cp_html5_0205F},
+       {0, "NoBreak", 7}, {0, "af", 2}, {0, "InvisibleTimes", 14}, {0, "ic", 2},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02080[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "euro", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_020C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "TripleDot", 9},
+       {0, "DotDot", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02100[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "complexes", 9}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "incare", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "gscr", 4}, {0, "HilbertSpace", 12},
+       {0, "Hfr", 3}, {0, "Hopf", 4}, {0, "planckh", 7}, {0, "planck", 6},
+       {0, "imagline", 8}, {0, "Ifr", 3}, {0, "lagran", 6}, {0, "ell", 3},
+       {0, NULL, 0}, {0, "naturals", 8}, {0, "numero", 6}, {0, "copysr", 6},
+       {0, "wp", 2}, {0, "primes", 6}, {0, "rationals", 9}, {0, "realine", 7},
+       {0, "Rfr", 3}, {0, "Ropf", 4}, {0, "rx", 2}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "trade", 5}, {0, NULL, 0},
+       {0, "Zopf", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, "mho", 3},
+       {0, "Zfr", 3}, {0, "iiota", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Bscr", 4}, {0, "Cfr", 3}, {0, NULL, 0}, {0, "escr", 4},
+       {0, "expectation", 11}, {0, "Fouriertrf", 10}, {0, NULL, 0}, {0, "Mellintrf", 9},
+       {0, "orderof", 7}, {0, "aleph", 5}, {0, "beth", 4}, {0, "gimel", 5},
+       {0, "daleth", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02140[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "CapitalDifferentialD", 20}, {0, "DifferentialD", 13}, {0, "exponentiale", 12},
+       {0, "ImaginaryI", 10}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "frac13", 6},
+       {0, "frac23", 6}, {0, "frac15", 6}, {0, "frac25", 6}, {0, "frac35", 6},
+       {0, "frac45", 6}, {0, "frac16", 6}, {0, "frac56", 6}, {0, "frac18", 6},
+       {0, "frac38", 6}, {0, "frac58", 6}, {0, "frac78", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
 };
 
+static const entity_stage3_row stage3_table_html5_02180[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "larr", 4}, {0, "uarr", 4}, {0, "srarr", 5}, {0, "darr", 4},
+       {0, "harr", 4}, {0, "UpDownArrow", 11}, {0, "nwarrow", 7}, {0, "UpperRightArrow", 15},
+       {0, "LowerRightArrow", 15}, {0, "swarr", 5}, {0, "nleftarrow", 10}, {0, "nrarr", 5},
+       {0, NULL, 0}, {1, (void*)multi_cp_html5_0219D}, {0, "Larr", 4}, {0, "Uarr", 4},
+       {0, "twoheadrightarrow", 17}, {0, "Darr", 4}, {0, "larrtl", 6}, {0, "rarrtl", 6},
+       {0, "LeftTeeArrow", 12}, {0, "UpTeeArrow", 10}, {0, "map", 3}, {0, "DownTeeArrow", 12},
+       {0, NULL, 0}, {0, "larrhk", 6}, {0, "rarrhk", 6}, {0, "larrlp", 6},
+       {0, "looparrowright", 14}, {0, "harrw", 5}, {0, "nleftrightarrow", 15}, {0, NULL, 0},
+       {0, "Lsh", 3}, {0, "rsh", 3}, {0, "ldsh", 4}, {0, "rdsh", 4},
+       {0, NULL, 0}, {0, "crarr", 5}, {0, "curvearrowleft", 14}, {0, "curarr", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "olarr", 5}, {0, "orarr", 5},
+       {0, "leftharpoonup", 13}, {0, "leftharpoondown", 15}, {0, "RightUpVector", 13}, {0, "uharl", 5},
+};
+
+static const entity_stage3_row stage3_table_html5_021C0[] = {
+       {0, "rharu", 5}, {0, "rhard", 5}, {0, "RightDownVector", 15}, {0, "dharl", 5},
+       {0, "rightleftarrows", 15}, {0, "udarr", 5}, {0, "lrarr", 5}, {0, "llarr", 5},
+       {0, "upuparrows", 10}, {0, "rrarr", 5}, {0, "downdownarrows", 14}, {0, "leftrightharpoons", 17},
+       {0, "rightleftharpoons", 17}, {0, "nLeftarrow", 10}, {0, "nhArr", 5}, {0, "nrArr", 5},
+       {0, "DoubleLeftArrow", 15}, {0, "DoubleUpArrow", 13}, {0, "Implies", 7}, {0, "Downarrow", 9},
+       {0, "hArr", 4}, {0, "Updownarrow", 11}, {0, "nwArr", 5}, {0, "neArr", 5},
+       {0, "seArr", 5}, {0, "swArr", 5}, {0, "lAarr", 5}, {0, "rAarr", 5},
+       {0, NULL, 0}, {0, "zigrarr", 7}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "LeftArrowBar", 12}, {0, "RightArrowBar", 13}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "DownArrowUpArrow", 16}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "loarr", 5}, {0, "roarr", 5}, {0, "hoarr", 5},
+};
+
+static const entity_stage3_row stage3_table_html5_02200[] = {
+       {0, "forall", 6}, {0, "comp", 4}, {1, (void*)multi_cp_html5_02202}, {0, "Exists", 6},
+       {0, "nexist", 6}, {0, "empty", 5}, {0, NULL, 0}, {0, "nabla", 5},
+       {0, "isinv", 5}, {0, "notin", 5}, {0, NULL, 0}, {0, "ReverseElement", 14},
+       {0, "notniva", 7}, {0, NULL, 0}, {0, NULL, 0}, {0, "prod", 4},
+       {0, "Coproduct", 9}, {0, "sum", 3}, {0, "minus", 5}, {0, "MinusPlus", 9},
+       {0, "plusdo", 6}, {0, NULL, 0}, {0, "ssetmn", 6}, {0, "lowast", 6},
+       {0, "compfn", 6}, {0, NULL, 0}, {0, "Sqrt", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "prop", 4}, {0, "infin", 5}, {0, "angrt", 5},
+       {1, (void*)multi_cp_html5_02220}, {0, "angmsd", 6}, {0, "angsph", 6}, {0, "mid", 3},
+       {0, "nshortmid", 9}, {0, "shortparallel", 13}, {0, "nparallel", 9}, {0, "and", 3},
+       {0, "or", 2}, {1, (void*)multi_cp_html5_02229}, {1, (void*)multi_cp_html5_0222A}, {0, "Integral", 8},
+       {0, "Int", 3}, {0, "tint", 4}, {0, "ContourIntegral", 15}, {0, "DoubleContourIntegral", 21},
+       {0, "Cconint", 7}, {0, "cwint", 5}, {0, "cwconint", 8}, {0, "awconint", 8},
+       {0, "there4", 6}, {0, "Because", 7}, {0, "ratio", 5}, {0, "Colon", 5},
+       {0, "minusd", 6}, {0, NULL, 0}, {0, "mDDot", 5}, {0, "homtht", 6},
+       {1, (void*)multi_cp_html5_0223C}, {1, (void*)multi_cp_html5_0223D}, {1, (void*)multi_cp_html5_0223E}, {0, "acd", 3},
+};
+
+static const entity_stage3_row stage3_table_html5_02240[] = {
+       {0, "wr", 2}, {0, "NotTilde", 8}, {1, (void*)multi_cp_html5_02242}, {0, "simeq", 5},
+       {0, "nsime", 5}, {0, "TildeFullEqual", 14}, {0, "simne", 5}, {0, "ncong", 5},
+       {0, "approx", 6}, {0, "napprox", 7}, {0, "ape", 3}, {1, (void*)multi_cp_html5_0224B},
+       {0, "bcong", 5}, {1, (void*)multi_cp_html5_0224D}, {1, (void*)multi_cp_html5_0224E}, {1, (void*)multi_cp_html5_0224F},
+       {1, (void*)multi_cp_html5_02250}, {0, "doteqdot", 8}, {0, "fallingdotseq", 13}, {0, "risingdotseq", 12},
+       {0, "coloneq", 7}, {0, "eqcolon", 7}, {0, "ecir", 4}, {0, "circeq", 6},
+       {0, NULL, 0}, {0, "wedgeq", 6}, {0, "veeeq", 5}, {0, NULL, 0},
+       {0, "triangleq", 9}, {0, NULL, 0}, {0, NULL, 0}, {0, "equest", 6},
+       {0, "NotEqual", 8}, {1, (void*)multi_cp_html5_02261}, {0, "NotCongruent", 12}, {0, NULL, 0},
+       {1, (void*)multi_cp_html5_02264}, {1, (void*)multi_cp_html5_02265}, {1, (void*)multi_cp_html5_02266}, {1, (void*)multi_cp_html5_02267},
+       {1, (void*)multi_cp_html5_02268}, {1, (void*)multi_cp_html5_02269}, {1, (void*)multi_cp_html5_0226A}, {1, (void*)multi_cp_html5_0226B},
+       {0, "between", 7}, {0, "NotCupCap", 9}, {0, "NotLess", 7}, {0, "ngtr", 4},
+       {0, "NotLessEqual", 12}, {0, "ngeq", 4}, {0, "LessTilde", 9}, {0, "GreaterTilde", 12},
+       {0, "nlsim", 5}, {0, "ngsim", 5}, {0, "lessgtr", 7}, {0, "gl", 2},
+       {0, "ntlg", 4}, {0, "NotGreaterLess", 14}, {0, "prec", 4}, {0, "succ", 4},
+       {0, "PrecedesSlantEqual", 18}, {0, "succcurlyeq", 11}, {0, "precsim", 7}, {1, (void*)multi_cp_html5_0227F},
+};
+
+static const entity_stage3_row stage3_table_html5_02280[] = {
+       {0, "npr", 3}, {0, "NotSucceeds", 11}, {1, (void*)multi_cp_html5_02282}, {1, (void*)multi_cp_html5_02283},
+       {0, "nsub", 4}, {0, "nsup", 4}, {0, "SubsetEqual", 11}, {0, "supe", 4},
+       {0, "NotSubsetEqual", 14}, {0, "NotSupersetEqual", 16}, {1, (void*)multi_cp_html5_0228A}, {1, (void*)multi_cp_html5_0228B},
+       {0, NULL, 0}, {0, "cupdot", 6}, {0, "UnionPlus", 9}, {1, (void*)multi_cp_html5_0228F},
+       {1, (void*)multi_cp_html5_02290}, {0, "SquareSubsetEqual", 17}, {0, "SquareSupersetEqual", 19}, {1, (void*)multi_cp_html5_02293},
+       {1, (void*)multi_cp_html5_02294}, {0, "CirclePlus", 10}, {0, "ominus", 6}, {0, "CircleTimes", 11},
+       {0, "osol", 4}, {0, "CircleDot", 9}, {0, "ocir", 4}, {0, "oast", 4},
+       {0, NULL, 0}, {0, "odash", 5}, {0, "boxplus", 7}, {0, "boxminus", 8},
+       {0, "timesb", 6}, {0, "sdotb", 5}, {0, "vdash", 5}, {0, "dashv", 5},
+       {0, "DownTee", 7}, {0, "perp", 4}, {0, NULL, 0}, {0, "models", 6},
+       {0, "DoubleRightTee", 14}, {0, "Vdash", 5}, {0, "Vvdash", 6}, {0, "VDash", 5},
+       {0, "nvdash", 6}, {0, "nvDash", 6}, {0, "nVdash", 6}, {0, "nVDash", 6},
+       {0, "prurel", 6}, {0, NULL, 0}, {0, "vartriangleleft", 15}, {0, "vrtri", 5},
+       {1, (void*)multi_cp_html5_022B4}, {1, (void*)multi_cp_html5_022B5}, {0, "origof", 6}, {0, "imof", 4},
+       {0, "mumap", 5}, {0, "hercon", 6}, {0, "intcal", 6}, {0, "veebar", 6},
+       {0, NULL, 0}, {0, "barvee", 6}, {0, "angrtvb", 7}, {0, "lrtri", 5},
+};
+
+static const entity_stage3_row stage3_table_html5_022C0[] = {
+       {0, "xwedge", 6}, {0, "xvee", 4}, {0, "bigcap", 6}, {0, "bigcup", 6},
+       {0, "diamond", 7}, {0, "sdot", 4}, {0, "Star", 4}, {0, "divonx", 6},
+       {0, "bowtie", 6}, {0, "ltimes", 6}, {0, "rtimes", 6}, {0, "lthree", 6},
+       {0, "rthree", 6}, {0, "backsimeq", 9}, {0, "curlyvee", 8}, {0, "curlywedge", 10},
+       {0, "Sub", 3}, {0, "Supset", 6}, {0, "Cap", 3}, {0, "Cup", 3},
+       {0, "pitchfork", 9}, {0, "epar", 4}, {0, "lessdot", 7}, {0, "gtrdot", 6},
+       {1, (void*)multi_cp_html5_022D8}, {1, (void*)multi_cp_html5_022D9}, {1, (void*)multi_cp_html5_022DA}, {1, (void*)multi_cp_html5_022DB},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "curlyeqprec", 11}, {0, "cuesc", 5},
+       {0, "NotPrecedesSlantEqual", 21}, {0, "NotSucceedsSlantEqual", 21}, {0, "NotSquareSubsetEqual", 20}, {0, "NotSquareSupersetEqual", 22},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "lnsim", 5}, {0, "gnsim", 5},
+       {0, "precnsim", 8}, {0, "scnsim", 6}, {0, "nltri", 5}, {0, "ntriangleright", 14},
+       {0, "nltrie", 6}, {0, "NotRightTriangleEqual", 21}, {0, "vellip", 6}, {0, "ctdot", 5},
+       {0, "utdot", 5}, {0, "dtdot", 5}, {0, "disin", 5}, {0, "isinsv", 6},
+       {0, "isins", 5}, {1, (void*)multi_cp_html5_022F5}, {0, "notinvc", 7}, {0, "notinvb", 7},
+       {0, NULL, 0}, {1, (void*)multi_cp_html5_022F9}, {0, "nisd", 4}, {0, "xnis", 4},
+       {0, "nis", 3}, {0, "notnivc", 7}, {0, "notnivb", 7}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02300[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "barwed", 6}, {0, "doublebarwedge", 14}, {0, NULL, 0},
+       {0, "lceil", 5}, {0, "RightCeiling", 12}, {0, "LeftFloor", 9}, {0, "RightFloor", 10},
+       {0, "drcrop", 6}, {0, "dlcrop", 6}, {0, "urcrop", 6}, {0, "ulcrop", 6},
+       {0, "bnot", 4}, {0, NULL, 0}, {0, "profline", 8}, {0, "profsurf", 8},
+       {0, NULL, 0}, {0, "telrec", 6}, {0, "target", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "ulcorner", 8}, {0, "urcorner", 8}, {0, "llcorner", 8}, {0, "drcorn", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "frown", 5}, {0, "smile", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "cylcty", 6}, {0, "profalar", 8}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "topbot", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "ovbar", 5}, {0, NULL, 0}, {0, "solbar", 6},
+};
+
+static const entity_stage3_row stage3_table_html5_02340[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "angzarr", 7}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02380[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lmoust", 6}, {0, "rmoust", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "OverBracket", 11}, {0, "bbrk", 4}, {0, "bbrktbrk", 8}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_023C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "OverParenthesis", 15}, {0, "UnderParenthesis", 16}, {0, "OverBrace", 9}, {0, "UnderBrace", 10},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "trpezium", 8}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "elinters", 8},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02400[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "blank", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_024C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "oS", 2}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02500[] = {
+       {0, "HorizontalLine", 14}, {0, NULL, 0}, {0, "boxv", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxdr", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxdl", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxur", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxul", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxvr", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxvl", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxhd", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxhu", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxvh", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02540[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "boxH", 4}, {0, "boxV", 4}, {0, "boxdR", 5}, {0, "boxDr", 5},
+       {0, "boxDR", 5}, {0, "boxdL", 5}, {0, "boxDl", 5}, {0, "boxDL", 5},
+       {0, "boxuR", 5}, {0, "boxUr", 5}, {0, "boxUR", 5}, {0, "boxuL", 5},
+       {0, "boxUl", 5}, {0, "boxUL", 5}, {0, "boxvR", 5}, {0, "boxVr", 5},
+       {0, "boxVR", 5}, {0, "boxvL", 5}, {0, "boxVl", 5}, {0, "boxVL", 5},
+       {0, "boxHd", 5}, {0, "boxhD", 5}, {0, "boxHD", 5}, {0, "boxHu", 5},
+       {0, "boxhU", 5}, {0, "boxHU", 5}, {0, "boxvH", 5}, {0, "boxVh", 5},
+       {0, "boxVH", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02580[] = {
+       {0, "uhblk", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lhblk", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "block", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "blk14", 5}, {0, "blk12", 5}, {0, "blk34", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Square", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "squarf", 6}, {0, "EmptyVerySmallSquare", 20},
+       {0, NULL, 0}, {0, "rect", 4}, {0, "marker", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "fltns", 5}, {0, NULL, 0}, {0, "bigtriangleup", 13},
+       {0, "blacktriangle", 13}, {0, "triangle", 8}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "blacktriangleright", 18}, {0, "rtri", 4}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "bigtriangledown", 15}, {0, "blacktriangledown", 17}, {0, "triangledown", 12},
+};
+
+static const entity_stage3_row stage3_table_html5_025C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "blacktriangleleft", 17}, {0, "ltri", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "lozenge", 7}, {0, "cir", 3},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "tridot", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, "bigcirc", 7},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "ultri", 5}, {0, "urtri", 5}, {0, "lltri", 5}, {0, "EmptySmallSquare", 16},
+       {0, "FilledSmallSquare", 17}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02600[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "starf", 5}, {0, "star", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "phone", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02640[] = {
+       {0, "female", 6}, {0, NULL, 0}, {0, "male", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "spadesuit", 9}, {0, NULL, 0}, {0, NULL, 0}, {0, "clubs", 5},
+       {0, NULL, 0}, {0, "hearts", 6}, {0, "diamondsuit", 11}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "sung", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "flat", 4}, {0, "natur", 5}, {0, "sharp", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02700[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "check", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "cross", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "maltese", 7}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "sext", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02740[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "VerticalSeparator", 17}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "lbbrk", 5}, {0, "rbbrk", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_027C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "bsolhsub", 8}, {0, "suphsol", 7}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "LeftDoubleBracket", 17}, {0, "RightDoubleBracket", 18},
+       {0, "langle", 6}, {0, "RightAngleBracket", 17}, {0, "Lang", 4}, {0, "Rang", 4},
+       {0, "loang", 5}, {0, "roang", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "longleftarrow", 13}, {0, "LongRightArrow", 14}, {0, "LongLeftRightArrow", 18},
+       {0, "xlArr", 5}, {0, "DoubleLongRightArrow", 20}, {0, "xhArr", 5}, {0, NULL, 0},
+       {0, "xmap", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, "dzigrarr", 8},
+};
+
+static const entity_stage3_row stage3_table_html5_02900[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "nvlArr", 6}, {0, "nvrArr", 6},
+       {0, "nvHarr", 6}, {0, "Map", 3}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lbarr", 5}, {0, "bkarow", 6}, {0, "lBarr", 5}, {0, "dbkarow", 7},
+       {0, "drbkarow", 8}, {0, "DDotrahd", 8}, {0, "UpArrowBar", 10}, {0, "DownArrowBar", 12},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "Rarrtl", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "latail", 6}, {0, "ratail", 6}, {0, "lAtail", 6},
+       {0, "rAtail", 6}, {0, "larrfs", 6}, {0, "rarrfs", 6}, {0, "larrbfs", 7},
+       {0, "rarrbfs", 7}, {0, NULL, 0}, {0, NULL, 0}, {0, "nwarhk", 6},
+       {0, "nearhk", 6}, {0, "searhk", 6}, {0, "swarhk", 6}, {0, "nwnear", 6},
+       {0, "toea", 4}, {0, "seswar", 6}, {0, "swnwar", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {1, (void*)multi_cp_html5_02933},
+       {0, NULL, 0}, {0, "cudarrr", 7}, {0, "ldca", 4}, {0, "rdca", 4},
+       {0, "cudarrl", 7}, {0, "larrpl", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "curarrm", 7}, {0, "cularrp", 7}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02940[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "rarrpl", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "harrcir", 7}, {0, "Uarrocir", 8}, {0, "lurdshar", 8}, {0, "ldrushar", 8},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "LeftRightVector", 15}, {0, "RightUpDownVector", 17},
+       {0, "DownLeftRightVector", 19}, {0, "LeftUpDownVector", 16}, {0, "LeftVectorBar", 13}, {0, "RightVectorBar", 14},
+       {0, "RightUpVectorBar", 16}, {0, "RightDownVectorBar", 18}, {0, "DownLeftVectorBar", 17}, {0, "DownRightVectorBar", 18},
+       {0, "LeftUpVectorBar", 15}, {0, "LeftDownVectorBar", 17}, {0, "LeftTeeVector", 13}, {0, "RightTeeVector", 14},
+       {0, "RightUpTeeVector", 16}, {0, "RightDownTeeVector", 18}, {0, "DownLeftTeeVector", 17}, {0, "DownRightTeeVector", 18},
+       {0, "LeftUpTeeVector", 15}, {0, "LeftDownTeeVector", 17}, {0, "lHar", 4}, {0, "uHar", 4},
+       {0, "rHar", 4}, {0, "dHar", 4}, {0, "luruhar", 7}, {0, "ldrdhar", 7},
+       {0, "ruluhar", 7}, {0, "rdldhar", 7}, {0, "lharul", 6}, {0, "llhard", 6},
+       {0, "rharul", 6}, {0, "lrhard", 6}, {0, "udhar", 5}, {0, "ReverseUpEquilibrium", 20},
+       {0, "RoundImplies", 12}, {0, "erarr", 5}, {0, "simrarr", 7}, {0, "larrsim", 7},
+       {0, "rarrsim", 7}, {0, "rarrap", 6}, {0, "ltlarr", 6}, {0, NULL, 0},
+       {0, "gtrarr", 6}, {0, "subrarr", 7}, {0, NULL, 0}, {0, "suplarr", 7},
+       {0, "lfisht", 6}, {0, "rfisht", 6}, {0, "ufisht", 6}, {0, "dfisht", 6},
+};
+
+static const entity_stage3_row stage3_table_html5_02980[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "lopar", 5}, {0, "ropar", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "lbrke", 5},
+       {0, "rbrke", 5}, {0, "lbrkslu", 7}, {0, "rbrksld", 7}, {0, "lbrksld", 7},
+       {0, "rbrkslu", 7}, {0, "langd", 5}, {0, "rangd", 5}, {0, "lparlt", 6},
+       {0, "rpargt", 6}, {0, "gtlPar", 6}, {0, "ltrPar", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "vzigzag", 7}, {0, NULL, 0},
+       {0, "vangrt", 6}, {0, "angrtvbd", 8}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "ange", 4}, {0, "range", 5}, {0, "dwangle", 7}, {0, "uwangle", 7},
+       {0, "angmsdaa", 8}, {0, "angmsdab", 8}, {0, "angmsdac", 8}, {0, "angmsdad", 8},
+       {0, "angmsdae", 8}, {0, "angmsdaf", 8}, {0, "angmsdag", 8}, {0, "angmsdah", 8},
+       {0, "bemptyv", 7}, {0, "demptyv", 7}, {0, "cemptyv", 7}, {0, "raemptyv", 8},
+       {0, "laemptyv", 8}, {0, "ohbar", 5}, {0, "omid", 4}, {0, "opar", 4},
+       {0, NULL, 0}, {0, "operp", 5}, {0, NULL, 0}, {0, "olcross", 7},
+       {0, "odsold", 6}, {0, NULL, 0}, {0, "olcir", 5}, {0, "ofcir", 5},
+};
+
+static const entity_stage3_row stage3_table_html5_029C0[] = {
+       {0, "olt", 3}, {0, "ogt", 3}, {0, "cirscir", 7}, {0, "cirE", 4},
+       {0, "solb", 4}, {0, "bsolb", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "boxbox", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "trisb", 5}, {0, "rtriltri", 8}, {1, (void*)multi_cp_html5_029CF},
+       {1, (void*)multi_cp_html5_029D0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "iinfin", 6}, {0, "infintie", 8}, {0, "nvinfin", 7}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "eparsl", 6},
+       {0, "smeparsl", 8}, {0, "eqvparsl", 8}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "lozf", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "RuleDelayed", 11}, {0, NULL, 0}, {0, "dsol", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_02A00[] = {
+       {0, "xodot", 5}, {0, "bigoplus", 8}, {0, "bigotimes", 9}, {0, NULL, 0},
+       {0, "biguplus", 8}, {0, NULL, 0}, {0, "bigsqcup", 8}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "iiiint", 6}, {0, "fpartint", 8}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "cirfnint", 8}, {0, "awint", 5}, {0, "rppolint", 8}, {0, "scpolint", 8},
+       {0, "npolint", 7}, {0, "pointint", 8}, {0, "quatint", 7}, {0, "intlarhk", 8},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "pluscir", 7}, {0, "plusacir", 8},
+       {0, "simplus", 7}, {0, "plusdu", 6}, {0, "plussim", 7}, {0, "plustwo", 7},
+       {0, NULL, 0}, {0, "mcomma", 6}, {0, "minusdu", 7}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "loplus", 6}, {0, "roplus", 6}, {0, "Cross", 5},
+       {0, "timesd", 6}, {0, "timesbar", 8}, {0, NULL, 0}, {0, "smashp", 6},
+       {0, "lotimes", 7}, {0, "rotimes", 7}, {0, "otimesas", 8}, {0, "Otimes", 6},
+       {0, "odiv", 4}, {0, "triplus", 7}, {0, "triminus", 8}, {0, "tritime", 7},
+       {0, "iprod", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, "amalg", 5},
+};
+
+static const entity_stage3_row stage3_table_html5_02A40[] = {
+       {0, "capdot", 6}, {0, NULL, 0}, {0, "ncup", 4}, {0, "ncap", 4},
+       {0, "capand", 6}, {0, "cupor", 5}, {0, "cupcap", 6}, {0, "capcup", 6},
+       {0, "cupbrcap", 8}, {0, "capbrcup", 8}, {0, "cupcup", 6}, {0, "capcap", 6},
+       {0, "ccups", 5}, {0, "ccaps", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "ccupssm", 7}, {0, NULL, 0}, {0, NULL, 0}, {0, "And", 3},
+       {0, "Or", 2}, {0, "andand", 6}, {0, "oror", 4}, {0, "orslope", 7},
+       {0, "andslope", 8}, {0, NULL, 0}, {0, "andv", 4}, {0, "orv", 3},
+       {0, "andd", 4}, {0, "ord", 3}, {0, NULL, 0}, {0, "wedbar", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "sdote", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "simdot", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {1, (void*)multi_cp_html5_02A6D}, {0, "easter", 6}, {0, "apacir", 6},
+       {1, (void*)multi_cp_html5_02A70}, {0, "eplus", 5}, {0, "pluse", 5}, {0, "Esim", 4},
+       {0, "Colone", 6}, {0, "Equal", 5}, {0, NULL, 0}, {0, "ddotseq", 7},
+       {0, "equivDD", 7}, {0, "ltcir", 5}, {0, "gtcir", 5}, {0, "ltquest", 7},
+       {0, "gtquest", 7}, {1, (void*)multi_cp_html5_02A7D}, {1, (void*)multi_cp_html5_02A7E}, {0, "lesdot", 6},
+};
+
+static const entity_stage3_row stage3_table_html5_02A80[] = {
+       {0, "gesdot", 6}, {0, "lesdoto", 7}, {0, "gesdoto", 7}, {0, "lesdotor", 8},
+       {0, "gesdotol", 8}, {0, "lap", 3}, {0, "gap", 3}, {0, "lne", 3},
+       {0, "gne", 3}, {0, "lnap", 4}, {0, "gnap", 4}, {0, "lesseqqgtr", 10},
+       {0, "gEl", 3}, {0, "lsime", 5}, {0, "gsime", 5}, {0, "lsimg", 5},
+       {0, "gsiml", 5}, {0, "lgE", 3}, {0, "glE", 3}, {0, "lesges", 6},
+       {0, "gesles", 6}, {0, "els", 3}, {0, "egs", 3}, {0, "elsdot", 6},
+       {0, "egsdot", 6}, {0, "el", 2}, {0, "eg", 2}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "siml", 4}, {0, "simg", 4}, {0, "simlE", 5},
+       {0, "simgE", 5}, {1, (void*)multi_cp_html5_02AA1}, {1, (void*)multi_cp_html5_02AA2}, {0, NULL, 0},
+       {0, "glj", 3}, {0, "gla", 3}, {0, "ltcc", 4}, {0, "gtcc", 4},
+       {0, "lescc", 5}, {0, "gescc", 5}, {0, "smt", 3}, {0, "lat", 3},
+       {1, (void*)multi_cp_html5_02AAC}, {1, (void*)multi_cp_html5_02AAD}, {0, "bumpE", 5}, {1, (void*)multi_cp_html5_02AAF},
+       {1, (void*)multi_cp_html5_02AB0}, {0, NULL, 0}, {0, NULL, 0}, {0, "prE", 3},
+       {0, "scE", 3}, {0, "precneqq", 8}, {0, "scnE", 4}, {0, "precapprox", 10},
+       {0, "succapprox", 10}, {0, "precnapprox", 11}, {0, "succnapprox", 11}, {0, "Pr", 2},
+       {0, "Sc", 2}, {0, "subdot", 6}, {0, "supdot", 6}, {0, "subplus", 7},
+};
+
+static const entity_stage3_row stage3_table_html5_02AC0[] = {
+       {0, "supplus", 7}, {0, "submult", 7}, {0, "supmult", 7}, {0, "subedot", 7},
+       {0, "supedot", 7}, {1, (void*)multi_cp_html5_02AC5}, {1, (void*)multi_cp_html5_02AC6}, {0, "subsim", 6},
+       {0, "supsim", 6}, {0, NULL, 0}, {0, NULL, 0}, {1, (void*)multi_cp_html5_02ACB},
+       {1, (void*)multi_cp_html5_02ACC}, {0, NULL, 0}, {0, NULL, 0}, {0, "csub", 4},
+       {0, "csup", 4}, {0, "csube", 5}, {0, "csupe", 5}, {0, "subsup", 6},
+       {0, "supsub", 6}, {0, "subsub", 6}, {0, "supsup", 6}, {0, "suphsub", 7},
+       {0, "supdsub", 7}, {0, "forkv", 5}, {0, "topfork", 7}, {0, "mlcp", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Dashv", 5}, {0, NULL, 0}, {0, "Vdashl", 6}, {0, "Barv", 4},
+       {0, "vBar", 4}, {0, "vBarv", 5}, {0, NULL, 0}, {0, "Vbar", 4},
+       {0, "Not", 3}, {0, "bNot", 4}, {0, "rnmid", 5}, {0, "cirmid", 6},
+       {0, "midcir", 6}, {0, "topcir", 6}, {0, "nhpar", 5}, {0, "parsim", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {1, (void*)multi_cp_html5_02AFD}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_0FB00[] = {
+       {0, "fflig", 5}, {0, "filig", 5}, {0, "fllig", 5}, {0, "ffilig", 6},
+       {0, "ffllig", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_1D480[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Ascr", 4}, {0, NULL, 0}, {0, "Cscr", 4}, {0, "Dscr", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "Gscr", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Jscr", 4}, {0, "Kscr", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Nscr", 4}, {0, "Oscr", 4}, {0, "Pscr", 4},
+       {0, "Qscr", 4}, {0, NULL, 0}, {0, "Sscr", 4}, {0, "Tscr", 4},
+       {0, "Uscr", 4}, {0, "Vscr", 4}, {0, "Wscr", 4}, {0, "Xscr", 4},
+       {0, "Yscr", 4}, {0, "Zscr", 4}, {0, "ascr", 4}, {0, "bscr", 4},
+       {0, "cscr", 4}, {0, "dscr", 4}, {0, NULL, 0}, {0, "fscr", 4},
+       {0, NULL, 0}, {0, "hscr", 4}, {0, "iscr", 4}, {0, "jscr", 4},
+};
+
+static const entity_stage3_row stage3_table_html5_1D4C0[] = {
+       {0, "kscr", 4}, {0, "lscr", 4}, {0, "mscr", 4}, {0, "nscr", 4},
+       {0, NULL, 0}, {0, "pscr", 4}, {0, "qscr", 4}, {0, "rscr", 4},
+       {0, "sscr", 4}, {0, "tscr", 4}, {0, "uscr", 4}, {0, "vscr", 4},
+       {0, "wscr", 4}, {0, "xscr", 4}, {0, "yscr", 4}, {0, "zscr", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_1D500[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Afr", 3}, {0, "Bfr", 3}, {0, NULL, 0}, {0, "Dfr", 3},
+       {0, "Efr", 3}, {0, "Ffr", 3}, {0, "Gfr", 3}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Jfr", 3}, {0, "Kfr", 3}, {0, "Lfr", 3},
+       {0, "Mfr", 3}, {0, "Nfr", 3}, {0, "Ofr", 3}, {0, "Pfr", 3},
+       {0, "Qfr", 3}, {0, NULL, 0}, {0, "Sfr", 3}, {0, "Tfr", 3},
+       {0, "Ufr", 3}, {0, "Vfr", 3}, {0, "Wfr", 3}, {0, "Xfr", 3},
+       {0, "Yfr", 3}, {0, NULL, 0}, {0, "afr", 3}, {0, "bfr", 3},
+       {0, "cfr", 3}, {0, "dfr", 3}, {0, "efr", 3}, {0, "ffr", 3},
+       {0, "gfr", 3}, {0, "hfr", 3}, {0, "ifr", 3}, {0, "jfr", 3},
+       {0, "kfr", 3}, {0, "lfr", 3}, {0, "mfr", 3}, {0, "nfr", 3},
+       {0, "ofr", 3}, {0, "pfr", 3}, {0, "qfr", 3}, {0, "rfr", 3},
+       {0, "sfr", 3}, {0, "tfr", 3}, {0, "ufr", 3}, {0, "vfr", 3},
+       {0, "wfr", 3}, {0, "xfr", 3}, {0, "yfr", 3}, {0, "zfr", 3},
+       {0, "Aopf", 4}, {0, "Bopf", 4}, {0, NULL, 0}, {0, "Dopf", 4},
+       {0, "Eopf", 4}, {0, "Fopf", 4}, {0, "Gopf", 4}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html5_1D540[] = {
+       {0, "Iopf", 4}, {0, "Jopf", 4}, {0, "Kopf", 4}, {0, "Lopf", 4},
+       {0, "Mopf", 4}, {0, NULL, 0}, {0, "Oopf", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "Sopf", 4}, {0, "Topf", 4},
+       {0, "Uopf", 4}, {0, "Vopf", 4}, {0, "Wopf", 4}, {0, "Xopf", 4},
+       {0, "Yopf", 4}, {0, NULL, 0}, {0, "aopf", 4}, {0, "bopf", 4},
+       {0, "copf", 4}, {0, "dopf", 4}, {0, "eopf", 4}, {0, "fopf", 4},
+       {0, "gopf", 4}, {0, "hopf", 4}, {0, "iopf", 4}, {0, "jopf", 4},
+       {0, "kopf", 4}, {0, "lopf", 4}, {0, "mopf", 4}, {0, "nopf", 4},
+       {0, "oopf", 4}, {0, "popf", 4}, {0, "qopf", 4}, {0, "ropf", 4},
+       {0, "sopf", 4}, {0, "topf", 4}, {0, "uopf", 4}, {0, "vopf", 4},
+       {0, "wopf", 4}, {0, "xopf", 4}, {0, "yopf", 4}, {0, "zopf", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+/* end of stage 3 Tables for HTML5 }}} */
+
+/* {{{ Stage 2 Tables for HTML5 */
+
+static const entity_stage2_row empty_stage2_table[] = {
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+static const entity_stage2_row stage2_table_html5_00000[] = {
+       stage3_table_html5_00000, stage3_table_html5_00040, stage3_table_html5_00080, stage3_table_html5_000C0,
+       stage3_table_html5_00100, stage3_table_html5_00140, stage3_table_html5_00180, stage3_table_html5_001C0,
+       stage3_table_html5_00200, empty_stage3_table, empty_stage3_table, stage3_table_html5_002C0,
+       stage3_table_html5_00300, empty_stage3_table, stage3_table_html5_00380, stage3_table_html5_003C0,
+       stage3_table_html5_00400, stage3_table_html5_00440, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+static const entity_stage2_row stage2_table_html5_02000[] = {
+       stage3_table_html5_02000, stage3_table_html5_02040, stage3_table_html5_02080, stage3_table_html5_020C0,
+       stage3_table_html5_02100, stage3_table_html5_02140, stage3_table_html5_02180, stage3_table_html5_021C0,
+       stage3_table_html5_02200, stage3_table_html5_02240, stage3_table_html5_02280, stage3_table_html5_022C0,
+       stage3_table_html5_02300, stage3_table_html5_02340, stage3_table_html5_02380, stage3_table_html5_023C0,
+       stage3_table_html5_02400, empty_stage3_table, empty_stage3_table, stage3_table_html5_024C0,
+       stage3_table_html5_02500, stage3_table_html5_02540, stage3_table_html5_02580, stage3_table_html5_025C0,
+       stage3_table_html5_02600, stage3_table_html5_02640, empty_stage3_table, empty_stage3_table,
+       stage3_table_html5_02700, stage3_table_html5_02740, empty_stage3_table, stage3_table_html5_027C0,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       stage3_table_html5_02900, stage3_table_html5_02940, stage3_table_html5_02980, stage3_table_html5_029C0,
+       stage3_table_html5_02A00, stage3_table_html5_02A40, stage3_table_html5_02A80, stage3_table_html5_02AC0,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+static const entity_stage2_row stage2_table_html5_0F000[] = {
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       stage3_table_html5_0FB00, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+static const entity_stage2_row stage2_table_html5_1D000[] = {
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, stage3_table_html5_1D480, stage3_table_html5_1D4C0,
+       stage3_table_html5_1D500, stage3_table_html5_1D540, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+/* end of stage 2 tables for HTML5 }}} */
+
+static const entity_stage1_row entity_ms_table_html5[] = {
+       stage2_table_html5_00000,
+       empty_stage2_table,
+       stage2_table_html5_02000,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       stage2_table_html5_0F000,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       stage2_table_html5_1D000,
+};
+
+/* end of HTML5 multi-stage table for codepoint -> entity }}} */
+
+/* {{{ HTML5 hash table for entity -> codepoint */
+
+typedef struct {
+       const char *entity;
+       unsigned short entity_len;
+       unsigned int codepoint1;
+       unsigned int codepoint2;
+} entity_cp_map;
+
+typedef const entity_cp_map *entity_ht_bucket;
+
+typedef struct {
+       unsigned num_elems; /* power of 2 */
+       const entity_ht_bucket *buckets; /* .num_elems elements */
+} entity_ht;
+
+static const entity_cp_map ht_bucket_empty[] = { NULL };
+static const entity_cp_map ht_bucket_html5_000[] = { {"realpart", 8, 0x0211C, 0}, {"varr", 4, 0x02195, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_001[] = { {"angrt", 5, 0x0221F, 0}, {"iogon", 5, 0x0012F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_003[] = { {"lessdot", 7, 0x022D6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_005[] = { {"simrarr", 7, 0x02972, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_007[] = { {"Zscr", 4, 0x1D4B5, 0}, {"midast", 6, 0x0002A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_00D[] = { {"copf", 4, 0x1D554, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_00F[] = { {"female", 6, 0x02640, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_017[] = { {"NegativeThickSpace", 18, 0x0200B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_020[] = { {"copy", 4, 0x000A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_022[] = { {"angst", 5, 0x000C5, 0}, {"searr", 5, 0x02198, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_024[] = { {"sqcups", 6, 0x02294, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_027[] = { {"Acirc", 5, 0x000C2, 0}, {"gtdot", 5, 0x022D7, 0}, {"varpi", 5, 0x003D6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_028[] = { {"UpTee", 5, 0x022A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_029[] = { {"TildeTilde", 10, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_02A[] = { {"mfr", 3, 0x1D52A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_02B[] = { {"RightVectorBar", 14, 0x02953, 0}, {"gesdot", 6, 0x02A80, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_02C[] = { {"Uarrocir", 8, 0x02949, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_02E[] = { {"RightTriangleBar", 16, 0x029D0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_030[] = { {"Ocy", 3, 0x0041E, 0}, {"int", 3, 0x0222B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_034[] = { {"preccurlyeq", 11, 0x0227C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_038[] = { {"sccue", 5, 0x0227D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_040[] = { {"DoubleContourIntegral", 21, 0x0222F, 0}, {"nexist", 6, 0x02204, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_04C[] = { {"setmn", 5, 0x02216, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_04E[] = { {"Dopf", 4, 0x1D53B, 0}, {"LeftTee", 7, 0x022A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_051[] = { {"SquareSuperset", 14, 0x02290, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_059[] = { {"udhar", 5, 0x0296E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_05D[] = { {"Equal", 5, 0x02A75, 0}, {"pscr", 4, 0x1D4C5, 0}, {"xvee", 4, 0x022C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_05F[] = { {"approx", 6, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_060[] = { {"HARDcy", 6, 0x0042A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_061[] = { {"nGg", 3, 0x022D9, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_063[] = { {"yopf", 4, 0x1D56A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_064[] = { {"prcue", 5, 0x0227C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_065[] = { {"loarr", 5, 0x021FD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_069[] = { {"mho", 3, 0x02127, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_06A[] = { {"otimesas", 8, 0x02A36, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_06D[] = { {"capcap", 6, 0x02A4B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_06E[] = { {"eplus", 5, 0x02A71, 0}, {"nGt", 3, 0x0226B, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_06F[] = { {"Bumpeq", 6, 0x0224E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_071[] = { {"submult", 7, 0x02AC1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_073[] = { {"subplus", 7, 0x02ABF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_074[] = { {"auml", 4, 0x000E4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_07A[] = { {"RightDoubleBracket", 18, 0x027E7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_07B[] = { {"varkappa", 8, 0x003F0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_07C[] = { {"plusdo", 6, 0x02214, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_07F[] = { {"mid", 3, 0x02223, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_082[] = { {"plusdu", 6, 0x02A25, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_084[] = { {"notniva", 7, 0x0220C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_085[] = { {"notnivb", 7, 0x022FE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_086[] = { {"notnivc", 7, 0x022FD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_088[] = { {"varepsilon", 10, 0x003F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_089[] = { {"nspar", 5, 0x02226, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_08C[] = { {"Ofr", 3, 0x1D512, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_08E[] = { {"Omega", 5, 0x003A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_090[] = { {"equals", 6, 0x0003D, 0}, {"harrcir", 7, 0x02948, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_094[] = { {"Succeeds", 8, 0x0227B, 0}, {"cupdot", 6, 0x0228D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_097[] = { {"lsqb", 4, 0x0005B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_09E[] = { {"Qscr", 4, 0x1D4AC, 0}, {"urcorn", 6, 0x0231D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0A4[] = { {"Zopf", 4, 0x02124, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0A6[] = { {"triangleleft", 12, 0x025C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0AB[] = { {"supdsub", 7, 0x02AD8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0AC[] = { {"chcy", 4, 0x00447, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0AD[] = { {"sqsupset", 8, 0x02290, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0AE[] = { {"omega", 5, 0x003C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0AF[] = { {"rthree", 6, 0x022CC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0B0[] = { {"THORN", 5, 0x000DE, 0}, {"clubsuit", 8, 0x02663, 0}, {"filig", 5, 0x0FB01, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0B2[] = { {"ocir", 4, 0x0229A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0B8[] = { {"ShortDownArrow", 14, 0x02193, 0}, {"atilde", 6, 0x000E3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0B9[] = { {"DownLeftTeeVector", 17, 0x0295E, 0}, {"LeftTeeArrow", 12, 0x021A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0BA[] = { {"GreaterFullEqual", 16, 0x02267, 0}, {"emsp", 4, 0x02003, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0C0[] = { {"lozf", 4, 0x029EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0C4[] = { {"ThinSpace", 9, 0x02009, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0CE[] = { {"fnof", 4, 0x00192, 0}, {"multimap", 8, 0x022B8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0D1[] = { {"Zacute", 6, 0x00179, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0D2[] = { {"mdash", 5, 0x02014, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0D3[] = { {"minusb", 6, 0x0229F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0D5[] = { {"minusd", 6, 0x02238, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0DF[] = { {"varsigma", 8, 0x003C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {"integers", 8, 0x02124, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0E8[] = { {"gesles", 6, 0x02A94, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0EC[] = { {"NotSubset", 9, 0x02282, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0EF[] = { {"NotLeftTriangleEqual", 20, 0x022EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0F3[] = { {"LessLess", 8, 0x02AA1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0F4[] = { {"gscr", 4, 0x0210A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0FA[] = { {"popf", 4, 0x1D561, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0FD[] = { {"nvinfin", 7, 0x029DE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_0FE[] = { {"gacute", 6, 0x001F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_100[] = { {"diam", 4, 0x022C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_101[] = { {"nesim", 5, 0x02242, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_103[] = { {"YIcy", 4, 0x00407, 0}, {"bcy", 3, 0x00431, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_105[] = { {"Exists", 6, 0x02203, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_106[] = { {"vert", 4, 0x0007C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_109[] = { {"ropar", 5, 0x02986, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_10A[] = { {"topfork", 7, 0x02ADA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_10B[] = { {"nLl", 3, 0x022D8, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_10D[] = { {"notin", 5, 0x02209, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_10E[] = { {"SucceedsSlantEqual", 18, 0x0227D, 0}, {"toea", 4, 0x02928, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_10F[] = { {"ImaginaryI", 10, 0x02148, 0}, {"srarr", 5, 0x02192, 0}, {"ulcorner", 8, 0x0231C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_110[] = { {"LeftArrowBar", 12, 0x021E4, 0}, {"ldsh", 4, 0x021B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_111[] = { {"DownBreve", 9, 0x00311, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_113[] = { {"nLt", 3, 0x0226A, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_116[] = { {"vltri", 5, 0x022B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_11B[] = { {"VDash", 5, 0x022AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_11C[] = { {"Dstrok", 6, 0x00110, 0}, {"Intersection", 12, 0x022C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_11E[] = { {"lrhar", 5, 0x021CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_121[] = { {"RightTee", 8, 0x022A2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_124[] = { {"RightArrowLeftArrow", 19, 0x021C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_129[] = { {"Ccirc", 5, 0x00108, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_12A[] = { {"ntrianglelefteq", 15, 0x022EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_12C[] = { {"leftharpoonup", 13, 0x021BC, 0}, {"scap", 4, 0x02AB8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_12E[] = { {"darr", 4, 0x02193, 0}, {"qfr", 3, 0x1D52E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_12F[] = { {"cdot", 4, 0x0010B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_130[] = { {"supseteqq", 9, 0x02AC6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_134[] = { {"Scy", 3, 0x00421, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_135[] = { {"Hscr", 4, 0x0210B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_137[] = { {"LowerRightArrow", 15, 0x02198, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_13A[] = { {"divide", 6, 0x000F7, 0}, {"tcedil", 6, 0x00163, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_13B[] = { {"LeftArrow", 9, 0x02190, 0}, {"Qopf", 4, 0x0211A, 0}, {"vDash", 5, 0x022A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_145[] = { {"dash", 4, 0x02010, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_147[] = { {"oror", 4, 0x02A56, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_149[] = { {"ccirc", 5, 0x00109, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_14B[] = { {"LongLeftArrow", 13, 0x027F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_14C[] = { {"straightphi", 11, 0x003D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_14E[] = { {"xlarr", 5, 0x027F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_14F[] = { {"DJcy", 4, 0x00402, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_158[] = { {"nbsp", 4, 0x000A0, 0}, {"succcurlyeq", 11, 0x0227D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_159[] = { {"njcy", 4, 0x0045A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_15B[] = { {"Leftarrow", 9, 0x021D0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_15E[] = { {"dtrif", 5, 0x025BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_15F[] = { {"bfr", 3, 0x1D51F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_161[] = { {"GreaterTilde", 12, 0x02273, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_164[] = { {"hamilt", 6, 0x0210B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_165[] = { {"Dcy", 3, 0x00414, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_168[] = { {"LeftUpVector", 12, 0x021BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_16A[] = { {"bigoplus", 8, 0x02A01, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_170[] = { {"nwarhk", 6, 0x02923, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_173[] = { {"diams", 5, 0x02666, 0}, {"suphsol", 7, 0x027C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_17A[] = { {"boxminus", 8, 0x0229F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_17B[] = { {"leftarrow", 9, 0x02190, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_17C[] = { {"andd", 4, 0x02A5C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_17F[] = { {"NonBreakingSpace", 16, 0x000A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_181[] = { {"xutri", 5, 0x025B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_189[] = { {"Longleftrightarrow", 18, 0x027FA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_18B[] = { {"Longleftarrow", 13, 0x027F8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_18C[] = { {"gtrapprox", 9, 0x02A86, 0}, {"phmmat", 6, 0x02133, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_18E[] = { {"andv", 4, 0x02A5A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_18F[] = { {"equiv", 5, 0x02261, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_190[] = { {"Sfr", 3, 0x1D516, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_191[] = { {"gopf", 4, 0x1D558, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_193[] = { {"sqsub", 5, 0x0228F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_195[] = { {"approxeq", 8, 0x0224A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_19A[] = { {"Del", 3, 0x02207, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_19C[] = { {"nrightarrow", 11, 0x0219B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_19F[] = { {"SquareUnion", 11, 0x02294, 0}, {"strns", 5, 0x000AF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A0[] = { {"Itilde", 6, 0x00128, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A1[] = { {"sqsup", 5, 0x02290, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"PrecedesTilde", 13, 0x0227E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A3[] = { {"AMP", 3, 0x00026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A5[] = { {"xcup", 4, 0x022C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1AB[] = { {"longleftarrow", 13, 0x027F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1AC[] = { {"lrcorner", 8, 0x0231F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1AD[] = { {"notni", 5, 0x0220C, 0}, {"updownarrow", 11, 0x02195, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1AE[] = { {"szlig", 5, 0x000DF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1B0[] = { {"imof", 4, 0x022B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1B2[] = { {"csub", 4, 0x02ACF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1B5[] = { {"gsim", 4, 0x02273, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1B9[] = { {"leftleftarrows", 14, 0x021C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1BD[] = { {"backcong", 8, 0x0224C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1C0[] = { {"csup", 4, 0x02AD0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1C1[] = { {"Dfr", 3, 0x1D507, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1C4[] = { {"profline", 8, 0x02312, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1C6[] = { {"Zdot", 4, 0x0017B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1C9[] = { {"ClockwiseContourIntegral", 24, 0x02232, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1CA[] = { {"roplus", 6, 0x02A2E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1CD[] = { {"Rang", 4, 0x027EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1CE[] = { {"bcong", 5, 0x0224C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D0[] = { {"tshcy", 5, 0x0045B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D1[] = { {"eDot", 4, 0x02251, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D2[] = { {"Hopf", 4, 0x0210D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D4[] = { {"lpar", 4, 0x00028, 0}, {"odash", 5, 0x0229D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D5[] = { {"capbrcup", 8, 0x02A49, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D6[] = { {"ucy", 3, 0x00443, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D8[] = { {"ofcir", 5, 0x029BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1D9[] = { {"Breve", 5, 0x002D8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1DA[] = { {"barvee", 6, 0x022BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1DF[] = { {"backsim", 7, 0x0223D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E0[] = { {"ange", 4, 0x029A4, 0}, {"half", 4, 0x000BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E1[] = { {"tscr", 4, 0x1D4C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E5[] = { {"realine", 7, 0x0211B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E7[] = { {"dfisht", 6, 0x0297F, 0}, {"swnwar", 6, 0x0292A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1E8[] = { {"tscy", 4, 0x00446, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1EB[] = { {"lsquor", 6, 0x0201A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1EF[] = { {"naturals", 8, 0x02115, 0}, {"utrif", 5, 0x025B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1F0[] = { {"DiacriticalTilde", 16, 0x002DC, 0}, {"RightUpVectorBar", 16, 0x02954, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1F2[] = { {"rHar", 4, 0x02964, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1F4[] = { {"curlyeqprec", 11, 0x022DE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1F8[] = { {"dtri", 4, 0x025BF, 0}, {"euml", 4, 0x000EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1F9[] = { {"breve", 5, 0x002D8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1FA[] = { {"Barwed", 6, 0x02306, 0}, {"nvlArr", 6, 0x02902, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1FC[] = { {"dcaron", 6, 0x0010F, 0}, {"natural", 7, 0x0266E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1FE[] = { {"nsupseteqq", 10, 0x02AC6, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_1FF[] = { {"nedot", 5, 0x02250, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_205[] = { {"bigtriangledown", 15, 0x025BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_207[] = { {"fcy", 3, 0x00444, 0}, {"marker", 6, 0x025AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_20E[] = { {"Union", 5, 0x022C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_212[] = { {"varpropto", 9, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_213[] = { {"CloseCurlyDoubleQuote", 21, 0x0201D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_219[] = { {"DoubleLongRightArrow", 20, 0x027F9, 0}, {"GreaterGreater", 14, 0x02AA2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_21D[] = { {"Umacr", 5, 0x0016A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_220[] = { {"Colon", 5, 0x02237, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_222[] = { {"Hat", 3, 0x0005E, 0}, {"Uscr", 4, 0x1D4B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_227[] = { {"SHCHcy", 6, 0x00429, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_229[] = { {"nLeftarrow", 10, 0x021CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_22B[] = { {"Ecirc", 5, 0x000CA, 0}, {"Jukcy", 5, 0x00404, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_22C[] = { {"nbumpe", 6, 0x0224F, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_22D[] = { {"NotLess", 7, 0x0226E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_22F[] = { {"gtlPar", 6, 0x02995, 0}, {"suphsub", 7, 0x02AD7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_230[] = { {"gtreqqless", 10, 0x02A8C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_232[] = { {"ufr", 3, 0x1D532, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_234[] = { {"cirscir", 7, 0x029C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_239[] = { {"LeftDownTeeVector", 17, 0x02961, 0}, {"duhar", 5, 0x0296F, 0}, {"nrtrie", 6, 0x022ED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_23C[] = { {"llhard", 6, 0x0296B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_23D[] = { {"umacr", 5, 0x0016B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_23E[] = { {"lates", 5, 0x02AAD, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_240[] = { {"colon", 5, 0x0003A, 0}, {"iacute", 6, 0x000ED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_241[] = { {"NotPrecedes", 11, 0x02280, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_242[] = { {"cirfnint", 8, 0x02A10, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_246[] = { {"barwedge", 8, 0x02305, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_249[] = { {"nleftarrow", 10, 0x0219A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_24A[] = { {"Ubrcy", 5, 0x0040E, 0}, {"leftthreetimes", 14, 0x022CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_24B[] = { {"andand", 6, 0x02A55, 0}, {"ecirc", 5, 0x000EA, 0}, {"jukcy", 5, 0x00454, 0}, {"quatint", 7, 0x02A16, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_24D[] = { {"lharul", 6, 0x0296A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_251[] = { {"smtes", 5, 0x02AAC, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_252[] = { {"UnionPlus", 9, 0x0228E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_257[] = { {"NotLeftTriangle", 15, 0x022EA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_25A[] = { {"bne", 3, 0x0003D, 0x020E5}, {NULL} };
+static const entity_cp_map ht_bucket_html5_25B[] = { {"gtrsim", 6, 0x02273, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_25C[] = { {"Rarr", 4, 0x021A0, 0}, {"ldquor", 6, 0x0201E, 0}, {"phiv", 4, 0x003D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_25D[] = { {"because", 7, 0x02235, 0}, {"gEl", 3, 0x02A8C, 0}, {"setminus", 8, 0x02216, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_263[] = { {"ffr", 3, 0x1D523, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_26A[] = { {"ubrcy", 5, 0x0045E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_26B[] = { {"elinters", 8, 0x023E7, 0}, {"plusb", 5, 0x0229E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_26E[] = { {"pluse", 5, 0x02A72, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_274[] = { {"CapitalDifferentialD", 20, 0x02145, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_277[] = { {"daleth", 6, 0x02138, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_278[] = { {"kscr", 4, 0x1D4C0, 0}, {"ogon", 4, 0x002DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_27C[] = { {"SHcy", 4, 0x00428, 0}, {"equest", 6, 0x0225F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_27E[] = { {"rbarr", 5, 0x0290D, 0}, {"topf", 4, 0x1D565, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_283[] = { {"tritime", 7, 0x02A3B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_28A[] = { {"bot", 3, 0x022A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_294[] = { {"Wfr", 3, 0x1D51A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_297[] = { {"HumpEqual", 9, 0x0224F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_298[] = { {"rightleftharpoons", 17, 0x021CC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_29D[] = { {"frasl", 5, 0x02044, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_29F[] = { {"UnderBracket", 12, 0x023B5, 0}, {"ovbar", 5, 0x0233D, 0}, {"upharpoonright", 14, 0x021BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2A0[] = { {"euro", 4, 0x020AC, 0}, {"nhArr", 5, 0x021CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2A9[] = { {"NotSupersetEqual", 16, 0x02289, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2AE[] = { {"cularr", 6, 0x021B6, 0}, {"scnE", 4, 0x02AB6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2B1[] = { {"napid", 5, 0x0224B, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2B2[] = { {"harr", 4, 0x02194, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2B3[] = { {"gdot", 4, 0x00121, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2B9[] = { {"Lscr", 4, 0x02112, 0}, {"zeta", 4, 0x003B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2BF[] = { {"ENG", 3, 0x0014A, 0}, {"Uopf", 4, 0x1D54C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2C4[] = { {"esdot", 5, 0x02250, 0}, {"scsim", 5, 0x0227F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2C5[] = { {"Hfr", 3, 0x0210C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2CE[] = { {"RightArrow", 10, 0x02192, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2CF[] = { {"Sqrt", 4, 0x0221A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2D3[] = { {"xodot", 5, 0x02A00, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2DA[] = { {"ycy", 3, 0x0044B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2DB[] = { {"hkswarow", 8, 0x02926, 0}, {"urtri", 5, 0x025F9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2DC[] = { {"roang", 5, 0x027ED, 0}, {"tosa", 4, 0x02929, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2E3[] = { {"CircleMinus", 11, 0x02296, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2E4[] = { {"Lcaron", 6, 0x0013D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2EB[] = { {"ShortLeftArrow", 14, 0x02190, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2EC[] = { {"Dot", 3, 0x000A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2EE[] = { {"Rightarrow", 10, 0x021D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2F0[] = { {"prsim", 5, 0x0227E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2F2[] = { {"notinE", 6, 0x022F9, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_2F8[] = { {"becaus", 6, 0x02235, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_300[] = { {"NotEqualTilde", 13, 0x02242, 0x00338}, {"nparallel", 9, 0x02226, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_301[] = { {"capcup", 6, 0x02A47, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_304[] = { {"simeq", 5, 0x02243, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_305[] = { {"forall", 6, 0x02200, 0}, {"straightepsilon", 15, 0x003F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_308[] = { {"ruluhar", 7, 0x02968, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_30B[] = { {"jcy", 3, 0x00439, 0}, {"ltcc", 4, 0x02AA6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_30F[] = { {"bscr", 4, 0x1D4B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_311[] = { {"ExponentialE", 12, 0x02147, 0}, {"weierp", 6, 0x02118, 0}, {"yen", 3, 0x000A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_313[] = { {"blacksquare", 11, 0x025AA, 0}, {"uml", 3, 0x000A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_315[] = { {"backsimeq", 9, 0x022CD, 0}, {"kopf", 4, 0x1D55C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_319[] = { {"NotPrecedesEqual", 16, 0x02AAF, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_31A[] = { {"simgE", 5, 0x02AA0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_31B[] = { {"tridot", 6, 0x025EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_326[] = { {"DoubleLongLeftArrow", 19, 0x027F8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_329[] = { {"models", 6, 0x022A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_32A[] = { {"emptyv", 6, 0x02205, 0}, {"eqslantgtr", 10, 0x02A96, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_32D[] = { {"Gcirc", 5, 0x0011C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_330[] = { {"bernou", 6, 0x0212C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_331[] = { {"HumpDownHump", 12, 0x0224E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_336[] = { {"yfr", 3, 0x1D536, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_338[] = { {"blacktriangle", 13, 0x025B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_33B[] = { {"yacy", 4, 0x0044F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_33F[] = { {"lsime", 5, 0x02A8D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_340[] = { {"NotTildeEqual", 13, 0x02244, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_341[] = { {"lsimg", 5, 0x02A8F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_347[] = { {"ncap", 4, 0x02A43, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_34D[] = { {"DD", 2, 0x02145, 0}, {"gcirc", 5, 0x0011D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_350[] = { {"Cscr", 4, 0x1D49E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_356[] = { {"Lopf", 4, 0x1D543, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_358[] = { {"lBarr", 5, 0x0290E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_359[] = { {"Leftrightarrow", 14, 0x021D4, 0}, {"gtrdot", 6, 0x022D7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_35D[] = { {"NotSquareSubset", 15, 0x0228F, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_35F[] = { {"sqsubset", 8, 0x0228F, 0}, {"subsetneq", 9, 0x0228A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_361[] = { {"doublebarwedge", 14, 0x02306, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_363[] = { {"blacktriangleleft", 17, 0x025C2, 0}, {"hellip", 6, 0x02026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_365[] = { {"xscr", 4, 0x1D4CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_367[] = { {"LessFullEqual", 13, 0x02266, 0}, {"jfr", 3, 0x1D527, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_369[] = { {"GreaterSlantEqual", 17, 0x02A7E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_36A[] = { {"Uring", 5, 0x0016E, 0}, {"VeryThinSpace", 13, 0x0200A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_36B[] = { {"roarr", 5, 0x021FE, 0}, {"scaron", 6, 0x00161, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_36D[] = { {"Lcy", 3, 0x0041B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_36E[] = { {"RightDownVector", 15, 0x021C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_36F[] = { {"Sub", 3, 0x022D0, 0}, {"pitchfork", 9, 0x022D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_372[] = { {"nvsim", 5, 0x0223C, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_374[] = { {"xrArr", 5, 0x027F9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_378[] = { {"CloseCurlyQuote", 15, 0x02019, 0}, {"uwangle", 7, 0x029A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_37A[] = { {"Sum", 3, 0x02211, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_37C[] = { {"iuml", 4, 0x000EF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_37D[] = { {"Sup", 3, 0x022D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_37E[] = { {"planck", 6, 0x0210F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_37F[] = { {"Egrave", 6, 0x000C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_380[] = { {"curlywedge", 10, 0x022CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_382[] = { {"TildeFullEqual", 14, 0x02245, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_383[] = { {"searhk", 6, 0x02925, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_386[] = { {"ETH", 3, 0x000D0, 0}, {"napos", 5, 0x00149, 0}, {"upsi", 4, 0x003C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_387[] = { {"twoheadleftarrow", 16, 0x0219E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_38A[] = { {"Assign", 6, 0x02254, 0}, {"uring", 5, 0x0016F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_38D[] = { {"SquareIntersection", 18, 0x02293, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_38E[] = { {"lmidot", 6, 0x00140, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_391[] = { {"kcedil", 6, 0x00137, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_394[] = { {"curren", 6, 0x000A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_397[] = { {"acute", 5, 0x000B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_398[] = { {"curlyeqsucc", 11, 0x022DF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_39C[] = { {"Omicron", 7, 0x0039F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_39F[] = { {"uarr", 4, 0x02191, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A0[] = { {"Hstrok", 6, 0x00126, 0}, {"UnderBrace", 10, 0x023DF, 0}, {"tdot", 4, 0x020DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A1[] = { {"qint", 4, 0x02A0C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A4[] = { {"sfrown", 6, 0x02322, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A5[] = { {"trpezium", 8, 0x023E2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A6[] = { {"Yscr", 4, 0x1D4B4, 0}, {"cedil", 5, 0x000B8, 0}, {"planckh", 7, 0x0210E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3A7[] = { {"lang", 4, 0x027E8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3AC[] = { {"bopf", 4, 0x1D553, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3B2[] = { {"lbbrk", 5, 0x02772, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3B4[] = { {"khcy", 4, 0x00445, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3BF[] = { {"Epsilon", 7, 0x00395, 0}, {"simlE", 5, 0x02A9F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3C0[] = { {"GT", 2, 0x0003E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3C4[] = { {"nap", 3, 0x02249, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3C9[] = { {"Lfr", 3, 0x1D50F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3CD[] = { {"succapprox", 10, 0x02AB8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3D0[] = { {"bsim", 4, 0x0223D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3D3[] = { {"Gg", 2, 0x022D9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3D9[] = { {"angrtvb", 7, 0x022BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3DE[] = { {"xcirc", 5, 0x025EF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E0[] = { {"Gt", 2, 0x0226B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E1[] = { {"LeftRightVector", 15, 0x0294E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E3[] = { {"circledast", 10, 0x0229B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E4[] = { {"telrec", 6, 0x02315, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E6[] = { {"SucceedsTilde", 13, 0x0227F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3E9[] = { {"nLtv", 4, 0x0226A, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3ED[] = { {"Copf", 4, 0x02102, 0}, {"napprox", 7, 0x02249, 0}, {"nsupseteq", 9, 0x02289, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3F1[] = { {"VerticalTilde", 13, 0x02240, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3F2[] = { {"parallel", 8, 0x02225, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3F7[] = { {"precnapprox", 11, 0x02AB9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3FC[] = { {"oscr", 4, 0x02134, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_3FE[] = { {"supsetneqq", 10, 0x02ACC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_402[] = { {"xopf", 4, 0x1D569, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_405[] = { {"mumap", 5, 0x022B8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_407[] = { {"varsupsetneqq", 13, 0x02ACC, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_409[] = { {"ReverseEquilibrium", 18, 0x021CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_40E[] = { {"Ubreve", 6, 0x0016C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_40F[] = { {"YUcy", 4, 0x0042E, 0}, {"ncy", 3, 0x0043D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_413[] = { {"ltimes", 6, 0x022C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_41A[] = { {"UpperRightArrow", 15, 0x02197, 0}, {"nvap", 4, 0x0224D, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_41B[] = { {"Im", 2, 0x02111, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_421[] = { {"simne", 5, 0x02246, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_423[] = { {"ccups", 5, 0x02A4C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_424[] = { {"nlArr", 5, 0x021CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_425[] = { {"rarrsim", 7, 0x02974, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_426[] = { {"Ncaron", 6, 0x00147, 0}, {"vsupnE", 6, 0x02ACC, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_429[] = { {"succeq", 6, 0x02AB0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_42C[] = { {"Gammad", 6, 0x003DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_42F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_430[] = { {"backepsilon", 11, 0x003F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_432[] = { {"ddarr", 5, 0x021CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_436[] = { {"larr", 4, 0x02190, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_439[] = { {"divideontimes", 13, 0x022C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_43C[] = { {"succsim", 7, 0x0227F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_43D[] = { {"Pscr", 4, 0x1D4AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_43E[] = { {"puncsp", 6, 0x02008, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_43F[] = { {"gtreqless", 9, 0x022DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_440[] = { {"intcal", 6, 0x022BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_441[] = { {"nsime", 5, 0x02244, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_443[] = { {"Yopf", 4, 0x1D550, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_446[] = { {"angsph", 6, 0x02222, 0}, {"vsupne", 6, 0x0228B, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_447[] = { {"NotNestedLessLess", 17, 0x02AA1, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_44A[] = { {"PrecedesSlantEqual", 18, 0x0227C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_44F[] = { {"icirc", 5, 0x000EE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_450[] = { {"DownLeftVectorBar", 17, 0x02956, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_454[] = { {"Auml", 4, 0x000C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_457[] = { {"LJcy", 4, 0x00409, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_458[] = { {"sqsube", 6, 0x02291, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_45D[] = { {"nprec", 5, 0x02280, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_45F[] = { {"ngE", 3, 0x02267, 0x00338}, {"smile", 5, 0x02323, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_465[] = { {"LT", 2, 0x0003C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_466[] = { {"ldrdhar", 7, 0x02967, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_469[] = { {"utri", 4, 0x025B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_46A[] = { {"Sacute", 6, 0x0015A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_46B[] = { {"late", 4, 0x02AAD, 0}, {"nfr", 3, 0x1D52B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_46D[] = { {"NotNestedGreaterGreater", 23, 0x02AA2, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_46F[] = { {"nwarr", 5, 0x02196, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_470[] = { {"biguplus", 8, 0x02A04, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_471[] = { {"Pcy", 3, 0x0041F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_472[] = { {"bigtriangleup", 13, 0x025B3, 0}, {"rationals", 9, 0x0211A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_473[] = { {"congdot", 7, 0x02A6D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_475[] = { {"PlusMinus", 9, 0x000B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_479[] = { {"IOcy", 4, 0x00401, 0}, {"Scedil", 6, 0x0015E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_47C[] = { {"eqcirc", 6, 0x02256, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_47D[] = { {"Ll", 2, 0x022D8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_47F[] = { {"Cayleys", 7, 0x0212D, 0}, {"nge", 3, 0x02271, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_480[] = { {"NotGreater", 10, 0x0226F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_485[] = { {"Lt", 2, 0x0226A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_488[] = { {"rotimes", 7, 0x02A35, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_48C[] = { {"caps", 4, 0x02229, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_48E[] = { {"ngt", 3, 0x0226F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_48F[] = { {"Cross", 5, 0x02A2F, 0}, {"bumpeq", 6, 0x0224F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_490[] = { {"VerticalSeparator", 17, 0x02758, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_491[] = { {"plankv", 6, 0x0210F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_493[] = { {"fscr", 4, 0x1D4BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_495[] = { {"bsol", 4, 0x0005C, 0}, {"sqsubseteq", 10, 0x02291, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_496[] = { {"boxH", 4, 0x02550, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_498[] = { {"rightarrowtail", 14, 0x021A3, 0}, {"ufisht", 6, 0x0297E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_499[] = { {"oopf", 4, 0x1D560, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_49F[] = { {"lobrk", 5, 0x027E6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4A2[] = { {"Acy", 3, 0x00410, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4A4[] = { {"NotSubsetEqual", 14, 0x02288, 0}, {"boxV", 4, 0x02551, 0}, {"dHar", 4, 0x02965, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4A6[] = { {"precnsim", 8, 0x022E8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4A7[] = { {"Mu", 2, 0x0039C, 0}, {"aelig", 5, 0x000E6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4AA[] = { {"gescc", 5, 0x02AA9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4AB[] = { {"origof", 6, 0x022B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4AE[] = { {"upsih", 5, 0x003D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4AF[] = { {"cross", 5, 0x02717, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4B2[] = { {"LeftFloor", 9, 0x0230A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4B6[] = { {"boxh", 4, 0x02500, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4B8[] = { {"NotGreaterEqual", 15, 0x02271, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4BC[] = { {"profalar", 8, 0x0232E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C0[] = { {"nsmid", 5, 0x02224, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C2[] = { {"hbar", 4, 0x0210F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C3[] = { {"udarr", 5, 0x021C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C4[] = { {"boxv", 4, 0x02502, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C5[] = { {"olarr", 5, 0x021BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4C8[] = { {"Nu", 2, 0x0039D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4CB[] = { {"NotCongruent", 12, 0x02262, 0}, {"bkarow", 6, 0x0290D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4CD[] = { {"Pfr", 3, 0x1D513, 0}, {"forkv", 5, 0x02AD9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4CF[] = { {"nis", 3, 0x022FC, 0}, {"trianglerighteq", 15, 0x022B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D0[] = { {"ngeq", 4, 0x02271, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D2[] = { {"cudarrl", 7, 0x02938, 0}, {"nges", 4, 0x02A7E, 0x00338}, {"niv", 3, 0x0220B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D3[] = { {"SubsetEqual", 11, 0x02286, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D4[] = { {"Gscr", 4, 0x1D4A2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D5[] = { {"complexes", 9, 0x02102, 0}, {"eDDot", 5, 0x02A77, 0}, {"nvge", 4, 0x02265, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4D8[] = { {"cudarrr", 7, 0x02935, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4DA[] = { {"Popf", 4, 0x02119, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4DE[] = { {"LongRightArrow", 14, 0x027F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4DF[] = { {"supseteq", 8, 0x02287, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E3[] = { {"dollar", 6, 0x00024, 0}, {"gnsim", 5, 0x022E7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E4[] = { {"nvgt", 4, 0x0003E, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E6[] = { {"Or", 2, 0x02A54, 0}, {"Vert", 4, 0x02016, 0}, {"lneqq", 5, 0x02268, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E7[] = { {"nLeftrightarrow", 15, 0x021CE, 0}, {"nbump", 5, 0x0224E, 0x00338}, {"ntriangleright", 14, 0x022EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E8[] = { {"ecir", 4, 0x02256, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4E9[] = { {"npolint", 7, 0x02A14, 0}, {"plus", 4, 0x0002B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4ED[] = { {"centerdot", 9, 0x000B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4F1[] = { {"zacute", 6, 0x0017A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4F7[] = { {"odiv", 4, 0x02A38, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4F9[] = { {"cap", 3, 0x02229, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4FB[] = { {"ensp", 4, 0x02002, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_4FE[] = { {"Afr", 3, 0x1D504, 0}, {"Pi", 2, 0x003A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_500[] = { {"iquest", 6, 0x000BF, 0}, {"ltri", 4, 0x025C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_504[] = { {"nlE", 3, 0x02266, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_506[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_507[] = { {"Pr", 2, 0x02ABB, 0}, {"Vdashl", 6, 0x02AE6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_509[] = { {"SuchThat", 8, 0x0220B, 0}, {"Supset", 6, 0x022D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_50E[] = { {"Darr", 4, 0x021A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_50F[] = { {"Cdot", 4, 0x0010A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_513[] = { {"rcy", 3, 0x00440, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_516[] = { {"orderof", 7, 0x02134, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_518[] = { {"leqq", 4, 0x02266, 0}, {"precsim", 7, 0x0227E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_519[] = { {"RightTriangle", 13, 0x022B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_51B[] = { {"agrave", 6, 0x000E0, 0}, {"succnapprox", 11, 0x02ABA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_51C[] = { {"Tab", 3, 0x00009, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_524[] = { {"nle", 3, 0x02270, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_525[] = { {"spades", 6, 0x02660, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_526[] = { {"gtcc", 4, 0x02AA7, 0}, {"llcorner", 8, 0x0231E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_52F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_530[] = { {"fopf", 4, 0x1D557, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_532[] = { {"Mellintrf", 9, 0x02133, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_533[] = { {"nlt", 3, 0x0226E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_534[] = { {"lparlt", 6, 0x02993, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_53B[] = { {"Ccaron", 6, 0x0010C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_53C[] = { {"Re", 2, 0x0211C, 0}, {"dstrok", 6, 0x00111, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_53F[] = { {"leftharpoondown", 15, 0x021BD, 0}, {"ssetmn", 6, 0x02216, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_542[] = { {"lrhard", 6, 0x0296D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_543[] = { {"reg", 3, 0x000AE, 0}, {"sharp", 5, 0x0266F, 0}, {"yicy", 4, 0x00457, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_545[] = { {"ShortUpArrow", 12, 0x02191, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_548[] = { {"plusacir", 8, 0x02A23, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_54F[] = { {"cent", 4, 0x000A2, 0}, {"natur", 5, 0x0266E, 0}, {"varphi", 6, 0x003D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_550[] = { {"lesg", 4, 0x022DA, 0x0FE00}, {"supnE", 5, 0x02ACC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_551[] = { {"ohbar", 5, 0x029B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_557[] = { {"NotLessGreater", 14, 0x02278, 0}, {"nleqslant", 9, 0x02A7D, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_55B[] = { {"Sc", 2, 0x02ABC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_55D[] = { {"NotSucceedsEqual", 16, 0x02AB0, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_55F[] = { {"DZcy", 4, 0x0040F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_564[] = { {"vartheta", 8, 0x003D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_565[] = { {"ltrie", 5, 0x022B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_566[] = { {"Otilde", 6, 0x000D5, 0}, {"ltrif", 5, 0x025C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_56C[] = { {"Lsh", 3, 0x021B0, 0}, {"hookleftarrow", 13, 0x021A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_56F[] = { {"rfr", 3, 0x1D52F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_570[] = { {"supne", 5, 0x0228B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_571[] = { {"Gopf", 4, 0x1D53E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_572[] = { {"UpEquilibrium", 13, 0x0296E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_575[] = { {"Tcy", 3, 0x00422, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_576[] = { {"ffilig", 6, 0x0FB03, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_577[] = { {"fork", 4, 0x022D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_578[] = { {"oplus", 5, 0x02295, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_57A[] = { {"nvle", 4, 0x02264, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_57B[] = { {"HilbertSpace", 12, 0x0210B, 0}, {"subedot", 7, 0x02AC3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_57C[] = { {"TripleDot", 9, 0x020DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_580[] = { {"sscr", 4, 0x1D4C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_582[] = { {"osol", 4, 0x02298, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_583[] = { {"plustwo", 7, 0x02A27, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_586[] = { {"LessGreater", 11, 0x02276, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_588[] = { {"lrarr", 5, 0x021C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_589[] = { {"nvlt", 4, 0x0003C, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_58D[] = { {"questeq", 7, 0x0225F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_58E[] = { {"LessTilde", 9, 0x02272, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_58F[] = { {"djcy", 4, 0x00452, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_590[] = { {"xoplus", 6, 0x02A01, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_595[] = { {"primes", 6, 0x02119, 0}, {"solb", 4, 0x029C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_596[] = { {"not", 3, 0x000AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_59A[] = { {"angzarr", 7, 0x0237C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_59D[] = { {"nearr", 5, 0x02197, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_59F[] = { {"lowast", 6, 0x02217, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5A0[] = { {"cfr", 3, 0x1D520, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5A3[] = { {"ltcir", 5, 0x02A79, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5A6[] = { {"Ecy", 3, 0x0042D, 0}, {"gesdotol", 8, 0x02A84, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5A9[] = { {"longleftrightarrow", 18, 0x027F7, 0}, {"para", 4, 0x000B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5AD[] = { {"blank", 5, 0x02423, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5AE[] = { {"rho", 3, 0x003C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5B0[] = { {"dharl", 5, 0x021C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5B1[] = { {"rsquor", 6, 0x02019, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5B5[] = { {"NotSquareSubsetEqual", 20, 0x022E2, 0}, {"npr", 3, 0x02280, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5B6[] = { {"dharr", 5, 0x021C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5B7[] = { {"NewLine", 7, 0x0000A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5BB[] = { {"odot", 4, 0x02299, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5BC[] = { {"part", 4, 0x02202, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5BD[] = { {"cuvee", 5, 0x022CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5BF[] = { {"lesdoto", 7, 0x02A81, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5C0[] = { {"itilde", 6, 0x00129, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5C1[] = { {"Tscr", 4, 0x1D4AF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5C2[] = { {"nsubE", 5, 0x02AC5, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5C4[] = { {"ratio", 5, 0x02236, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D0[] = { {"Conint", 6, 0x0222F, 0}, {"LeftDownVectorBar", 17, 0x02959, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D1[] = { {"Tfr", 3, 0x1D517, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D3[] = { {"fllig", 5, 0x0FB02, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D5[] = { {"thksim", 6, 0x0223C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5D9[] = { {"chi", 3, 0x003C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5DB[] = { {"ncup", 4, 0x02A42, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5DD[] = { {"SOFTcy", 6, 0x0042C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5DF[] = { {"bnequiv", 7, 0x02261, 0x020E5}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5E2[] = { {"nsube", 5, 0x02288, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5E4[] = { {"mapstoleft", 10, 0x021A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5E7[] = { {"NotLessSlantEqual", 17, 0x02A7D, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5EA[] = { {"ldrushar", 8, 0x0294B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5ED[] = { {"Equilibrium", 11, 0x021CC, 0}, {"Uogon", 5, 0x00172, 0}, {"supsetneq", 9, 0x0228B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5F0[] = { {"Vbar", 4, 0x02AEB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5F3[] = { {"vnsub", 5, 0x02282, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5F6[] = { {"Square", 6, 0x025A1, 0}, {"lessapprox", 10, 0x02A85, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5F8[] = { {"And", 3, 0x02A53, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5FA[] = { {"gesdoto", 7, 0x02A82, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_5FD[] = { {"gap", 3, 0x02A86, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_601[] = { {"nsucc", 5, 0x02281, 0}, {"thicksim", 8, 0x0223C, 0}, {"vnsup", 5, 0x02283, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_602[] = { {"Efr", 3, 0x1D508, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_603[] = { {"Igrave", 6, 0x000CC, 0}, {"cir", 3, 0x025CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_606[] = { {"Xi", 2, 0x0039E, 0}, {"oacute", 6, 0x000F3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_609[] = { {"nsc", 3, 0x02281, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_60D[] = { {"uogon", 5, 0x00173, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_613[] = { {"rharul", 6, 0x0296C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_615[] = { {"RuleDelayed", 11, 0x029F4, 0}, {"apacir", 6, 0x02A6F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_617[] = { {"jscr", 4, 0x1D4BF, 0}, {"vcy", 3, 0x00432, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_61A[] = { {"barwed", 6, 0x02305, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_61D[] = { {"sopf", 4, 0x1D564, 0}, {"thkap", 5, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_61F[] = { {"lesseqgtr", 9, 0x022DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_622[] = { {"rdquor", 6, 0x0201D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_624[] = { {"Lstrok", 6, 0x00141, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_626[] = { {"Product", 7, 0x0220F, 0}, {"sqsupe", 6, 0x02292, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_628[] = { {"awconint", 8, 0x02233, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_62C[] = { {"hearts", 6, 0x02665, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_630[] = { {"rlm", 3, 0x0200F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_632[] = { {"comma", 5, 0x0002C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_636[] = { {"PartialD", 8, 0x02202, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_63A[] = { {"wedbar", 6, 0x02A5F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_63C[] = { {"oline", 5, 0x0203E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_63D[] = { {"OverBracket", 11, 0x023B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_63E[] = { {"RBarr", 5, 0x02910, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_641[] = { {"uharl", 5, 0x021BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_642[] = { {"leftrightsquigarrow", 19, 0x021AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_645[] = { {"RightFloor", 10, 0x0230B, 0}, {"intprod", 7, 0x02A3C, 0}, {"vee", 3, 0x02228, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_646[] = { {"zigrarr", 7, 0x021DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_647[] = { {"uharr", 5, 0x021BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_648[] = { {"gcy", 3, 0x00433, 0}, {"varsubsetneq", 12, 0x0228A, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_649[] = { {"leqslant", 8, 0x02A7D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_64A[] = { {"Odblac", 6, 0x00150, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_651[] = { {"minus", 5, 0x02212, 0}, {"scpolint", 8, 0x02A13, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_652[] = { {"lrtri", 5, 0x022BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_653[] = { {"DiacriticalGrave", 16, 0x00060, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_655[] = { {"num", 3, 0x00023, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_657[] = { {"quest", 5, 0x0003F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_658[] = { {"Kscr", 4, 0x1D4A6, 0}, {"UnderBar", 8, 0x0005F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_659[] = { {"lsquo", 5, 0x02018, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_65C[] = { {"rArr", 4, 0x021D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_65E[] = { {"Topf", 4, 0x1D54B, 0}, {"heartsuit", 9, 0x02665, 0}, {"rBarr", 5, 0x0290F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_660[] = { {"emptyset", 8, 0x02205, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_669[] = { {"UnderParenthesis", 16, 0x023DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_670[] = { {"dotplus", 7, 0x02214, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_671[] = { {"Psi", 3, 0x003A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_672[] = { {"GJcy", 4, 0x00403, 0}, {"exist", 5, 0x02203, 0}, {"simplus", 7, 0x02A24, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_673[] = { {"vfr", 3, 0x1D533, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_676[] = { {"tprime", 6, 0x02034, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_678[] = { {"leftrightharpoons", 17, 0x021CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_679[] = { {"rbrksld", 7, 0x0298E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_67D[] = { {"Ecaron", 6, 0x0011A, 0}, {"gel", 3, 0x022DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_680[] = { {"capdot", 6, 0x02A40, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_682[] = { {"geq", 3, 0x02265, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_684[] = { {"LowerLeftArrow", 14, 0x02199, 0}, {"ges", 3, 0x02A7E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_685[] = { {"Colone", 6, 0x02A74, 0}, {"NotLessEqual", 12, 0x02270, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_68A[] = { {"nrarr", 5, 0x0219B, 0}, {"rbrkslu", 7, 0x02990, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_68C[] = { {"flat", 4, 0x0266D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_691[] = { {"there4", 6, 0x02234, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_693[] = { {"Gdot", 4, 0x00120, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_694[] = { {"ijlig", 5, 0x00133, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_696[] = { {"blacklozenge", 12, 0x029EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_699[] = { {"Zeta", 4, 0x00396, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6A3[] = { {"duarr", 5, 0x021F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6A4[] = { {"DotEqual", 8, 0x02250, 0}, {"dtdot", 5, 0x022F1, 0}, {"gfr", 3, 0x1D524, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6A8[] = { {"cirE", 4, 0x029C3, 0}, {"period", 6, 0x0002E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6A9[] = { {"lmoust", 6, 0x023B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6AA[] = { {"Icy", 3, 0x00418, 0}, {"Rcaron", 6, 0x00158, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6AB[] = { {"LeftCeiling", 11, 0x02308, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6AE[] = { {"ascr", 4, 0x1D4B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6B0[] = { {"boxtimes", 8, 0x022A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6B4[] = { {"jopf", 4, 0x1D55B, 0}, {"ntriangleleft", 13, 0x022EA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6B6[] = { {"eqcolon", 7, 0x02255, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6B8[] = { {"rbbrk", 5, 0x02773, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6B9[] = { {"homtht", 6, 0x0223B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6BA[] = { {"ggg", 3, 0x022D9, 0}, {"seswar", 6, 0x02929, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6BC[] = { {"perp", 4, 0x022A5, 0}, {"shcy", 4, 0x00448, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6BF[] = { {"phone", 5, 0x0260E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C0[] = { {"NotDoubleVerticalBar", 20, 0x02226, 0}, {"ngtr", 4, 0x0226F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C4[] = { {"ThickSpace", 10, 0x0205F, 0x0200A}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C5[] = { {"ForAll", 6, 0x02200, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C6[] = { {"circ", 4, 0x002C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C7[] = { {"Verbar", 6, 0x02016, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C8[] = { {"cire", 4, 0x02257, 0}, {"lesges", 6, 0x02A93, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6C9[] = { {"slarr", 5, 0x02190, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6CC[] = { {"RightDownTeeVector", 18, 0x0295D, 0}, {"triangleq", 9, 0x0225C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6CE[] = { {"checkmark", 9, 0x02713, 0}, {"quot", 4, 0x00022, 0}, {"suplarr", 7, 0x0297B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6D1[] = { {"Backslash", 9, 0x02216, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6D2[] = { {"fallingdotseq", 13, 0x02252, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6D4[] = { {"swArr", 5, 0x021D9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6D5[] = { {"Xfr", 3, 0x1D51B, 0}, {"lbrke", 5, 0x0298B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6D9[] = { {"jmath", 5, 0x00237, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6DA[] = { {"lmoustache", 10, 0x023B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6DB[] = { {"DownTee", 7, 0x022A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6DC[] = { {"reals", 5, 0x0211D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6DE[] = { {"quaternions", 11, 0x0210D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6E7[] = { {"vzigzag", 7, 0x0299A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6EB[] = { {"pound", 5, 0x000A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6EE[] = { {"permil", 6, 0x02030, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6EF[] = { {"Bscr", 4, 0x0212C, 0}, {"lfisht", 6, 0x0297C, 0}, {"vartriangleleft", 15, 0x022B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6F5[] = { {"Kopf", 4, 0x1D542, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6F7[] = { {"Tilde", 5, 0x0223C, 0}, {"gtrarr", 6, 0x02978, 0}, {"lAarr", 5, 0x021DA, 0}, {"opar", 4, 0x029B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_6FB[] = { {"triangle", 8, 0x025B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_704[] = { {"lcaron", 6, 0x0013E, 0}, {"wscr", 4, 0x1D4CC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_705[] = { {"asympeq", 7, 0x0224D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_706[] = { {"Ifr", 3, 0x02111, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_707[] = { {"DoubleDot", 9, 0x000A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_709[] = { {"nVdash", 6, 0x022AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_70C[] = { {"hairsp", 6, 0x0200A, 0}, {"leftrightarrows", 15, 0x021C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_70E[] = { {"lbrace", 6, 0x0007B, 0}, {"rightarrow", 10, 0x02192, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_70F[] = { {"Dagger", 6, 0x02021, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_712[] = { {"rsh", 3, 0x021B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_714[] = { {"eqslantless", 11, 0x02A95, 0}, {"gnapprox", 8, 0x02A8A, 0}, {"lbrack", 6, 0x0005B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_715[] = { {"uHar", 4, 0x02963, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_717[] = { {"tilde", 5, 0x002DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_719[] = { {"complement", 10, 0x02201, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_71B[] = { {"zcy", 3, 0x00437, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_71E[] = { {"boxDL", 5, 0x02557, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_71F[] = { {"micro", 5, 0x000B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_723[] = { {"horbar", 6, 0x02015, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_724[] = { {"boxDR", 5, 0x02554, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_727[] = { {"bsolhsub", 8, 0x027C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_729[] = { {"ac", 2, 0x0223E, 0}, {"nvdash", 6, 0x022AC, 0}, {"precapprox", 10, 0x02AB7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_72C[] = { {"af", 2, 0x02061, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_72D[] = { {"bullet", 6, 0x02022, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_72E[] = { {"demptyv", 7, 0x029B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_733[] = { {"geqq", 4, 0x02267, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_734[] = { {"uuarr", 5, 0x021C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_735[] = { {"Ocirc", 5, 0x000D4, 0}, {"utdot", 5, 0x022F0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_736[] = { {"ap", 2, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_738[] = { {"bNot", 4, 0x02AED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_73B[] = { {"CirclePlus", 10, 0x02295, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_73D[] = { {"glE", 3, 0x02A92, 0}, {"midcir", 6, 0x02AF0, 0}, {"rppolint", 8, 0x02A12, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_73E[] = { {"boxDl", 5, 0x02556, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_73F[] = { {"sdot", 4, 0x022C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_744[] = { {"boxDr", 5, 0x02553, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_745[] = { {"Xscr", 4, 0x1D4B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_749[] = { {"dlcrop", 6, 0x0230D, 0}, {"gtrless", 7, 0x02277, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_74B[] = { {"aopf", 4, 0x1D552, 0}, {"operp", 5, 0x029B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_74C[] = { {"kcy", 3, 0x0043A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_74F[] = { {"larrfs", 6, 0x0291D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_751[] = { {"rcub", 4, 0x0007D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_754[] = { {"nrtri", 5, 0x022EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_755[] = { {"nparsl", 6, 0x02AFD, 0x020E5}, {"ocirc", 5, 0x000F4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_759[] = { {"gla", 3, 0x02AA5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_75C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_75F[] = { {"mcomma", 6, 0x02A29, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_762[] = { {"glj", 3, 0x02AA4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_763[] = { {"Map", 3, 0x02905, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_765[] = { {"copysr", 6, 0x02117, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_766[] = { {"DownTeeArrow", 12, 0x021A7, 0}, {"Upsi", 4, 0x003D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_768[] = { {"awint", 5, 0x02A11, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_76E[] = { {"DownRightVector", 15, 0x021C1, 0}, {"NotEqual", 8, 0x02260, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_770[] = { {"gesl", 4, 0x022DB, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_772[] = { {"NotCupCap", 9, 0x0226D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_776[] = { {"blacktriangleright", 18, 0x025B8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_777[] = { {"zfr", 3, 0x1D537, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_779[] = { {"leftrightarrow", 14, 0x02194, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_77A[] = { {"Abreve", 6, 0x00102, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_77F[] = { {"Uarr", 4, 0x0219F, 0}, {"gnE", 3, 0x02269, 0}, {"supmult", 7, 0x02AC2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_781[] = { {"supplus", 7, 0x02AC0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_783[] = { {"nabla", 5, 0x02207, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_787[] = { {"Lang", 4, 0x027EA, 0}, {"laquo", 5, 0x000AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_789[] = { {"larrhk", 6, 0x021A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_78C[] = { {"Bopf", 4, 0x1D539, 0}, {"lowbar", 6, 0x0005F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_78D[] = { {"cup", 3, 0x0222A, 0}, {"dd", 2, 0x02146, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_78E[] = { {"nsce", 4, 0x02AB0, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_790[] = { {"nshortparallel", 14, 0x02226, 0}, {"nsupE", 5, 0x02AC6, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_794[] = { {"OpenCurlyQuote", 14, 0x02018, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_797[] = { {"bsolb", 5, 0x029C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_798[] = { {"DScy", 4, 0x00405, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_79A[] = { {"boxHD", 5, 0x02566, 0}, {"ltrPar", 6, 0x02996, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_79B[] = { {"nscr", 4, 0x1D4C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_79D[] = { {"lEg", 3, 0x02A8B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_79F[] = { {"egrave", 6, 0x000E8, 0}, {"gne", 3, 0x02A88, 0}, {"larrsim", 7, 0x02973, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7A0[] = { {"COPY", 4, 0x000A9, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7A1[] = { {"wopf", 4, 0x1D568, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7A2[] = { {"NotRightTriangleEqual", 21, 0x022ED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7A5[] = { {"robrk", 5, 0x027E7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7A8[] = { {"kfr", 3, 0x1D528, 0}, {"nlsim", 5, 0x02274, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7AA[] = { {"xhArr", 5, 0x027FA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7AB[] = { {"boxHU", 5, 0x02569, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7AC[] = { {"lHar", 4, 0x02962, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7AE[] = { {"Mcy", 3, 0x0041C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7AF[] = { {"ee", 2, 0x02147, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B0[] = { {"nsupe", 5, 0x02289, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B1[] = { {"eg", 2, 0x02A9A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B5[] = { {"trade", 5, 0x02122, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B6[] = { {"el", 2, 0x02A99, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B7[] = { {"nsucceq", 7, 0x02AB0, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7B8[] = { {"langle", 6, 0x027E8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7BA[] = { {"boxHd", 5, 0x02564, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7BB[] = { {"Subset", 6, 0x022D0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7BD[] = { {"DownArrowBar", 12, 0x02913, 0}, {"topbot", 6, 0x02336, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7BE[] = { {"OverBrace", 9, 0x023DE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7BF[] = { {"Eta", 3, 0x00397, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7C0[] = { {"hstrok", 6, 0x00127, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7C1[] = { {"Hacek", 5, 0x002C7, 0}, {"diamond", 7, 0x022C4, 0}, {"isinsv", 6, 0x022F3, 0}, {"rtriltri", 8, 0x029CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7C9[] = { {"nvltrie", 7, 0x022B4, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7CB[] = { {"boxHu", 5, 0x02567, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7CD[] = { {"fpartint", 8, 0x02A0D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7CE[] = { {"Proportional", 12, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7D1[] = { {"NotSuperset", 11, 0x02283, 0x020D2}, {"gE", 2, 0x02267, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7D2[] = { {"scnsim", 6, 0x022E9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7D5[] = { {"uparrow", 7, 0x02191, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7D6[] = { {"ltlarr", 6, 0x02976, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7D9[] = { {"rtimes", 6, 0x022CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7DA[] = { {"ncong", 5, 0x02247, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7DC[] = { {"Oscr", 4, 0x1D4AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7E0[] = { {"vArr", 4, 0x021D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7E2[] = { {"Xopf", 4, 0x1D54F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7E4[] = { {"notinva", 7, 0x02209, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7E5[] = { {"notinvb", 7, 0x022F7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7E6[] = { {"notinvc", 7, 0x022F6, 0}, {"nsqsube", 7, 0x022E2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7EC[] = { {"Tcaron", 6, 0x00164, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7F1[] = { {"ge", 2, 0x02265, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7F3[] = { {"gg", 2, 0x0226B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7F6[] = { {"KJcy", 4, 0x0040C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7F8[] = { {"gl", 2, 0x02277, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7FB[] = { {"dblac", 5, 0x002DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_7FC[] = { {"lAtail", 6, 0x0291B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_800[] = { {"gt", 2, 0x0003E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_802[] = { {"lotimes", 7, 0x02A34, 0}, {"seArr", 5, 0x021D8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_803[] = { {"Lacute", 6, 0x00139, 0}, {"Laplacetrf", 10, 0x02112, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_808[] = { {"uuml", 4, 0x000FC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_809[] = { {"Amacr", 5, 0x00100, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_80A[] = { {"Mfr", 3, 0x1D510, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_810[] = { {"Int", 3, 0x0222C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_811[] = { {"Vvdash", 6, 0x022AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_812[] = { {"Lcedil", 6, 0x0013B, 0}, {"larrlp", 6, 0x021AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_816[] = { {"Larr", 4, 0x0219E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_819[] = { {"CircleTimes", 11, 0x02297, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_81C[] = { {"NotReverseElement", 17, 0x0220C, 0}, {"latail", 6, 0x02919, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_81D[] = { {"ntrianglerighteq", 16, 0x022ED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_821[] = { {"blk12", 5, 0x02592, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_822[] = { {"intlarhk", 8, 0x02A17, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_823[] = { {"blk14", 5, 0x02591, 0}, {"ccupssm", 7, 0x02A50, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_824[] = { {"hercon", 6, 0x022B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_828[] = { {"bigotimes", 9, 0x02A02, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_829[] = { {"amacr", 5, 0x00101, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_82D[] = { {"nrarrc", 6, 0x02933, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_82E[] = { {"ubreve", 6, 0x0016D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_830[] = { {"Yacute", 6, 0x000DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_831[] = { {"ic", 2, 0x02063, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_832[] = { {"escr", 4, 0x0212F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_837[] = { {"ii", 2, 0x02148, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_838[] = { {"DownArrowUpArrow", 16, 0x021F5, 0}, {"nopf", 4, 0x1D55F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_83C[] = { {"in", 2, 0x02208, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_83E[] = { {"bumpE", 5, 0x02AAE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_83F[] = { {"rightharpoonup", 14, 0x021C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_841[] = { {"nrarrw", 6, 0x0219D, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_842[] = { {"it", 2, 0x02062, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_846[] = { {"ncaron", 6, 0x00148, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_84A[] = { {"succnsim", 8, 0x022E9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_84C[] = { {"gammad", 6, 0x003DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_84F[] = { {"yucy", 4, 0x0044E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_850[] = { {"ocy", 3, 0x0043E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_855[] = { {"hybull", 6, 0x02043, 0}, {"rpargt", 6, 0x02994, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_857[] = { {"csube", 5, 0x02AD1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_85B[] = { {"iiota", 5, 0x02129, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_85C[] = { {"nsim", 4, 0x02241, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_85E[] = { {"LeftTriangleEqual", 17, 0x022B4, 0}, {"bumpe", 5, 0x0224F, 0}, {"nearhk", 6, 0x02924, 0}, {"nhpar", 5, 0x02AF2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_861[] = { {"risingdotseq", 12, 0x02253, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_865[] = { {"blk34", 5, 0x02593, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_866[] = { {"LeftTriangle", 12, 0x022B2, 0}, {"vBarv", 5, 0x02AE9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_867[] = { {"AElig", 5, 0x000C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_868[] = { {"DoubleUpDownArrow", 17, 0x021D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_86A[] = { {"cwint", 5, 0x02231, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_86B[] = { {"rtrie", 5, 0x022B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_86C[] = { {"rtrif", 5, 0x025B8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_873[] = { {"Fscr", 4, 0x02131, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_876[] = { {"lE", 2, 0x02266, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_879[] = { {"Oopf", 4, 0x1D546, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_87B[] = { {"spar", 4, 0x02225, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_87E[] = { {"uplus", 5, 0x0228E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_88A[] = { {"sacute", 6, 0x0015B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_88C[] = { {"fltns", 5, 0x025B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_88E[] = { {"rrarr", 5, 0x021C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_892[] = { {"larrpl", 6, 0x02939, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_895[] = { {"ultri", 5, 0x025F8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_896[] = { {"le", 2, 0x02264, 0}, {"xuplus", 6, 0x02A04, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_897[] = { {"ljcy", 4, 0x00459, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_898[] = { {"lg", 2, 0x02276, 0}, {"vsubnE", 6, 0x02ACB, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_899[] = { {"scedil", 6, 0x0015F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_89D[] = { {"ll", 2, 0x0226A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8A5[] = { {"lt", 2, 0x0003C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8AC[] = { {"ofr", 3, 0x1D52C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8B3[] = { {"nexists", 7, 0x02204, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8B6[] = { {"smallsetminus", 13, 0x02216, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8B7[] = { {"InvisibleComma", 14, 0x02063, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8B8[] = { {"dotminus", 8, 0x02238, 0}, {"vsubne", 6, 0x0228A, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8B9[] = { {"iocy", 4, 0x00451, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8BA[] = { {"gsime", 5, 0x02A8E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8BC[] = { {"Rarrtl", 6, 0x02916, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8BD[] = { {"cirmid", 6, 0x02AEF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8C0[] = { {"ominus", 6, 0x02296, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8C1[] = { {"gsiml", 5, 0x02A90, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8C2[] = { {"Prime", 5, 0x02033, 0}, {"mp", 2, 0x02213, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8C4[] = { {"tint", 4, 0x0222D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8C7[] = { {"mu", 2, 0x003BC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8CF[] = { {"dbkarow", 7, 0x0290F, 0}, {"eopf", 4, 0x1D556, 0}, {"ogt", 3, 0x029C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8D0[] = { {"Precedes", 8, 0x0227A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8D3[] = { {"UpTeeArrow", 10, 0x021A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8D6[] = { {"varsupsetneq", 12, 0x0228B, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8D8[] = { {"ne", 2, 0x02260, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8DC[] = { {"ni", 2, 0x0220B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8DD[] = { {"mDDot", 5, 0x0223A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8DE[] = { {"cularrp", 7, 0x0293D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8DF[] = { {"rnmid", 5, 0x02AEE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E0[] = { {"hardcy", 6, 0x0044A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E2[] = { {"prime", 5, 0x02032, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E3[] = { {"Bcy", 3, 0x00411, 0}, {"REG", 3, 0x000AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E7[] = { {"oS", 2, 0x024C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E8[] = { {"nu", 2, 0x003BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8E9[] = { {"ohm", 3, 0x003A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8EB[] = { {"langd", 5, 0x02991, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8F3[] = { {"backprime", 9, 0x02035, 0}, {"esim", 4, 0x02242, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8FB[] = { {"veeeq", 5, 0x0225A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8FE[] = { {"RightCeiling", 12, 0x02309, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_8FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_904[] = { {"eqsim", 5, 0x02242, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_906[] = { {"or", 2, 0x02228, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_907[] = { {"OverParenthesis", 15, 0x023DC, 0}, {"UpperLeftArrow", 14, 0x02196, 0}, {"nleftrightarrow", 15, 0x021AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_909[] = { {"expectation", 11, 0x02130, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_90C[] = { {"coprod", 6, 0x02210, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_90E[] = { {"Qfr", 3, 0x1D514, 0}, {"dArr", 4, 0x021D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_910[] = { {"Fopf", 4, 0x1D53D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_913[] = { {"Cconint", 7, 0x02230, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_916[] = { {"larrtl", 6, 0x021A2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_918[] = { {"Aacute", 6, 0x000C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_919[] = { {"DownLeftRightVector", 19, 0x02950, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_91B[] = { {"circleddash", 11, 0x0229D, 0}, {"thinsp", 6, 0x02009, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_91E[] = { {"Longrightarrow", 14, 0x027F9, 0}, {"pi", 2, 0x003C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_91F[] = { {"hookrightarrow", 14, 0x021AA, 0}, {"rscr", 4, 0x1D4C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_920[] = { {"scE", 3, 0x02AB4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_922[] = { {"pm", 2, 0x000B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_923[] = { {"ZHcy", 4, 0x00416, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_927[] = { {"pr", 2, 0x0227A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_929[] = { {"LongLeftRightArrow", 18, 0x027F7, 0}, {"supset", 6, 0x02283, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_92A[] = { {"UpArrowBar", 10, 0x02912, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_92C[] = { {"Utilde", 6, 0x00168, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_92E[] = { {"xlArr", 5, 0x027F8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_930[] = { {"DoubleUpArrow", 13, 0x021D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_936[] = { {"alefsym", 7, 0x02135, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_939[] = { {"Scirc", 5, 0x0015C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_93B[] = { {"xotime", 6, 0x02A02, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_93F[] = { {"Bfr", 3, 0x1D505, 0}, {"rdca", 4, 0x02937, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_940[] = { {"sce", 3, 0x02AB0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_945[] = { {"Nacute", 6, 0x00143, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_947[] = { {"amalg", 5, 0x02A3F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_94D[] = { {"UpDownArrow", 11, 0x02195, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_94F[] = { {"EqualTilde", 10, 0x02242, 0}, {"boxUL", 5, 0x0255D, 0}, {"oslash", 6, 0x000F8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_950[] = { {"lnap", 4, 0x02A89, 0}, {"thorn", 5, 0x000FE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_952[] = { {"ssmile", 6, 0x02323, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_953[] = { {"ndash", 5, 0x02013, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_954[] = { {"Ncedil", 6, 0x00145, 0}, {"scy", 3, 0x00441, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_955[] = { {"boxUR", 5, 0x0255A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_956[] = { {"Aring", 5, 0x000C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_959[] = { {"scirc", 5, 0x0015D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_95B[] = { {"ccaron", 6, 0x0010D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_95D[] = { {"dotsquare", 9, 0x022A1, 0}, {"nshortmid", 9, 0x02224, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_95F[] = { {"rsquo", 5, 0x02019, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_960[] = { {"Sscr", 4, 0x1D4AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_963[] = { {"bigwedge", 8, 0x022C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_964[] = { {"Bernoullis", 10, 0x0212C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_969[] = { {"harrw", 5, 0x021AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_96C[] = { {"SquareSubset", 12, 0x0228F, 0}, {"boxVH", 5, 0x0256C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_96F[] = { {"boxUl", 5, 0x0255C, 0}, {"rx", 2, 0x0211E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_970[] = { {"boxVL", 5, 0x02563, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_974[] = { {"olt", 3, 0x029C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_975[] = { {"boxUr", 5, 0x02559, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_976[] = { {"aring", 5, 0x000E5, 0}, {"boxVR", 5, 0x02560, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_97B[] = { {"sc", 2, 0x0227B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_97C[] = { {"NestedGreaterGreater", 20, 0x0226B, 0}, {"oast", 4, 0x0229B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_97F[] = { {"star", 4, 0x02606, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_981[] = { {"LeftTeeVector", 13, 0x0295A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_983[] = { {"bigsqcup", 8, 0x02A06, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_985[] = { {"dcy", 3, 0x00434, 0}, {"preceq", 6, 0x02AAF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_986[] = { {"otilde", 6, 0x000F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_988[] = { {"luruhar", 7, 0x02966, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_98C[] = { {"boxVh", 5, 0x0256B, 0}, {"capand", 6, 0x02A44, 0}, {"yuml", 4, 0x000FF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_98D[] = { {"Updownarrow", 11, 0x021D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_98F[] = { {"TildeEqual", 10, 0x02243, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_990[] = { {"boxVl", 5, 0x02562, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_996[] = { {"boxVr", 5, 0x0255F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_997[] = { {"HorizontalLine", 14, 0x02500, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_99B[] = { {"xmap", 4, 0x027FC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_99C[] = { {"sigmaf", 6, 0x003C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_99E[] = { {"EmptySmallSquare", 16, 0x025FB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_99F[] = { {"dzcy", 4, 0x0045F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9A0[] = { {"cups", 4, 0x0222A, 0x0FE00}, {"zwj", 3, 0x0200D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9A1[] = { {"beta", 4, 0x003B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9A6[] = { {"supsim", 6, 0x02AC8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9A8[] = { {"beth", 4, 0x02136, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9AA[] = { {"Iukcy", 5, 0x00406, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9AC[] = { {"eparsl", 6, 0x029E3, 0}, {"sigmav", 6, 0x003C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9B0[] = { {"lhard", 5, 0x021BD, 0}, {"sfr", 3, 0x1D530, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9B4[] = { {"nsqsupe", 7, 0x022E3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9B5[] = { {"Jsercy", 6, 0x00408, 0}, {"deg", 3, 0x000B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9B6[] = { {"Ucy", 3, 0x00423, 0}, {"iscr", 4, 0x1D4BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9B7[] = { {"efDot", 5, 0x02252, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9BB[] = { {"uhblk", 5, 0x02580, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9BC[] = { {"ropf", 4, 0x1D563, 0}, {"vprop", 5, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9BD[] = { {"isinE", 5, 0x022F9, 0}, {"raemptyv", 8, 0x029B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9C1[] = { {"lharu", 5, 0x021BC, 0}, {"ncongdot", 8, 0x02A6D, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9C2[] = { {"subnE", 5, 0x02ACB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9C3[] = { {"ngsim", 5, 0x02275, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9C5[] = { {"starf", 5, 0x02605, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9C9[] = { {"Ograve", 6, 0x000D2, 0}, {"hksearow", 8, 0x02925, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9CA[] = { {"iukcy", 5, 0x00456, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9CC[] = { {"uacute", 6, 0x000FA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9CF[] = { {"asymp", 5, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9D5[] = { {"lneq", 4, 0x02A87, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9D6[] = { {"Otimes", 6, 0x02A37, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9DA[] = { {"NotTildeTilde", 13, 0x02249, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9DB[] = { {"Integral", 8, 0x0222B, 0}, {"rbrke", 5, 0x0298C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9DD[] = { {"nsub", 4, 0x02284, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9DE[] = { {"rlhar", 5, 0x021CC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9E1[] = { {"dfr", 3, 0x1D521, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9E2[] = { {"subne", 5, 0x0228A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9E5[] = { {"varnothing", 10, 0x02205, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9E7[] = { {"Fcy", 3, 0x00424, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9E9[] = { {"DoubleLeftTee", 13, 0x02AE4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9EB[] = { {"isins", 5, 0x022F4, 0}, {"nsup", 4, 0x02285, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9ED[] = { {"circlearrowleft", 15, 0x021BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9EE[] = { {"isinv", 5, 0x02208, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9EF[] = { {"IEcy", 4, 0x00415, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F0[] = { {"conint", 6, 0x0222E, 0}, {"vBar", 4, 0x02AE8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F1[] = { {"edot", 4, 0x00117, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F2[] = { {"Kappa", 5, 0x0039A, 0}, {"MediumSpace", 11, 0x0205F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F3[] = { {"lbrksld", 7, 0x0298F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F4[] = { {"sect", 4, 0x000A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F5[] = { {"nldr", 4, 0x02025, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F7[] = { {"Jscr", 4, 0x1D4A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9F9[] = { {"shy", 3, 0x000AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9FA[] = { {"ulcrop", 6, 0x0230F, 0}, {"veebar", 6, 0x022BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_9FD[] = { {"Sopf", 4, 0x1D54A, 0}, {"cuwed", 5, 0x022CF, 0}, {"rAarr", 5, 0x021DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A01[] = { {"erarr", 5, 0x02971, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A04[] = { {"lbrkslu", 7, 0x0298D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A05[] = { {"NotSucceeds", 11, 0x02281, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A06[] = { {"nsccue", 6, 0x022E1, 0}, {"subrarr", 7, 0x02979, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A08[] = { {"looparrowright", 14, 0x021AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A0C[] = { {"wp", 2, 0x02118, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A0D[] = { {"Emacr", 5, 0x00112, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A0E[] = { {"sim", 3, 0x0223C, 0}, {"wr", 2, 0x02240, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A10[] = { {"Udblac", 6, 0x00170, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A12[] = { {"Ufr", 3, 0x1D518, 0}, {"kappa", 5, 0x003BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A14[] = { {"notindot", 8, 0x022F5, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A15[] = { {"nleq", 4, 0x02270, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A16[] = { {"NestedLessLess", 14, 0x0226A, 0}, {"square", 6, 0x025A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A17[] = { {"nles", 4, 0x02A7D, 0x00338}, {"squarf", 6, 0x025AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A21[] = { {"order", 5, 0x02134, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A23[] = { {"igrave", 6, 0x000EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A24[] = { {"precneqq", 8, 0x02AB5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A25[] = { {"csupe", 5, 0x02AD2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A26[] = { {"xi", 2, 0x003BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A28[] = { {"NotHumpEqual", 12, 0x0224F, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A2A[] = { {"ord", 3, 0x02A5D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A2D[] = { {"emacr", 5, 0x00113, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A30[] = { {"nwnear", 6, 0x02927, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A32[] = { {"nprcue", 6, 0x022E0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A36[] = { {"NotExists", 9, 0x02204, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A37[] = { {"die", 3, 0x000A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A39[] = { {"ddotseq", 7, 0x02A77, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A3B[] = { {"Dashv", 5, 0x02AE4, 0}, {"Ucirc", 5, 0x000DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A3C[] = { {"orv", 3, 0x02A5B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A3D[] = { {"Because", 7, 0x02235, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A41[] = { {"kgreen", 6, 0x00138, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A43[] = { {"Ffr", 3, 0x1D509, 0}, {"LeftVector", 10, 0x021BC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A44[] = { {"lstrok", 6, 0x00142, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A45[] = { {"twixt", 5, 0x0226C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A48[] = { {"compfn", 6, 0x02218, 0}, {"div", 3, 0x000F7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A4F[] = { {"drcrop", 6, 0x0230C, 0}, {"shortmid", 8, 0x02223, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A53[] = { {"iopf", 4, 0x1D55A, 0}, {"triangledown", 12, 0x025BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A54[] = { {"IJlig", 5, 0x00132, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A56[] = { {"Sigma", 5, 0x003A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A57[] = { {"equivDD", 7, 0x02A78, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A5A[] = { {"Cacute", 6, 0x00106, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A5B[] = { {"dashv", 5, 0x022A3, 0}, {"ucirc", 5, 0x000FB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A61[] = { {"gneqq", 5, 0x02269, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A62[] = { {"gvertneqq", 9, 0x02269, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A63[] = { {"RightDownVectorBar", 18, 0x02955, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A64[] = { {"NotLessLess", 11, 0x0226A, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A69[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A6A[] = { {"odblac", 6, 0x00151, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A6B[] = { {"mstpos", 6, 0x0223E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A6D[] = { {"cemptyv", 7, 0x029B2, 0}, {"rarrap", 6, 0x02975, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A6F[] = { {"rmoust", 6, 0x023B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A70[] = { {"elsdot", 6, 0x02A97, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A76[] = { {"sigma", 5, 0x003C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A78[] = { {"Implies", 7, 0x021D2, 0}, {"isin", 4, 0x02208, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A7A[] = { {"bottom", 6, 0x022A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A7E[] = { {"ShortRightArrow", 15, 0x02192, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A81[] = { {"cupcap", 6, 0x02A46, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A82[] = { {"NotSquareSuperset", 17, 0x02290, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A84[] = { {"LeftArrowRightArrow", 19, 0x021C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A85[] = { {"FilledVerySmallSquare", 21, 0x025AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A86[] = { {"LeftUpTeeVector", 15, 0x02960, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A89[] = { {"DoubleRightArrow", 16, 0x021D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A8D[] = { {"raquo", 5, 0x000BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A8E[] = { {"Ascr", 4, 0x1D49C, 0}, {"ReverseUpEquilibrium", 20, 0x0296F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A92[] = { {"hArr", 4, 0x021D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A94[] = { {"Jopf", 4, 0x1D541, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A96[] = { {"npar", 4, 0x02226, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A98[] = { {"SupersetEqual", 13, 0x02287, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A99[] = { {"ffllig", 6, 0x0FB04, 0}, {"smt", 3, 0x02AAA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A9A[] = { {"twoheadrightarrow", 17, 0x021A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A9D[] = { {"ecaron", 6, 0x0011B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_A9F[] = { {"NotRightTriangleBar", 19, 0x029D0, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AA3[] = { {"apid", 4, 0x0224B, 0}, {"vscr", 4, 0x1D4CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AA4[] = { {"supdot", 6, 0x02ABE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AA5[] = { {"colone", 6, 0x02254, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AA7[] = { {"dwangle", 7, 0x029A6, 0}, {"shchcy", 6, 0x00449, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AAC[] = { {"ltdot", 5, 0x022D6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AB2[] = { {"downharpoonright", 16, 0x021C2, 0}, {"gjcy", 4, 0x00453, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AB4[] = { {"wfr", 3, 0x1D534, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AB5[] = { {"rfisht", 6, 0x0297D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ABA[] = { {"Ycy", 3, 0x0042B, 0}, {"swarrow", 7, 0x02199, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC0[] = { {"nharr", 5, 0x021AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC4[] = { {"frac12", 6, 0x000BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC5[] = { {"frac13", 6, 0x02153, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC6[] = { {"frac14", 6, 0x000BC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC7[] = { {"GreaterEqual", 12, 0x02265, 0}, {"frac15", 6, 0x02155, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AC8[] = { {"Gamma", 5, 0x00393, 0}, {"frac16", 6, 0x02159, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ACA[] = { {"dzigrarr", 8, 0x027FF, 0}, {"frac18", 6, 0x0215B, 0}, {"rcaron", 6, 0x00159, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ACC[] = { {"DownRightTeeVector", 18, 0x0295F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ACF[] = { {"nvrtrie", 7, 0x022B5, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AD2[] = { {"iota", 4, 0x003B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AD3[] = { {"sol", 3, 0x0002F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AD4[] = { {"rbrace", 6, 0x0007D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ADA[] = { {"rbrack", 6, 0x0005D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ADD[] = { {"rsqb", 4, 0x0005D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ADF[] = { {"oint", 4, 0x0222E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE4[] = { {"Wscr", 4, 0x1D4B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE5[] = { {"hfr", 3, 0x1D525, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE6[] = { {"frac23", 6, 0x02154, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE7[] = { {"dlcorn", 6, 0x0231E, 0}, {"verbar", 6, 0x0007C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE8[] = { {"frac25", 6, 0x02156, 0}, {"gamma", 5, 0x003B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AE9[] = { {"nVDash", 6, 0x022AF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AEB[] = { {"Jcy", 3, 0x00419, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AF5[] = { {"nwarrow", 7, 0x02196, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AF6[] = { {"OverBar", 7, 0x0203E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AF7[] = { {"rightsquigarrow", 15, 0x0219D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AFA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AFD[] = { {"sqcap", 5, 0x02293, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_AFE[] = { {"pertenk", 7, 0x02031, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B08[] = { {"PrecedesEqual", 13, 0x02AAF, 0}, {"frac34", 6, 0x000BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B09[] = { {"Therefore", 9, 0x02234, 0}, {"frac35", 6, 0x02157, 0}, {"nvDash", 6, 0x022AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B0A[] = { {"odsold", 6, 0x029BC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B0C[] = { {"dot", 3, 0x002D9, 0}, {"frac38", 6, 0x0215C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B10[] = { {"sqcaps", 6, 0x02293, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B11[] = { {"ZeroWidthSpace", 14, 0x0200B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B15[] = { {"rarrfs", 6, 0x0291E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B16[] = { {"Yfr", 3, 0x1D51C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B1E[] = { {"CircleDot", 9, 0x02299, 0}, {"gtcir", 5, 0x02A7A, 0}, {"squ", 3, 0x025A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B1F[] = { {"angmsd", 6, 0x02221, 0}, {"nsubseteq", 9, 0x02288, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B23[] = { {"iprod", 5, 0x02A3C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B24[] = { {"bprime", 6, 0x02035, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B27[] = { {"supsub", 6, 0x02AD4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B29[] = { {"SquareSupersetEqual", 19, 0x02292, 0}, {"therefore", 9, 0x02234, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2A[] = { {"frac45", 6, 0x02158, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2B[] = { {"Aopf", 4, 0x1D538, 0}, {"NotGreaterFullEqual", 19, 0x02267, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2C[] = { {"Tstrok", 6, 0x00166, 0}, {"rightleftarrows", 15, 0x021C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2D[] = { {"Fouriertrf", 10, 0x02131, 0}, {"epar", 4, 0x022D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2E[] = { {"omid", 4, 0x029B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B2F[] = { {"OpenCurlyDoubleQuote", 20, 0x0201C, 0}, {"dagger", 6, 0x02020, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B33[] = { {"semi", 4, 0x0003B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B35[] = { {"supsup", 6, 0x02AD6, 0}, {"zeetrf", 6, 0x02128, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B36[] = { {"DifferentialD", 13, 0x02146, 0}, {"topcir", 6, 0x02AF1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B3A[] = { {"mscr", 4, 0x1D4C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B3D[] = { {"Wcirc", 5, 0x00174, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B3E[] = { {"boxdL", 5, 0x02555, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B40[] = { {"Gbreve", 6, 0x0011E, 0}, {"vopf", 4, 0x1D567, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B42[] = { {"lap", 3, 0x02A85, 0}, {"llarr", 5, 0x021C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B44[] = { {"boxdR", 5, 0x02552, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B46[] = { {"RightAngleBracket", 17, 0x027E9, 0}, {"lat", 3, 0x02AAB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B47[] = { {"Jfr", 3, 0x1D50D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B4C[] = { {"frac56", 6, 0x0215A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B4E[] = { {"frac58", 6, 0x0215D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B4F[] = { {"rarrhk", 6, 0x021AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B50[] = { {"lesdot", 6, 0x02A7F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B51[] = { {"ApplyFunction", 13, 0x02061, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B52[] = { {"NotGreaterTilde", 15, 0x02275, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B53[] = { {"Cedilla", 7, 0x000B8, 0}, {"curvearrowright", 15, 0x021B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B56[] = { {"rdsh", 4, 0x021B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B58[] = { {"larrb", 5, 0x021E4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B5C[] = { {"vrtri", 5, 0x022B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B5D[] = { {"nequiv", 6, 0x02262, 0}, {"wcirc", 5, 0x00175, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B5E[] = { {"boxdl", 5, 0x02510, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B63[] = { {"DoubleDownArrow", 15, 0x021D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B64[] = { {"boxdr", 5, 0x0250C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B67[] = { {"pluscir", 7, 0x02A22, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B69[] = { {"longmapsto", 10, 0x027FC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B6B[] = { {"gnap", 4, 0x02A8A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B6D[] = { {"bigodot", 7, 0x02A00, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B72[] = { {"thickapprox", 11, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B73[] = { {"DotDot", 6, 0x020DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B77[] = { {"incare", 6, 0x02105, 0}, {"rarrbfs", 7, 0x02920, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B78[] = { {"apos", 4, 0x00027, 0}, {"tbrk", 4, 0x023B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B7A[] = { {"grave", 5, 0x00060, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B7B[] = { {"Nscr", 4, 0x1D4A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B7E[] = { {"rangle", 6, 0x027E9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B7F[] = { {"uArr", 4, 0x021D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B81[] = { {"Wopf", 4, 0x1D54E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B82[] = { {"doteq", 5, 0x02250, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B87[] = { {"times", 5, 0x000D7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B8D[] = { {"fflig", 5, 0x0FB00, 0}, {"lcy", 3, 0x0043B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B8F[] = { {"sub", 3, 0x02282, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B90[] = { {"frac78", 6, 0x0215E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B94[] = { {"xrarr", 5, 0x027F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B98[] = { {"UpArrowDownArrow", 16, 0x021C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B99[] = { {"bbrktbrk", 8, 0x023B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B9A[] = { {"abreve", 6, 0x00103, 0}, {"lsaquo", 6, 0x02039, 0}, {"sum", 3, 0x02211, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B9C[] = { {"Eacute", 6, 0x000C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_B9D[] = { {"sup", 3, 0x02283, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BA5[] = { {"ContourIntegral", 15, 0x0222E, 0}, {"DiacriticalDot", 14, 0x002D9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BA9[] = { {"trisb", 5, 0x029CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BAE[] = { {"Hcirc", 5, 0x00124, 0}, {"lceil", 5, 0x02308, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BB2[] = { {"Zcaron", 6, 0x0017D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BB5[] = { {"looparrowleft", 13, 0x021AB, 0}, {"oelig", 5, 0x00153, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BB6[] = { {"LessSlantEqual", 14, 0x02A7D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BB7[] = { {"NegativeThinSpace", 17, 0x0200B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BBA[] = { {"boxhD", 5, 0x02565, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BBC[] = { {"omicron", 7, 0x003BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BBD[] = { {"leg", 3, 0x022DA, 0}, {"rightthreetimes", 15, 0x022CC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BBF[] = { {"NotSucceedsSlantEqual", 21, 0x022E1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC1[] = { {"angmsdaa", 8, 0x029A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC2[] = { {"angmsdab", 8, 0x029A9, 0}, {"rAtail", 6, 0x0291C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC3[] = { {"angmsdac", 8, 0x029AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC4[] = { {"angmsdad", 8, 0x029AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC5[] = { {"angmsdae", 8, 0x029AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC6[] = { {"angmsdaf", 8, 0x029AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC7[] = { {"angmsdag", 8, 0x029AE, 0}, {"leq", 3, 0x02264, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC8[] = { {"angmsdah", 8, 0x029AF, 0}, {"solbar", 6, 0x0233F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BC9[] = { {"Racute", 6, 0x00154, 0}, {"les", 3, 0x02A7D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BCB[] = { {"boxhU", 5, 0x02568, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BCE[] = { {"hcirc", 5, 0x00125, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BD1[] = { {"dscr", 4, 0x1D4B9, 0}, {"smashp", 6, 0x02A33, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BD7[] = { {"mopf", 4, 0x1D55E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BD8[] = { {"Rcedil", 6, 0x00156, 0}, {"dscy", 4, 0x00455, 0}, {"prap", 4, 0x02AB7, 0}, {"rarrlp", 6, 0x021AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BD9[] = { {"Aogon", 5, 0x00104, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BDA[] = { {"boxhd", 5, 0x0252C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BDB[] = { {"subset", 6, 0x02282, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BDD[] = { {"lgE", 3, 0x02A91, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BDF[] = { {"epsilon", 7, 0x003B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE1[] = { {"curarrm", 7, 0x0293C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE2[] = { {"ratail", 6, 0x0291A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE4[] = { {"DoubleLongLeftRightArrow", 24, 0x027FA, 0}, {"rhov", 4, 0x003F1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE7[] = { {"LeftDoubleBracket", 17, 0x027E6, 0}, {"Lleftarrow", 10, 0x021DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BE9[] = { {"lfr", 3, 0x1D529, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BEA[] = { {"minusdu", 7, 0x02A2A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BEB[] = { {"boxhu", 5, 0x02534, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BEF[] = { {"Ncy", 3, 0x0041D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF0[] = { {"gneq", 4, 0x02A88, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF1[] = { {"rangd", 5, 0x02992, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF2[] = { {"range", 5, 0x029A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF7[] = { {"NotSucceedsTilde", 16, 0x0227F, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BF9[] = { {"aogon", 5, 0x00105, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BFA[] = { {"NotGreaterSlantEqual", 20, 0x02A7E, 0x00338}, {"NotSquareSupersetEqual", 22, 0x022E3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_BFC[] = { {"profsurf", 8, 0x02313, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C02[] = { {"wedgeq", 6, 0x02259, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C0B[] = { {"Alpha", 5, 0x00391, 0}, {"DiacriticalDoubleAcute", 22, 0x002DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C0C[] = { {"lltri", 5, 0x025FA, 0}, {"tcaron", 6, 0x00165, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C11[] = { {"Imacr", 5, 0x0012A, 0}, {"subseteq", 8, 0x02286, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C12[] = { {"Escr", 4, 0x02130, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C16[] = { {"lArr", 4, 0x021D0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C18[] = { {"Nopf", 4, 0x02115, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C1A[] = { {"rpar", 4, 0x00029, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C1D[] = { {"divonx", 6, 0x022C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C1E[] = { {"olcir", 5, 0x029BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C23[] = { {"lacute", 6, 0x0013A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C27[] = { {"zscr", 4, 0x1D4CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C2B[] = { {"alpha", 5, 0x003B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C31[] = { {"imacr", 5, 0x0012B, 0}, {"vellip", 6, 0x022EE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C32[] = { {"lcedil", 6, 0x0013C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C33[] = { {"sime", 4, 0x02243, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C34[] = { {"empty", 5, 0x02205, 0}, {"imped", 5, 0x001B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C35[] = { {"simg", 4, 0x02A9E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C36[] = { {"kjcy", 4, 0x0045C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C3A[] = { {"siml", 4, 0x02A9D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C3E[] = { {"LessEqualGreater", 16, 0x022DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C3F[] = { {"Ycirc", 5, 0x00176, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C40[] = { {"RoundImplies", 12, 0x02970, 0}, {"nvrArr", 6, 0x02903, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C43[] = { {"check", 5, 0x02713, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C44[] = { {"nlarr", 5, 0x0219A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C46[] = { {"middot", 6, 0x000B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C48[] = { {"par", 3, 0x02225, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C4A[] = { {"NotGreaterGreater", 17, 0x0226B, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C4B[] = { {"Nfr", 3, 0x1D511, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C4F[] = { {"nwArr", 5, 0x021D6, 0}, {"prec", 4, 0x0227A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C50[] = { {"Barv", 4, 0x02AE7, 0}, {"yacute", 6, 0x000FD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C54[] = { {"DoubleLeftRightArrow", 20, 0x021D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C58[] = { {"Coproduct", 9, 0x02210, 0}, {"rarrpl", 6, 0x02945, 0}, {"subsim", 6, 0x02AC7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C5A[] = { {"ntgl", 4, 0x02279, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C5B[] = { {"LeftTriangleBar", 15, 0x029CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C5F[] = { {"ycirc", 5, 0x00177, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C69[] = { {"doteqdot", 8, 0x02251, 0}, {"nang", 4, 0x02220, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C6B[] = { {"bigcap", 6, 0x022C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C6C[] = { {"CHcy", 4, 0x00427, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C6E[] = { {"dopf", 4, 0x1D555, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C72[] = { {"inodot", 6, 0x00131, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C76[] = { {"nvHarr", 6, 0x02904, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C77[] = { {"laemptyv", 8, 0x029B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C78[] = { {"bigcirc", 7, 0x025EF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C7A[] = { {"scnap", 5, 0x02ABA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C7B[] = { {"DownLeftVector", 14, 0x021BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C80[] = { {"race", 4, 0x0223D, 0x00331}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C82[] = { {"vartriangleright", 16, 0x022B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C89[] = { {"napE", 4, 0x02A70, 0x00338}, {"supedot", 7, 0x02AC4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C8E[] = { {"acE", 3, 0x0223E, 0x00333}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C91[] = { {"pcy", 3, 0x0043F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C93[] = { {"qprime", 6, 0x02057, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C94[] = { {"RightTeeVector", 14, 0x0295B, 0}, {"curlyvee", 8, 0x022CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C95[] = { {"swarhk", 6, 0x02926, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_C98[] = { {"Atilde", 6, 0x000C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CA6[] = { {"bbrk", 4, 0x023B5, 0}, {"prnap", 5, 0x02AB9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CA8[] = { {"image", 5, 0x02111, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CA9[] = { {"sext", 4, 0x02736, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CAA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CAC[] = { {"NotLeftTriangleBar", 18, 0x029CF, 0x00338}, {"epsiv", 5, 0x003F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CAD[] = { {"CenterDot", 9, 0x000B7, 0}, {"acd", 3, 0x0223F, 0}, {"upuparrows", 10, 0x021C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CAF[] = { {"Eopf", 4, 0x1D53C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CB0[] = { {"Jcirc", 5, 0x00134, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CB2[] = { {"smid", 4, 0x02223, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CB4[] = { {"bull", 4, 0x02022, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CB6[] = { {"rhard", 5, 0x021C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CB7[] = { {"nsupset", 7, 0x02283, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CBA[] = { {"npre", 4, 0x02AAF, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CBE[] = { {"qscr", 4, 0x1D4C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC2[] = { {"acy", 3, 0x00430, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC4[] = { {"lnE", 3, 0x02268, 0}, {"zopf", 4, 0x1D56B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC7[] = { {"rharu", 5, 0x021C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC8[] = { {"kappav", 6, 0x003F0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CC9[] = { {"timesb", 6, 0x022A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CCB[] = { {"iiiint", 6, 0x02A0C, 0}, {"timesd", 6, 0x02A30, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CD0[] = { {"jcirc", 5, 0x00135, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CD2[] = { {"nsimeq", 6, 0x02244, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CD3[] = { {"Esim", 4, 0x02A73, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CD9[] = { {"Cap", 3, 0x022D2, 0}, {"bump", 4, 0x0224E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CDA[] = { {"lvnE", 4, 0x02268, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CDC[] = { {"rarrtl", 6, 0x021A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CE4[] = { {"lne", 3, 0x02A87, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CE6[] = { {"commat", 6, 0x00040, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CE8[] = { {"hslash", 6, 0x0210F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CE9[] = { {"lthree", 6, 0x022CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CED[] = { {"Gcedil", 6, 0x00122, 0}, {"pfr", 3, 0x1D52D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CF1[] = { {"RightTriangleEqual", 18, 0x022B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CF2[] = { {"ngeqslant", 9, 0x02A7E, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CF3[] = { {"Rcy", 3, 0x00420, 0}, {"gimel", 5, 0x02137, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CF4[] = { {"curarr", 6, 0x021B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CFA[] = { {"ntlg", 4, 0x02278, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_CFF[] = { {"Rscr", 4, 0x0211B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D00[] = { {"urcrop", 6, 0x0230E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D06[] = { {"Poincareplane", 13, 0x0210C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D07[] = { {"NoBreak", 7, 0x02060, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D0B[] = { {"lcub", 4, 0x0007B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D0E[] = { {"nltri", 5, 0x022EA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D10[] = { {"blacktriangledown", 17, 0x025BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D11[] = { {"fjlig", 5, 0x00066, 0x0006A}, {"percnt", 6, 0x00025, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D12[] = { {"rightharpoondown", 16, 0x021C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D13[] = { {"LeftAngleBracket", 16, 0x027E8, 0}, {"npreceq", 7, 0x02AAF, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D15[] = { {"cupcup", 6, 0x02A4A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D18[] = { {"LeftVectorBar", 13, 0x02952, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D19[] = { {"NJcy", 4, 0x0040A, 0}, {"triangleright", 13, 0x025B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D1A[] = { {"Tcedil", 6, 0x00162, 0}, {"loz", 3, 0x025CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D1E[] = { {"afr", 3, 0x1D51E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D1F[] = { {"NotLessTilde", 12, 0x02274, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D20[] = { {"NotElement", 10, 0x02209, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D22[] = { {"NotHumpDownHump", 15, 0x0224E, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D24[] = { {"SquareSubsetEqual", 17, 0x02291, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D26[] = { {"nleqq", 5, 0x02266, 0x00338}, {"phi", 3, 0x003C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D2A[] = { {"NotRightTriangle", 16, 0x022EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D32[] = { {"lhblk", 5, 0x02584, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D34[] = { {"caret", 5, 0x02041, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D35[] = { {"bsemi", 5, 0x0204F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D38[] = { {"aacute", 6, 0x000E1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D39[] = { {"mapsto", 6, 0x021A6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D3A[] = { {"Congruent", 9, 0x02261, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D3B[] = { {"Vdash", 5, 0x022A9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D3E[] = { {"longrightarrow", 14, 0x027F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D42[] = { {"iinfin", 6, 0x029DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D44[] = { {"EmptyVerySmallSquare", 20, 0x025AB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D49[] = { {"real", 4, 0x0211C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D4C[] = { {"SucceedsEqual", 13, 0x02AB0, 0}, {"utilde", 6, 0x00169, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D4F[] = { {"Rfr", 3, 0x0211C, 0}, {"tau", 3, 0x003C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D51[] = { {"Wedge", 5, 0x022C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D54[] = { {"piv", 3, 0x003D6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D55[] = { {"hscr", 4, 0x1D4BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D56[] = { {"subdot", 6, 0x02ABD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D57[] = { {"dsol", 4, 0x029F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D5A[] = { {"prnE", 4, 0x02AB5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D5B[] = { {"qopf", 4, 0x1D562, 0}, {"vdash", 5, 0x022A2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D5F[] = { {"Star", 4, 0x022C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D63[] = { {"sqsupseteq", 10, 0x02292, 0}, {"zhcy", 4, 0x00436, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D65[] = { {"nacute", 6, 0x00144, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D69[] = { {"lessgtr", 7, 0x02276, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D6A[] = { {"nless", 5, 0x0226E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D6C[] = { {"RightTeeArrow", 13, 0x021A6, 0}, {"Yuml", 4, 0x00178, 0}, {"target", 6, 0x02316, 0}, {"upharpoonleft", 13, 0x021BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D6F[] = { {"between", 7, 0x0226C, 0}, {"boxuL", 5, 0x0255B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D70[] = { {"TSHcy", 5, 0x0040B, 0}, {"lrm", 3, 0x0200E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D71[] = { {"excl", 4, 0x00021, 0}, {"hyphen", 6, 0x02010, 0}, {"mlcp", 4, 0x02ADB, 0}, {"wedge", 5, 0x02227, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D74[] = { {"ncedil", 6, 0x00146, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D75[] = { {"boxuR", 5, 0x02558, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D76[] = { {"Not", 3, 0x02AEC, 0}, {"epsi", 4, 0x003B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D7C[] = { {"disin", 5, 0x022F2, 0}, {"nRightarrow", 11, 0x021CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D7D[] = { {"cylcty", 6, 0x0232D, 0}, {"neArr", 5, 0x021D7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D7E[] = { {"prnsim", 6, 0x022E8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D80[] = { {"Cfr", 3, 0x0212D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D81[] = { {"Beta", 4, 0x00392, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D85[] = { {"leftarrowtail", 13, 0x021A2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D87[] = { {"parsl", 5, 0x02AFD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D89[] = { {"xwedge", 6, 0x022C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D8A[] = { {"olcross", 7, 0x029BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D8C[] = { {"boxvH", 5, 0x0256A, 0}, {"lsh", 3, 0x021B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D8D[] = { {"circledR", 8, 0x000AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D8E[] = { {"Rho", 3, 0x003A1, 0}, {"circledS", 8, 0x024C8, 0}, {"cupor", 5, 0x02A45, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D8F[] = { {"Ugrave", 6, 0x000D9, 0}, {"boxul", 5, 0x02518, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D90[] = { {"boxvL", 5, 0x02561, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D91[] = { {"sqcup", 5, 0x02294, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D93[] = { {"rect", 4, 0x025AD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D94[] = { {"mldr", 4, 0x02026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D95[] = { {"boxur", 5, 0x02514, 0}, {"digamma", 7, 0x003DD, 0}, {"tcy", 3, 0x00442, 0}, {"urcorner", 8, 0x0231D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D96[] = { {"DoubleLeftArrow", 15, 0x021D0, 0}, {"Iscr", 4, 0x02110, 0}, {"boxvR", 5, 0x0255E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D98[] = { {"ulcorn", 6, 0x0231C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D9A[] = { {"prod", 4, 0x0220F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_D9C[] = { {"Ropf", 4, 0x0211D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DA0[] = { {"rmoustache", 10, 0x023B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DA5[] = { {"NegativeMediumSpace", 19, 0x0200B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DA6[] = { {"prop", 4, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DA8[] = { {"TScy", 4, 0x00426, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DA9[] = { {"xsqcup", 6, 0x02A06, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DAC[] = { {"bemptyv", 7, 0x029B0, 0}, {"boxvh", 5, 0x0253C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB0[] = { {"boxvl", 5, 0x02524, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB3[] = { {"NotTildeFullEqual", 17, 0x02247, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB4[] = { {"subE", 4, 0x02AC5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB6[] = { {"boxvr", 5, 0x0251C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB7[] = { {"bigvee", 6, 0x022C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DB9[] = { {"Chi", 3, 0x003A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DBC[] = { {"circeq", 6, 0x02257, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DBE[] = { {"emsp13", 6, 0x02004, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DBF[] = { {"emsp14", 6, 0x02005, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DC2[] = { {"ouml", 4, 0x000F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DC3[] = { {"RightArrowBar", 13, 0x021E5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DC6[] = { {"ecy", 3, 0x0044D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DC8[] = { {"succneqq", 8, 0x02AB6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DCA[] = { {"npart", 5, 0x02202, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DCF[] = { {"Element", 7, 0x02208, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD1[] = { {"Edot", 4, 0x00116, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD3[] = { {"RightUpDownVector", 17, 0x0294F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD4[] = { {"sube", 4, 0x02286, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD5[] = { {"jsercy", 6, 0x00458, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD7[] = { {"varrho", 6, 0x003F1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DD9[] = { {"subsub", 6, 0x02AD5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DDC[] = { {"Dcaron", 6, 0x0010E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DDD[] = { {"Eogon", 5, 0x00118, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DE4[] = { {"geqslant", 8, 0x02A7E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DE6[] = { {"rdldhar", 7, 0x02969, 0}, {"zdot", 4, 0x0017C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DE7[] = { {"subsup", 6, 0x02AD3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DE9[] = { {"ograve", 6, 0x000F2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DEB[] = { {"ReverseElement", 14, 0x0220B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DED[] = { {"drcorn", 6, 0x0231F, 0}, {"rang", 4, 0x027E9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF1[] = { {"tfr", 3, 0x1D531, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF2[] = { {"hopf", 4, 0x1D559, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF3[] = { {"succ", 4, 0x0227B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF6[] = { {"otimes", 6, 0x02297, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF7[] = { {"Vcy", 3, 0x00412, 0}, {"ltquest", 7, 0x02A7B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DF9[] = { {"lozenge", 7, 0x025CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DFB[] = { {"LeftDownVector", 14, 0x021C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_DFD[] = { {"eogon", 5, 0x00119, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E03[] = { {"amp", 3, 0x00026, 0}, {"lopar", 5, 0x02985, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E04[] = { {"loplus", 6, 0x02A2D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E08[] = { {"NotTilde", 8, 0x02241, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E09[] = { {"CounterClockwiseContourIntegral", 31, 0x02233, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E0C[] = { {"InvisibleTimes", 14, 0x02062, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E11[] = { {"lesdotor", 8, 0x02A83, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E18[] = { {"and", 3, 0x02227, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E1B[] = { {"RightUpVector", 13, 0x021BE, 0}, {"ang", 3, 0x02220, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E1C[] = { {"DoubleRightTee", 14, 0x022A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E1D[] = { {"LeftUpVectorBar", 15, 0x02958, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E1E[] = { {"smte", 4, 0x02AAC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E20[] = { {"Iacute", 6, 0x000CD, 0}, {"triminus", 8, 0x02A3A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E22[] = { {"efr", 3, 0x1D522, 0}, {"iiint", 5, 0x0222D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E23[] = { {"ctdot", 5, 0x022EF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E24[] = { {"mnplus", 6, 0x02213, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E25[] = { {"Vee", 3, 0x022C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E28[] = { {"Gcy", 3, 0x00413, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E2A[] = { {"lurdshar", 8, 0x0294A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E2C[] = { {"smeparsl", 8, 0x029E4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E2F[] = { {"DoubleVerticalBar", 17, 0x02225, 0}, {"iecy", 4, 0x00435, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E30[] = { {"udblac", 6, 0x00171, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E32[] = { {"gtquest", 7, 0x02A7C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E33[] = { {"Iopf", 4, 0x1D540, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E35[] = { {"bsime", 5, 0x022CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E36[] = { {"RightVector", 11, 0x021C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E37[] = { {"NotGreaterLess", 14, 0x02279, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E3B[] = { {"apE", 3, 0x02A70, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E41[] = { {"CupCap", 6, 0x0224D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E42[] = { {"uscr", 4, 0x1D4CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E43[] = { {"erDot", 5, 0x02253, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E44[] = { {"egs", 3, 0x02A96, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E48[] = { {"rlarr", 5, 0x021C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E4C[] = { {"prE", 3, 0x02AB3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E4E[] = { {"QUOT", 4, 0x00022, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E53[] = { {"Vfr", 3, 0x1D519, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E55[] = { {"cupbrcap", 8, 0x02A48, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E57[] = { {"intercal", 8, 0x022BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E58[] = { {"imath", 5, 0x00131, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E59[] = { {"RightUpTeeVector", 16, 0x0295C, 0}, {"trie", 4, 0x0225C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E5B[] = { {"ape", 3, 0x0224A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E5D[] = { {"softcy", 6, 0x0044C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E5E[] = { {"rarrb", 5, 0x021E5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E5F[] = { {"FilledSmallSquare", 17, 0x025FC, 0}, {"rarrc", 5, 0x02933, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E60[] = { {"Superset", 8, 0x02283, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E61[] = { {"hoarr", 5, 0x021FF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E63[] = { {"DownRightVectorBar", 18, 0x02957, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E64[] = { {"brvbar", 6, 0x000A6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E65[] = { {"ecolon", 6, 0x02255, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E66[] = { {"GreaterLess", 11, 0x02277, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E6A[] = { {"nrArr", 5, 0x021CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E6C[] = { {"pre", 3, 0x02AAF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E6F[] = { {"aleph", 5, 0x02135, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E70[] = { {"DiacriticalAcute", 16, 0x000B4, 0}, {"SmallCircle", 11, 0x02218, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E71[] = { {"parsim", 6, 0x02AF3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E73[] = { {"rarrw", 5, 0x0219D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E78[] = { {"caron", 5, 0x002C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E7A[] = { {"cacute", 6, 0x00107, 0}, {"lagran", 6, 0x02112, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E7C[] = { {"rarr", 4, 0x02192, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E80[] = { {"Rrightarrow", 11, 0x021DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E83[] = { {"Vscr", 4, 0x1D4B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E84[] = { {"Gfr", 3, 0x1D50A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E89[] = { {"ccedil", 6, 0x000E7, 0}, {"propto", 6, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E8E[] = { {"zwnj", 4, 0x0200C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E91[] = { {"psi", 3, 0x003C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E99[] = { {"infin", 5, 0x0221E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_E9C[] = { {"circledcirc", 11, 0x0229A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EA1[] = { {"Proportion", 10, 0x02237, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EA2[] = { {"subseteqq", 9, 0x02AC5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EA4[] = { {"nGtv", 4, 0x0226B, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EA8[] = { {"macr", 4, 0x000AF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EA9[] = { {"orslope", 7, 0x02A57, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EB1[] = { {"frown", 5, 0x02322, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EB2[] = { {"Iota", 4, 0x00399, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EB4[] = { {"rceil", 5, 0x02309, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EB7[] = { {"spadesuit", 9, 0x02660, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EB8[] = { {"sstarf", 6, 0x022C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ECA[] = { {"icy", 3, 0x00438, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ECD[] = { {"ast", 3, 0x0002A, 0}, {"nmid", 4, 0x02224, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ECF[] = { {"bowtie", 6, 0x022C8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ED1[] = { {"thetav", 6, 0x003D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ED7[] = { {"vangrt", 6, 0x0299C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ED8[] = { {"numsp", 5, 0x02007, 0}, {"triplus", 7, 0x02A39, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_ED9[] = { {"lscr", 4, 0x1D4C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EDA[] = { {"pointint", 8, 0x02A15, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EDB[] = { {"Theta", 5, 0x00398, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EDF[] = { {"rightrightarrows", 16, 0x021C9, 0}, {"uopf", 4, 0x1D566, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EE2[] = { {"ell", 3, 0x02113, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EE4[] = { {"cuepr", 5, 0x022DE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EE5[] = { {"NotVerticalBar", 14, 0x02224, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EE7[] = { {"xnis", 4, 0x022FB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EE9[] = { {"els", 3, 0x02A95, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EEF[] = { {"DDotrahd", 8, 0x02911, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EF1[] = { {"larrbfs", 7, 0x0291F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EF2[] = { {"Rsh", 3, 0x021B1, 0}, {"boxplus", 7, 0x0229E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EF4[] = { {"swarr", 5, 0x02199, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EF5[] = { {"gvnE", 4, 0x02269, 0x0FE00}, {"xfr", 3, 0x1D535, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EF9[] = { {"ldca", 4, 0x02936, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EFB[] = { {"NotPrecedesSlantEqual", 21, 0x022E0, 0}, {"YAcy", 4, 0x0042F, 0}, {"Zcy", 3, 0x00417, 0}, {"andslope", 8, 0x02A58, 0}, {"numero", 6, 0x02116, 0}, {"theta", 5, 0x003B8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EFE[] = { {"mapstoup", 8, 0x021A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_EFF[] = { {"bigcup", 6, 0x022C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F03[] = { {"nesear", 6, 0x02928, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F05[] = { {"lesssim", 7, 0x02272, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F08[] = { {"DownArrow", 9, 0x02193, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F0B[] = { {"orarr", 5, 0x021BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F0F[] = { {"ccaps", 5, 0x02A4D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F10[] = { {"xdtri", 5, 0x025BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F11[] = { {"xcap", 4, 0x022C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F13[] = { {"downdownarrows", 14, 0x021CA, 0}, {"nisd", 4, 0x022FA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F14[] = { {"VerticalBar", 11, 0x02223, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F15[] = { {"TRADE", 5, 0x02122, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F17[] = { {"Omacr", 5, 0x0014C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F18[] = { {"top", 3, 0x022A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F19[] = { {"LeftRightArrow", 14, 0x02194, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F1A[] = { {"Mscr", 4, 0x02133, 0}, {"iff", 3, 0x021D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F1F[] = { {"downharpoonleft", 15, 0x021C3, 0}, {"eng", 3, 0x0014B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F20[] = { {"Vopf", 4, 0x1D54D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F26[] = { {"ifr", 3, 0x1D526, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F28[] = { {"Downarrow", 9, 0x021D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F2C[] = { {"Kcy", 3, 0x0041A, 0}, {"angle", 5, 0x02220, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F2F[] = { {"lescc", 5, 0x02AA8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F30[] = { {"lesseqqgtr", 10, 0x02A8B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F31[] = { {"bigstar", 7, 0x02605, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F33[] = { {"ddagger", 7, 0x02021, 0}, {"nltrie", 6, 0x022EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F37[] = { {"omacr", 5, 0x0014D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F38[] = { {"cuesc", 5, 0x022DF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F40[] = { {"circlearrowright", 16, 0x021BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F41[] = { {"ngeqq", 5, 0x02267, 0x00338}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F44[] = { {"squf", 4, 0x025AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F46[] = { {"rtri", 4, 0x025B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F47[] = { {"VerticalLine", 12, 0x0007C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F48[] = { {"downarrow", 9, 0x02193, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F4B[] = { {"Scaron", 6, 0x00160, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F4C[] = { {"tstrok", 6, 0x00167, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F50[] = { {"wreath", 6, 0x02240, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F51[] = { {"exponentiale", 12, 0x02147, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F55[] = { {"Idot", 4, 0x00130, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F57[] = { {"Zfr", 3, 0x02128, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F58[] = { {"bnot", 4, 0x02310, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F5B[] = { {"infintie", 8, 0x029DD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F5D[] = { {"angrtvbd", 8, 0x0299D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F5F[] = { {"prurel", 6, 0x022B0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F60[] = { {"gbreve", 6, 0x0011F, 0}, {"rsaquo", 6, 0x0203A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F62[] = { {"sung", 4, 0x0266A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F67[] = { {"lvertneqq", 9, 0x02268, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F68[] = { {"lnsim", 5, 0x022E6, 0}, {"searrow", 7, 0x02198, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F69[] = { {"nsubset", 7, 0x02282, 0x020D2}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F6D[] = { {"Cup", 3, 0x022D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F6E[] = { {"Lmidot", 6, 0x0013F, 0}, {"sup1", 4, 0x000B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F6F[] = { {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {"sup2", 4, 0x000B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F70[] = { {"cscr", 4, 0x1D4B8, 0}, {"nsubseteqq", 10, 0x02AC5, 0x00338}, {"sup3", 4, 0x000B3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F71[] = { {"Kcedil", 6, 0x00136, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F72[] = { {"plussim", 7, 0x02A26, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F74[] = { {"KHcy", 4, 0x00425, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F75[] = { {"OElig", 5, 0x00152, 0}, {"simdot", 6, 0x02A6A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F76[] = { {"lopf", 4, 0x1D55D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F77[] = { {"boxbox", 6, 0x029C9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F78[] = { {"bepsi", 5, 0x003F6, 0}, {"lbarr", 5, 0x0290C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F79[] = { {"lnapprox", 8, 0x02A89, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F81[] = { {"sdotb", 5, 0x022A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F82[] = { {"measuredangle", 13, 0x02221, 0}, {"supE", 4, 0x02AC6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F83[] = { {"map", 3, 0x021A6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F84[] = { {"sdote", 5, 0x02A66, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F86[] = { {"diamondsuit", 11, 0x02666, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F88[] = { {"Kfr", 3, 0x1D50E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F8B[] = { {"imagline", 8, 0x02110, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F8F[] = { {"delta", 5, 0x003B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F91[] = { {"mapstodown", 10, 0x021A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F93[] = { {"eqvparsl", 8, 0x029E5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F95[] = { {"UpArrow", 7, 0x02191, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F9A[] = { {"imagpart", 8, 0x02111, 0}, {"lsim", 4, 0x02272, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F9C[] = { {"trianglelefteq", 14, 0x022B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_F9F[] = { {"isindot", 7, 0x022F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FA0[] = { {"LeftUpDownVector", 16, 0x02951, 0}, {"curvearrowleft", 14, 0x021B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FA1[] = { {"Diamond", 7, 0x022C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FA2[] = { {"supe", 4, 0x02287, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FA3[] = { {"nearrow", 7, 0x02197, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FA9[] = { {"easter", 6, 0x02A6E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB0[] = { {"rdquo", 5, 0x0201D, 0}, {"subsetneqq", 10, 0x02ACB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB1[] = { {"Dscr", 4, 0x1D49F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB4[] = { {"comp", 4, 0x02201, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB5[] = { {"Uparrow", 7, 0x021D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB6[] = { {"coloneq", 7, 0x02254, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB7[] = { {"Mopf", 4, 0x1D544, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FB9[] = { {"rfloor", 6, 0x0230B, 0}, {"varsubsetneqq", 13, 0x02ACB, 0x0FE00}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FBC[] = { {"eacute", 6, 0x000E9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FC2[] = { {"shortparallel", 13, 0x02225, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FC4[] = { {"male", 4, 0x02642, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FC6[] = { {"yscr", 4, 0x1D4CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FCA[] = { {"xharr", 5, 0x027F7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FCC[] = { {"cong", 4, 0x02245, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FCE[] = { {"mcy", 3, 0x0043C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FCF[] = { {"Upsilon", 7, 0x003A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FD0[] = { {"block", 5, 0x02588, 0}, {"maltese", 7, 0x02720, 0}, {"ordf", 4, 0x000AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FD2[] = { {"zcaron", 6, 0x0017E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FD3[] = { {"malt", 4, 0x02720, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FD6[] = { {"loang", 5, 0x027EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FD7[] = { {"ordm", 4, 0x000BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FDD[] = { {"NegativeVeryThinSpace", 21, 0x0200B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FDF[] = { {"eta", 3, 0x003B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FE1[] = { {"Iogon", 5, 0x0012E, 0}, {"drbkarow", 8, 0x02910, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FE6[] = { {"eth", 3, 0x000F0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FE9[] = { {"racute", 6, 0x00155, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FEA[] = { {"cwconint", 8, 0x02232, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FEB[] = { {"egsdot", 6, 0x02A98, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FF5[] = { {"MinusPlus", 9, 0x02213, 0}, {"ring", 4, 0x002DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FF8[] = { {"rcedil", 6, 0x00157, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FFC[] = { {"timesbar", 8, 0x02A31, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html5_FFE[] = { {"GreaterEqualLess", 16, 0x022DB, 0}, {NULL} };
+
+static const entity_cp_map *const ht_buckets_html5[] = {
+       ht_bucket_html5_000, ht_bucket_html5_001, ht_bucket_empty, ht_bucket_html5_003,
+       ht_bucket_empty, ht_bucket_html5_005, ht_bucket_empty, ht_bucket_html5_007,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_00D, ht_bucket_empty, ht_bucket_html5_00F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_017,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_020, ht_bucket_empty, ht_bucket_html5_022, ht_bucket_empty,
+       ht_bucket_html5_024, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_027,
+       ht_bucket_html5_028, ht_bucket_html5_029, ht_bucket_html5_02A, ht_bucket_html5_02B,
+       ht_bucket_html5_02C, ht_bucket_empty, ht_bucket_html5_02E, ht_bucket_empty,
+       ht_bucket_html5_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_034, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_038, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_047,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_04C, ht_bucket_empty, ht_bucket_html5_04E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_051, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_059, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_05D, ht_bucket_empty, ht_bucket_html5_05F,
+       ht_bucket_html5_060, ht_bucket_html5_061, ht_bucket_empty, ht_bucket_html5_063,
+       ht_bucket_html5_064, ht_bucket_html5_065, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_069, ht_bucket_html5_06A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_06D, ht_bucket_html5_06E, ht_bucket_html5_06F,
+       ht_bucket_empty, ht_bucket_html5_071, ht_bucket_empty, ht_bucket_html5_073,
+       ht_bucket_html5_074, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07A, ht_bucket_html5_07B,
+       ht_bucket_html5_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_082, ht_bucket_empty,
+       ht_bucket_html5_084, ht_bucket_html5_085, ht_bucket_html5_086, ht_bucket_empty,
+       ht_bucket_html5_088, ht_bucket_html5_089, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_08C, ht_bucket_empty, ht_bucket_html5_08E, ht_bucket_empty,
+       ht_bucket_html5_090, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_094, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_097,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_09E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_0A4, ht_bucket_empty, ht_bucket_html5_0A6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0AB,
+       ht_bucket_html5_0AC, ht_bucket_html5_0AD, ht_bucket_html5_0AE, ht_bucket_html5_0AF,
+       ht_bucket_html5_0B0, ht_bucket_empty, ht_bucket_html5_0B2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_0B8, ht_bucket_html5_0B9, ht_bucket_html5_0BA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_0C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_0C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0CE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_0D1, ht_bucket_html5_0D2, ht_bucket_html5_0D3,
+       ht_bucket_empty, ht_bucket_html5_0D5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0DF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_0E5, ht_bucket_html5_0E6, ht_bucket_empty,
+       ht_bucket_html5_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_0EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0EF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0F3,
+       ht_bucket_html5_0F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0FA, ht_bucket_html5_0FB,
+       ht_bucket_empty, ht_bucket_html5_0FD, ht_bucket_html5_0FE, ht_bucket_empty,
+       ht_bucket_html5_100, ht_bucket_html5_101, ht_bucket_empty, ht_bucket_html5_103,
+       ht_bucket_empty, ht_bucket_html5_105, ht_bucket_html5_106, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_109, ht_bucket_html5_10A, ht_bucket_html5_10B,
+       ht_bucket_empty, ht_bucket_html5_10D, ht_bucket_html5_10E, ht_bucket_html5_10F,
+       ht_bucket_html5_110, ht_bucket_html5_111, ht_bucket_empty, ht_bucket_html5_113,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_116, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_11B,
+       ht_bucket_html5_11C, ht_bucket_empty, ht_bucket_html5_11E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_121, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_124, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_129, ht_bucket_html5_12A, ht_bucket_empty,
+       ht_bucket_html5_12C, ht_bucket_empty, ht_bucket_html5_12E, ht_bucket_html5_12F,
+       ht_bucket_html5_130, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_134, ht_bucket_html5_135, ht_bucket_empty, ht_bucket_html5_137,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_13A, ht_bucket_html5_13B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_145, ht_bucket_empty, ht_bucket_html5_147,
+       ht_bucket_empty, ht_bucket_html5_149, ht_bucket_empty, ht_bucket_html5_14B,
+       ht_bucket_html5_14C, ht_bucket_empty, ht_bucket_html5_14E, ht_bucket_html5_14F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_158, ht_bucket_html5_159, ht_bucket_empty, ht_bucket_html5_15B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_15E, ht_bucket_html5_15F,
+       ht_bucket_empty, ht_bucket_html5_161, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_164, ht_bucket_html5_165, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_168, ht_bucket_empty, ht_bucket_html5_16A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_173,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17A, ht_bucket_html5_17B,
+       ht_bucket_html5_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17F,
+       ht_bucket_empty, ht_bucket_html5_181, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_189, ht_bucket_empty, ht_bucket_html5_18B,
+       ht_bucket_html5_18C, ht_bucket_empty, ht_bucket_html5_18E, ht_bucket_html5_18F,
+       ht_bucket_html5_190, ht_bucket_html5_191, ht_bucket_empty, ht_bucket_html5_193,
+       ht_bucket_empty, ht_bucket_html5_195, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19A, ht_bucket_empty,
+       ht_bucket_html5_19C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19F,
+       ht_bucket_html5_1A0, ht_bucket_html5_1A1, ht_bucket_html5_1A2, ht_bucket_html5_1A3,
+       ht_bucket_html5_1A4, ht_bucket_html5_1A5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_1A8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1AB,
+       ht_bucket_html5_1AC, ht_bucket_html5_1AD, ht_bucket_html5_1AE, ht_bucket_html5_1AF,
+       ht_bucket_html5_1B0, ht_bucket_empty, ht_bucket_html5_1B2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1B5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1B9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1BD, ht_bucket_html5_1BE, ht_bucket_empty,
+       ht_bucket_html5_1C0, ht_bucket_html5_1C1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_1C4, ht_bucket_empty, ht_bucket_html5_1C6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1C9, ht_bucket_html5_1CA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1CD, ht_bucket_html5_1CE, ht_bucket_empty,
+       ht_bucket_html5_1D0, ht_bucket_html5_1D1, ht_bucket_html5_1D2, ht_bucket_empty,
+       ht_bucket_html5_1D4, ht_bucket_html5_1D5, ht_bucket_html5_1D6, ht_bucket_empty,
+       ht_bucket_html5_1D8, ht_bucket_html5_1D9, ht_bucket_html5_1DA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1DF,
+       ht_bucket_html5_1E0, ht_bucket_html5_1E1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_1E5, ht_bucket_html5_1E6, ht_bucket_html5_1E7,
+       ht_bucket_html5_1E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EF,
+       ht_bucket_html5_1F0, ht_bucket_empty, ht_bucket_html5_1F2, ht_bucket_empty,
+       ht_bucket_html5_1F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_1F8, ht_bucket_html5_1F9, ht_bucket_html5_1FA, ht_bucket_empty,
+       ht_bucket_html5_1FC, ht_bucket_empty, ht_bucket_html5_1FE, ht_bucket_html5_1FF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_205, ht_bucket_empty, ht_bucket_html5_207,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_20E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_212, ht_bucket_html5_213,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_219, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_21D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_220, ht_bucket_empty, ht_bucket_html5_222, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_227,
+       ht_bucket_empty, ht_bucket_html5_229, ht_bucket_empty, ht_bucket_html5_22B,
+       ht_bucket_html5_22C, ht_bucket_html5_22D, ht_bucket_empty, ht_bucket_html5_22F,
+       ht_bucket_html5_230, ht_bucket_empty, ht_bucket_html5_232, ht_bucket_empty,
+       ht_bucket_html5_234, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_239, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_23C, ht_bucket_html5_23D, ht_bucket_html5_23E, ht_bucket_empty,
+       ht_bucket_html5_240, ht_bucket_html5_241, ht_bucket_html5_242, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_246, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_249, ht_bucket_html5_24A, ht_bucket_html5_24B,
+       ht_bucket_empty, ht_bucket_html5_24D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_251, ht_bucket_html5_252, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_257,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_25A, ht_bucket_html5_25B,
+       ht_bucket_html5_25C, ht_bucket_html5_25D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_263,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26A, ht_bucket_html5_26B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_274, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_277,
+       ht_bucket_html5_278, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_27C, ht_bucket_empty, ht_bucket_html5_27E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_283,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_28A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_294, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_297,
+       ht_bucket_html5_298, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_29D, ht_bucket_empty, ht_bucket_html5_29F,
+       ht_bucket_html5_2A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_2A9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2AE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_2B1, ht_bucket_html5_2B2, ht_bucket_html5_2B3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_2B9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2BF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_2C4, ht_bucket_html5_2C5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2CE, ht_bucket_html5_2CF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2D3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2DA, ht_bucket_html5_2DB,
+       ht_bucket_html5_2DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2E3,
+       ht_bucket_html5_2E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2EB,
+       ht_bucket_html5_2EC, ht_bucket_empty, ht_bucket_html5_2EE, ht_bucket_empty,
+       ht_bucket_html5_2F0, ht_bucket_empty, ht_bucket_html5_2F2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_2F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_300, ht_bucket_html5_301, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_304, ht_bucket_html5_305, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_308, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30F,
+       ht_bucket_empty, ht_bucket_html5_311, ht_bucket_empty, ht_bucket_html5_313,
+       ht_bucket_empty, ht_bucket_html5_315, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_319, ht_bucket_html5_31A, ht_bucket_html5_31B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_326, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_329, ht_bucket_html5_32A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_32D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_330, ht_bucket_html5_331, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_336, ht_bucket_empty,
+       ht_bucket_html5_338, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33F,
+       ht_bucket_html5_340, ht_bucket_html5_341, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_347,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_34D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_350, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_356, ht_bucket_empty,
+       ht_bucket_html5_358, ht_bucket_html5_359, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_35D, ht_bucket_empty, ht_bucket_html5_35F,
+       ht_bucket_empty, ht_bucket_html5_361, ht_bucket_empty, ht_bucket_html5_363,
+       ht_bucket_empty, ht_bucket_html5_365, ht_bucket_empty, ht_bucket_html5_367,
+       ht_bucket_empty, ht_bucket_html5_369, ht_bucket_html5_36A, ht_bucket_html5_36B,
+       ht_bucket_empty, ht_bucket_html5_36D, ht_bucket_html5_36E, ht_bucket_html5_36F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_372, ht_bucket_empty,
+       ht_bucket_html5_374, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_378, ht_bucket_empty, ht_bucket_html5_37A, ht_bucket_empty,
+       ht_bucket_html5_37C, ht_bucket_html5_37D, ht_bucket_html5_37E, ht_bucket_html5_37F,
+       ht_bucket_html5_380, ht_bucket_empty, ht_bucket_html5_382, ht_bucket_html5_383,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_386, ht_bucket_html5_387,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_38A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_38D, ht_bucket_html5_38E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_391, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_394, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_397,
+       ht_bucket_html5_398, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_39C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_39F,
+       ht_bucket_html5_3A0, ht_bucket_html5_3A1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_3A4, ht_bucket_html5_3A5, ht_bucket_html5_3A6, ht_bucket_html5_3A7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_3AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3B2, ht_bucket_empty,
+       ht_bucket_html5_3B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3BF,
+       ht_bucket_html5_3C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_3C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3C9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3CD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_3D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3D3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3D9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3DE, ht_bucket_empty,
+       ht_bucket_html5_3E0, ht_bucket_html5_3E1, ht_bucket_empty, ht_bucket_html5_3E3,
+       ht_bucket_html5_3E4, ht_bucket_empty, ht_bucket_html5_3E6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3E9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3ED, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_3F1, ht_bucket_html5_3F2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3F7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_3FC, ht_bucket_empty, ht_bucket_html5_3FE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_402, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_405, ht_bucket_empty, ht_bucket_html5_407,
+       ht_bucket_empty, ht_bucket_html5_409, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_40E, ht_bucket_html5_40F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_413,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_41A, ht_bucket_html5_41B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_421, ht_bucket_empty, ht_bucket_html5_423,
+       ht_bucket_html5_424, ht_bucket_html5_425, ht_bucket_html5_426, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_429, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_42C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_42F,
+       ht_bucket_html5_430, ht_bucket_empty, ht_bucket_html5_432, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_436, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_439, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_43C, ht_bucket_html5_43D, ht_bucket_html5_43E, ht_bucket_html5_43F,
+       ht_bucket_html5_440, ht_bucket_html5_441, ht_bucket_empty, ht_bucket_html5_443,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_446, ht_bucket_html5_447,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44F,
+       ht_bucket_html5_450, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_454, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_457,
+       ht_bucket_html5_458, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_45D, ht_bucket_empty, ht_bucket_html5_45F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_465, ht_bucket_html5_466, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_469, ht_bucket_html5_46A, ht_bucket_html5_46B,
+       ht_bucket_empty, ht_bucket_html5_46D, ht_bucket_empty, ht_bucket_html5_46F,
+       ht_bucket_html5_470, ht_bucket_html5_471, ht_bucket_html5_472, ht_bucket_html5_473,
+       ht_bucket_empty, ht_bucket_html5_475, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_479, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_47C, ht_bucket_html5_47D, ht_bucket_empty, ht_bucket_html5_47F,
+       ht_bucket_html5_480, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_485, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_488, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_48C, ht_bucket_empty, ht_bucket_html5_48E, ht_bucket_html5_48F,
+       ht_bucket_html5_490, ht_bucket_html5_491, ht_bucket_empty, ht_bucket_html5_493,
+       ht_bucket_empty, ht_bucket_html5_495, ht_bucket_html5_496, ht_bucket_empty,
+       ht_bucket_html5_498, ht_bucket_html5_499, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_49F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4A2, ht_bucket_empty,
+       ht_bucket_html5_4A4, ht_bucket_empty, ht_bucket_html5_4A6, ht_bucket_html5_4A7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AA, ht_bucket_html5_4AB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AE, ht_bucket_html5_4AF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B6, ht_bucket_empty,
+       ht_bucket_html5_4B8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_4BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_4C0, ht_bucket_empty, ht_bucket_html5_4C2, ht_bucket_html5_4C3,
+       ht_bucket_html5_4C4, ht_bucket_html5_4C5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_4C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4CB,
+       ht_bucket_empty, ht_bucket_html5_4CD, ht_bucket_empty, ht_bucket_html5_4CF,
+       ht_bucket_html5_4D0, ht_bucket_empty, ht_bucket_html5_4D2, ht_bucket_html5_4D3,
+       ht_bucket_html5_4D4, ht_bucket_html5_4D5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_4D8, ht_bucket_empty, ht_bucket_html5_4DA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4DE, ht_bucket_html5_4DF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4E3,
+       ht_bucket_html5_4E4, ht_bucket_empty, ht_bucket_html5_4E6, ht_bucket_html5_4E7,
+       ht_bucket_html5_4E8, ht_bucket_html5_4E9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_4ED, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_4F1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4F7,
+       ht_bucket_empty, ht_bucket_html5_4F9, ht_bucket_empty, ht_bucket_html5_4FB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4FE, ht_bucket_empty,
+       ht_bucket_html5_500, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_504, ht_bucket_empty, ht_bucket_html5_506, ht_bucket_html5_507,
+       ht_bucket_empty, ht_bucket_html5_509, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_50E, ht_bucket_html5_50F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_513,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_516, ht_bucket_empty,
+       ht_bucket_html5_518, ht_bucket_html5_519, ht_bucket_empty, ht_bucket_html5_51B,
+       ht_bucket_html5_51C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_524, ht_bucket_html5_525, ht_bucket_html5_526, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_52F,
+       ht_bucket_html5_530, ht_bucket_empty, ht_bucket_html5_532, ht_bucket_html5_533,
+       ht_bucket_html5_534, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53B,
+       ht_bucket_html5_53C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_542, ht_bucket_html5_543,
+       ht_bucket_empty, ht_bucket_html5_545, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_548, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_54F,
+       ht_bucket_html5_550, ht_bucket_html5_551, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_557,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_55B,
+       ht_bucket_empty, ht_bucket_html5_55D, ht_bucket_empty, ht_bucket_html5_55F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_564, ht_bucket_html5_565, ht_bucket_html5_566, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_56C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_56F,
+       ht_bucket_html5_570, ht_bucket_html5_571, ht_bucket_html5_572, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_575, ht_bucket_html5_576, ht_bucket_html5_577,
+       ht_bucket_html5_578, ht_bucket_empty, ht_bucket_html5_57A, ht_bucket_html5_57B,
+       ht_bucket_html5_57C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_580, ht_bucket_empty, ht_bucket_html5_582, ht_bucket_html5_583,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_586, ht_bucket_empty,
+       ht_bucket_html5_588, ht_bucket_html5_589, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_58D, ht_bucket_html5_58E, ht_bucket_html5_58F,
+       ht_bucket_html5_590, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_595, ht_bucket_html5_596, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_59A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_59D, ht_bucket_empty, ht_bucket_html5_59F,
+       ht_bucket_html5_5A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_5A9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_5AC, ht_bucket_html5_5AD, ht_bucket_html5_5AE, ht_bucket_empty,
+       ht_bucket_html5_5B0, ht_bucket_html5_5B1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_5B5, ht_bucket_html5_5B6, ht_bucket_html5_5B7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5BB,
+       ht_bucket_html5_5BC, ht_bucket_html5_5BD, ht_bucket_empty, ht_bucket_html5_5BF,
+       ht_bucket_html5_5C0, ht_bucket_html5_5C1, ht_bucket_html5_5C2, ht_bucket_empty,
+       ht_bucket_html5_5C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_5D0, ht_bucket_html5_5D1, ht_bucket_empty, ht_bucket_html5_5D3,
+       ht_bucket_empty, ht_bucket_html5_5D5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_5D8, ht_bucket_html5_5D9, ht_bucket_empty, ht_bucket_html5_5DB,
+       ht_bucket_empty, ht_bucket_html5_5DD, ht_bucket_empty, ht_bucket_html5_5DF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E2, ht_bucket_empty,
+       ht_bucket_html5_5E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5EA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_5ED, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_5F0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F6, ht_bucket_empty,
+       ht_bucket_html5_5F8, ht_bucket_empty, ht_bucket_html5_5FA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_5FD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_601, ht_bucket_html5_602, ht_bucket_html5_603,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_606, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_609, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_60D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_613,
+       ht_bucket_empty, ht_bucket_html5_615, ht_bucket_empty, ht_bucket_html5_617,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_61A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_61D, ht_bucket_empty, ht_bucket_html5_61F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_622, ht_bucket_empty,
+       ht_bucket_html5_624, ht_bucket_empty, ht_bucket_html5_626, ht_bucket_empty,
+       ht_bucket_html5_628, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_62C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_630, ht_bucket_empty, ht_bucket_html5_632, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_636, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_63A, ht_bucket_empty,
+       ht_bucket_html5_63C, ht_bucket_html5_63D, ht_bucket_html5_63E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_641, ht_bucket_html5_642, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_645, ht_bucket_html5_646, ht_bucket_html5_647,
+       ht_bucket_html5_648, ht_bucket_html5_649, ht_bucket_html5_64A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_651, ht_bucket_html5_652, ht_bucket_html5_653,
+       ht_bucket_empty, ht_bucket_html5_655, ht_bucket_empty, ht_bucket_html5_657,
+       ht_bucket_html5_658, ht_bucket_html5_659, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_65C, ht_bucket_empty, ht_bucket_html5_65E, ht_bucket_empty,
+       ht_bucket_html5_660, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_669, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_670, ht_bucket_html5_671, ht_bucket_html5_672, ht_bucket_html5_673,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_676, ht_bucket_empty,
+       ht_bucket_html5_678, ht_bucket_html5_679, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_67D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_680, ht_bucket_empty, ht_bucket_html5_682, ht_bucket_empty,
+       ht_bucket_html5_684, ht_bucket_html5_685, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_68A, ht_bucket_empty,
+       ht_bucket_html5_68C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_691, ht_bucket_empty, ht_bucket_html5_693,
+       ht_bucket_html5_694, ht_bucket_empty, ht_bucket_html5_696, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_699, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6A3,
+       ht_bucket_html5_6A4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_6A8, ht_bucket_html5_6A9, ht_bucket_html5_6AA, ht_bucket_html5_6AB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6AE, ht_bucket_empty,
+       ht_bucket_html5_6B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_6B4, ht_bucket_empty, ht_bucket_html5_6B6, ht_bucket_empty,
+       ht_bucket_html5_6B8, ht_bucket_html5_6B9, ht_bucket_html5_6BA, ht_bucket_empty,
+       ht_bucket_html5_6BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6BF,
+       ht_bucket_html5_6C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_6C4, ht_bucket_html5_6C5, ht_bucket_html5_6C6, ht_bucket_html5_6C7,
+       ht_bucket_html5_6C8, ht_bucket_html5_6C9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_6CC, ht_bucket_empty, ht_bucket_html5_6CE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_6D1, ht_bucket_html5_6D2, ht_bucket_empty,
+       ht_bucket_html5_6D4, ht_bucket_html5_6D5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_6D9, ht_bucket_html5_6DA, ht_bucket_html5_6DB,
+       ht_bucket_html5_6DC, ht_bucket_empty, ht_bucket_html5_6DE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6E7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EE, ht_bucket_html5_6EF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_6F5, ht_bucket_empty, ht_bucket_html5_6F7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6FB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_704, ht_bucket_html5_705, ht_bucket_html5_706, ht_bucket_html5_707,
+       ht_bucket_empty, ht_bucket_html5_709, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_70C, ht_bucket_empty, ht_bucket_html5_70E, ht_bucket_html5_70F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_712, ht_bucket_empty,
+       ht_bucket_html5_714, ht_bucket_html5_715, ht_bucket_empty, ht_bucket_html5_717,
+       ht_bucket_empty, ht_bucket_html5_719, ht_bucket_empty, ht_bucket_html5_71B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_71E, ht_bucket_html5_71F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_723,
+       ht_bucket_html5_724, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_727,
+       ht_bucket_empty, ht_bucket_html5_729, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_72C, ht_bucket_html5_72D, ht_bucket_html5_72E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_733,
+       ht_bucket_html5_734, ht_bucket_html5_735, ht_bucket_html5_736, ht_bucket_empty,
+       ht_bucket_html5_738, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_73B,
+       ht_bucket_empty, ht_bucket_html5_73D, ht_bucket_html5_73E, ht_bucket_html5_73F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_744, ht_bucket_html5_745, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_749, ht_bucket_empty, ht_bucket_html5_74B,
+       ht_bucket_html5_74C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_74F,
+       ht_bucket_empty, ht_bucket_html5_751, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_754, ht_bucket_html5_755, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_759, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_75C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_75F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_762, ht_bucket_html5_763,
+       ht_bucket_empty, ht_bucket_html5_765, ht_bucket_html5_766, ht_bucket_empty,
+       ht_bucket_html5_768, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_76E, ht_bucket_empty,
+       ht_bucket_html5_770, ht_bucket_empty, ht_bucket_html5_772, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_776, ht_bucket_html5_777,
+       ht_bucket_empty, ht_bucket_html5_779, ht_bucket_html5_77A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_77F,
+       ht_bucket_empty, ht_bucket_html5_781, ht_bucket_empty, ht_bucket_html5_783,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_787,
+       ht_bucket_empty, ht_bucket_html5_789, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_78C, ht_bucket_html5_78D, ht_bucket_html5_78E, ht_bucket_empty,
+       ht_bucket_html5_790, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_794, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_797,
+       ht_bucket_html5_798, ht_bucket_empty, ht_bucket_html5_79A, ht_bucket_html5_79B,
+       ht_bucket_empty, ht_bucket_html5_79D, ht_bucket_empty, ht_bucket_html5_79F,
+       ht_bucket_html5_7A0, ht_bucket_html5_7A1, ht_bucket_html5_7A2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7A5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_7A8, ht_bucket_empty, ht_bucket_html5_7AA, ht_bucket_html5_7AB,
+       ht_bucket_html5_7AC, ht_bucket_empty, ht_bucket_html5_7AE, ht_bucket_html5_7AF,
+       ht_bucket_html5_7B0, ht_bucket_html5_7B1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7B5, ht_bucket_html5_7B6, ht_bucket_html5_7B7,
+       ht_bucket_html5_7B8, ht_bucket_empty, ht_bucket_html5_7BA, ht_bucket_html5_7BB,
+       ht_bucket_empty, ht_bucket_html5_7BD, ht_bucket_html5_7BE, ht_bucket_html5_7BF,
+       ht_bucket_html5_7C0, ht_bucket_html5_7C1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7C9, ht_bucket_empty, ht_bucket_html5_7CB,
+       ht_bucket_empty, ht_bucket_html5_7CD, ht_bucket_html5_7CE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7D1, ht_bucket_html5_7D2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7D5, ht_bucket_html5_7D6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_7D9, ht_bucket_html5_7DA, ht_bucket_empty,
+       ht_bucket_html5_7DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_7E0, ht_bucket_empty, ht_bucket_html5_7E2, ht_bucket_empty,
+       ht_bucket_html5_7E4, ht_bucket_html5_7E5, ht_bucket_html5_7E6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_7EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7EF,
+       ht_bucket_empty, ht_bucket_html5_7F1, ht_bucket_empty, ht_bucket_html5_7F3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7F6, ht_bucket_empty,
+       ht_bucket_html5_7F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7FB,
+       ht_bucket_html5_7FC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_800, ht_bucket_empty, ht_bucket_html5_802, ht_bucket_html5_803,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_808, ht_bucket_html5_809, ht_bucket_html5_80A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_810, ht_bucket_html5_811, ht_bucket_html5_812, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_816, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_819, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_81C, ht_bucket_html5_81D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_821, ht_bucket_html5_822, ht_bucket_html5_823,
+       ht_bucket_html5_824, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_828, ht_bucket_html5_829, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_82D, ht_bucket_html5_82E, ht_bucket_empty,
+       ht_bucket_html5_830, ht_bucket_html5_831, ht_bucket_html5_832, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_837,
+       ht_bucket_html5_838, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_83C, ht_bucket_empty, ht_bucket_html5_83E, ht_bucket_html5_83F,
+       ht_bucket_empty, ht_bucket_html5_841, ht_bucket_html5_842, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_846, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84A, ht_bucket_empty,
+       ht_bucket_html5_84C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84F,
+       ht_bucket_html5_850, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_855, ht_bucket_empty, ht_bucket_html5_857,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_85B,
+       ht_bucket_html5_85C, ht_bucket_empty, ht_bucket_html5_85E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_861, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_865, ht_bucket_html5_866, ht_bucket_html5_867,
+       ht_bucket_html5_868, ht_bucket_empty, ht_bucket_html5_86A, ht_bucket_html5_86B,
+       ht_bucket_html5_86C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_873,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_876, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_879, ht_bucket_empty, ht_bucket_html5_87B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_87E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_88A, ht_bucket_empty,
+       ht_bucket_html5_88C, ht_bucket_empty, ht_bucket_html5_88E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_892, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_895, ht_bucket_html5_896, ht_bucket_html5_897,
+       ht_bucket_html5_898, ht_bucket_html5_899, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_89D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_8A5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_8AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B6, ht_bucket_html5_8B7,
+       ht_bucket_html5_8B8, ht_bucket_html5_8B9, ht_bucket_html5_8BA, ht_bucket_empty,
+       ht_bucket_html5_8BC, ht_bucket_html5_8BD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_8C0, ht_bucket_html5_8C1, ht_bucket_html5_8C2, ht_bucket_empty,
+       ht_bucket_html5_8C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8C7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8CF,
+       ht_bucket_html5_8D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D6, ht_bucket_empty,
+       ht_bucket_html5_8D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_8DC, ht_bucket_html5_8DD, ht_bucket_html5_8DE, ht_bucket_html5_8DF,
+       ht_bucket_html5_8E0, ht_bucket_empty, ht_bucket_html5_8E2, ht_bucket_html5_8E3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8E7,
+       ht_bucket_html5_8E8, ht_bucket_html5_8E9, ht_bucket_empty, ht_bucket_html5_8EB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8F3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FE, ht_bucket_html5_8FF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_904, ht_bucket_empty, ht_bucket_html5_906, ht_bucket_html5_907,
+       ht_bucket_empty, ht_bucket_html5_909, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_90C, ht_bucket_empty, ht_bucket_html5_90E, ht_bucket_empty,
+       ht_bucket_html5_910, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_913,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_916, ht_bucket_empty,
+       ht_bucket_html5_918, ht_bucket_html5_919, ht_bucket_empty, ht_bucket_html5_91B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_91E, ht_bucket_html5_91F,
+       ht_bucket_html5_920, ht_bucket_empty, ht_bucket_html5_922, ht_bucket_html5_923,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_927,
+       ht_bucket_empty, ht_bucket_html5_929, ht_bucket_html5_92A, ht_bucket_empty,
+       ht_bucket_html5_92C, ht_bucket_empty, ht_bucket_html5_92E, ht_bucket_empty,
+       ht_bucket_html5_930, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_936, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_939, ht_bucket_empty, ht_bucket_html5_93B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_93F,
+       ht_bucket_html5_940, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_945, ht_bucket_empty, ht_bucket_html5_947,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_94D, ht_bucket_empty, ht_bucket_html5_94F,
+       ht_bucket_html5_950, ht_bucket_empty, ht_bucket_html5_952, ht_bucket_html5_953,
+       ht_bucket_html5_954, ht_bucket_html5_955, ht_bucket_html5_956, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_959, ht_bucket_empty, ht_bucket_html5_95B,
+       ht_bucket_empty, ht_bucket_html5_95D, ht_bucket_empty, ht_bucket_html5_95F,
+       ht_bucket_html5_960, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_963,
+       ht_bucket_html5_964, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_969, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_96C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_96F,
+       ht_bucket_html5_970, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_974, ht_bucket_html5_975, ht_bucket_html5_976, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97B,
+       ht_bucket_html5_97C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97F,
+       ht_bucket_empty, ht_bucket_html5_981, ht_bucket_empty, ht_bucket_html5_983,
+       ht_bucket_empty, ht_bucket_html5_985, ht_bucket_html5_986, ht_bucket_empty,
+       ht_bucket_html5_988, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_98C, ht_bucket_html5_98D, ht_bucket_empty, ht_bucket_html5_98F,
+       ht_bucket_html5_990, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_996, ht_bucket_html5_997,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_99B,
+       ht_bucket_html5_99C, ht_bucket_empty, ht_bucket_html5_99E, ht_bucket_html5_99F,
+       ht_bucket_html5_9A0, ht_bucket_html5_9A1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9A6, ht_bucket_empty,
+       ht_bucket_html5_9A8, ht_bucket_empty, ht_bucket_html5_9AA, ht_bucket_empty,
+       ht_bucket_html5_9AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_9B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_9B4, ht_bucket_html5_9B5, ht_bucket_html5_9B6, ht_bucket_html5_9B7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9BB,
+       ht_bucket_html5_9BC, ht_bucket_html5_9BD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9C1, ht_bucket_html5_9C2, ht_bucket_html5_9C3,
+       ht_bucket_empty, ht_bucket_html5_9C5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9C9, ht_bucket_html5_9CA, ht_bucket_empty,
+       ht_bucket_html5_9CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9CF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9D5, ht_bucket_html5_9D6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9DA, ht_bucket_html5_9DB,
+       ht_bucket_empty, ht_bucket_html5_9DD, ht_bucket_html5_9DE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9E1, ht_bucket_html5_9E2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9E5, ht_bucket_empty, ht_bucket_html5_9E7,
+       ht_bucket_empty, ht_bucket_html5_9E9, ht_bucket_empty, ht_bucket_html5_9EB,
+       ht_bucket_empty, ht_bucket_html5_9ED, ht_bucket_html5_9EE, ht_bucket_html5_9EF,
+       ht_bucket_html5_9F0, ht_bucket_html5_9F1, ht_bucket_html5_9F2, ht_bucket_html5_9F3,
+       ht_bucket_html5_9F4, ht_bucket_html5_9F5, ht_bucket_empty, ht_bucket_html5_9F7,
+       ht_bucket_empty, ht_bucket_html5_9F9, ht_bucket_html5_9FA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_9FD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A01, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_A04, ht_bucket_html5_A05, ht_bucket_html5_A06, ht_bucket_empty,
+       ht_bucket_html5_A08, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_A0C, ht_bucket_html5_A0D, ht_bucket_html5_A0E, ht_bucket_empty,
+       ht_bucket_html5_A10, ht_bucket_empty, ht_bucket_html5_A12, ht_bucket_empty,
+       ht_bucket_html5_A14, ht_bucket_html5_A15, ht_bucket_html5_A16, ht_bucket_html5_A17,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A21, ht_bucket_empty, ht_bucket_html5_A23,
+       ht_bucket_html5_A24, ht_bucket_html5_A25, ht_bucket_html5_A26, ht_bucket_empty,
+       ht_bucket_html5_A28, ht_bucket_empty, ht_bucket_html5_A2A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A2D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_A30, ht_bucket_empty, ht_bucket_html5_A32, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A36, ht_bucket_html5_A37,
+       ht_bucket_empty, ht_bucket_html5_A39, ht_bucket_empty, ht_bucket_html5_A3B,
+       ht_bucket_html5_A3C, ht_bucket_html5_A3D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A41, ht_bucket_empty, ht_bucket_html5_A43,
+       ht_bucket_html5_A44, ht_bucket_html5_A45, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_A48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A4F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A53,
+       ht_bucket_html5_A54, ht_bucket_empty, ht_bucket_html5_A56, ht_bucket_html5_A57,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A5A, ht_bucket_html5_A5B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A61, ht_bucket_html5_A62, ht_bucket_html5_A63,
+       ht_bucket_html5_A64, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A69, ht_bucket_html5_A6A, ht_bucket_html5_A6B,
+       ht_bucket_empty, ht_bucket_html5_A6D, ht_bucket_empty, ht_bucket_html5_A6F,
+       ht_bucket_html5_A70, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A76, ht_bucket_empty,
+       ht_bucket_html5_A78, ht_bucket_empty, ht_bucket_html5_A7A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A7E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A81, ht_bucket_html5_A82, ht_bucket_empty,
+       ht_bucket_html5_A84, ht_bucket_html5_A85, ht_bucket_html5_A86, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A89, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A8D, ht_bucket_html5_A8E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A92, ht_bucket_empty,
+       ht_bucket_html5_A94, ht_bucket_empty, ht_bucket_html5_A96, ht_bucket_empty,
+       ht_bucket_html5_A98, ht_bucket_html5_A99, ht_bucket_html5_A9A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_A9D, ht_bucket_empty, ht_bucket_html5_A9F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AA3,
+       ht_bucket_html5_AA4, ht_bucket_html5_AA5, ht_bucket_empty, ht_bucket_html5_AA7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_AAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AB2, ht_bucket_empty,
+       ht_bucket_html5_AB4, ht_bucket_html5_AB5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ABA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_AC0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_AC4, ht_bucket_html5_AC5, ht_bucket_html5_AC6, ht_bucket_html5_AC7,
+       ht_bucket_html5_AC8, ht_bucket_empty, ht_bucket_html5_ACA, ht_bucket_empty,
+       ht_bucket_html5_ACC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ACF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AD2, ht_bucket_html5_AD3,
+       ht_bucket_html5_AD4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ADA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_ADD, ht_bucket_empty, ht_bucket_html5_ADF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_AE4, ht_bucket_html5_AE5, ht_bucket_html5_AE6, ht_bucket_html5_AE7,
+       ht_bucket_html5_AE8, ht_bucket_html5_AE9, ht_bucket_empty, ht_bucket_html5_AEB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_AF5, ht_bucket_html5_AF6, ht_bucket_html5_AF7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AFA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_AFD, ht_bucket_html5_AFE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B08, ht_bucket_html5_B09, ht_bucket_html5_B0A, ht_bucket_empty,
+       ht_bucket_html5_B0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B10, ht_bucket_html5_B11, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_B15, ht_bucket_html5_B16, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B1E, ht_bucket_html5_B1F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B23,
+       ht_bucket_html5_B24, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B27,
+       ht_bucket_empty, ht_bucket_html5_B29, ht_bucket_html5_B2A, ht_bucket_html5_B2B,
+       ht_bucket_html5_B2C, ht_bucket_html5_B2D, ht_bucket_html5_B2E, ht_bucket_html5_B2F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B33,
+       ht_bucket_empty, ht_bucket_html5_B35, ht_bucket_html5_B36, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B3A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_B3D, ht_bucket_html5_B3E, ht_bucket_empty,
+       ht_bucket_html5_B40, ht_bucket_empty, ht_bucket_html5_B42, ht_bucket_empty,
+       ht_bucket_html5_B44, ht_bucket_empty, ht_bucket_html5_B46, ht_bucket_html5_B47,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B4C, ht_bucket_empty, ht_bucket_html5_B4E, ht_bucket_html5_B4F,
+       ht_bucket_html5_B50, ht_bucket_html5_B51, ht_bucket_html5_B52, ht_bucket_html5_B53,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B56, ht_bucket_empty,
+       ht_bucket_html5_B58, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B5C, ht_bucket_html5_B5D, ht_bucket_html5_B5E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B63,
+       ht_bucket_html5_B64, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B67,
+       ht_bucket_empty, ht_bucket_html5_B69, ht_bucket_empty, ht_bucket_html5_B6B,
+       ht_bucket_empty, ht_bucket_html5_B6D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B72, ht_bucket_html5_B73,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B77,
+       ht_bucket_html5_B78, ht_bucket_empty, ht_bucket_html5_B7A, ht_bucket_html5_B7B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B7E, ht_bucket_html5_B7F,
+       ht_bucket_empty, ht_bucket_html5_B81, ht_bucket_html5_B82, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B87,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_B8D, ht_bucket_empty, ht_bucket_html5_B8F,
+       ht_bucket_html5_B90, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B94, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_B98, ht_bucket_html5_B99, ht_bucket_html5_B9A, ht_bucket_empty,
+       ht_bucket_html5_B9C, ht_bucket_html5_B9D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_BA5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_BA9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BAE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BB2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_BB5, ht_bucket_html5_BB6, ht_bucket_html5_BB7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BBA, ht_bucket_empty,
+       ht_bucket_html5_BBC, ht_bucket_html5_BBD, ht_bucket_empty, ht_bucket_html5_BBF,
+       ht_bucket_empty, ht_bucket_html5_BC1, ht_bucket_html5_BC2, ht_bucket_html5_BC3,
+       ht_bucket_html5_BC4, ht_bucket_html5_BC5, ht_bucket_html5_BC6, ht_bucket_html5_BC7,
+       ht_bucket_html5_BC8, ht_bucket_html5_BC9, ht_bucket_empty, ht_bucket_html5_BCB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BCE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_BD1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BD7,
+       ht_bucket_html5_BD8, ht_bucket_html5_BD9, ht_bucket_html5_BDA, ht_bucket_html5_BDB,
+       ht_bucket_empty, ht_bucket_html5_BDD, ht_bucket_empty, ht_bucket_html5_BDF,
+       ht_bucket_empty, ht_bucket_html5_BE1, ht_bucket_html5_BE2, ht_bucket_empty,
+       ht_bucket_html5_BE4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BE7,
+       ht_bucket_html5_BE8, ht_bucket_html5_BE9, ht_bucket_html5_BEA, ht_bucket_html5_BEB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BEF,
+       ht_bucket_html5_BF0, ht_bucket_html5_BF1, ht_bucket_html5_BF2, ht_bucket_html5_BF3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BF7,
+       ht_bucket_empty, ht_bucket_html5_BF9, ht_bucket_html5_BFA, ht_bucket_empty,
+       ht_bucket_html5_BFC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C02, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C0B,
+       ht_bucket_html5_C0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C11, ht_bucket_html5_C12, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C16, ht_bucket_empty,
+       ht_bucket_html5_C18, ht_bucket_empty, ht_bucket_html5_C1A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C1D, ht_bucket_html5_C1E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C23,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C27,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C2B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C31, ht_bucket_html5_C32, ht_bucket_html5_C33,
+       ht_bucket_html5_C34, ht_bucket_html5_C35, ht_bucket_html5_C36, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3E, ht_bucket_html5_C3F,
+       ht_bucket_html5_C40, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C43,
+       ht_bucket_html5_C44, ht_bucket_empty, ht_bucket_html5_C46, ht_bucket_empty,
+       ht_bucket_html5_C48, ht_bucket_empty, ht_bucket_html5_C4A, ht_bucket_html5_C4B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C4F,
+       ht_bucket_html5_C50, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_C54, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_C58, ht_bucket_empty, ht_bucket_html5_C5A, ht_bucket_html5_C5B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C5F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C69, ht_bucket_empty, ht_bucket_html5_C6B,
+       ht_bucket_html5_C6C, ht_bucket_empty, ht_bucket_html5_C6E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C72, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C76, ht_bucket_html5_C77,
+       ht_bucket_html5_C78, ht_bucket_empty, ht_bucket_html5_C7A, ht_bucket_html5_C7B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_C80, ht_bucket_empty, ht_bucket_html5_C82, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C89, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C8E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_C91, ht_bucket_empty, ht_bucket_html5_C93,
+       ht_bucket_html5_C94, ht_bucket_html5_C95, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_C98, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CA6, ht_bucket_empty,
+       ht_bucket_html5_CA8, ht_bucket_html5_CA9, ht_bucket_html5_CAA, ht_bucket_empty,
+       ht_bucket_html5_CAC, ht_bucket_html5_CAD, ht_bucket_empty, ht_bucket_html5_CAF,
+       ht_bucket_html5_CB0, ht_bucket_empty, ht_bucket_html5_CB2, ht_bucket_empty,
+       ht_bucket_html5_CB4, ht_bucket_empty, ht_bucket_html5_CB6, ht_bucket_html5_CB7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CC2, ht_bucket_empty,
+       ht_bucket_html5_CC4, ht_bucket_html5_CC5, ht_bucket_empty, ht_bucket_html5_CC7,
+       ht_bucket_html5_CC8, ht_bucket_html5_CC9, ht_bucket_empty, ht_bucket_html5_CCB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_CD0, ht_bucket_empty, ht_bucket_html5_CD2, ht_bucket_html5_CD3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_CD9, ht_bucket_html5_CDA, ht_bucket_empty,
+       ht_bucket_html5_CDC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_CE4, ht_bucket_empty, ht_bucket_html5_CE6, ht_bucket_empty,
+       ht_bucket_html5_CE8, ht_bucket_html5_CE9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_CED, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_CF1, ht_bucket_html5_CF2, ht_bucket_html5_CF3,
+       ht_bucket_html5_CF4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFF,
+       ht_bucket_html5_D00, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D06, ht_bucket_html5_D07,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0E, ht_bucket_empty,
+       ht_bucket_html5_D10, ht_bucket_html5_D11, ht_bucket_html5_D12, ht_bucket_html5_D13,
+       ht_bucket_empty, ht_bucket_html5_D15, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D18, ht_bucket_html5_D19, ht_bucket_html5_D1A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D1E, ht_bucket_html5_D1F,
+       ht_bucket_html5_D20, ht_bucket_empty, ht_bucket_html5_D22, ht_bucket_empty,
+       ht_bucket_html5_D24, ht_bucket_empty, ht_bucket_html5_D26, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D2A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D32, ht_bucket_empty,
+       ht_bucket_html5_D34, ht_bucket_html5_D35, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D38, ht_bucket_html5_D39, ht_bucket_html5_D3A, ht_bucket_html5_D3B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D3E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D42, ht_bucket_empty,
+       ht_bucket_html5_D44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_D49, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D4F,
+       ht_bucket_empty, ht_bucket_html5_D51, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D54, ht_bucket_html5_D55, ht_bucket_html5_D56, ht_bucket_html5_D57,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5A, ht_bucket_html5_D5B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D63,
+       ht_bucket_empty, ht_bucket_html5_D65, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_D69, ht_bucket_html5_D6A, ht_bucket_empty,
+       ht_bucket_html5_D6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D6F,
+       ht_bucket_html5_D70, ht_bucket_html5_D71, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D74, ht_bucket_html5_D75, ht_bucket_html5_D76, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_D7C, ht_bucket_html5_D7D, ht_bucket_html5_D7E, ht_bucket_empty,
+       ht_bucket_html5_D80, ht_bucket_html5_D81, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_D85, ht_bucket_empty, ht_bucket_html5_D87,
+       ht_bucket_empty, ht_bucket_html5_D89, ht_bucket_html5_D8A, ht_bucket_empty,
+       ht_bucket_html5_D8C, ht_bucket_html5_D8D, ht_bucket_html5_D8E, ht_bucket_html5_D8F,
+       ht_bucket_html5_D90, ht_bucket_html5_D91, ht_bucket_empty, ht_bucket_html5_D93,
+       ht_bucket_html5_D94, ht_bucket_html5_D95, ht_bucket_html5_D96, ht_bucket_empty,
+       ht_bucket_html5_D98, ht_bucket_empty, ht_bucket_html5_D9A, ht_bucket_empty,
+       ht_bucket_html5_D9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DA0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_DA5, ht_bucket_html5_DA6, ht_bucket_empty,
+       ht_bucket_html5_DA8, ht_bucket_html5_DA9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DB0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DB3,
+       ht_bucket_html5_DB4, ht_bucket_empty, ht_bucket_html5_DB6, ht_bucket_html5_DB7,
+       ht_bucket_empty, ht_bucket_html5_DB9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DBC, ht_bucket_empty, ht_bucket_html5_DBE, ht_bucket_html5_DBF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC2, ht_bucket_html5_DC3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC6, ht_bucket_empty,
+       ht_bucket_html5_DC8, ht_bucket_empty, ht_bucket_html5_DCA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DCF,
+       ht_bucket_empty, ht_bucket_html5_DD1, ht_bucket_empty, ht_bucket_html5_DD3,
+       ht_bucket_html5_DD4, ht_bucket_html5_DD5, ht_bucket_empty, ht_bucket_html5_DD7,
+       ht_bucket_empty, ht_bucket_html5_DD9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DDC, ht_bucket_html5_DDD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_DE4, ht_bucket_empty, ht_bucket_html5_DE6, ht_bucket_html5_DE7,
+       ht_bucket_empty, ht_bucket_html5_DE9, ht_bucket_empty, ht_bucket_html5_DEB,
+       ht_bucket_empty, ht_bucket_html5_DED, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_DF1, ht_bucket_html5_DF2, ht_bucket_html5_DF3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DF6, ht_bucket_html5_DF7,
+       ht_bucket_empty, ht_bucket_html5_DF9, ht_bucket_empty, ht_bucket_html5_DFB,
+       ht_bucket_empty, ht_bucket_html5_DFD, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E03,
+       ht_bucket_html5_E04, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E08, ht_bucket_html5_E09, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_E11, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E18, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E1B,
+       ht_bucket_html5_E1C, ht_bucket_html5_E1D, ht_bucket_html5_E1E, ht_bucket_empty,
+       ht_bucket_html5_E20, ht_bucket_empty, ht_bucket_html5_E22, ht_bucket_html5_E23,
+       ht_bucket_html5_E24, ht_bucket_html5_E25, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E28, ht_bucket_empty, ht_bucket_html5_E2A, ht_bucket_empty,
+       ht_bucket_html5_E2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E2F,
+       ht_bucket_html5_E30, ht_bucket_empty, ht_bucket_html5_E32, ht_bucket_html5_E33,
+       ht_bucket_empty, ht_bucket_html5_E35, ht_bucket_html5_E36, ht_bucket_html5_E37,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E3B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_E41, ht_bucket_html5_E42, ht_bucket_html5_E43,
+       ht_bucket_html5_E44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E4C, ht_bucket_empty, ht_bucket_html5_E4E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E53,
+       ht_bucket_empty, ht_bucket_html5_E55, ht_bucket_empty, ht_bucket_html5_E57,
+       ht_bucket_html5_E58, ht_bucket_html5_E59, ht_bucket_empty, ht_bucket_html5_E5B,
+       ht_bucket_empty, ht_bucket_html5_E5D, ht_bucket_html5_E5E, ht_bucket_html5_E5F,
+       ht_bucket_html5_E60, ht_bucket_html5_E61, ht_bucket_empty, ht_bucket_html5_E63,
+       ht_bucket_html5_E64, ht_bucket_html5_E65, ht_bucket_html5_E66, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6A, ht_bucket_empty,
+       ht_bucket_html5_E6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6F,
+       ht_bucket_html5_E70, ht_bucket_html5_E71, ht_bucket_empty, ht_bucket_html5_E73,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E78, ht_bucket_empty, ht_bucket_html5_E7A, ht_bucket_empty,
+       ht_bucket_html5_E7C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E80, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E83,
+       ht_bucket_html5_E84, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_E89, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E8E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_E91, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_E99, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_E9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_EA1, ht_bucket_html5_EA2, ht_bucket_empty,
+       ht_bucket_html5_EA4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_EA8, ht_bucket_html5_EA9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_EB1, ht_bucket_html5_EB2, ht_bucket_empty,
+       ht_bucket_html5_EB4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EB7,
+       ht_bucket_html5_EB8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ECA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_ECD, ht_bucket_empty, ht_bucket_html5_ECF,
+       ht_bucket_empty, ht_bucket_html5_ED1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ED7,
+       ht_bucket_html5_ED8, ht_bucket_html5_ED9, ht_bucket_html5_EDA, ht_bucket_html5_EDB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EDF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EE2, ht_bucket_empty,
+       ht_bucket_html5_EE4, ht_bucket_html5_EE5, ht_bucket_empty, ht_bucket_html5_EE7,
+       ht_bucket_empty, ht_bucket_html5_EE9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EEF,
+       ht_bucket_empty, ht_bucket_html5_EF1, ht_bucket_html5_EF2, ht_bucket_empty,
+       ht_bucket_html5_EF4, ht_bucket_html5_EF5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_EF9, ht_bucket_empty, ht_bucket_html5_EFB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EFE, ht_bucket_html5_EFF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F03,
+       ht_bucket_empty, ht_bucket_html5_F05, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_F08, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0F,
+       ht_bucket_html5_F10, ht_bucket_html5_F11, ht_bucket_empty, ht_bucket_html5_F13,
+       ht_bucket_html5_F14, ht_bucket_html5_F15, ht_bucket_empty, ht_bucket_html5_F17,
+       ht_bucket_html5_F18, ht_bucket_html5_F19, ht_bucket_html5_F1A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F1F,
+       ht_bucket_html5_F20, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F26, ht_bucket_empty,
+       ht_bucket_html5_F28, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_F2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F2F,
+       ht_bucket_html5_F30, ht_bucket_html5_F31, ht_bucket_empty, ht_bucket_html5_F33,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F37,
+       ht_bucket_html5_F38, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_F40, ht_bucket_html5_F41, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_F44, ht_bucket_empty, ht_bucket_html5_F46, ht_bucket_html5_F47,
+       ht_bucket_html5_F48, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F4B,
+       ht_bucket_html5_F4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_F50, ht_bucket_html5_F51, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_F55, ht_bucket_empty, ht_bucket_html5_F57,
+       ht_bucket_html5_F58, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F5B,
+       ht_bucket_empty, ht_bucket_html5_F5D, ht_bucket_empty, ht_bucket_html5_F5F,
+       ht_bucket_html5_F60, ht_bucket_empty, ht_bucket_html5_F62, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F67,
+       ht_bucket_html5_F68, ht_bucket_html5_F69, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_F6D, ht_bucket_html5_F6E, ht_bucket_html5_F6F,
+       ht_bucket_html5_F70, ht_bucket_html5_F71, ht_bucket_html5_F72, ht_bucket_empty,
+       ht_bucket_html5_F74, ht_bucket_html5_F75, ht_bucket_html5_F76, ht_bucket_html5_F77,
+       ht_bucket_html5_F78, ht_bucket_html5_F79, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_F81, ht_bucket_html5_F82, ht_bucket_html5_F83,
+       ht_bucket_html5_F84, ht_bucket_empty, ht_bucket_html5_F86, ht_bucket_empty,
+       ht_bucket_html5_F88, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8F,
+       ht_bucket_empty, ht_bucket_html5_F91, ht_bucket_empty, ht_bucket_html5_F93,
+       ht_bucket_empty, ht_bucket_html5_F95, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9A, ht_bucket_empty,
+       ht_bucket_html5_F9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9F,
+       ht_bucket_html5_FA0, ht_bucket_html5_FA1, ht_bucket_html5_FA2, ht_bucket_html5_FA3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_FA9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_FB0, ht_bucket_html5_FB1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_FB4, ht_bucket_html5_FB5, ht_bucket_html5_FB6, ht_bucket_html5_FB7,
+       ht_bucket_empty, ht_bucket_html5_FB9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_FBC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FC2, ht_bucket_empty,
+       ht_bucket_html5_FC4, ht_bucket_empty, ht_bucket_html5_FC6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FCA, ht_bucket_empty,
+       ht_bucket_html5_FCC, ht_bucket_empty, ht_bucket_html5_FCE, ht_bucket_html5_FCF,
+       ht_bucket_html5_FD0, ht_bucket_empty, ht_bucket_html5_FD2, ht_bucket_html5_FD3,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FD6, ht_bucket_html5_FD7,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_FDD, ht_bucket_empty, ht_bucket_html5_FDF,
+       ht_bucket_empty, ht_bucket_html5_FE1, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FE6, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_FE9, ht_bucket_html5_FEA, ht_bucket_html5_FEB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html5_FF5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_FF8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html5_FFC, ht_bucket_empty, ht_bucket_html5_FFE, ht_bucket_empty,
+};
+
+static const entity_ht ent_ht_html5 = {
+       0x1000,
+       ht_buckets_html5
+};
+
+/* end of HTML5 hash table for entity -> codepoint }}} */
+
+/* {{{ Start of HTML 4.01 multi-stage table for codepoint -> entity */
+
+/* {{{ Stage 3 Tables for HTML 4.01 */
+
+static const entity_stage3_row stage3_table_html4_00000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "quot", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "amp", 3}, {0, "#039", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lt", 2}, {0, NULL, 0}, {0, "gt", 2}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_00080[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "nbsp", 4}, {0, "iexcl", 5}, {0, "cent", 4}, {0, "pound", 5},
+       {0, "curren", 6}, {0, "yen", 3}, {0, "brvbar", 6}, {0, "sect", 4},
+       {0, "uml", 3}, {0, "copy", 4}, {0, "ordf", 4}, {0, "laquo", 5},
+       {0, "not", 3}, {0, "shy", 3}, {0, "reg", 3}, {0, "macr", 4},
+       {0, "deg", 3}, {0, "plusmn", 6}, {0, "sup2", 4}, {0, "sup3", 4},
+       {0, "acute", 5}, {0, "micro", 5}, {0, "para", 4}, {0, "middot", 6},
+       {0, "cedil", 5}, {0, "sup1", 4}, {0, "ordm", 4}, {0, "raquo", 5},
+       {0, "frac14", 6}, {0, "frac12", 6}, {0, "frac34", 6}, {0, "iquest", 6},
+};
+
+static const entity_stage3_row stage3_table_html4_000C0[] = {
+       {0, "Agrave", 6}, {0, "Aacute", 6}, {0, "Acirc", 5}, {0, "Atilde", 6},
+       {0, "Auml", 4}, {0, "Aring", 5}, {0, "AElig", 5}, {0, "Ccedil", 6},
+       {0, "Egrave", 6}, {0, "Eacute", 6}, {0, "Ecirc", 5}, {0, "Euml", 4},
+       {0, "Igrave", 6}, {0, "Iacute", 6}, {0, "Icirc", 5}, {0, "Iuml", 4},
+       {0, "ETH", 3}, {0, "Ntilde", 6}, {0, "Ograve", 6}, {0, "Oacute", 6},
+       {0, "Ocirc", 5}, {0, "Otilde", 6}, {0, "Ouml", 4}, {0, "times", 5},
+       {0, "Oslash", 6}, {0, "Ugrave", 6}, {0, "Uacute", 6}, {0, "Ucirc", 5},
+       {0, "Uuml", 4}, {0, "Yacute", 6}, {0, "THORN", 5}, {0, "szlig", 5},
+       {0, "agrave", 6}, {0, "aacute", 6}, {0, "acirc", 5}, {0, "atilde", 6},
+       {0, "auml", 4}, {0, "aring", 5}, {0, "aelig", 5}, {0, "ccedil", 6},
+       {0, "egrave", 6}, {0, "eacute", 6}, {0, "ecirc", 5}, {0, "euml", 4},
+       {0, "igrave", 6}, {0, "iacute", 6}, {0, "icirc", 5}, {0, "iuml", 4},
+       {0, "eth", 3}, {0, "ntilde", 6}, {0, "ograve", 6}, {0, "oacute", 6},
+       {0, "ocirc", 5}, {0, "otilde", 6}, {0, "ouml", 4}, {0, "divide", 6},
+       {0, "oslash", 6}, {0, "ugrave", 6}, {0, "uacute", 6}, {0, "ucirc", 5},
+       {0, "uuml", 4}, {0, "yacute", 6}, {0, "thorn", 5}, {0, "yuml", 4},
+};
+
+static const entity_stage3_row stage3_table_html4_00140[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "OElig", 5}, {0, "oelig", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Scaron", 6}, {0, "scaron", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "Yuml", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_00180[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "fnof", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_002C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "circ", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "tilde", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_00380[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "Alpha", 5}, {0, "Beta", 4}, {0, "Gamma", 5},
+       {0, "Delta", 5}, {0, "Epsilon", 7}, {0, "Zeta", 4}, {0, "Eta", 3},
+       {0, "Theta", 5}, {0, "Iota", 4}, {0, "Kappa", 5}, {0, "Lambda", 6},
+       {0, "Mu", 2}, {0, "Nu", 2}, {0, "Xi", 2}, {0, "Omicron", 7},
+       {0, "Pi", 2}, {0, "Rho", 3}, {0, NULL, 0}, {0, "Sigma", 5},
+       {0, "Tau", 3}, {0, "Upsilon", 7}, {0, "Phi", 3}, {0, "Chi", 3},
+       {0, "Psi", 3}, {0, "Omega", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "alpha", 5}, {0, "beta", 4}, {0, "gamma", 5},
+       {0, "delta", 5}, {0, "epsilon", 7}, {0, "zeta", 4}, {0, "eta", 3},
+       {0, "theta", 5}, {0, "iota", 4}, {0, "kappa", 5}, {0, "lambda", 6},
+       {0, "mu", 2}, {0, "nu", 2}, {0, "xi", 2}, {0, "omicron", 7},
+};
+
+static const entity_stage3_row stage3_table_html4_003C0[] = {
+       {0, "pi", 2}, {0, "rho", 3}, {0, "sigmaf", 6}, {0, "sigma", 5},
+       {0, "tau", 3}, {0, "upsilon", 7}, {0, "phi", 3}, {0, "chi", 3},
+       {0, "psi", 3}, {0, "omega", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "thetasym", 8}, {0, "upsih", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "piv", 3}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "ensp", 4}, {0, "emsp", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "thinsp", 6}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "zwnj", 4}, {0, "zwj", 3}, {0, "lrm", 3}, {0, "rlm", 3},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "ndash", 5},
+       {0, "mdash", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lsquo", 5}, {0, "rsquo", 5}, {0, "sbquo", 5}, {0, NULL, 0},
+       {0, "ldquo", 5}, {0, "rdquo", 5}, {0, "bdquo", 5}, {0, NULL, 0},
+       {0, "dagger", 6}, {0, "Dagger", 6}, {0, "bull", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "hellip", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "permil", 6}, {0, NULL, 0}, {0, "prime", 5}, {0, "Prime", 5},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "lsaquo", 6}, {0, "rsaquo", 6}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "oline", 5}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02040[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "frasl", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02080[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "euro", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02100[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "image", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "weierp", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "real", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "trade", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "alefsym", 7}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02180[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "larr", 4}, {0, "uarr", 4}, {0, "rarr", 4}, {0, "darr", 4},
+       {0, "harr", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "crarr", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_021C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lArr", 4}, {0, "uArr", 4}, {0, "rArr", 4}, {0, "dArr", 4},
+       {0, "hArr", 4}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02200[] = {
+       {0, "forall", 6}, {0, NULL, 0}, {0, "part", 4}, {0, "exist", 5},
+       {0, NULL, 0}, {0, "empty", 5}, {0, NULL, 0}, {0, "nabla", 5},
+       {0, "isin", 4}, {0, "notin", 5}, {0, NULL, 0}, {0, "ni", 2},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "prod", 4},
+       {0, NULL, 0}, {0, "sum", 3}, {0, "minus", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "lowast", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "radic", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "prop", 4}, {0, "infin", 5}, {0, NULL, 0},
+       {0, "ang", 3}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, "and", 3},
+       {0, "or", 2}, {0, "cap", 3}, {0, "cup", 3}, {0, "int", 3},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "there4", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "sim", 3}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02240[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "cong", 4}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "asymp", 5}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "ne", 2}, {0, "equiv", 5}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "le", 2}, {0, "ge", 2}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02280[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, "sub", 3}, {0, "sup", 3},
+       {0, "nsub", 4}, {0, NULL, 0}, {0, "sube", 4}, {0, "supe", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "oplus", 5}, {0, NULL, 0}, {0, "otimes", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "perp", 4}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_022C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "sdot", 4}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02300[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lceil", 5}, {0, "rceil", 5}, {0, "lfloor", 6}, {0, "rfloor", 6},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, "lang", 4}, {0, "rang", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_025C0[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "loz", 3}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+static const entity_stage3_row stage3_table_html4_02640[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "spades", 6}, {0, NULL, 0}, {0, NULL, 0}, {0, "clubs", 5},
+       {0, NULL, 0}, {0, "hearts", 6}, {0, "diams", 5}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+/* end of stage 3 Tables for HTML 4.01 }}} */
+
+/* {{{ Stage 2 Tables for HTML 4.01 */
+
+static const entity_stage2_row stage2_table_html4_00000[] = {
+       stage3_table_html4_00000, empty_stage3_table, stage3_table_html4_00080, stage3_table_html4_000C0,
+       empty_stage3_table, stage3_table_html4_00140, stage3_table_html4_00180, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_002C0,
+       empty_stage3_table, empty_stage3_table, stage3_table_html4_00380, stage3_table_html4_003C0,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+static const entity_stage2_row stage2_table_html4_02000[] = {
+       stage3_table_html4_02000, stage3_table_html4_02040, stage3_table_html4_02080, empty_stage3_table,
+       stage3_table_html4_02100, empty_stage3_table, stage3_table_html4_02180, stage3_table_html4_021C0,
+       stage3_table_html4_02200, stage3_table_html4_02240, stage3_table_html4_02280, stage3_table_html4_022C0,
+       stage3_table_html4_02300, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_025C0,
+       empty_stage3_table, stage3_table_html4_02640, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+/* end of stage 2 tables for HTML 4.01 }}} */
+
+static const entity_stage1_row entity_ms_table_html4[] = {
+       stage2_table_html4_00000,
+       empty_stage2_table,
+       stage2_table_html4_02000,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+       empty_stage2_table,
+};
+
+/* end of HTML 4.01 multi-stage table for codepoint -> entity }}} */
+
+/* {{{ HTML 4.01 hash table for entity -> codepoint */
+
+static const entity_cp_map ht_bucket_html4_000[] = { {"gt", 2, 0x0003E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_003[] = { {"Igrave", 6, 0x000CC, 0}, {"amp", 3, 0x00026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_006[] = { {"oacute", 6, 0x000F3, 0}, {"Xi", 2, 0x0039E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_008[] = { {"uuml", 4, 0x000FC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_00B[] = { {"Alpha", 5, 0x00391, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_00E[] = { {"sim", 3, 0x0223C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_012[] = { {"kappa", 5, 0x003BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_016[] = { {"lArr", 4, 0x021D0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_018[] = { {"and", 3, 0x02227, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_01B[] = { {"ang", 3, 0x02220, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_020[] = { {"copy", 4, 0x000A9, 0}, {"Iacute", 6, 0x000CD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_023[] = { {"igrave", 6, 0x000EC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_026[] = { {"xi", 2, 0x003BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_027[] = { {"Acirc", 5, 0x000C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_02B[] = { {"Ecirc", 5, 0x000CA, 0}, {"alpha", 5, 0x003B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_02C[] = { {"hearts", 6, 0x02665, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_02F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_030[] = { {"Yacute", 6, 0x000DD, 0}, {"int", 3, 0x0222B, 0}, {"rlm", 3, 0x0200F, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_034[] = { {"empty", 5, 0x02205, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_036[] = { {"larr", 4, 0x02190, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_03B[] = { {"Ucirc", 5, 0x000DB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_03C[] = { {"oline", 5, 0x0203E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_040[] = { {"iacute", 6, 0x000ED, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_046[] = { {"middot", 6, 0x000B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_04B[] = { {"ecirc", 5, 0x000EA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_04F[] = { {"icirc", 5, 0x000EE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_050[] = { {"yacute", 6, 0x000FD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_051[] = { {"minus", 5, 0x02212, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_054[] = { {"Auml", 4, 0x000C4, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_056[] = { {"Sigma", 5, 0x003A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_059[] = { {"lsquo", 5, 0x02018, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_05B[] = { {"ucirc", 5, 0x000FB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_05C[] = { {"rArr", 4, 0x021D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_064[] = { {"brvbar", 6, 0x000A6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_067[] = { {"AElig", 5, 0x000C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_069[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_071[] = { {"Psi", 3, 0x003A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_072[] = { {"exist", 5, 0x02203, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_074[] = { {"auml", 4, 0x000E4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_076[] = { {"sigma", 5, 0x003C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_078[] = { {"isin", 4, 0x02208, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_07C[] = { {"rarr", 4, 0x02192, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_089[] = { {"ccedil", 6, 0x000E7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_08D[] = { {"raquo", 5, 0x000BB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_08E[] = { {"Omega", 5, 0x003A9, 0}, {"zwnj", 4, 0x0200C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_091[] = { {"psi", 3, 0x003C8, 0}, {"there4", 6, 0x02234, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_092[] = { {"hArr", 4, 0x021D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_096[] = { {"le", 2, 0x02264, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_098[] = { {"Atilde", 6, 0x000C3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_099[] = { {"Zeta", 4, 0x00396, 0}, {"infin", 5, 0x0221E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_09D[] = { {"frasl", 5, 0x02044, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0A0[] = { {"euro", 4, 0x020AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0A5[] = { {"lt", 2, 0x0003C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0A7[] = { {"aelig", 5, 0x000E6, 0}, {"Mu", 2, 0x0039C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0A8[] = { {"macr", 4, 0x000AF, 0}, {"image", 5, 0x02111, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0AA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0AE[] = { {"omega", 5, 0x003C9, 0}, {"upsih", 5, 0x003D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0B0[] = { {"THORN", 5, 0x000DE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0B2[] = { {"Iota", 4, 0x00399, 0}, {"harr", 4, 0x02194, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0B4[] = { {"bull", 4, 0x02022, 0}, {"rceil", 5, 0x02309, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0B8[] = { {"atilde", 6, 0x000E3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0B9[] = { {"zeta", 4, 0x003B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0BA[] = { {"emsp", 4, 0x02003, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0BC[] = { {"perp", 4, 0x022A5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C2[] = { {"Prime", 5, 0x02033, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C4[] = { {"frac12", 6, 0x000BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C6[] = { {"frac14", 6, 0x000BC, 0}, {"circ", 4, 0x002C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C7[] = { {"mu", 2, 0x003BC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0C8[] = { {"Gamma", 5, 0x00393, 0}, {"Nu", 2, 0x0039D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0CE[] = { {"fnof", 4, 0x00192, 0}, {"quot", 4, 0x00022, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0D2[] = { {"iota", 4, 0x003B9, 0}, {"mdash", 5, 0x02014, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0D8[] = { {"ne", 2, 0x02260, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0DB[] = { {"Theta", 5, 0x00398, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0DC[] = { {"ni", 2, 0x0220B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0E2[] = { {"prime", 5, 0x02032, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0E8[] = { {"gamma", 5, 0x003B3, 0}, {"nu", 2, 0x003BD, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0EB[] = { {"pound", 5, 0x000A3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0EE[] = { {"permil", 6, 0x02030, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0F9[] = { {"cap", 3, 0x02229, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0FA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {"theta", 5, 0x003B8, 0}, {"ensp", 4, 0x02002, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0FE[] = { {"Pi", 2, 0x003A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_0FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_100[] = { {"iquest", 6, 0x000BF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_105[] = { {"forall", 6, 0x02200, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_106[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {"or", 2, 0x02228, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_108[] = { {"frac34", 6, 0x000BE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_10D[] = { {"notin", 5, 0x02209, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_10E[] = { {"dArr", 4, 0x021D3, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_10F[] = { {"Dagger", 6, 0x02021, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_111[] = { {"yen", 3, 0x000A5, 0}, {"weierp", 6, 0x02118, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_113[] = { {"uml", 3, 0x000A8, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_117[] = { {"tilde", 5, 0x002DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_118[] = { {"Aacute", 6, 0x000C1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_11A[] = { {"loz", 3, 0x025CA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_11B[] = { {"agrave", 6, 0x000E0, 0}, {"thinsp", 6, 0x02009, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_11E[] = { {"pi", 2, 0x003C0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_11F[] = { {"micro", 5, 0x000B5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_125[] = { {"spades", 6, 0x02660, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_126[] = { {"phi", 3, 0x003C6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_12E[] = { {"darr", 4, 0x02193, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_12F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {"dagger", 6, 0x02020, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_135[] = { {"Ocirc", 5, 0x000D4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_136[] = { {"alefsym", 7, 0x02135, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_138[] = { {"aacute", 6, 0x000E1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_13A[] = { {"divide", 6, 0x000F7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_13F[] = { {"sdot", 4, 0x022C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_143[] = { {"reg", 3, 0x000AE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_149[] = { {"real", 4, 0x0211C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_14B[] = { {"Scaron", 6, 0x00160, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_14F[] = { {"cent", 4, 0x000A2, 0}, {"oslash", 6, 0x000F8, 0}, {"tau", 3, 0x003C4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_150[] = { {"thorn", 5, 0x000FE, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_153[] = { {"ndash", 5, 0x02013, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_154[] = { {"piv", 3, 0x003D6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_155[] = { {"ocirc", 5, 0x000F4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_156[] = { {"Aring", 5, 0x000C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_158[] = { {"nbsp", 4, 0x000A0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_15C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_15F[] = { {"rsquo", 5, 0x02019, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_160[] = { {"rsaquo", 6, 0x0203A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_163[] = { {"hellip", 6, 0x02026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_166[] = { {"Otilde", 6, 0x000D5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_16B[] = { {"scaron", 6, 0x00161, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_16C[] = { {"Yuml", 4, 0x00178, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_16E[] = { {"sup1", 4, 0x000B9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_16F[] = { {"sup2", 4, 0x000B2, 0}, {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_170[] = { {"sup3", 4, 0x000B3, 0}, {"lrm", 3, 0x0200E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_173[] = { {"diams", 5, 0x02666, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_175[] = { {"OElig", 5, 0x00152, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_176[] = { {"aring", 5, 0x000E5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_178[] = { {"oplus", 5, 0x02295, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_17C[] = { {"iuml", 4, 0x000EF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_17F[] = { {"Egrave", 6, 0x000C8, 0}, {"uArr", 4, 0x021D1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_181[] = { {"Beta", 4, 0x00392, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_183[] = { {"nabla", 5, 0x02207, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_186[] = { {"ETH", 3, 0x000D0, 0}, {"otilde", 6, 0x000F5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_187[] = { {"laquo", 5, 0x000AB, 0}, {"times", 5, 0x000D7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_18C[] = { {"yuml", 4, 0x000FF, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_18D[] = { {"cup", 3, 0x0222A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_18E[] = { {"Rho", 3, 0x003A1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_18F[] = { {"Ugrave", 6, 0x000D9, 0}, {"delta", 5, 0x003B4, 0}, {"equiv", 5, 0x02261, 0}, {"sub", 3, 0x02282, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_194[] = { {"curren", 6, 0x000A4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_196[] = { {"not", 3, 0x000AC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_197[] = { {"acute", 5, 0x000B4, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_19A[] = { {"prod", 4, 0x0220F, 0}, {"sum", 3, 0x02211, 0}, {"lsaquo", 6, 0x02039, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_19C[] = { {"Eacute", 6, 0x000C9, 0}, {"Omicron", 7, 0x0039F, 0}, {"sigmaf", 6, 0x003C2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_19D[] = { {"sup", 3, 0x02283, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_19F[] = { {"egrave", 6, 0x000E8, 0}, {"uarr", 4, 0x02191, 0}, {"lowast", 6, 0x02217, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A0[] = { {"zwj", 3, 0x0200D, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A1[] = { {"beta", 4, 0x003B2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"supe", 4, 0x02287, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A6[] = { {"cedil", 5, 0x000B8, 0}, {"prop", 4, 0x0221D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A7[] = { {"lang", 4, 0x02329, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1A9[] = { {"para", 4, 0x000B6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1AE[] = { {"szlig", 5, 0x000DF, 0}, {"rho", 3, 0x003C1, 0}, {"lceil", 5, 0x02308, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1B0[] = { {"rdquo", 5, 0x0201D, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1B5[] = { {"deg", 3, 0x000B0, 0}, {"trade", 5, 0x02122, 0}, {"oelig", 5, 0x00153, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1B9[] = { {"Chi", 3, 0x003A7, 0}, {"rfloor", 6, 0x0230B, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1BC[] = { {"eacute", 6, 0x000E9, 0}, {"omicron", 7, 0x003BF, 0}, {"part", 4, 0x02202, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1BF[] = { {"Epsilon", 7, 0x00395, 0}, {"Eta", 3, 0x00397, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1C2[] = { {"ouml", 4, 0x000F6, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1C4[] = { {"#039", 4, 0x00027, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1C9[] = { {"Ograve", 6, 0x000D2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1CC[] = { {"uacute", 6, 0x000FA, 0}, {"cong", 4, 0x02245, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1CF[] = { {"Upsilon", 7, 0x003A5, 0}, {"asymp", 5, 0x02248, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1D0[] = { {"ordf", 4, 0x000AA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1D4[] = { {"sube", 4, 0x02286, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1D7[] = { {"ordm", 4, 0x000BA, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1D9[] = { {"chi", 3, 0x003C7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1DD[] = { {"nsub", 4, 0x02284, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1DF[] = { {"epsilon", 7, 0x003B5, 0}, {"eta", 3, 0x003B7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {"eth", 3, 0x000F0, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1E8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1E9[] = { {"ograve", 6, 0x000F2, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1ED[] = { {"rang", 4, 0x0232A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F1[] = { {"ge", 2, 0x02265, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F2[] = { {"Kappa", 5, 0x0039A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F4[] = { {"sect", 4, 0x000A7, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F6[] = { {"otimes", 6, 0x02297, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F8[] = { {"euml", 4, 0x000EB, 0}, {NULL} };
+static const entity_cp_map ht_bucket_html4_1F9[] = { {"shy", 3, 0x000AD, 0}, {NULL} };
+
+static const entity_cp_map *const ht_buckets_html4[] = {
+       ht_bucket_html4_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_003,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_006, ht_bucket_empty,
+       ht_bucket_html4_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_012, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_016, ht_bucket_empty,
+       ht_bucket_html4_018, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_01B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_020, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_023,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_026, ht_bucket_html4_027,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02B,
+       ht_bucket_html4_02C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02F,
+       ht_bucket_html4_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_034, ht_bucket_empty, ht_bucket_html4_036, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_03B,
+       ht_bucket_html4_03C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_046, ht_bucket_html4_047,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04F,
+       ht_bucket_html4_050, ht_bucket_html4_051, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_054, ht_bucket_empty, ht_bucket_html4_056, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_059, ht_bucket_empty, ht_bucket_html4_05B,
+       ht_bucket_html4_05C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_064, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_067,
+       ht_bucket_empty, ht_bucket_html4_069, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_071, ht_bucket_html4_072, ht_bucket_empty,
+       ht_bucket_html4_074, ht_bucket_empty, ht_bucket_html4_076, ht_bucket_empty,
+       ht_bucket_html4_078, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_089, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_08D, ht_bucket_html4_08E, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_091, ht_bucket_html4_092, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_096, ht_bucket_empty,
+       ht_bucket_html4_098, ht_bucket_html4_099, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_09D, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_0A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_0A5, ht_bucket_empty, ht_bucket_html4_0A7,
+       ht_bucket_html4_0A8, ht_bucket_empty, ht_bucket_html4_0AA, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0AE, ht_bucket_empty,
+       ht_bucket_html4_0B0, ht_bucket_empty, ht_bucket_html4_0B2, ht_bucket_empty,
+       ht_bucket_html4_0B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_0B8, ht_bucket_html4_0B9, ht_bucket_html4_0BA, ht_bucket_empty,
+       ht_bucket_html4_0BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0C2, ht_bucket_empty,
+       ht_bucket_html4_0C4, ht_bucket_html4_0C5, ht_bucket_html4_0C6, ht_bucket_html4_0C7,
+       ht_bucket_html4_0C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0CE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0D2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_0D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0DB,
+       ht_bucket_html4_0DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0E2, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_0E5, ht_bucket_html4_0E6, ht_bucket_empty,
+       ht_bucket_html4_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EE, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_0F9, ht_bucket_html4_0FA, ht_bucket_html4_0FB,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0FE, ht_bucket_html4_0FF,
+       ht_bucket_html4_100, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_105, ht_bucket_html4_106, ht_bucket_empty,
+       ht_bucket_html4_108, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_10D, ht_bucket_html4_10E, ht_bucket_html4_10F,
+       ht_bucket_empty, ht_bucket_html4_111, ht_bucket_empty, ht_bucket_html4_113,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_117,
+       ht_bucket_html4_118, ht_bucket_empty, ht_bucket_html4_11A, ht_bucket_html4_11B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_11E, ht_bucket_html4_11F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_125, ht_bucket_html4_126, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_12E, ht_bucket_html4_12F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_135, ht_bucket_html4_136, ht_bucket_empty,
+       ht_bucket_html4_138, ht_bucket_empty, ht_bucket_html4_13A, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_13F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_143,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_149, ht_bucket_empty, ht_bucket_html4_14B,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_14F,
+       ht_bucket_html4_150, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_153,
+       ht_bucket_html4_154, ht_bucket_html4_155, ht_bucket_html4_156, ht_bucket_empty,
+       ht_bucket_html4_158, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_15C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_15F,
+       ht_bucket_html4_160, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_163,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_166, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_16B,
+       ht_bucket_html4_16C, ht_bucket_empty, ht_bucket_html4_16E, ht_bucket_html4_16F,
+       ht_bucket_html4_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_173,
+       ht_bucket_empty, ht_bucket_html4_175, ht_bucket_html4_176, ht_bucket_empty,
+       ht_bucket_html4_178, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_17F,
+       ht_bucket_empty, ht_bucket_html4_181, ht_bucket_empty, ht_bucket_html4_183,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_186, ht_bucket_html4_187,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_18C, ht_bucket_html4_18D, ht_bucket_html4_18E, ht_bucket_html4_18F,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_194, ht_bucket_empty, ht_bucket_html4_196, ht_bucket_html4_197,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_19A, ht_bucket_empty,
+       ht_bucket_html4_19C, ht_bucket_html4_19D, ht_bucket_empty, ht_bucket_html4_19F,
+       ht_bucket_html4_1A0, ht_bucket_html4_1A1, ht_bucket_html4_1A2, ht_bucket_empty,
+       ht_bucket_html4_1A4, ht_bucket_empty, ht_bucket_html4_1A6, ht_bucket_html4_1A7,
+       ht_bucket_html4_1A8, ht_bucket_html4_1A9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_1AC, ht_bucket_empty, ht_bucket_html4_1AE, ht_bucket_html4_1AF,
+       ht_bucket_html4_1B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_1B5, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_1B9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_1BC, ht_bucket_empty, ht_bucket_html4_1BE, ht_bucket_html4_1BF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1C2, ht_bucket_empty,
+       ht_bucket_html4_1C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_1C9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_1CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1CF,
+       ht_bucket_html4_1D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_html4_1D4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1D7,
+       ht_bucket_html4_1D8, ht_bucket_html4_1D9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_1DD, ht_bucket_empty, ht_bucket_html4_1DF,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1E6, ht_bucket_empty,
+       ht_bucket_html4_1E8, ht_bucket_html4_1E9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_html4_1ED, ht_bucket_empty, ht_bucket_html4_1EF,
+       ht_bucket_empty, ht_bucket_html4_1F1, ht_bucket_html4_1F2, ht_bucket_html4_1F3,
+       ht_bucket_html4_1F4, ht_bucket_empty, ht_bucket_html4_1F6, ht_bucket_empty,
+       ht_bucket_html4_1F8, ht_bucket_html4_1F9, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+};
+
+static const entity_ht ent_ht_html4 = {
+       0x200,
+       ht_buckets_html4
+};
+
+/* end of HTML 4.01 hash table for entity -> codepoint }}} */
+
+/* {{{ Start of Basic entities (no apos) table for codepoint -> entity */
+
+static const entity_stage3_row stage3_table_be_noapos_00000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "quot", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "amp", 3}, {0, "#039", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lt", 2}, {0, NULL, 0}, {0, "gt", 2}, {0, NULL, 0},
+};
+
+/* {{{ Basic entities (no apos) hash table for entity -> codepoint */
+
+static const entity_cp_map ht_bucket_be_noapos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_noapos_003[] = { {"amp", 3, 0x00026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_noapos_004[] = { {"#039", 4, 0x00027, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_noapos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_noapos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL} };
+
+static const entity_cp_map *const ht_buckets_be_noapos[] = {
+       ht_bucket_be_noapos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_003,
+       ht_bucket_be_noapos_004, ht_bucket_be_noapos_005, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_00E, ht_bucket_empty,
+};
+
+static const entity_ht ent_ht_be_noapos = {
+       0x10,
+       ht_buckets_be_noapos
+};
+
+/* end of Basic entities (no apos) hash table for entity -> codepoint }}} */
+
+/* {{{ Start of Basic entities (with apos) table for codepoint -> entity */
+
+static const entity_stage3_row stage3_table_be_apos_00000[] = {
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "quot", 4}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, "amp", 3}, {0, "apos", 4},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, "lt", 2}, {0, NULL, 0}, {0, "gt", 2}, {0, NULL, 0},
+};
+
+/* {{{ Basic entities (with apos) hash table for entity -> codepoint */
+
+static const entity_cp_map ht_bucket_be_apos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_apos_003[] = { {"amp", 3, 0x00026, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_apos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_apos_008[] = { {"apos", 4, 0x00027, 0}, {NULL} };
+static const entity_cp_map ht_bucket_be_apos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL} };
+
+static const entity_cp_map *const ht_buckets_be_apos[] = {
+       ht_bucket_be_apos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_003,
+       ht_bucket_empty, ht_bucket_be_apos_005, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_be_apos_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
+       ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_00E, ht_bucket_empty,
+};
+
+static const entity_ht ent_ht_be_apos = {
+       0x10,
+       ht_buckets_be_apos
+};
+
+/* end of Basic entities (with apos) hash table for entity -> codepoint }}} */
+
 #endif /* HTML_TABLES_H */
diff --git a/ext/standard/html_tables/ents_basic.txt b/ext/standard/html_tables/ents_basic.txt
new file mode 100644 (file)
index 0000000..3a2ec93
--- /dev/null
@@ -0,0 +1,5 @@
+quot 22
+amp 26
+#039 27
+lt 3C
+gt 3E
diff --git a/ext/standard/html_tables/ents_basic_apos.txt b/ext/standard/html_tables/ents_basic_apos.txt
new file mode 100644 (file)
index 0000000..6a0f307
--- /dev/null
@@ -0,0 +1,5 @@
+quot 22
+amp 26
+apos 27
+lt 3C
+gt 3E
diff --git a/ext/standard/html_tables/ents_html401.txt b/ext/standard/html_tables/ents_html401.txt
new file mode 100644 (file)
index 0000000..7e1564b
--- /dev/null
@@ -0,0 +1,253 @@
+#039 0027 //artifical; there's no &apos; in HTML 4.01
+nbsp 00A0
+iexcl 00A1
+cent 00A2
+pound 00A3
+curren 00A4
+yen 00A5
+brvbar 00A6
+sect 00A7
+uml 00A8
+copy 00A9
+ordf 00AA
+laquo 00AB
+not 00AC
+shy 00AD
+reg 00AE
+macr 00AF
+deg 00B0
+plusmn 00B1
+sup2 00B2
+sup3 00B3
+acute 00B4
+micro 00B5
+para 00B6
+middot 00B7
+cedil 00B8
+sup1 00B9
+ordm 00BA
+raquo 00BB
+frac14 00BC
+frac12 00BD
+frac34 00BE
+iquest 00BF
+Agrave 00C0
+Aacute 00C1
+Acirc 00C2
+Atilde 00C3
+Auml 00C4
+Aring 00C5
+AElig 00C6
+Ccedil 00C7
+Egrave 00C8
+Eacute 00C9
+Ecirc 00CA
+Euml 00CB
+Igrave 00CC
+Iacute 00CD
+Icirc 00CE
+Iuml 00CF
+ETH 00D0
+Ntilde 00D1
+Ograve 00D2
+Oacute 00D3
+Ocirc 00D4
+Otilde 00D5
+Ouml 00D6
+times 00D7
+Oslash 00D8
+Ugrave 00D9
+Uacute 00DA
+Ucirc 00DB
+Uuml 00DC
+Yacute 00DD
+THORN 00DE
+szlig 00DF
+agrave 00E0
+aacute 00E1
+acirc 00E2
+atilde 00E3
+auml 00E4
+aring 00E5
+aelig 00E6
+ccedil 00E7
+egrave 00E8
+eacute 00E9
+ecirc 00EA
+euml 00EB
+igrave 00EC
+iacute 00ED
+icirc 00EE
+iuml 00EF
+eth 00F0
+ntilde 00F1
+ograve 00F2
+oacute 00F3
+ocirc 00F4
+otilde 00F5
+ouml 00F6
+divide 00F7
+oslash 00F8
+ugrave 00F9
+uacute 00FA
+ucirc 00FB
+uuml 00FC
+yacute 00FD
+thorn 00FE
+yuml 00FF
+fnof 0192
+Alpha 0391
+Beta 0392
+Gamma 0393
+Delta 0394
+Epsilon 0395
+Zeta 0396
+Eta 0397
+Theta 0398
+Iota 0399
+Kappa 039A
+Lambda 039B
+Mu 039C
+Nu 039D
+Xi 039E
+Omicron 039F
+Pi 03A0
+Rho 03A1
+Sigma 03A3
+Tau 03A4
+Upsilon 03A5
+Phi 03A6
+Chi 03A7
+Psi 03A8
+Omega 03A9
+alpha 03B1
+beta 03B2
+gamma 03B3
+delta 03B4
+epsilon 03B5
+zeta 03B6
+eta 03B7
+theta 03B8
+iota 03B9
+kappa 03BA
+lambda 03BB
+mu 03BC
+nu 03BD
+xi 03BE
+omicron 03BF
+pi 03C0
+rho 03C1
+sigmaf 03C2
+sigma 03C3
+tau 03C4
+upsilon 03C5
+phi 03C6
+chi 03C7
+psi 03C8
+omega 03C9
+thetasym 03D1
+upsih 03D2
+piv 03D6
+bull 2022
+hellip 2026
+prime 2032
+Prime 2033
+oline 203E
+frasl 2044
+weierp 2118
+image 2111
+real 211C
+trade 2122
+alefsym 2135
+larr 2190
+uarr 2191
+rarr 2192
+darr 2193
+harr 2194
+crarr 21B5
+lArr 21D0
+uArr 21D1
+rArr 21D2
+dArr 21D3
+hArr 21D4
+forall 2200
+part 2202
+exist 2203
+empty 2205
+nabla 2207
+isin 2208
+notin 2209
+ni 220B
+prod 220F
+sum 2211
+minus 2212
+lowast 2217
+radic 221A
+prop 221D
+infin 221E
+ang 2220
+and 2227
+or 2228
+cap 2229
+cup 222A
+int 222B
+there4 2234
+sim 223C
+cong 2245
+asymp 2248
+ne 2260
+equiv 2261
+le 2264
+ge 2265
+sub 2282
+sup 2283
+nsub 2284
+sube 2286
+supe 2287
+oplus 2295
+otimes 2297
+perp 22A5
+sdot 22C5
+lceil 2308
+rceil 2309
+lfloor 230A
+rfloor 230B
+lang 2329
+rang 232A
+loz 25CA
+spades 2660
+clubs 2663
+hearts 2665
+diams 2666
+quot 0022
+amp 0026
+lt 003C
+gt 003E
+OElig 0152
+oelig 0153
+Scaron 0160
+scaron 0161
+Yuml 0178
+circ 02C6
+tilde 02DC
+ensp 2002
+emsp 2003
+thinsp 2009
+zwnj 200C
+zwj 200D
+lrm 200E
+rlm 200F
+ndash 2013
+mdash 2014
+lsquo 2018
+rsquo 2019
+sbquo 201A
+ldquo 201C
+rdquo 201D
+bdquo 201E
+dagger 2020
+Dagger 2021
+permil 2030
+lsaquo 2039
+rsaquo 203A
+euro 20AC
\ No newline at end of file
diff --git a/ext/standard/html_tables/ents_html5.txt b/ext/standard/html_tables/ents_html5.txt
new file mode 100644 (file)
index 0000000..18defb2
--- /dev/null
@@ -0,0 +1,2125 @@
+AElig 000C6 
+AMP 00026 
+Aacute 000C1 
+Abreve 00102 
+Acirc 000C2 
+Acy 00410 
+Afr 1D504 
+Agrave 000C0 
+Alpha 00391 
+Amacr 00100 
+And 02A53 
+Aogon 00104 
+Aopf 1D538 
+ApplyFunction 02061 
+Aring 000C5 
+Ascr 1D49C 
+Assign 02254 
+Atilde 000C3 
+Auml 000C4 
+Backslash 02216 
+Barv 02AE7 
+Barwed 02306 
+Bcy 00411 
+Because 02235 
+Bernoullis 0212C 
+Beta 00392 
+Bfr 1D505 
+Bopf 1D539 
+Breve 002D8 
+Bscr 0212C 
+Bumpeq 0224E 
+CHcy 00427 
+COPY 000A9 
+Cacute 00106 
+Cap 022D2 
+CapitalDifferentialD 02145 
+Cayleys 0212D 
+Ccaron 0010C 
+Ccedil 000C7 
+Ccirc 00108 
+Cconint 02230 
+Cdot 0010A 
+Cedilla 000B8 
+CenterDot 000B7 
+Cfr 0212D 
+Chi 003A7 
+CircleDot 02299 
+CircleMinus 02296 
+CirclePlus 02295 
+CircleTimes 02297 
+ClockwiseContourIntegral 02232 
+CloseCurlyDoubleQuote 0201D 
+CloseCurlyQuote 02019 
+Colon 02237 
+Colone 02A74 
+Congruent 02261 
+Conint 0222F 
+ContourIntegral 0222E 
+Copf 02102 
+Coproduct 02210 
+CounterClockwiseContourIntegral 02233 
+Cross 02A2F 
+Cscr 1D49E 
+Cup 022D3 
+CupCap 0224D 
+DD 02145 
+DDotrahd 02911 
+DJcy 00402 
+DScy 00405 
+DZcy 0040F 
+Dagger 02021 
+Darr 021A1 
+Dashv 02AE4 
+Dcaron 0010E 
+Dcy 00414 
+Del 02207 
+Delta 00394 
+Dfr 1D507 
+DiacriticalAcute 000B4 
+DiacriticalDot 002D9 
+DiacriticalDoubleAcute 002DD 
+DiacriticalGrave 00060 
+DiacriticalTilde 002DC 
+Diamond 022C4 
+DifferentialD 02146 
+Dopf 1D53B 
+Dot 000A8 
+DotDot 020DC 
+DotEqual 02250 
+DoubleContourIntegral 0222F 
+DoubleDot 000A8 
+DoubleDownArrow 021D3 
+DoubleLeftArrow 021D0 
+DoubleLeftRightArrow 021D4 
+DoubleLeftTee 02AE4 
+DoubleLongLeftArrow 027F8 
+DoubleLongLeftRightArrow 027FA 
+DoubleLongRightArrow 027F9 
+DoubleRightArrow 021D2 
+DoubleRightTee 022A8 
+DoubleUpArrow 021D1 
+DoubleUpDownArrow 021D5 
+DoubleVerticalBar 02225 
+DownArrow 02193 
+DownArrowBar 02913 
+DownArrowUpArrow 021F5 
+DownBreve 00311 
+DownLeftRightVector 02950 
+DownLeftTeeVector 0295E 
+DownLeftVector 021BD 
+DownLeftVectorBar 02956 
+DownRightTeeVector 0295F 
+DownRightVector 021C1 
+DownRightVectorBar 02957 
+DownTee 022A4 
+DownTeeArrow 021A7 
+Downarrow 021D3 
+Dscr 1D49F 
+Dstrok 00110 
+ENG 0014A 
+ETH 000D0 
+Eacute 000C9 
+Ecaron 0011A 
+Ecirc 000CA 
+Ecy 0042D 
+Edot 00116 
+Efr 1D508 
+Egrave 000C8 
+Element 02208 
+Emacr 00112 
+EmptySmallSquare 025FB 
+EmptyVerySmallSquare 025AB 
+Eogon 00118 
+Eopf 1D53C 
+Epsilon 00395 
+Equal 02A75 
+EqualTilde 02242 
+Equilibrium 021CC 
+Escr 02130 
+Esim 02A73 
+Eta 00397 
+Euml 000CB 
+Exists 02203 
+ExponentialE 02147 
+Fcy 00424 
+Ffr 1D509 
+FilledSmallSquare 025FC 
+FilledVerySmallSquare 025AA 
+Fopf 1D53D 
+ForAll 02200 
+Fouriertrf 02131 
+Fscr 02131 
+GJcy 00403 
+GT 0003E 
+Gamma 00393 
+Gammad 003DC 
+Gbreve 0011E 
+Gcedil 00122 
+Gcirc 0011C 
+Gcy 00413 
+Gdot 00120 
+Gfr 1D50A 
+Gg 022D9 
+Gopf 1D53E 
+GreaterEqual 02265 
+GreaterEqualLess 022DB 
+GreaterFullEqual 02267 
+GreaterGreater 02AA2 
+GreaterLess 02277 
+GreaterSlantEqual 02A7E 
+GreaterTilde 02273 
+Gscr 1D4A2 
+Gt 0226B 
+HARDcy 0042A 
+Hacek 002C7 
+Hat 0005E 
+Hcirc 00124 
+Hfr 0210C 
+HilbertSpace 0210B 
+Hopf 0210D 
+HorizontalLine 02500 
+Hscr 0210B 
+Hstrok 00126 
+HumpDownHump 0224E 
+HumpEqual 0224F 
+IEcy 00415 
+IJlig 00132 
+IOcy 00401 
+Iacute 000CD 
+Icirc 000CE 
+Icy 00418 
+Idot 00130 
+Ifr 02111 
+Igrave 000CC 
+Im 02111 
+Imacr 0012A 
+ImaginaryI 02148 
+Implies 021D2 
+Int 0222C 
+Integral 0222B 
+Intersection 022C2 
+InvisibleComma 02063 
+InvisibleTimes 02062 
+Iogon 0012E 
+Iopf 1D540 
+Iota 00399 
+Iscr 02110 
+Itilde 00128 
+Iukcy 00406 
+Iuml 000CF 
+Jcirc 00134 
+Jcy 00419 
+Jfr 1D50D 
+Jopf 1D541 
+Jscr 1D4A5 
+Jsercy 00408 
+Jukcy 00404 
+KHcy 00425 
+KJcy 0040C 
+Kappa 0039A 
+Kcedil 00136 
+Kcy 0041A 
+Kfr 1D50E 
+Kopf 1D542 
+Kscr 1D4A6 
+LJcy 00409 
+LT 0003C 
+Lacute 00139 
+Lambda 0039B 
+Lang 027EA 
+Laplacetrf 02112 
+Larr 0219E 
+Lcaron 0013D 
+Lcedil 0013B 
+Lcy 0041B 
+LeftAngleBracket 027E8 
+LeftArrow 02190 
+LeftArrowBar 021E4 
+LeftArrowRightArrow 021C6 
+LeftCeiling 02308 
+LeftDoubleBracket 027E6 
+LeftDownTeeVector 02961 
+LeftDownVector 021C3 
+LeftDownVectorBar 02959 
+LeftFloor 0230A 
+LeftRightArrow 02194 
+LeftRightVector 0294E 
+LeftTee 022A3 
+LeftTeeArrow 021A4 
+LeftTeeVector 0295A 
+LeftTriangle 022B2 
+LeftTriangleBar 029CF 
+LeftTriangleEqual 022B4 
+LeftUpDownVector 02951 
+LeftUpTeeVector 02960 
+LeftUpVector 021BF 
+LeftUpVectorBar 02958 
+LeftVector 021BC 
+LeftVectorBar 02952 
+Leftarrow 021D0 
+Leftrightarrow 021D4 
+LessEqualGreater 022DA 
+LessFullEqual 02266 
+LessGreater 02276 
+LessLess 02AA1 
+LessSlantEqual 02A7D 
+LessTilde 02272 
+Lfr 1D50F 
+Ll 022D8 
+Lleftarrow 021DA 
+Lmidot 0013F 
+LongLeftArrow 027F5 
+LongLeftRightArrow 027F7 
+LongRightArrow 027F6 
+Longleftarrow 027F8 
+Longleftrightarrow 027FA 
+Longrightarrow 027F9 
+Lopf 1D543 
+LowerLeftArrow 02199 
+LowerRightArrow 02198 
+Lscr 02112 
+Lsh 021B0 
+Lstrok 00141 
+Lt 0226A 
+Map 02905 
+Mcy 0041C 
+MediumSpace 0205F 
+Mellintrf 02133 
+Mfr 1D510 
+MinusPlus 02213 
+Mopf 1D544 
+Mscr 02133 
+Mu 0039C 
+NJcy 0040A 
+Nacute 00143 
+Ncaron 00147 
+Ncedil 00145 
+Ncy 0041D 
+NegativeMediumSpace 0200B 
+NegativeThickSpace 0200B 
+NegativeThinSpace 0200B 
+NegativeVeryThinSpace 0200B 
+NestedGreaterGreater 0226B 
+NestedLessLess 0226A 
+NewLine 0000A 
+Nfr 1D511 
+NoBreak 02060 
+NonBreakingSpace 000A0 
+Nopf 02115 
+Not 02AEC 
+NotCongruent 02262 
+NotCupCap 0226D 
+NotDoubleVerticalBar 02226 
+NotElement 02209 
+NotEqual 02260 
+NotEqualTilde 02242 00338
+NotExists 02204 
+NotGreater 0226F 
+NotGreaterEqual 02271 
+NotGreaterFullEqual 02267 00338
+NotGreaterGreater 0226B 00338
+NotGreaterLess 02279 
+NotGreaterSlantEqual 02A7E 00338
+NotGreaterTilde 02275 
+NotHumpDownHump 0224E 00338
+NotHumpEqual 0224F 00338
+NotLeftTriangle 022EA 
+NotLeftTriangleBar 029CF 00338
+NotLeftTriangleEqual 022EC 
+NotLess 0226E 
+NotLessEqual 02270 
+NotLessGreater 02278 
+NotLessLess 0226A 00338
+NotLessSlantEqual 02A7D 00338
+NotLessTilde 02274 
+NotNestedGreaterGreater 02AA2 00338
+NotNestedLessLess 02AA1 00338
+NotPrecedes 02280 
+NotPrecedesEqual 02AAF 00338
+NotPrecedesSlantEqual 022E0 
+NotReverseElement 0220C 
+NotRightTriangle 022EB 
+NotRightTriangleBar 029D0 00338
+NotRightTriangleEqual 022ED 
+NotSquareSubset 0228F 00338
+NotSquareSubsetEqual 022E2 
+NotSquareSuperset 02290 00338
+NotSquareSupersetEqual 022E3 
+NotSubset 02282 020D2
+NotSubsetEqual 02288 
+NotSucceeds 02281 
+NotSucceedsEqual 02AB0 00338
+NotSucceedsSlantEqual 022E1 
+NotSucceedsTilde 0227F 00338
+NotSuperset 02283 020D2
+NotSupersetEqual 02289 
+NotTilde 02241 
+NotTildeEqual 02244 
+NotTildeFullEqual 02247 
+NotTildeTilde 02249 
+NotVerticalBar 02224 
+Nscr 1D4A9 
+Ntilde 000D1 
+Nu 0039D 
+OElig 00152 
+Oacute 000D3 
+Ocirc 000D4 
+Ocy 0041E 
+Odblac 00150 
+Ofr 1D512 
+Ograve 000D2 
+Omacr 0014C 
+Omega 003A9 
+Omicron 0039F 
+Oopf 1D546 
+OpenCurlyDoubleQuote 0201C 
+OpenCurlyQuote 02018 
+Or 02A54 
+Oscr 1D4AA 
+Oslash 000D8 
+Otilde 000D5 
+Otimes 02A37 
+Ouml 000D6 
+OverBar 0203E 
+OverBrace 023DE 
+OverBracket 023B4 
+OverParenthesis 023DC 
+PartialD 02202 
+Pcy 0041F 
+Pfr 1D513 
+Phi 003A6 
+Pi 003A0 
+PlusMinus 000B1 
+Poincareplane 0210C 
+Popf 02119 
+Pr 02ABB 
+Precedes 0227A 
+PrecedesEqual 02AAF 
+PrecedesSlantEqual 0227C 
+PrecedesTilde 0227E 
+Prime 02033 
+Product 0220F 
+Proportion 02237 
+Proportional 0221D 
+Pscr 1D4AB 
+Psi 003A8 
+QUOT 00022 
+Qfr 1D514 
+Qopf 0211A 
+Qscr 1D4AC 
+RBarr 02910 
+REG 000AE 
+Racute 00154 
+Rang 027EB 
+Rarr 021A0 
+Rarrtl 02916 
+Rcaron 00158 
+Rcedil 00156 
+Rcy 00420 
+Re 0211C 
+ReverseElement 0220B 
+ReverseEquilibrium 021CB 
+ReverseUpEquilibrium 0296F 
+Rfr 0211C 
+Rho 003A1 
+RightAngleBracket 027E9 
+RightArrow 02192 
+RightArrowBar 021E5 
+RightArrowLeftArrow 021C4 
+RightCeiling 02309 
+RightDoubleBracket 027E7 
+RightDownTeeVector 0295D 
+RightDownVector 021C2 
+RightDownVectorBar 02955 
+RightFloor 0230B 
+RightTee 022A2 
+RightTeeArrow 021A6 
+RightTeeVector 0295B 
+RightTriangle 022B3 
+RightTriangleBar 029D0 
+RightTriangleEqual 022B5 
+RightUpDownVector 0294F 
+RightUpTeeVector 0295C 
+RightUpVector 021BE 
+RightUpVectorBar 02954 
+RightVector 021C0 
+RightVectorBar 02953 
+Rightarrow 021D2 
+Ropf 0211D 
+RoundImplies 02970 
+Rrightarrow 021DB 
+Rscr 0211B 
+Rsh 021B1 
+RuleDelayed 029F4 
+SHCHcy 00429 
+SHcy 00428 
+SOFTcy 0042C 
+Sacute 0015A 
+Sc 02ABC 
+Scaron 00160 
+Scedil 0015E 
+Scirc 0015C 
+Scy 00421 
+Sfr 1D516 
+ShortDownArrow 02193 
+ShortLeftArrow 02190 
+ShortRightArrow 02192 
+ShortUpArrow 02191 
+Sigma 003A3 
+SmallCircle 02218 
+Sopf 1D54A 
+Sqrt 0221A 
+Square 025A1 
+SquareIntersection 02293 
+SquareSubset 0228F 
+SquareSubsetEqual 02291 
+SquareSuperset 02290 
+SquareSupersetEqual 02292 
+SquareUnion 02294 
+Sscr 1D4AE 
+Star 022C6 
+Sub 022D0 
+Subset 022D0 
+SubsetEqual 02286 
+Succeeds 0227B 
+SucceedsEqual 02AB0 
+SucceedsSlantEqual 0227D 
+SucceedsTilde 0227F 
+SuchThat 0220B 
+Sum 02211 
+Sup 022D1 
+Superset 02283 
+SupersetEqual 02287 
+Supset 022D1 
+THORN 000DE 
+TRADE 02122 
+TSHcy 0040B 
+TScy 00426 
+Tab 00009 
+Tau 003A4 
+Tcaron 00164 
+Tcedil 00162 
+Tcy 00422 
+Tfr 1D517 
+Therefore 02234 
+Theta 00398 
+ThickSpace 0205F 0200A
+ThinSpace 02009 
+Tilde 0223C 
+TildeEqual 02243 
+TildeFullEqual 02245 
+TildeTilde 02248 
+Topf 1D54B 
+TripleDot 020DB 
+Tscr 1D4AF 
+Tstrok 00166 
+Uacute 000DA 
+Uarr 0219F 
+Uarrocir 02949 
+Ubrcy 0040E 
+Ubreve 0016C 
+Ucirc 000DB 
+Ucy 00423 
+Udblac 00170 
+Ufr 1D518 
+Ugrave 000D9 
+Umacr 0016A 
+UnderBar 0005F 
+UnderBrace 023DF 
+UnderBracket 023B5 
+UnderParenthesis 023DD 
+Union 022C3 
+UnionPlus 0228E 
+Uogon 00172 
+Uopf 1D54C 
+UpArrow 02191 
+UpArrowBar 02912 
+UpArrowDownArrow 021C5 
+UpDownArrow 02195 
+UpEquilibrium 0296E 
+UpTee 022A5 
+UpTeeArrow 021A5 
+Uparrow 021D1 
+Updownarrow 021D5 
+UpperLeftArrow 02196 
+UpperRightArrow 02197 
+Upsi 003D2 
+Upsilon 003A5 
+Uring 0016E 
+Uscr 1D4B0 
+Utilde 00168 
+Uuml 000DC 
+VDash 022AB 
+Vbar 02AEB 
+Vcy 00412 
+Vdash 022A9 
+Vdashl 02AE6 
+Vee 022C1 
+Verbar 02016 
+Vert 02016 
+VerticalBar 02223 
+VerticalLine 0007C 
+VerticalSeparator 02758 
+VerticalTilde 02240 
+VeryThinSpace 0200A 
+Vfr 1D519 
+Vopf 1D54D 
+Vscr 1D4B1 
+Vvdash 022AA 
+Wcirc 00174 
+Wedge 022C0 
+Wfr 1D51A 
+Wopf 1D54E 
+Wscr 1D4B2 
+Xfr 1D51B 
+Xi 0039E 
+Xopf 1D54F 
+Xscr 1D4B3 
+YAcy 0042F 
+YIcy 00407 
+YUcy 0042E 
+Yacute 000DD 
+Ycirc 00176 
+Ycy 0042B 
+Yfr 1D51C 
+Yopf 1D550 
+Yscr 1D4B4 
+Yuml 00178 
+ZHcy 00416 
+Zacute 00179 
+Zcaron 0017D 
+Zcy 00417 
+Zdot 0017B 
+ZeroWidthSpace 0200B 
+Zeta 00396 
+Zfr 02128 
+Zopf 02124 
+Zscr 1D4B5 
+aacute 000E1 
+abreve 00103 
+ac 0223E 
+acE 0223E 00333
+acd 0223F 
+acirc 000E2 
+acute 000B4 
+acy 00430 
+aelig 000E6 
+af 02061 
+afr 1D51E 
+agrave 000E0 
+alefsym 02135 
+aleph 02135 
+alpha 003B1 
+amacr 00101 
+amalg 02A3F 
+amp 00026 
+and 02227 
+andand 02A55 
+andd 02A5C 
+andslope 02A58 
+andv 02A5A 
+ang 02220 
+ange 029A4 
+angle 02220 
+angmsd 02221 
+angmsdaa 029A8 
+angmsdab 029A9 
+angmsdac 029AA 
+angmsdad 029AB 
+angmsdae 029AC 
+angmsdaf 029AD 
+angmsdag 029AE 
+angmsdah 029AF 
+angrt 0221F 
+angrtvb 022BE 
+angrtvbd 0299D 
+angsph 02222 
+angst 000C5 
+angzarr 0237C 
+aogon 00105 
+aopf 1D552 
+ap 02248 
+apE 02A70 
+apacir 02A6F 
+ape 0224A 
+apid 0224B 
+apos 00027 
+approx 02248 
+approxeq 0224A 
+aring 000E5 
+ascr 1D4B6 
+ast 0002A 
+asymp 02248 
+asympeq 0224D 
+atilde 000E3 
+auml 000E4 
+awconint 02233 
+awint 02A11 
+bNot 02AED 
+backcong 0224C 
+backepsilon 003F6 
+backprime 02035 
+backsim 0223D 
+backsimeq 022CD 
+barvee 022BD 
+barwed 02305 
+barwedge 02305 
+bbrk 023B5 
+bbrktbrk 023B6 
+bcong 0224C 
+bcy 00431 
+bdquo 0201E 
+becaus 02235 
+because 02235 
+bemptyv 029B0 
+bepsi 003F6 
+bernou 0212C 
+beta 003B2 
+beth 02136 
+between 0226C 
+bfr 1D51F 
+bigcap 022C2 
+bigcirc 025EF 
+bigcup 022C3 
+bigodot 02A00 
+bigoplus 02A01 
+bigotimes 02A02 
+bigsqcup 02A06 
+bigstar 02605 
+bigtriangledown 025BD 
+bigtriangleup 025B3 
+biguplus 02A04 
+bigvee 022C1 
+bigwedge 022C0 
+bkarow 0290D 
+blacklozenge 029EB 
+blacksquare 025AA 
+blacktriangle 025B4 
+blacktriangledown 025BE 
+blacktriangleleft 025C2 
+blacktriangleright 025B8 
+blank 02423 
+blk12 02592 
+blk14 02591 
+blk34 02593 
+block 02588 
+bne 0003D 020E5
+bnequiv 02261 020E5
+bnot 02310 
+bopf 1D553 
+bot 022A5 
+bottom 022A5 
+bowtie 022C8 
+boxDL 02557 
+boxDR 02554 
+boxDl 02556 
+boxDr 02553 
+boxH 02550 
+boxHD 02566 
+boxHU 02569 
+boxHd 02564 
+boxHu 02567 
+boxUL 0255D 
+boxUR 0255A 
+boxUl 0255C 
+boxUr 02559 
+boxV 02551 
+boxVH 0256C 
+boxVL 02563 
+boxVR 02560 
+boxVh 0256B 
+boxVl 02562 
+boxVr 0255F 
+boxbox 029C9 
+boxdL 02555 
+boxdR 02552 
+boxdl 02510 
+boxdr 0250C 
+boxh 02500 
+boxhD 02565 
+boxhU 02568 
+boxhd 0252C 
+boxhu 02534 
+boxminus 0229F 
+boxplus 0229E 
+boxtimes 022A0 
+boxuL 0255B 
+boxuR 02558 
+boxul 02518 
+boxur 02514 
+boxv 02502 
+boxvH 0256A 
+boxvL 02561 
+boxvR 0255E 
+boxvh 0253C 
+boxvl 02524 
+boxvr 0251C 
+bprime 02035 
+breve 002D8 
+brvbar 000A6 
+bscr 1D4B7 
+bsemi 0204F 
+bsim 0223D 
+bsime 022CD 
+bsol 0005C 
+bsolb 029C5 
+bsolhsub 027C8 
+bull 02022 
+bullet 02022 
+bump 0224E 
+bumpE 02AAE 
+bumpe 0224F 
+bumpeq 0224F 
+cacute 00107 
+cap 02229 
+capand 02A44 
+capbrcup 02A49 
+capcap 02A4B 
+capcup 02A47 
+capdot 02A40 
+caps 02229 0FE00
+caret 02041 
+caron 002C7 
+ccaps 02A4D 
+ccaron 0010D 
+ccedil 000E7 
+ccirc 00109 
+ccups 02A4C 
+ccupssm 02A50 
+cdot 0010B 
+cedil 000B8 
+cemptyv 029B2 
+cent 000A2 
+centerdot 000B7 
+cfr 1D520 
+chcy 00447 
+check 02713 
+checkmark 02713 
+chi 003C7 
+cir 025CB 
+cirE 029C3 
+circ 002C6 
+circeq 02257 
+circlearrowleft 021BA 
+circlearrowright 021BB 
+circledR 000AE 
+circledS 024C8 
+circledast 0229B 
+circledcirc 0229A 
+circleddash 0229D 
+cire 02257 
+cirfnint 02A10 
+cirmid 02AEF 
+cirscir 029C2 
+clubs 02663 
+clubsuit 02663 
+colon 0003A 
+colone 02254 
+coloneq 02254 
+comma 0002C 
+commat 00040 
+comp 02201 
+compfn 02218 
+complement 02201 
+complexes 02102 
+cong 02245 
+congdot 02A6D 
+conint 0222E 
+copf 1D554 
+coprod 02210 
+copy 000A9 
+copysr 02117 
+crarr 021B5 
+cross 02717 
+cscr 1D4B8 
+csub 02ACF 
+csube 02AD1 
+csup 02AD0 
+csupe 02AD2 
+ctdot 022EF 
+cudarrl 02938 
+cudarrr 02935 
+cuepr 022DE 
+cuesc 022DF 
+cularr 021B6 
+cularrp 0293D 
+cup 0222A 
+cupbrcap 02A48 
+cupcap 02A46 
+cupcup 02A4A 
+cupdot 0228D 
+cupor 02A45 
+cups 0222A 0FE00
+curarr 021B7 
+curarrm 0293C 
+curlyeqprec 022DE 
+curlyeqsucc 022DF 
+curlyvee 022CE 
+curlywedge 022CF 
+curren 000A4 
+curvearrowleft 021B6 
+curvearrowright 021B7 
+cuvee 022CE 
+cuwed 022CF 
+cwconint 02232 
+cwint 02231 
+cylcty 0232D 
+dArr 021D3 
+dHar 02965 
+dagger 02020 
+daleth 02138 
+darr 02193 
+dash 02010 
+dashv 022A3 
+dbkarow 0290F 
+dblac 002DD 
+dcaron 0010F 
+dcy 00434 
+dd 02146 
+ddagger 02021 
+ddarr 021CA 
+ddotseq 02A77 
+deg 000B0 
+delta 003B4 
+demptyv 029B1 
+dfisht 0297F 
+dfr 1D521 
+dharl 021C3 
+dharr 021C2 
+diam 022C4 
+diamond 022C4 
+diamondsuit 02666 
+diams 02666 
+die 000A8 
+digamma 003DD 
+disin 022F2 
+div 000F7 
+divide 000F7 
+divideontimes 022C7 
+divonx 022C7 
+djcy 00452 
+dlcorn 0231E 
+dlcrop 0230D 
+dollar 00024 
+dopf 1D555 
+dot 002D9 
+doteq 02250 
+doteqdot 02251 
+dotminus 02238 
+dotplus 02214 
+dotsquare 022A1 
+doublebarwedge 02306 
+downarrow 02193 
+downdownarrows 021CA 
+downharpoonleft 021C3 
+downharpoonright 021C2 
+drbkarow 02910 
+drcorn 0231F 
+drcrop 0230C 
+dscr 1D4B9 
+dscy 00455 
+dsol 029F6 
+dstrok 00111 
+dtdot 022F1 
+dtri 025BF 
+dtrif 025BE 
+duarr 021F5 
+duhar 0296F 
+dwangle 029A6 
+dzcy 0045F 
+dzigrarr 027FF 
+eDDot 02A77 
+eDot 02251 
+eacute 000E9 
+easter 02A6E 
+ecaron 0011B 
+ecir 02256 
+ecirc 000EA 
+ecolon 02255 
+ecy 0044D 
+edot 00117 
+ee 02147 
+efDot 02252 
+efr 1D522 
+eg 02A9A 
+egrave 000E8 
+egs 02A96 
+egsdot 02A98 
+el 02A99 
+elinters 023E7 
+ell 02113 
+els 02A95 
+elsdot 02A97 
+emacr 00113 
+empty 02205 
+emptyset 02205 
+emptyv 02205 
+emsp 02003 
+emsp13 02004 
+emsp14 02005 
+eng 0014B 
+ensp 02002 
+eogon 00119 
+eopf 1D556 
+epar 022D5 
+eparsl 029E3 
+eplus 02A71 
+epsi 003B5 
+epsilon 003B5 
+epsiv 003F5 
+eqcirc 02256 
+eqcolon 02255 
+eqsim 02242 
+eqslantgtr 02A96 
+eqslantless 02A95 
+equals 0003D 
+equest 0225F 
+equiv 02261 
+equivDD 02A78 
+eqvparsl 029E5 
+erDot 02253 
+erarr 02971 
+escr 0212F 
+esdot 02250 
+esim 02242 
+eta 003B7 
+eth 000F0 
+euml 000EB 
+euro 020AC 
+excl 00021 
+exist 02203 
+expectation 02130 
+exponentiale 02147 
+fallingdotseq 02252 
+fcy 00444 
+female 02640 
+ffilig 0FB03 
+fflig 0FB00 
+ffllig 0FB04 
+ffr 1D523 
+filig 0FB01 
+fjlig 00066 0006A
+flat 0266D 
+fllig 0FB02 
+fltns 025B1 
+fnof 00192 
+fopf 1D557 
+forall 02200 
+fork 022D4 
+forkv 02AD9 
+fpartint 02A0D 
+frac12 000BD 
+frac13 02153 
+frac14 000BC 
+frac15 02155 
+frac16 02159 
+frac18 0215B 
+frac23 02154 
+frac25 02156 
+frac34 000BE 
+frac35 02157 
+frac38 0215C 
+frac45 02158 
+frac56 0215A 
+frac58 0215D 
+frac78 0215E 
+frasl 02044 
+frown 02322 
+fscr 1D4BB 
+gE 02267 
+gEl 02A8C 
+gacute 001F5 
+gamma 003B3 
+gammad 003DD 
+gap 02A86 
+gbreve 0011F 
+gcirc 0011D 
+gcy 00433 
+gdot 00121 
+ge 02265 
+gel 022DB 
+geq 02265 
+geqq 02267 
+geqslant 02A7E 
+ges 02A7E 
+gescc 02AA9 
+gesdot 02A80 
+gesdoto 02A82 
+gesdotol 02A84 
+gesl 022DB 0FE00
+gesles 02A94 
+gfr 1D524 
+gg 0226B 
+ggg 022D9 
+gimel 02137 
+gjcy 00453 
+gl 02277 
+glE 02A92 
+gla 02AA5 
+glj 02AA4 
+gnE 02269 
+gnap 02A8A 
+gnapprox 02A8A 
+gne 02A88 
+gneq 02A88 
+gneqq 02269 
+gnsim 022E7 
+gopf 1D558 
+grave 00060 
+gscr 0210A 
+gsim 02273 
+gsime 02A8E 
+gsiml 02A90 
+gt 0003E 
+gtcc 02AA7 
+gtcir 02A7A 
+gtdot 022D7 
+gtlPar 02995 
+gtquest 02A7C 
+gtrapprox 02A86 
+gtrarr 02978 
+gtrdot 022D7 
+gtreqless 022DB 
+gtreqqless 02A8C 
+gtrless 02277 
+gtrsim 02273 
+gvertneqq 02269 0FE00
+gvnE 02269 0FE00
+hArr 021D4 
+hairsp 0200A 
+half 000BD 
+hamilt 0210B 
+hardcy 0044A 
+harr 02194 
+harrcir 02948 
+harrw 021AD 
+hbar 0210F 
+hcirc 00125 
+hearts 02665 
+heartsuit 02665 
+hellip 02026 
+hercon 022B9 
+hfr 1D525 
+hksearow 02925 
+hkswarow 02926 
+hoarr 021FF 
+homtht 0223B 
+hookleftarrow 021A9 
+hookrightarrow 021AA 
+hopf 1D559 
+horbar 02015 
+hscr 1D4BD 
+hslash 0210F 
+hstrok 00127 
+hybull 02043 
+hyphen 02010 
+iacute 000ED 
+ic 02063 
+icirc 000EE 
+icy 00438 
+iecy 00435 
+iexcl 000A1 
+iff 021D4 
+ifr 1D526 
+igrave 000EC 
+ii 02148 
+iiiint 02A0C 
+iiint 0222D 
+iinfin 029DC 
+iiota 02129 
+ijlig 00133 
+imacr 0012B 
+image 02111 
+imagline 02110 
+imagpart 02111 
+imath 00131 
+imof 022B7 
+imped 001B5 
+in 02208 
+incare 02105 
+infin 0221E 
+infintie 029DD 
+inodot 00131 
+int 0222B 
+intcal 022BA 
+integers 02124 
+intercal 022BA 
+intlarhk 02A17 
+intprod 02A3C 
+iocy 00451 
+iogon 0012F 
+iopf 1D55A 
+iota 003B9 
+iprod 02A3C 
+iquest 000BF 
+iscr 1D4BE 
+isin 02208 
+isinE 022F9 
+isindot 022F5 
+isins 022F4 
+isinsv 022F3 
+isinv 02208 
+it 02062 
+itilde 00129 
+iukcy 00456 
+iuml 000EF 
+jcirc 00135 
+jcy 00439 
+jfr 1D527 
+jmath 00237 
+jopf 1D55B 
+jscr 1D4BF 
+jsercy 00458 
+jukcy 00454 
+kappa 003BA 
+kappav 003F0 
+kcedil 00137 
+kcy 0043A 
+kfr 1D528 
+kgreen 00138 
+khcy 00445 
+kjcy 0045C 
+kopf 1D55C 
+kscr 1D4C0 
+lAarr 021DA 
+lArr 021D0 
+lAtail 0291B 
+lBarr 0290E 
+lE 02266 
+lEg 02A8B 
+lHar 02962 
+lacute 0013A 
+laemptyv 029B4 
+lagran 02112 
+lambda 003BB 
+lang 027E8 
+langd 02991 
+langle 027E8 
+lap 02A85 
+laquo 000AB 
+larr 02190 
+larrb 021E4 
+larrbfs 0291F 
+larrfs 0291D 
+larrhk 021A9 
+larrlp 021AB 
+larrpl 02939 
+larrsim 02973 
+larrtl 021A2 
+lat 02AAB 
+latail 02919 
+late 02AAD 
+lates 02AAD 0FE00
+lbarr 0290C 
+lbbrk 02772 
+lbrace 0007B 
+lbrack 0005B 
+lbrke 0298B 
+lbrksld 0298F 
+lbrkslu 0298D 
+lcaron 0013E 
+lcedil 0013C 
+lceil 02308 
+lcub 0007B 
+lcy 0043B 
+ldca 02936 
+ldquo 0201C 
+ldquor 0201E 
+ldrdhar 02967 
+ldrushar 0294B 
+ldsh 021B2 
+le 02264 
+leftarrow 02190 
+leftarrowtail 021A2 
+leftharpoondown 021BD 
+leftharpoonup 021BC 
+leftleftarrows 021C7 
+leftrightarrow 02194 
+leftrightarrows 021C6 
+leftrightharpoons 021CB 
+leftrightsquigarrow 021AD 
+leftthreetimes 022CB 
+leg 022DA 
+leq 02264 
+leqq 02266 
+leqslant 02A7D 
+les 02A7D 
+lescc 02AA8 
+lesdot 02A7F 
+lesdoto 02A81 
+lesdotor 02A83 
+lesg 022DA 0FE00
+lesges 02A93 
+lessapprox 02A85 
+lessdot 022D6 
+lesseqgtr 022DA 
+lesseqqgtr 02A8B 
+lessgtr 02276 
+lesssim 02272 
+lfisht 0297C 
+lfloor 0230A 
+lfr 1D529 
+lg 02276 
+lgE 02A91 
+lhard 021BD 
+lharu 021BC 
+lharul 0296A 
+lhblk 02584 
+ljcy 00459 
+ll 0226A 
+llarr 021C7 
+llcorner 0231E 
+llhard 0296B 
+lltri 025FA 
+lmidot 00140 
+lmoust 023B0 
+lmoustache 023B0 
+lnE 02268 
+lnap 02A89 
+lnapprox 02A89 
+lne 02A87 
+lneq 02A87 
+lneqq 02268 
+lnsim 022E6 
+loang 027EC 
+loarr 021FD 
+lobrk 027E6 
+longleftarrow 027F5 
+longleftrightarrow 027F7 
+longmapsto 027FC 
+longrightarrow 027F6 
+looparrowleft 021AB 
+looparrowright 021AC 
+lopar 02985 
+lopf 1D55D 
+loplus 02A2D 
+lotimes 02A34 
+lowast 02217 
+lowbar 0005F 
+loz 025CA 
+lozenge 025CA 
+lozf 029EB 
+lpar 00028 
+lparlt 02993 
+lrarr 021C6 
+lrcorner 0231F 
+lrhar 021CB 
+lrhard 0296D 
+lrm 0200E 
+lrtri 022BF 
+lsaquo 02039 
+lscr 1D4C1 
+lsh 021B0 
+lsim 02272 
+lsime 02A8D 
+lsimg 02A8F 
+lsqb 0005B 
+lsquo 02018 
+lsquor 0201A 
+lstrok 00142 
+lt 0003C 
+ltcc 02AA6 
+ltcir 02A79 
+ltdot 022D6 
+lthree 022CB 
+ltimes 022C9 
+ltlarr 02976 
+ltquest 02A7B 
+ltrPar 02996 
+ltri 025C3 
+ltrie 022B4 
+ltrif 025C2 
+lurdshar 0294A 
+luruhar 02966 
+lvertneqq 02268 0FE00
+lvnE 02268 0FE00
+mDDot 0223A 
+macr 000AF 
+male 02642 
+malt 02720 
+maltese 02720 
+map 021A6 
+mapsto 021A6 
+mapstodown 021A7 
+mapstoleft 021A4 
+mapstoup 021A5 
+marker 025AE 
+mcomma 02A29 
+mcy 0043C 
+mdash 02014 
+measuredangle 02221 
+mfr 1D52A 
+mho 02127 
+micro 000B5 
+mid 02223 
+midast 0002A 
+midcir 02AF0 
+middot 000B7 
+minus 02212 
+minusb 0229F 
+minusd 02238 
+minusdu 02A2A 
+mlcp 02ADB 
+mldr 02026 
+mnplus 02213 
+models 022A7 
+mopf 1D55E 
+mp 02213 
+mscr 1D4C2 
+mstpos 0223E 
+mu 003BC 
+multimap 022B8 
+mumap 022B8 
+nGg 022D9 00338
+nGt 0226B 020D2
+nGtv 0226B 00338
+nLeftarrow 021CD 
+nLeftrightarrow 021CE 
+nLl 022D8 00338
+nLt 0226A 020D2
+nLtv 0226A 00338
+nRightarrow 021CF 
+nVDash 022AF 
+nVdash 022AE 
+nabla 02207 
+nacute 00144 
+nang 02220 020D2
+nap 02249 
+napE 02A70 00338
+napid 0224B 00338
+napos 00149 
+napprox 02249 
+natur 0266E 
+natural 0266E 
+naturals 02115 
+nbsp 000A0 
+nbump 0224E 00338
+nbumpe 0224F 00338
+ncap 02A43 
+ncaron 00148 
+ncedil 00146 
+ncong 02247 
+ncongdot 02A6D 00338
+ncup 02A42 
+ncy 0043D 
+ndash 02013 
+ne 02260 
+neArr 021D7 
+nearhk 02924 
+nearr 02197 
+nearrow 02197 
+nedot 02250 00338
+nequiv 02262 
+nesear 02928 
+nesim 02242 00338
+nexist 02204 
+nexists 02204 
+nfr 1D52B 
+ngE 02267 00338
+nge 02271 
+ngeq 02271 
+ngeqq 02267 00338
+ngeqslant 02A7E 00338
+nges 02A7E 00338
+ngsim 02275 
+ngt 0226F 
+ngtr 0226F 
+nhArr 021CE 
+nharr 021AE 
+nhpar 02AF2 
+ni 0220B 
+nis 022FC 
+nisd 022FA 
+niv 0220B 
+njcy 0045A 
+nlArr 021CD 
+nlE 02266 00338
+nlarr 0219A 
+nldr 02025 
+nle 02270 
+nleftarrow 0219A 
+nleftrightarrow 021AE 
+nleq 02270 
+nleqq 02266 00338
+nleqslant 02A7D 00338
+nles 02A7D 00338
+nless 0226E 
+nlsim 02274 
+nlt 0226E 
+nltri 022EA 
+nltrie 022EC 
+nmid 02224 
+nopf 1D55F 
+not 000AC 
+notin 02209 
+notinE 022F9 00338
+notindot 022F5 00338
+notinva 02209 
+notinvb 022F7 
+notinvc 022F6 
+notni 0220C 
+notniva 0220C 
+notnivb 022FE 
+notnivc 022FD 
+npar 02226 
+nparallel 02226 
+nparsl 02AFD 020E5
+npart 02202 00338
+npolint 02A14 
+npr 02280 
+nprcue 022E0 
+npre 02AAF 00338
+nprec 02280 
+npreceq 02AAF 00338
+nrArr 021CF 
+nrarr 0219B 
+nrarrc 02933 00338
+nrarrw 0219D 00338
+nrightarrow 0219B 
+nrtri 022EB 
+nrtrie 022ED 
+nsc 02281 
+nsccue 022E1 
+nsce 02AB0 00338
+nscr 1D4C3 
+nshortmid 02224 
+nshortparallel 02226 
+nsim 02241 
+nsime 02244 
+nsimeq 02244 
+nsmid 02224 
+nspar 02226 
+nsqsube 022E2 
+nsqsupe 022E3 
+nsub 02284 
+nsubE 02AC5 00338
+nsube 02288 
+nsubset 02282 020D2
+nsubseteq 02288 
+nsubseteqq 02AC5 00338
+nsucc 02281 
+nsucceq 02AB0 00338
+nsup 02285 
+nsupE 02AC6 00338
+nsupe 02289 
+nsupset 02283 020D2
+nsupseteq 02289 
+nsupseteqq 02AC6 00338
+ntgl 02279 
+ntilde 000F1 
+ntlg 02278 
+ntriangleleft 022EA 
+ntrianglelefteq 022EC 
+ntriangleright 022EB 
+ntrianglerighteq 022ED 
+nu 003BD 
+num 00023 
+numero 02116 
+numsp 02007 
+nvDash 022AD 
+nvHarr 02904 
+nvap 0224D 020D2
+nvdash 022AC 
+nvge 02265 020D2
+nvgt 0003E 020D2
+nvinfin 029DE 
+nvlArr 02902 
+nvle 02264 020D2
+nvlt 0003C 020D2
+nvltrie 022B4 020D2
+nvrArr 02903 
+nvrtrie 022B5 020D2
+nvsim 0223C 020D2
+nwArr 021D6 
+nwarhk 02923 
+nwarr 02196 
+nwarrow 02196 
+nwnear 02927 
+oS 024C8 
+oacute 000F3 
+oast 0229B 
+ocir 0229A 
+ocirc 000F4 
+ocy 0043E 
+odash 0229D 
+odblac 00151 
+odiv 02A38 
+odot 02299 
+odsold 029BC 
+oelig 00153 
+ofcir 029BF 
+ofr 1D52C 
+ogon 002DB 
+ograve 000F2 
+ogt 029C1 
+ohbar 029B5 
+ohm 003A9 
+oint 0222E 
+olarr 021BA 
+olcir 029BE 
+olcross 029BB 
+oline 0203E 
+olt 029C0 
+omacr 0014D 
+omega 003C9 
+omicron 003BF 
+omid 029B6 
+ominus 02296 
+oopf 1D560 
+opar 029B7 
+operp 029B9 
+oplus 02295 
+or 02228 
+orarr 021BB 
+ord 02A5D 
+order 02134 
+orderof 02134 
+ordf 000AA 
+ordm 000BA 
+origof 022B6 
+oror 02A56 
+orslope 02A57 
+orv 02A5B 
+oscr 02134 
+oslash 000F8 
+osol 02298 
+otilde 000F5 
+otimes 02297 
+otimesas 02A36 
+ouml 000F6 
+ovbar 0233D 
+par 02225 
+para 000B6 
+parallel 02225 
+parsim 02AF3 
+parsl 02AFD 
+part 02202 
+pcy 0043F 
+percnt 00025 
+period 0002E 
+permil 02030 
+perp 022A5 
+pertenk 02031 
+pfr 1D52D 
+phi 003C6 
+phiv 003D5 
+phmmat 02133 
+phone 0260E 
+pi 003C0 
+pitchfork 022D4 
+piv 003D6 
+planck 0210F 
+planckh 0210E 
+plankv 0210F 
+plus 0002B 
+plusacir 02A23 
+plusb 0229E 
+pluscir 02A22 
+plusdo 02214 
+plusdu 02A25 
+pluse 02A72 
+plusmn 000B1 
+plussim 02A26 
+plustwo 02A27 
+pm 000B1 
+pointint 02A15 
+popf 1D561 
+pound 000A3 
+pr 0227A 
+prE 02AB3 
+prap 02AB7 
+prcue 0227C 
+pre 02AAF 
+prec 0227A 
+precapprox 02AB7 
+preccurlyeq 0227C 
+preceq 02AAF 
+precnapprox 02AB9 
+precneqq 02AB5 
+precnsim 022E8 
+precsim 0227E 
+prime 02032 
+primes 02119 
+prnE 02AB5 
+prnap 02AB9 
+prnsim 022E8 
+prod 0220F 
+profalar 0232E 
+profline 02312 
+profsurf 02313 
+prop 0221D 
+propto 0221D 
+prsim 0227E 
+prurel 022B0 
+pscr 1D4C5 
+psi 003C8 
+puncsp 02008 
+qfr 1D52E 
+qint 02A0C 
+qopf 1D562 
+qprime 02057 
+qscr 1D4C6 
+quaternions 0210D 
+quatint 02A16 
+quest 0003F 
+questeq 0225F 
+quot 00022 
+rAarr 021DB 
+rArr 021D2 
+rAtail 0291C 
+rBarr 0290F 
+rHar 02964 
+race 0223D 00331
+racute 00155 
+radic 0221A 
+raemptyv 029B3 
+rang 027E9 
+rangd 02992 
+range 029A5 
+rangle 027E9 
+raquo 000BB 
+rarr 02192 
+rarrap 02975 
+rarrb 021E5 
+rarrbfs 02920 
+rarrc 02933 
+rarrfs 0291E 
+rarrhk 021AA 
+rarrlp 021AC 
+rarrpl 02945 
+rarrsim 02974 
+rarrtl 021A3 
+rarrw 0219D 
+ratail 0291A 
+ratio 02236 
+rationals 0211A 
+rbarr 0290D 
+rbbrk 02773 
+rbrace 0007D 
+rbrack 0005D 
+rbrke 0298C 
+rbrksld 0298E 
+rbrkslu 02990 
+rcaron 00159 
+rcedil 00157 
+rceil 02309 
+rcub 0007D 
+rcy 00440 
+rdca 02937 
+rdldhar 02969 
+rdquo 0201D 
+rdquor 0201D 
+rdsh 021B3 
+real 0211C 
+realine 0211B 
+realpart 0211C 
+reals 0211D 
+rect 025AD 
+reg 000AE 
+rfisht 0297D 
+rfloor 0230B 
+rfr 1D52F 
+rhard 021C1 
+rharu 021C0 
+rharul 0296C 
+rho 003C1 
+rhov 003F1 
+rightarrow 02192 
+rightarrowtail 021A3 
+rightharpoondown 021C1 
+rightharpoonup 021C0 
+rightleftarrows 021C4 
+rightleftharpoons 021CC 
+rightrightarrows 021C9 
+rightsquigarrow 0219D 
+rightthreetimes 022CC 
+ring 002DA 
+risingdotseq 02253 
+rlarr 021C4 
+rlhar 021CC 
+rlm 0200F 
+rmoust 023B1 
+rmoustache 023B1 
+rnmid 02AEE 
+roang 027ED 
+roarr 021FE 
+robrk 027E7 
+ropar 02986 
+ropf 1D563 
+roplus 02A2E 
+rotimes 02A35 
+rpar 00029 
+rpargt 02994 
+rppolint 02A12 
+rrarr 021C9 
+rsaquo 0203A 
+rscr 1D4C7 
+rsh 021B1 
+rsqb 0005D 
+rsquo 02019 
+rsquor 02019 
+rthree 022CC 
+rtimes 022CA 
+rtri 025B9 
+rtrie 022B5 
+rtrif 025B8 
+rtriltri 029CE 
+ruluhar 02968 
+rx 0211E 
+sacute 0015B 
+sbquo 0201A 
+sc 0227B 
+scE 02AB4 
+scap 02AB8 
+scaron 00161 
+sccue 0227D 
+sce 02AB0 
+scedil 0015F 
+scirc 0015D 
+scnE 02AB6 
+scnap 02ABA 
+scnsim 022E9 
+scpolint 02A13 
+scsim 0227F 
+scy 00441 
+sdot 022C5 
+sdotb 022A1 
+sdote 02A66 
+seArr 021D8 
+searhk 02925 
+searr 02198 
+searrow 02198 
+sect 000A7 
+semi 0003B 
+seswar 02929 
+setminus 02216 
+setmn 02216 
+sext 02736 
+sfr 1D530 
+sfrown 02322 
+sharp 0266F 
+shchcy 00449 
+shcy 00448 
+shortmid 02223 
+shortparallel 02225 
+shy 000AD 
+sigma 003C3 
+sigmaf 003C2 
+sigmav 003C2 
+sim 0223C 
+simdot 02A6A 
+sime 02243 
+simeq 02243 
+simg 02A9E 
+simgE 02AA0 
+siml 02A9D 
+simlE 02A9F 
+simne 02246 
+simplus 02A24 
+simrarr 02972 
+slarr 02190 
+smallsetminus 02216 
+smashp 02A33 
+smeparsl 029E4 
+smid 02223 
+smile 02323 
+smt 02AAA 
+smte 02AAC 
+smtes 02AAC 0FE00
+softcy 0044C 
+sol 0002F 
+solb 029C4 
+solbar 0233F 
+sopf 1D564 
+spades 02660 
+spadesuit 02660 
+spar 02225 
+sqcap 02293 
+sqcaps 02293 0FE00
+sqcup 02294 
+sqcups 02294 0FE00
+sqsub 0228F 
+sqsube 02291 
+sqsubset 0228F 
+sqsubseteq 02291 
+sqsup 02290 
+sqsupe 02292 
+sqsupset 02290 
+sqsupseteq 02292 
+squ 025A1 
+square 025A1 
+squarf 025AA 
+squf 025AA 
+srarr 02192 
+sscr 1D4C8 
+ssetmn 02216 
+ssmile 02323 
+sstarf 022C6 
+star 02606 
+starf 02605 
+straightepsilon 003F5 
+straightphi 003D5 
+strns 000AF 
+sub 02282 
+subE 02AC5 
+subdot 02ABD 
+sube 02286 
+subedot 02AC3 
+submult 02AC1 
+subnE 02ACB 
+subne 0228A 
+subplus 02ABF 
+subrarr 02979 
+subset 02282 
+subseteq 02286 
+subseteqq 02AC5 
+subsetneq 0228A 
+subsetneqq 02ACB 
+subsim 02AC7 
+subsub 02AD5 
+subsup 02AD3 
+succ 0227B 
+succapprox 02AB8 
+succcurlyeq 0227D 
+succeq 02AB0 
+succnapprox 02ABA 
+succneqq 02AB6 
+succnsim 022E9 
+succsim 0227F 
+sum 02211 
+sung 0266A 
+sup 02283 
+sup1 000B9 
+sup2 000B2 
+sup3 000B3 
+supE 02AC6 
+supdot 02ABE 
+supdsub 02AD8 
+supe 02287 
+supedot 02AC4 
+suphsol 027C9 
+suphsub 02AD7 
+suplarr 0297B 
+supmult 02AC2 
+supnE 02ACC 
+supne 0228B 
+supplus 02AC0 
+supset 02283 
+supseteq 02287 
+supseteqq 02AC6 
+supsetneq 0228B 
+supsetneqq 02ACC 
+supsim 02AC8 
+supsub 02AD4 
+supsup 02AD6 
+swArr 021D9 
+swarhk 02926 
+swarr 02199 
+swarrow 02199 
+swnwar 0292A 
+szlig 000DF 
+target 02316 
+tau 003C4 
+tbrk 023B4 
+tcaron 00165 
+tcedil 00163 
+tcy 00442 
+tdot 020DB 
+telrec 02315 
+tfr 1D531 
+there4 02234 
+therefore 02234 
+theta 003B8 
+thetasym 003D1 
+thetav 003D1 
+thickapprox 02248 
+thicksim 0223C 
+thinsp 02009 
+thkap 02248 
+thksim 0223C 
+thorn 000FE 
+tilde 002DC 
+times 000D7 
+timesb 022A0 
+timesbar 02A31 
+timesd 02A30 
+tint 0222D 
+toea 02928 
+top 022A4 
+topbot 02336 
+topcir 02AF1 
+topf 1D565 
+topfork 02ADA 
+tosa 02929 
+tprime 02034 
+trade 02122 
+triangle 025B5 
+triangledown 025BF 
+triangleleft 025C3 
+trianglelefteq 022B4 
+triangleq 0225C 
+triangleright 025B9 
+trianglerighteq 022B5 
+tridot 025EC 
+trie 0225C 
+triminus 02A3A 
+triplus 02A39 
+trisb 029CD 
+tritime 02A3B 
+trpezium 023E2 
+tscr 1D4C9 
+tscy 00446 
+tshcy 0045B 
+tstrok 00167 
+twixt 0226C 
+twoheadleftarrow 0219E 
+twoheadrightarrow 021A0 
+uArr 021D1 
+uHar 02963 
+uacute 000FA 
+uarr 02191 
+ubrcy 0045E 
+ubreve 0016D 
+ucirc 000FB 
+ucy 00443 
+udarr 021C5 
+udblac 00171 
+udhar 0296E 
+ufisht 0297E 
+ufr 1D532 
+ugrave 000F9 
+uharl 021BF 
+uharr 021BE 
+uhblk 02580 
+ulcorn 0231C 
+ulcorner 0231C 
+ulcrop 0230F 
+ultri 025F8 
+umacr 0016B 
+uml 000A8 
+uogon 00173 
+uopf 1D566 
+uparrow 02191 
+updownarrow 02195 
+upharpoonleft 021BF 
+upharpoonright 021BE 
+uplus 0228E 
+upsi 003C5 
+upsih 003D2 
+upsilon 003C5 
+upuparrows 021C8 
+urcorn 0231D 
+urcorner 0231D 
+urcrop 0230E 
+uring 0016F 
+urtri 025F9 
+uscr 1D4CA 
+utdot 022F0 
+utilde 00169 
+utri 025B5 
+utrif 025B4 
+uuarr 021C8 
+uuml 000FC 
+uwangle 029A7 
+vArr 021D5 
+vBar 02AE8 
+vBarv 02AE9 
+vDash 022A8 
+vangrt 0299C 
+varepsilon 003F5 
+varkappa 003F0 
+varnothing 02205 
+varphi 003D5 
+varpi 003D6 
+varpropto 0221D 
+varr 02195 
+varrho 003F1 
+varsigma 003C2 
+varsubsetneq 0228A 0FE00
+varsubsetneqq 02ACB 0FE00
+varsupsetneq 0228B 0FE00
+varsupsetneqq 02ACC 0FE00
+vartheta 003D1 
+vartriangleleft 022B2 
+vartriangleright 022B3 
+vcy 00432 
+vdash 022A2 
+vee 02228 
+veebar 022BB 
+veeeq 0225A 
+vellip 022EE 
+verbar 0007C 
+vert 0007C 
+vfr 1D533 
+vltri 022B2 
+vnsub 02282 020D2
+vnsup 02283 020D2
+vopf 1D567 
+vprop 0221D 
+vrtri 022B3 
+vscr 1D4CB 
+vsubnE 02ACB 0FE00
+vsubne 0228A 0FE00
+vsupnE 02ACC 0FE00
+vsupne 0228B 0FE00
+vzigzag 0299A 
+wcirc 00175 
+wedbar 02A5F 
+wedge 02227 
+wedgeq 02259 
+weierp 02118 
+wfr 1D534 
+wopf 1D568 
+wp 02118 
+wr 02240 
+wreath 02240 
+wscr 1D4CC 
+xcap 022C2 
+xcirc 025EF 
+xcup 022C3 
+xdtri 025BD 
+xfr 1D535 
+xhArr 027FA 
+xharr 027F7 
+xi 003BE 
+xlArr 027F8 
+xlarr 027F5 
+xmap 027FC 
+xnis 022FB 
+xodot 02A00 
+xopf 1D569 
+xoplus 02A01 
+xotime 02A02 
+xrArr 027F9 
+xrarr 027F6 
+xscr 1D4CD 
+xsqcup 02A06 
+xuplus 02A04 
+xutri 025B3 
+xvee 022C1 
+xwedge 022C0 
+yacute 000FD 
+yacy 0044F 
+ycirc 00177 
+ycy 0044B 
+yen 000A5 
+yfr 1D536 
+yicy 00457 
+yopf 1D56A 
+yscr 1D4CE 
+yucy 0044E 
+yuml 000FF 
+zacute 0017A 
+zcaron 0017E 
+zcy 00437 
+zdot 0017C 
+zeetrf 02128 
+zeta 003B6 
+zfr 1D537 
+zhcy 00436 
+zigrarr 021DD 
+zopf 1D56B 
+zscr 1D4CF 
+zwj 0200D 
+zwnj 0200C 
\ No newline at end of file
diff --git a/ext/standard/html_tables/ents_xhtml.txt b/ext/standard/html_tables/ents_xhtml.txt
new file mode 100644 (file)
index 0000000..81800bc
--- /dev/null
@@ -0,0 +1,253 @@
+nbsp 00A0
+iexcl 00A1
+cent 00A2
+pound 00A3
+curren 00A4
+yen 00A5
+brvbar 00A6
+sect 00A7
+uml 00A8
+copy 00A9
+ordf 00AA
+laquo 00AB
+not 00AC
+shy 00AD
+reg 00AE
+macr 00AF
+deg 00B0
+plusmn 00B1
+sup2 00B2
+sup3 00B3
+acute 00B4
+micro 00B5
+para 00B6
+middot 00B7
+cedil 00B8
+sup1 00B9
+ordm 00BA
+raquo 00BB
+frac14 00BC
+frac12 00BD
+frac34 00BE
+iquest 00BF
+Agrave 00C0
+Aacute 00C1
+Acirc 00C2
+Atilde 00C3
+Auml 00C4
+Aring 00C5
+AElig 00C6
+Ccedil 00C7
+Egrave 00C8
+Eacute 00C9
+Ecirc 00CA
+Euml 00CB
+Igrave 00CC
+Iacute 00CD
+Icirc 00CE
+Iuml 00CF
+ETH 00D0
+Ntilde 00D1
+Ograve 00D2
+Oacute 00D3
+Ocirc 00D4
+Otilde 00D5
+Ouml 00D6
+times 00D7
+Oslash 00D8
+Ugrave 00D9
+Uacute 00DA
+Ucirc 00DB
+Uuml 00DC
+Yacute 00DD
+THORN 00DE
+szlig 00DF
+agrave 00E0
+aacute 00E1
+acirc 00E2
+atilde 00E3
+auml 00E4
+aring 00E5
+aelig 00E6
+ccedil 00E7
+egrave 00E8
+eacute 00E9
+ecirc 00EA
+euml 00EB
+igrave 00EC
+iacute 00ED
+icirc 00EE
+iuml 00EF
+eth 00F0
+ntilde 00F1
+ograve 00F2
+oacute 00F3
+ocirc 00F4
+otilde 00F5
+ouml 00F6
+divide 00F7
+oslash 00F8
+ugrave 00F9
+uacute 00FA
+ucirc 00FB
+uuml 00FC
+yacute 00FD
+thorn 00FE
+yuml 00FF
+quot 0022
+amp 0026
+lt 003C
+gt 003E
+apos 0027
+OElig 0152
+oelig 0153
+Scaron 0160
+scaron 0161
+Yuml 0178
+circ 02C6
+tilde 02DC
+ensp 2002
+emsp 2003
+thinsp 2009
+zwnj 200C
+zwj 200D
+lrm 200E
+rlm 200F
+ndash 2013
+mdash 2014
+lsquo 2018
+rsquo 2019
+sbquo 201A
+ldquo 201C
+rdquo 201D
+bdquo 201E
+dagger 2020
+Dagger 2021
+permil 2030
+lsaquo 2039
+rsaquo 203A
+euro 20AC
+fnof 0192
+Alpha 0391
+Beta 0392
+Gamma 0393
+Delta 0394
+Epsilon 0395
+Zeta 0396
+Eta 0397
+Theta 0398
+Iota 0399
+Kappa 039A
+Lambda 039B
+Mu 039C
+Nu 039D
+Xi 039E
+Omicron 039F
+Pi 03A0
+Rho 03A1
+Sigma 03A3
+Tau 03A4
+Upsilon 03A5
+Phi 03A6
+Chi 03A7
+Psi 03A8
+Omega 03A9
+alpha 03B1
+beta 03B2
+gamma 03B3
+delta 03B4
+epsilon 03B5
+zeta 03B6
+eta 03B7
+theta 03B8
+iota 03B9
+kappa 03BA
+lambda 03BB
+mu 03BC
+nu 03BD
+xi 03BE
+omicron 03BF
+pi 03C0
+rho 03C1
+sigmaf 03C2
+sigma 03C3
+tau 03C4
+upsilon 03C5
+phi 03C6
+chi 03C7
+psi 03C8
+omega 03C9
+thetasym 03D1
+upsih 03D2
+piv 03D6
+bull 2022
+hellip 2026
+prime 2032
+Prime 2033
+oline 203E
+frasl 2044
+weierp 2118
+image 2111
+real 211C
+trade 2122
+alefsym 2135
+larr 2190
+uarr 2191
+rarr 2192
+darr 2193
+harr 2194
+crarr 21B5
+lArr 21D0
+uArr 21D1
+rArr 21D2
+dArr 21D3
+hArr 21D4
+forall 2200
+part 2202
+exist 2203
+empty 2205
+nabla 2207
+isin 2208
+notin 2209
+ni 220B
+prod 220F
+sum 2211
+minus 2212
+lowast 2217
+radic 221A
+prop 221D
+infin 221E
+ang 2220
+and 2227
+or 2228
+cap 2229
+cup 222A
+int 222B
+there4 2234
+sim 223C
+cong 2245
+asymp 2248
+ne 2260
+equiv 2261
+le 2264
+ge 2265
+sub 2282
+sup 2283
+nsub 2284
+sube 2286
+supe 2287
+oplus 2295
+otimes 2297
+perp 22A5
+sdot 22C5
+lceil 2308
+rceil 2309
+lfloor 230A
+rfloor 230B
+lang 2329
+rang 232A
+loz 25CA
+spades 2660
+clubs 2663
+hearts 2665
+diams 2666
\ No newline at end of file
diff --git a/ext/standard/html_tables/html_table_gen.php b/ext/standard/html_tables/html_table_gen.php
new file mode 100644 (file)
index 0000000..35be2d9
--- /dev/null
@@ -0,0 +1,820 @@
+<?php
+/*
+   +----------------------------------------------------------------------+
+   | PHP Version 5                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2010 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.01 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available through the world-wide-web at the following url:           |
+   | http://www.php.net/license/3_01.txt                                  |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Authors: Gustavo Lopes  <cataphract@php.net>                         |
+   +----------------------------------------------------------------------+
+*/
+
+/* This file prints to stdout the contents of ext/standard/html_tables.h */
+/* put together with glue; have patience */
+
+$t = <<<CODE
+/*
+   +----------------------------------------------------------------------+
+   | PHP Version 5                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2010 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.01 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available through the world-wide-web at the following url:           |
+   | http://www.php.net/license/3_01.txt                                  |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+*/
+
+/* \$Id$ */
+
+#ifndef HTML_TABLES_H
+#define HTML_TABLES_H
+
+/**************************************************************************
+***************************************************************************
+**        THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY IT.        **
+***************************************************************************
+** Please change html_tables/html_table_gen.php instead and then         **
+** run it in order to generate this file                                 **
+***************************************************************************
+**************************************************************************/
+
+/* cs_terminator is overloaded in the following fashion:
+ * - It terminates the list entity maps.
+ * - In BG(inverse_ent_maps), it's the key of the inverse map that stores
+ *   only the basic entities.
+ * - When passed to traverse_for_entities (or via php_unescape_entities with !all),
+ *   we don't care about the encoding (UTF-8 is chosen, but it should be used
+ *   when it doesn't matter).
+ */
+enum entity_charset { cs_terminator, cs_utf_8, cs_8859_1, cs_cp1252, cs_8859_15,
+                                         cs_cp1251, cs_8859_5, cs_cp866, cs_macroman, cs_koi8r,
+                                         cs_big5, cs_gb2312, cs_big5hkscs, cs_sjis, cs_eucjp,
+                                         cs_numelems /* used to count the number of charsets */
+                                       };
+#define CHARSET_UNICODE_COMPAT(cs)     ((cs) <= cs_utf_8)
+#define CHARSET_SINGLE_BYTE(cs)                ((cs) > cs_utf_8 && (cs) < cs_big5)
+#define CHARSET_PARTIAL_SUPPORT(cs)    ((cs) >= cs_big5)
+
+static const struct {
+       const char *codeset;
+       enum entity_charset charset;
+} charset_map[] = {
+       { "ISO-8859-1",         cs_8859_1 },
+       { "ISO8859-1",          cs_8859_1 },
+       { "ISO-8859-15",        cs_8859_15 },
+       { "ISO8859-15",         cs_8859_15 },
+       { "utf-8",                      cs_utf_8 },
+       { "cp1252",             cs_cp1252 },
+       { "Windows-1252",       cs_cp1252 },
+       { "1252",           cs_cp1252 }, 
+       { "BIG5",                       cs_big5 },
+       { "950",            cs_big5 },
+       { "GB2312",                     cs_gb2312 },
+       { "936",            cs_gb2312 },
+       { "BIG5-HKSCS",         cs_big5hkscs },
+       { "Shift_JIS",          cs_sjis },
+       { "SJIS",               cs_sjis },
+       { "932",            cs_sjis },
+       { "EUCJP",              cs_eucjp },
+       { "EUC-JP",             cs_eucjp },
+       { "KOI8-R",         cs_koi8r },
+       { "koi8-ru",        cs_koi8r },
+       { "koi8r",          cs_koi8r },
+       { "cp1251",         cs_cp1251 },
+       { "Windows-1251",   cs_cp1251 },
+       { "win-1251",       cs_cp1251 },
+       { "iso8859-5",      cs_8859_5 },
+       { "iso-8859-5",     cs_8859_5 },
+       { "cp866",          cs_cp866 },
+       { "866",            cs_cp866 },    
+       { "ibm866",         cs_cp866 },
+       { "MacRoman",       cs_macroman },
+       { NULL }
+};
+
+/* longest entity name length excluding & and ; */
+#define LONGEST_ENTITY_LENGTH 31
+
+/* Definitions for mappings *to* Unicode.
+ * The origin charset must have at most 256 code points.
+ * The multi-byte encodings are not supported */
+typedef struct {
+    unsigned short uni_cp[64];
+} enc_to_uni_stage2;
+
+typedef struct {
+    const enc_to_uni_stage2 *inner[4];
+} enc_to_uni;
+
+/* bits 7-8 bits (only single bytes encodings supported )*/
+#define ENT_ENC_TO_UNI_STAGE1(k) ((k & 0xC0) >> 6)
+/* bits 1-6 */
+#define ENT_ENC_TO_UNI_STAGE2(k) ((k) & 0x3F)
+
+
+CODE;
+
+echo $t;
+
+$encodings = array(
+    array(
+        "ident" => "iso88591",
+        "enumid" => 2,
+        "name" => "ISO-8859-1",
+        "file" => "mappings/8859-1.TXT",
+    ),
+    array(
+        "ident" => "iso88595",
+        "enumid" => 6,
+        "name" => "ISO-8859-5",
+        "file" => "mappings/8859-5.TXT",
+    ),
+    array(
+        "ident" => "iso885915",
+        "enumid" => 4,
+        "name" => "ISO-8859-15",
+        "file" => "mappings/8859-15.TXT",
+    ),
+    array(
+        "ident" => "win1252",
+        "enumid" => 3,
+        "enumident" => "cp1252",
+        "name" => "Windows-1252",
+        "file" => "mappings/CP1252.TXT",
+    ),
+    array(
+        "ident" => "win1251",
+        "enumid" => 5,
+        "enumident" => "cp1252",
+        "name" => "Windows-1251",
+        "file" => "mappings/CP1251.TXT",
+    ),
+    array(
+        "ident" => "koi8r",
+        "enumid" => 9,
+        "name" => "KOI8-R",
+        "file" => "mappings/KOI8-R.TXT",
+    ),
+    array(
+        "ident" => "cp866",
+        "enumid" => 7,
+        "name" => "CP-866",
+        "file" => "mappings/CP866.TXT",
+    ),
+    array(
+        "ident" => "macroman",
+        "enumid" => 8,
+        "name" => "MacRoman",
+        "file" => "mappings/ROMAN.TXT",
+    ),
+);
+
+$prevStage2 = array();
+
+foreach ($encodings as $e) {
+    echo
+"/* {{{ Mappings *to* Unicode for {$e['name']} */\n\n";
+
+    /* process file */
+    $map = array();
+    $lines = explode("\n", file_get_contents($e{'file'}));
+    foreach ($lines as $l) {
+        if (preg_match("/^0x([0-9A-Z]{2})\t0x([0-9A-Z]{2,})/i", $l, $matches))
+            $map[] = array($matches[1], $matches[2]);
+    }
+    
+    $mappy = array();
+    foreach ($map as $v) { $mappy[hexdec($v[0])] = hexdec($v[1]); }
+    
+    $mstable = array("ident" => $e['ident']);
+    /* calculate two-stage tables */
+    for ($i = 0; $i < 4; $i++) {
+        for ($j = 0; $j < 64; $j++) {
+            $cp = $i << 6 | $j;
+            $mstable[$i][$j] = isset($mappy[$cp]) ? $mappy[$cp] : NULL;
+        }
+    }
+    
+    echo
+"/* {{{ Stage 2 tables for {$e['name']} */\n\n";
+
+    $s2tables_idents = array();
+    for ($i = 0; $i < 4; $i++) {
+        if (($t = array_keys($prevStage2, $mstable[$i])) !== array()) {
+            $s2tables_idents[$i] = $encodings[$t[0]/5]["ident"];
+            continue;
+        }
+        
+        $s2tables_idents[$i] = $e["ident"];
+        
+        echo "static const enc_to_uni_stage2 enc_to_uni_s2_{$e['ident']}_".
+            sprintf("%02X", $i << 6)." = {\n";
+        for ($j = 0; $j < 64; $j++) {
+            if ($j == 0) echo "\t";
+            elseif ($j % 6 == 0) echo "\n\t";
+            else echo " ";
+            if ($mstable[$i][$j] !== NULL)
+                echo sprintf("0x%04X,", $mstable[$i][$j]);
+            else
+                echo "0xFFFF,"; /* special value; indicates no mapping */
+        }
+        echo "\n};\n\n";
+        
+        $prevStage2[] = $mstable[$i];
+    }
+    
+    echo
+"/* end of stage 2 tables for {$e['name']} }}} */\n\n";
+
+    echo
+"/* {{{ Stage 1 table for {$e['name']} */\n";
+
+    echo
+"static const enc_to_uni enc_to_uni_{$e['ident']} = {
+\t&enc_to_uni_s2_{$s2tables_idents[0]}_00,
+\t&enc_to_uni_s2_{$s2tables_idents[1]}_40,
+\t&enc_to_uni_s2_{$s2tables_idents[2]}_80,
+\t&enc_to_uni_s2_{$s2tables_idents[3]}_C0,
+};
+";
+
+    echo
+"/* end of stage 1 table for {$e['name']} }}} */\n\n";
+}
+
+$maxencnum = max(array_map(function($e) { return $e['enumid']; }, $encodings));
+$a = range(0, $maxencnum);
+foreach ($encodings as $e) { $a[$e['enumid']] = $e['ident']; }
+
+    echo
+"/* {{{ Index of tables for encoding conversion */
+static const enc_to_uni *const enc_to_uni_index[cs_numelems] = {\n";
+
+foreach ($a as $k => $v) {
+    if (is_numeric($v))
+        echo "\tNULL,\n";
+    else
+        echo "\t&enc_to_uni_$v,\n";
+}
+
+    echo
+"};
+/* }}} */\n";
+
+$t = <<<CODE
+
+/* Definitions for mappings *from* Unicode */
+
+typedef struct {
+       unsigned short un_code_point; /* we don't need bigger */
+       unsigned char cs_code; /* currently, we only have maps to single-byte encodings */
+} uni_to_enc;
+
+
+CODE;
+
+echo $t;
+
+$encodings = array(
+    array(
+        "ident" => "iso885915",
+        "name" => "ISO-8859-15",
+        "file" => "mappings/8859-15.TXT",
+        "range" => array(0xA4, 0xBE),
+    ),
+    array(
+        "ident" => "win1252",
+        "name" => "Windows-1252",
+        "file" => "mappings/CP1252.TXT",
+        "range" => array(0x80, 0x9F),
+    ),
+    array(
+        "ident" => "win1251",
+        "name" => "Windows-1251",
+        "file" => "mappings/CP1251.TXT",
+        "range" => array(0x80, 0xFF),
+    ),
+    array(
+        "ident" => "koi8r",
+        "name" => "KOI8-R",
+        "file" => "mappings/KOI8-R.TXT",
+        "range" => array(0x80, 0xFF),
+    ),
+    array(
+        "ident" => "cp866",
+        "name" => "CP-866",
+        "file" => "mappings/CP866.TXT",
+        "range" => array(0x80, 0xFF),
+    ),
+    array(
+        "ident" => "macroman",
+        "name" => "MacRoman",
+        "file" => "mappings/ROMAN.TXT",
+        "range" => array(0x80, 0xFF),
+    ),
+);
+
+foreach ($encodings as $e) {
+    echo
+"/* {{{ Mappings *from* Unicode for {$e['name']} */\n";
+
+    /* process file */
+    $map = array();
+    $lines = explode("\n", file_get_contents($e{'file'}));
+    foreach ($lines as $l) {
+        if (preg_match("/^0x([0-9A-Z]{2})\t0x([0-9A-Z]{2,})\s+#\s*(.*)$/i", $l, $matches))
+            $map[] = array($matches[1], $matches[2], $matches[3]);
+    }
+    
+    $mappy = array();
+    foreach ($map as $v) {
+        if (hexdec($v[0]) >= $e['range'][0] && hexdec($v[0]) <= $e['range'][1])
+            $mappy[hexdec($v[1])] = array(hexdec($v[0]), strtolower($v[2]));
+    }
+    ksort($mappy);
+    
+    echo
+"static const uni_to_enc unimap_{$e['ident']}[] = {\n";
+    
+    foreach ($mappy as $k => $v) {
+        echo "\t{ ", sprintf("0x%04X", $k), ", ", sprintf("0x%02X", $v[0]), " },\t/* ",
+            $v[1], " */\n";
+    }
+    echo "};\n";
+    
+    echo
+"/* {{{ end of mappings *from* Unicode for {$e['name']} */\n\n";
+}
+
+$data = file_get_contents("ents_html5.txt");
+$pass2 = false;
+$name = "HTML5";
+$ident = "html5";
+again:
+
+$t = <<<'CODE'
+/* HTML 5 has many more named entities.
+ * Some of them map to two unicode code points, not one.
+ * We're going to use a three-stage table (with an extra one for the entities
+ * with two code points). */
+
+#define ENT_STAGE1_INDEX(k) (((k) & 0xFFF000) >> 12) /* > 1D, we have no mapping */
+#define ENT_STAGE2_INDEX(k) (((k) & 0xFC0) >> 6)
+#define ENT_STAGE3_INDEX(k) ((k) & 0x3F)
+#define ENT_CODE_POINT_FROM_STAGES(i,j,k) (((i) << 12) | ((j) << 6) | (k))
+
+/* Table should be organized with a leading row telling the size of
+ * the table and the default entity (maybe NULL) and the rest being
+ * normal rows ordered by code point so that we can do a binary search */
+typedef union {
+       struct {
+               unsigned size; /* number of remaining entries in the table */
+               const char *default_entity;
+               unsigned short default_entity_len;
+       } leading_entry;
+       struct {
+               unsigned second_cp; /* second code point */
+               const char *entity;
+               unsigned short entity_len;
+       } normal_entry;
+} entity_multicodepoint_row;
+
+/* blocks of these should start at code points k where k % 0xFC0 == 0 */
+typedef struct {
+       char ambiguous; /* if 0 look into entity */
+       union {
+               struct {
+                       const char *entity; /* may be NULL */
+                       unsigned short entity_len;
+               } ent;
+               const entity_multicodepoint_row *multicodepoint_table;
+       } data;
+} entity_stage3_row;
+
+/* Calculate k & 0x3F Use as offset */
+typedef const entity_stage3_row *entity_stage2_row; /* 64 elements */
+
+/* Calculate k & 0xFC0 >> 6. Use as offset */
+typedef const entity_stage3_row *const *entity_stage1_row; /* 64 elements */
+
+/* For stage 1, Calculate k & 0xFFF000 >> 3*4.
+ * If larger than 1D, we have no mapping. Otherwise lookup that index */
+typedef struct {
+       const entity_stage1_row *ms_table;
+       /* for tables with only basic entities, this member is to be accessed
+        * directly for better performance: */
+       const entity_stage3_row *table;
+} entity_table_opt;
+
+/* Replaced "GT" > "gt" and "QUOT" > "quot" for consistentcy's sake. */
+
+
+CODE;
+
+if (!$pass2)
+    echo $t;
+
+$dp = array();
+
+foreach (explode("\n", $data) as $l) {
+       if (preg_match('/^(#?[a-z0-9]+)\s+([a-f0-9]+) ([a-f0-9]+)/i', $l, $matches)) {
+               //echo sprintf("\t{\"%-21s 1, 0x%05d},\n", $matches[1].",", $matches[2]);
+               $dp[] = array($matches[1], $matches[2], $matches[3]);
+       } else if (preg_match('/^(#?[a-z0-9]+)\s+([a-f0-9]+)/i', $l, $matches)) {
+               $dp[] = array($matches[1], $matches[2]);
+       }
+}
+
+$origdp = $dp;
+
+usort($dp, function($a, $b) { return hexdec($a[1])-hexdec($b[1]); });
+
+$multicp_rows = array();
+foreach ($dp as $el) {
+       if (count($el) == 3) {
+               $multicp_rows[$el[1]] = array();
+       }
+}
+
+foreach ($dp as $el) {
+       if (key_exists($el[1], $multicp_rows)) {
+               if (count($el) == 3)
+                       $multicp_rows[$el[1]][$el[2]] = $el[0];
+               else
+                       $multicp_rows[$el[1]]["default"] = $el[0];
+       }
+}
+
+if ($pass2 < 2)
+    echo "/* {{{ Start of $name multi-stage table for codepoint -> entity */", "\n\n";
+else
+    echo "/* {{{ Start of $name table for codepoint -> entity */", "\n\n";
+
+if (empty($multicp_rows))
+    goto skip_multicp;
+
+ksort($multicp_rows);
+foreach ($multicp_rows as &$v) { ksort($v); }
+
+echo
+"/* {{{ Start of double code point tables for $name */", "\n\n";
+
+foreach ($multicp_rows as $k => $v) {
+       echo "static const entity_multicodepoint_row multi_cp_{$ident}_",
+               sprintf("%05s", $k), "[] = {", "\n";
+       if (key_exists("default", $v)) {
+        if ($v['default'] == 'GT') /* hack to make > translate to &gt; not GT; */
+            $v['default'] = "gt";
+               echo "\t{", sprintf("%02d", count($v) - 1),
+                       ",\t\t", sprintf("\"%-21s", $v["default"].'",'), "\t",
+            sprintf("% 2d", strlen($v["default"])), '},', "\n"; 
+       } else {
+               echo "\t{", sprintf("%02d", count($v)),
+                       ",\t\t", sprintf("%-22s", 'NULL'), ",\t0},\n"; 
+       }
+       unset($v["default"]);
+       foreach ($v as $l => $w) {
+               echo "\t{", sprintf("0x%05s", $l), ",\t", sprintf("\"%-21s", $w.'",'), "\t",
+            sprintf("% 2d", strlen($w)), '},', "\n"; 
+       }
+       echo "};\n";
+}
+echo "\n/* End of double code point tables }}} */", "\n\n";
+
+skip_multicp:
+
+if ($pass2 < 2)
+    echo "/* {{{ Stage 3 Tables for $name */", "\n\n";
+
+$t = <<<CODE
+static const entity_stage3_row empty_stage3_table[] = {
+       /* 64 elements */
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+       {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0}, {0, NULL, 0},
+};
+
+CODE;
+
+if (!$pass2)
+    echo $t;
+
+$mstable = array();
+foreach ($dp as $el) {
+       $s1 = (hexdec($el[1]) & 0xFFF000) >> 12;
+       $s2 = (hexdec($el[1]) & 0xFC0) >> 6;
+       $s3 = hexdec($el[1]) & 0x3F;
+       if (key_exists($el[1], $multicp_rows)) {
+               $mstable[$s1][$s2][$s3] = "";
+       } else {
+               $mstable[$s1][$s2][$s3] = $el[0];
+       }
+}
+
+for ($i = 0; $i < 0x1E; $i++) {
+       for ($k = 0; $k < 64; $k++) {
+               $any3 = false;
+               $col3 = array();
+               for ($l = 0; $l < 64; $l++) {
+                       if (isset($mstable[$i][$k][$l])) {
+                               $any3 = true;
+                               $col3[$l] = $mstable[$i][$k][$l];
+                       } else {
+                               $col3[$l] = null;
+                       }
+               }
+               if ($any3) {
+                       echo "static const entity_stage3_row stage3_table_{$ident}_",
+                               sprintf("%02X%03X", $i, $k << 6), "[] = {\n";
+                       foreach ($col3 as $y => $z) {
+                               if ($y == 0) echo "\t";
+                               elseif ($y % 4 == 0) echo "\n\t";
+                               else echo " ";
+                               if ($z === NULL)
+                                       echo "{0, NULL, 0},";
+                elseif ($z === "QUOT") /* hack to translate " into &quote;, not &QUOT; */
+                    echo "{0, \"quot\", 4},";
+                               elseif ($z !== "")
+                                       echo "{0, \"$z\", ", strlen($z), "},";
+                               else
+                                       echo "{1, (void*)", sprintf("multi_cp_{$ident}_%05X",
+                                               ($i << 12) | ($k << 6) | $y ), "},";
+                               
+                       }
+                       echo "\n};\n\n";
+               }
+       }
+}
+
+if ($pass2 < 2)
+    echo "/* end of stage 3 Tables for $name }}} */", "\n\n";
+
+if ($pass2 > 1)
+    goto hashtables;
+
+echo
+"/* {{{ Stage 2 Tables for $name */", "\n\n";
+
+$t = <<<CODE
+static const entity_stage2_row empty_stage2_table[] = {
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+       empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
+};
+
+CODE;
+
+if (!$pass2)
+    echo $t;
+
+for ($i = 0; $i < 0x1E; $i++) {
+       $any = false;
+       for ($k = 0; $k < 64; $k++) {
+               if (isset($mstable[$i][$k]))
+                       $any = true;
+       }
+       if ($any) {
+               echo "static const entity_stage2_row stage2_table_{$ident}_",
+                       sprintf("%02X000", $i), "[] = {\n";
+               for ($k = 0; $k < 64; $k++) {
+                       if ($k == 0) echo "\t";
+                       elseif ($k % 4 == 0) echo "\n\t";
+                       else echo " ";
+                       if (isset($mstable[$i][$k])) {
+                               echo sprintf("stage3_table_{$ident}_%05X", ($i << 12) | ($k << 6)), ",";
+                       } else {
+                               echo "empty_stage3_table", ",";
+                       }
+               }
+               echo "\n};\n\n";
+       }
+}
+
+echo
+"/* end of stage 2 tables for $name }}} */", "\n\n";
+
+echo "static const entity_stage1_row entity_ms_table_{$ident}[] = {\n";
+for ($i = 0; $i < 0x1E; $i++) {
+       if (isset($mstable[$i]))
+               echo "\t", sprintf("stage2_table_{$ident}_%02X000", $i), ",\n";
+       else
+               echo "\tempty_stage2_table,\n";
+}
+echo "};\n\n";
+
+echo
+"/* end of $name multi-stage table for codepoint -> entity }}} */\n\n";
+
+/* commented-out; this enabled binary search, which turned out to be
+ * significantly slower than the hash tables for html 5 entities */
+//echo
+//"/* {{{ HTML 5 tables for entity -> codepoint */", "\n\n";
+
+//$t = <<<CODE
+//typedef struct {
+//     const char *entity;
+//     unsigned short entity_len;
+//     unsigned int codepoint1;
+//     unsigned int codepoint2;
+//} entity_cp_map;
+//
+//#define ENTITY_CP_MAP_CMP(l, lsize, r, rsize) \
+//     ( ((lsize)==(rsize)) ? (memcmp((l), (r), (lsize))) : ((lsize)-(rsize)) )
+//
+//static const entity_cp_map html5_ent_cp_map[] = {
+//
+//CODE;
+//echo $t;
+//
+//$dp = $origdp;
+//usort($dp, function($a, $b) { $d = strlen($a[0])-strlen($b[0]);
+//     return $d==0?strcmp($a[0], $b[0]):$d; });
+//
+//$k = 0;
+//foreach ($dp as $o) {
+//     if ($k == 0) echo "\t";
+//     elseif ($k % 3 == 0) echo "\n\t";
+//     else echo " ";
+//     if (isset($o[2]))
+//             echo sprintf('{"%s", %d, 0x%X, 0x%X},', $o[0], strlen($o[0]),
+//                     hexdec($o[1]), hexdec($o[2]));
+//     else
+//             echo sprintf('{"%s", %d, 0x%X, 0},', $o[0], strlen($o[0]),
+//                     hexdec($o[1]));
+//
+//     if (isset($o[2])) {
+//             $entlen = strlen($o[0]) + 2;
+//             $utf8len = strlen(
+//                     mb_convert_encoding("&#x{$o[1]};&#x{$o[2]};", "UTF-8", "HTML-ENTITIES"));
+//             if ($utf8len > $entlen*1.2) {
+//                     die("violated assumption for traverse_for_entities");
+//             }
+//     }
+//     
+//     $k++;
+//}
+//echo "\n};\n\n";
+//
+//echo "static const size_t html5_ent_cp_map_size = $k;\n\n";
+//
+//echo
+//"/* end of HTML 5 tables for entity -> codepoint }}} */\n\n";
+
+hashtables:
+
+echo
+"/* {{{ $name hash table for entity -> codepoint */", "\n\n";
+
+$t = <<<CODE
+typedef struct {
+       const char *entity;
+       unsigned short entity_len;
+       unsigned int codepoint1;
+       unsigned int codepoint2;
+} entity_cp_map;
+
+typedef const entity_cp_map *entity_ht_bucket;
+
+typedef struct {
+       unsigned num_elems; /* power of 2 */
+       const entity_ht_bucket *buckets; /* .num_elems elements */
+} entity_ht;
+
+static const entity_cp_map ht_bucket_empty[] = { NULL };
+
+CODE;
+
+if (!$pass2)
+    echo $t;
+
+function hashfun($str)
+{
+
+       $hash = 5381;
+       $nKeyLength = strlen($str);
+       $pos = 0;
+
+       /* variant with the hash unrolled eight times */
+       for (; $nKeyLength > 0; $nKeyLength--) {
+               $hash = (int)(((int)(((int)($hash << 5)) + $hash)) + ord($str[$pos++]));
+       }
+       return $hash;
+
+}
+
+$numelems = max(pow(2, ceil(log(1.5*count($origdp))/log(2))),16);
+$mask = $numelems - 1;
+$hashes = array();
+foreach ($origdp as $e) {
+       $hashes[hashfun($e[0]) & $mask][] = $e;
+       if (isset($e[2])) {
+               $entlen = strlen($e[0]) + 2;
+               $utf8len = strlen(
+                       mb_convert_encoding("&#x{$e[1]};&#x{$e[2]};", "UTF-8", "HTML-ENTITIES"));
+               if ($utf8len > $entlen*1.2) {
+                       die("violated assumption for traverse_for_entities");
+               }
+       }
+}
+
+for ($i = 0; $i < $numelems; $i++) {
+       if (empty($hashes[$i]))
+               continue;
+       echo "static const entity_cp_map ht_bucket_{$ident}_", sprintf("%03X", $i) ,"[] = {";
+       foreach ($hashes[$i] as $h) {
+               if (isset($h[2])) {
+                       echo sprintf(' {"%s", %d, 0x%05X, 0x%05X},',
+                               $h[0], strlen($h[0]), hexdec($h[1]), hexdec($h[2]));
+               } else {
+                       echo sprintf(' {"%s", %d, 0x%05X, 0},',
+                               $h[0], strlen($h[0]), hexdec($h[1]));
+               }
+       }
+       echo " {NULL} };\n";
+}
+echo "\n";
+
+echo
+"static const entity_cp_map *const ht_buckets_{$ident}[] = {\n";
+
+for ($i = 0; $i < $numelems; $i++) {
+       if ($i == 0) echo "\t";
+       elseif ($i % 4 == 0) echo "\n\t";
+       else echo " ";
+       if (empty($hashes[$i]))
+               echo "ht_bucket_empty,";
+       else
+               echo "ht_bucket_{$ident}_", sprintf("%03X", $i), ",";
+}
+echo "\n};\n\n";
+
+echo
+"static const entity_ht ent_ht_{$ident} = {
+       ", sprintf("0x%X", $numelems), ",
+       ht_buckets_{$ident}
+};\n\n";
+
+echo
+"/* end of $name hash table for entity -> codepoint }}} */\n\n";
+
+if (!$pass2) {
+    $data = file_get_contents("ents_html401.txt");
+    $pass2 = 1;
+    $name = "HTML 4.01";
+    $ident = "html4";
+    goto again;
+} elseif ($pass2 == 1) {
+    $data = file_get_contents("ents_basic.txt");
+    $pass2 = 2;
+    $name = "Basic entities (no apos)";
+    $ident = "be_noapos";
+    goto again;
+} elseif ($pass2 == 2) {
+    $data = file_get_contents("ents_basic_apos.txt");
+    $pass2 = 3;
+    $name = "Basic entities (with apos)";
+    $ident = "be_apos";
+    goto again;
+}
+
+echo "#endif /* HTML_TABLES_H */\n";
diff --git a/ext/standard/html_tables/mappings/8859-1.TXT b/ext/standard/html_tables/mappings/8859-1.TXT
new file mode 100644 (file)
index 0000000..473ecab
--- /dev/null
@@ -0,0 +1,303 @@
+#
+#      Name:             ISO/IEC 8859-1:1998 to Unicode
+#      Unicode version:  3.0
+#      Table version:    1.0
+#      Table format:     Format A
+#      Date:             1999 July 27
+#      Authors:          Ken Whistler <kenw@sybase.com>
+#
+#      Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#      This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#      No claims are made as to fitness for any particular purpose.  No
+#      warranties of any kind are expressed or implied.  The recipient
+#      agrees to determine applicability of information provided.  If this
+#      file has been provided on optical media by Unicode, Inc., the sole
+#      remedy for any claim will be exchange of defective media within 90
+#      days of receipt.
+#
+#      Unicode, Inc. hereby grants the right to freely use the information
+#      supplied in this file in the creation of products supporting the
+#      Unicode Standard, and to make copies of this file in any form for
+#      internal or external distribution as long as this notice remains
+#      attached.
+#
+#      General notes:
+#
+#      This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-1:1998 characters map into Unicode.
+#
+#      Format:  Three tab-separated columns
+#               Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX)
+#               Column #2 is the Unicode (in hex as 0xXXXX)
+#               Column #3 the Unicode name (follows a comment sign, '#')
+#
+#      The entries are in ISO/IEC 8859-1 order.
+#
+#      Version history
+#      1.0 version updates 0.1 version by adding mappings for all
+#      control characters.
+#
+#      Updated versions of this file may be found in:
+#              <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#      Any comments or problems, contact <errata@unicode.org>
+#      Please note that <errata@unicode.org> is an archival address;
+#      notices will be checked, but do not expect an immediate response.
+#
+0x00   0x0000  #       NULL
+0x01   0x0001  #       START OF HEADING
+0x02   0x0002  #       START OF TEXT
+0x03   0x0003  #       END OF TEXT
+0x04   0x0004  #       END OF TRANSMISSION
+0x05   0x0005  #       ENQUIRY
+0x06   0x0006  #       ACKNOWLEDGE
+0x07   0x0007  #       BELL
+0x08   0x0008  #       BACKSPACE
+0x09   0x0009  #       HORIZONTAL TABULATION
+0x0A   0x000A  #       LINE FEED
+0x0B   0x000B  #       VERTICAL TABULATION
+0x0C   0x000C  #       FORM FEED
+0x0D   0x000D  #       CARRIAGE RETURN
+0x0E   0x000E  #       SHIFT OUT
+0x0F   0x000F  #       SHIFT IN
+0x10   0x0010  #       DATA LINK ESCAPE
+0x11   0x0011  #       DEVICE CONTROL ONE
+0x12   0x0012  #       DEVICE CONTROL TWO
+0x13   0x0013  #       DEVICE CONTROL THREE
+0x14   0x0014  #       DEVICE CONTROL FOUR
+0x15   0x0015  #       NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #       SYNCHRONOUS IDLE
+0x17   0x0017  #       END OF TRANSMISSION BLOCK
+0x18   0x0018  #       CANCEL
+0x19   0x0019  #       END OF MEDIUM
+0x1A   0x001A  #       SUBSTITUTE
+0x1B   0x001B  #       ESCAPE
+0x1C   0x001C  #       FILE SEPARATOR
+0x1D   0x001D  #       GROUP SEPARATOR
+0x1E   0x001E  #       RECORD SEPARATOR
+0x1F   0x001F  #       UNIT SEPARATOR
+0x20   0x0020  #       SPACE
+0x21   0x0021  #       EXCLAMATION MARK
+0x22   0x0022  #       QUOTATION MARK
+0x23   0x0023  #       NUMBER SIGN
+0x24   0x0024  #       DOLLAR SIGN
+0x25   0x0025  #       PERCENT SIGN
+0x26   0x0026  #       AMPERSAND
+0x27   0x0027  #       APOSTROPHE
+0x28   0x0028  #       LEFT PARENTHESIS
+0x29   0x0029  #       RIGHT PARENTHESIS
+0x2A   0x002A  #       ASTERISK
+0x2B   0x002B  #       PLUS SIGN
+0x2C   0x002C  #       COMMA
+0x2D   0x002D  #       HYPHEN-MINUS
+0x2E   0x002E  #       FULL STOP
+0x2F   0x002F  #       SOLIDUS
+0x30   0x0030  #       DIGIT ZERO
+0x31   0x0031  #       DIGIT ONE
+0x32   0x0032  #       DIGIT TWO
+0x33   0x0033  #       DIGIT THREE
+0x34   0x0034  #       DIGIT FOUR
+0x35   0x0035  #       DIGIT FIVE
+0x36   0x0036  #       DIGIT SIX
+0x37   0x0037  #       DIGIT SEVEN
+0x38   0x0038  #       DIGIT EIGHT
+0x39   0x0039  #       DIGIT NINE
+0x3A   0x003A  #       COLON
+0x3B   0x003B  #       SEMICOLON
+0x3C   0x003C  #       LESS-THAN SIGN
+0x3D   0x003D  #       EQUALS SIGN
+0x3E   0x003E  #       GREATER-THAN SIGN
+0x3F   0x003F  #       QUESTION MARK
+0x40   0x0040  #       COMMERCIAL AT
+0x41   0x0041  #       LATIN CAPITAL LETTER A
+0x42   0x0042  #       LATIN CAPITAL LETTER B
+0x43   0x0043  #       LATIN CAPITAL LETTER C
+0x44   0x0044  #       LATIN CAPITAL LETTER D
+0x45   0x0045  #       LATIN CAPITAL LETTER E
+0x46   0x0046  #       LATIN CAPITAL LETTER F
+0x47   0x0047  #       LATIN CAPITAL LETTER G
+0x48   0x0048  #       LATIN CAPITAL LETTER H
+0x49   0x0049  #       LATIN CAPITAL LETTER I
+0x4A   0x004A  #       LATIN CAPITAL LETTER J
+0x4B   0x004B  #       LATIN CAPITAL LETTER K
+0x4C   0x004C  #       LATIN CAPITAL LETTER L
+0x4D   0x004D  #       LATIN CAPITAL LETTER M
+0x4E   0x004E  #       LATIN CAPITAL LETTER N
+0x4F   0x004F  #       LATIN CAPITAL LETTER O
+0x50   0x0050  #       LATIN CAPITAL LETTER P
+0x51   0x0051  #       LATIN CAPITAL LETTER Q
+0x52   0x0052  #       LATIN CAPITAL LETTER R
+0x53   0x0053  #       LATIN CAPITAL LETTER S
+0x54   0x0054  #       LATIN CAPITAL LETTER T
+0x55   0x0055  #       LATIN CAPITAL LETTER U
+0x56   0x0056  #       LATIN CAPITAL LETTER V
+0x57   0x0057  #       LATIN CAPITAL LETTER W
+0x58   0x0058  #       LATIN CAPITAL LETTER X
+0x59   0x0059  #       LATIN CAPITAL LETTER Y
+0x5A   0x005A  #       LATIN CAPITAL LETTER Z
+0x5B   0x005B  #       LEFT SQUARE BRACKET
+0x5C   0x005C  #       REVERSE SOLIDUS
+0x5D   0x005D  #       RIGHT SQUARE BRACKET
+0x5E   0x005E  #       CIRCUMFLEX ACCENT
+0x5F   0x005F  #       LOW LINE
+0x60   0x0060  #       GRAVE ACCENT
+0x61   0x0061  #       LATIN SMALL LETTER A
+0x62   0x0062  #       LATIN SMALL LETTER B
+0x63   0x0063  #       LATIN SMALL LETTER C
+0x64   0x0064  #       LATIN SMALL LETTER D
+0x65   0x0065  #       LATIN SMALL LETTER E
+0x66   0x0066  #       LATIN SMALL LETTER F
+0x67   0x0067  #       LATIN SMALL LETTER G
+0x68   0x0068  #       LATIN SMALL LETTER H
+0x69   0x0069  #       LATIN SMALL LETTER I
+0x6A   0x006A  #       LATIN SMALL LETTER J
+0x6B   0x006B  #       LATIN SMALL LETTER K
+0x6C   0x006C  #       LATIN SMALL LETTER L
+0x6D   0x006D  #       LATIN SMALL LETTER M
+0x6E   0x006E  #       LATIN SMALL LETTER N
+0x6F   0x006F  #       LATIN SMALL LETTER O
+0x70   0x0070  #       LATIN SMALL LETTER P
+0x71   0x0071  #       LATIN SMALL LETTER Q
+0x72   0x0072  #       LATIN SMALL LETTER R
+0x73   0x0073  #       LATIN SMALL LETTER S
+0x74   0x0074  #       LATIN SMALL LETTER T
+0x75   0x0075  #       LATIN SMALL LETTER U
+0x76   0x0076  #       LATIN SMALL LETTER V
+0x77   0x0077  #       LATIN SMALL LETTER W
+0x78   0x0078  #       LATIN SMALL LETTER X
+0x79   0x0079  #       LATIN SMALL LETTER Y
+0x7A   0x007A  #       LATIN SMALL LETTER Z
+0x7B   0x007B  #       LEFT CURLY BRACKET
+0x7C   0x007C  #       VERTICAL LINE
+0x7D   0x007D  #       RIGHT CURLY BRACKET
+0x7E   0x007E  #       TILDE
+0x7F   0x007F  #       DELETE
+0x80   0x0080  #       <control>
+0x81   0x0081  #       <control>
+0x82   0x0082  #       <control>
+0x83   0x0083  #       <control>
+0x84   0x0084  #       <control>
+0x85   0x0085  #       <control>
+0x86   0x0086  #       <control>
+0x87   0x0087  #       <control>
+0x88   0x0088  #       <control>
+0x89   0x0089  #       <control>
+0x8A   0x008A  #       <control>
+0x8B   0x008B  #       <control>
+0x8C   0x008C  #       <control>
+0x8D   0x008D  #       <control>
+0x8E   0x008E  #       <control>
+0x8F   0x008F  #       <control>
+0x90   0x0090  #       <control>
+0x91   0x0091  #       <control>
+0x92   0x0092  #       <control>
+0x93   0x0093  #       <control>
+0x94   0x0094  #       <control>
+0x95   0x0095  #       <control>
+0x96   0x0096  #       <control>
+0x97   0x0097  #       <control>
+0x98   0x0098  #       <control>
+0x99   0x0099  #       <control>
+0x9A   0x009A  #       <control>
+0x9B   0x009B  #       <control>
+0x9C   0x009C  #       <control>
+0x9D   0x009D  #       <control>
+0x9E   0x009E  #       <control>
+0x9F   0x009F  #       <control>
+0xA0   0x00A0  #       NO-BREAK SPACE
+0xA1   0x00A1  #       INVERTED EXCLAMATION MARK
+0xA2   0x00A2  #       CENT SIGN
+0xA3   0x00A3  #       POUND SIGN
+0xA4   0x00A4  #       CURRENCY SIGN
+0xA5   0x00A5  #       YEN SIGN
+0xA6   0x00A6  #       BROKEN BAR
+0xA7   0x00A7  #       SECTION SIGN
+0xA8   0x00A8  #       DIAERESIS
+0xA9   0x00A9  #       COPYRIGHT SIGN
+0xAA   0x00AA  #       FEMININE ORDINAL INDICATOR
+0xAB   0x00AB  #       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC   0x00AC  #       NOT SIGN
+0xAD   0x00AD  #       SOFT HYPHEN
+0xAE   0x00AE  #       REGISTERED SIGN
+0xAF   0x00AF  #       MACRON
+0xB0   0x00B0  #       DEGREE SIGN
+0xB1   0x00B1  #       PLUS-MINUS SIGN
+0xB2   0x00B2  #       SUPERSCRIPT TWO
+0xB3   0x00B3  #       SUPERSCRIPT THREE
+0xB4   0x00B4  #       ACUTE ACCENT
+0xB5   0x00B5  #       MICRO SIGN
+0xB6   0x00B6  #       PILCROW SIGN
+0xB7   0x00B7  #       MIDDLE DOT
+0xB8   0x00B8  #       CEDILLA
+0xB9   0x00B9  #       SUPERSCRIPT ONE
+0xBA   0x00BA  #       MASCULINE ORDINAL INDICATOR
+0xBB   0x00BB  #       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC   0x00BC  #       VULGAR FRACTION ONE QUARTER
+0xBD   0x00BD  #       VULGAR FRACTION ONE HALF
+0xBE   0x00BE  #       VULGAR FRACTION THREE QUARTERS
+0xBF   0x00BF  #       INVERTED QUESTION MARK
+0xC0   0x00C0  #       LATIN CAPITAL LETTER A WITH GRAVE
+0xC1   0x00C1  #       LATIN CAPITAL LETTER A WITH ACUTE
+0xC2   0x00C2  #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3   0x00C3  #       LATIN CAPITAL LETTER A WITH TILDE
+0xC4   0x00C4  #       LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5   0x00C5  #       LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6   0x00C6  #       LATIN CAPITAL LETTER AE
+0xC7   0x00C7  #       LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8   0x00C8  #       LATIN CAPITAL LETTER E WITH GRAVE
+0xC9   0x00C9  #       LATIN CAPITAL LETTER E WITH ACUTE
+0xCA   0x00CA  #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB   0x00CB  #       LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC   0x00CC  #       LATIN CAPITAL LETTER I WITH GRAVE
+0xCD   0x00CD  #       LATIN CAPITAL LETTER I WITH ACUTE
+0xCE   0x00CE  #       LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF   0x00CF  #       LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0   0x00D0  #       LATIN CAPITAL LETTER ETH (Icelandic)
+0xD1   0x00D1  #       LATIN CAPITAL LETTER N WITH TILDE
+0xD2   0x00D2  #       LATIN CAPITAL LETTER O WITH GRAVE
+0xD3   0x00D3  #       LATIN CAPITAL LETTER O WITH ACUTE
+0xD4   0x00D4  #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5   0x00D5  #       LATIN CAPITAL LETTER O WITH TILDE
+0xD6   0x00D6  #       LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7   0x00D7  #       MULTIPLICATION SIGN
+0xD8   0x00D8  #       LATIN CAPITAL LETTER O WITH STROKE
+0xD9   0x00D9  #       LATIN CAPITAL LETTER U WITH GRAVE
+0xDA   0x00DA  #       LATIN CAPITAL LETTER U WITH ACUTE
+0xDB   0x00DB  #       LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC   0x00DC  #       LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD   0x00DD  #       LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE   0x00DE  #       LATIN CAPITAL LETTER THORN (Icelandic)
+0xDF   0x00DF  #       LATIN SMALL LETTER SHARP S (German)
+0xE0   0x00E0  #       LATIN SMALL LETTER A WITH GRAVE
+0xE1   0x00E1  #       LATIN SMALL LETTER A WITH ACUTE
+0xE2   0x00E2  #       LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3   0x00E3  #       LATIN SMALL LETTER A WITH TILDE
+0xE4   0x00E4  #       LATIN SMALL LETTER A WITH DIAERESIS
+0xE5   0x00E5  #       LATIN SMALL LETTER A WITH RING ABOVE
+0xE6   0x00E6  #       LATIN SMALL LETTER AE
+0xE7   0x00E7  #       LATIN SMALL LETTER C WITH CEDILLA
+0xE8   0x00E8  #       LATIN SMALL LETTER E WITH GRAVE
+0xE9   0x00E9  #       LATIN SMALL LETTER E WITH ACUTE
+0xEA   0x00EA  #       LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB   0x00EB  #       LATIN SMALL LETTER E WITH DIAERESIS
+0xEC   0x00EC  #       LATIN SMALL LETTER I WITH GRAVE
+0xED   0x00ED  #       LATIN SMALL LETTER I WITH ACUTE
+0xEE   0x00EE  #       LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF   0x00EF  #       LATIN SMALL LETTER I WITH DIAERESIS
+0xF0   0x00F0  #       LATIN SMALL LETTER ETH (Icelandic)
+0xF1   0x00F1  #       LATIN SMALL LETTER N WITH TILDE
+0xF2   0x00F2  #       LATIN SMALL LETTER O WITH GRAVE
+0xF3   0x00F3  #       LATIN SMALL LETTER O WITH ACUTE
+0xF4   0x00F4  #       LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5   0x00F5  #       LATIN SMALL LETTER O WITH TILDE
+0xF6   0x00F6  #       LATIN SMALL LETTER O WITH DIAERESIS
+0xF7   0x00F7  #       DIVISION SIGN
+0xF8   0x00F8  #       LATIN SMALL LETTER O WITH STROKE
+0xF9   0x00F9  #       LATIN SMALL LETTER U WITH GRAVE
+0xFA   0x00FA  #       LATIN SMALL LETTER U WITH ACUTE
+0xFB   0x00FB  #       LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC   0x00FC  #       LATIN SMALL LETTER U WITH DIAERESIS
+0xFD   0x00FD  #       LATIN SMALL LETTER Y WITH ACUTE
+0xFE   0x00FE  #       LATIN SMALL LETTER THORN (Icelandic)
+0xFF   0x00FF  #       LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/ext/standard/html_tables/mappings/8859-15.TXT b/ext/standard/html_tables/mappings/8859-15.TXT
new file mode 100644 (file)
index 0000000..ab2f32f
--- /dev/null
@@ -0,0 +1,303 @@
+#
+#      Name:             ISO/IEC 8859-15:1999 to Unicode
+#      Unicode version:  3.0
+#      Table version:    1.0
+#      Table format:     Format A
+#      Date:             1999 July 27
+#      Authors:          Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
+#                        Ken Whistler <kenw@sybase.com>
+#
+#      Copyright (c) 1998 - 1999 Unicode, Inc.  All Rights reserved.
+#
+#      This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#      No claims are made as to fitness for any particular purpose.  No
+#      warranties of any kind are expressed or implied.  The recipient
+#      agrees to determine applicability of information provided.  If this
+#      file has been provided on optical media by Unicode, Inc., the sole
+#      remedy for any claim will be exchange of defective media within 90
+#      days of receipt.
+#
+#      Unicode, Inc. hereby grants the right to freely use the information
+#      supplied in this file in the creation of products supporting the
+#      Unicode Standard, and to make copies of this file in any form for
+#      internal or external distribution as long as this notice remains
+#      attached.
+#
+#      General notes:
+#
+#      This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-15:1999 characters map into Unicode.
+#
+#      Format:  Three tab-separated columns
+#               Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX)
+#               Column #2 is the Unicode (in hex as 0xXXXX)
+#               Column #3 the Unicode name (follows a comment sign, '#')
+#
+#      The entries are in ISO/IEC 8859-15 order.
+#
+#      Version history
+#
+#      Updated versions of this file may be found in:
+#              <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#      Any comments or problems, contact <errata@unicode.org>
+#      Please note that <errata@unicode.org> is an archival address;
+#      notices will be checked, but do not expect an immediate response.
+#
+0x00   0x0000  #       NULL
+0x01   0x0001  #       START OF HEADING
+0x02   0x0002  #       START OF TEXT
+0x03   0x0003  #       END OF TEXT
+0x04   0x0004  #       END OF TRANSMISSION
+0x05   0x0005  #       ENQUIRY
+0x06   0x0006  #       ACKNOWLEDGE
+0x07   0x0007  #       BELL
+0x08   0x0008  #       BACKSPACE
+0x09   0x0009  #       HORIZONTAL TABULATION
+0x0A   0x000A  #       LINE FEED
+0x0B   0x000B  #       VERTICAL TABULATION
+0x0C   0x000C  #       FORM FEED
+0x0D   0x000D  #       CARRIAGE RETURN
+0x0E   0x000E  #       SHIFT OUT
+0x0F   0x000F  #       SHIFT IN
+0x10   0x0010  #       DATA LINK ESCAPE
+0x11   0x0011  #       DEVICE CONTROL ONE
+0x12   0x0012  #       DEVICE CONTROL TWO
+0x13   0x0013  #       DEVICE CONTROL THREE
+0x14   0x0014  #       DEVICE CONTROL FOUR
+0x15   0x0015  #       NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #       SYNCHRONOUS IDLE
+0x17   0x0017  #       END OF TRANSMISSION BLOCK
+0x18   0x0018  #       CANCEL
+0x19   0x0019  #       END OF MEDIUM
+0x1A   0x001A  #       SUBSTITUTE
+0x1B   0x001B  #       ESCAPE
+0x1C   0x001C  #       FILE SEPARATOR
+0x1D   0x001D  #       GROUP SEPARATOR
+0x1E   0x001E  #       RECORD SEPARATOR
+0x1F   0x001F  #       UNIT SEPARATOR
+0x20   0x0020  #       SPACE
+0x21   0x0021  #       EXCLAMATION MARK
+0x22   0x0022  #       QUOTATION MARK
+0x23   0x0023  #       NUMBER SIGN
+0x24   0x0024  #       DOLLAR SIGN
+0x25   0x0025  #       PERCENT SIGN
+0x26   0x0026  #       AMPERSAND
+0x27   0x0027  #       APOSTROPHE
+0x28   0x0028  #       LEFT PARENTHESIS
+0x29   0x0029  #       RIGHT PARENTHESIS
+0x2A   0x002A  #       ASTERISK
+0x2B   0x002B  #       PLUS SIGN
+0x2C   0x002C  #       COMMA
+0x2D   0x002D  #       HYPHEN-MINUS
+0x2E   0x002E  #       FULL STOP
+0x2F   0x002F  #       SOLIDUS
+0x30   0x0030  #       DIGIT ZERO
+0x31   0x0031  #       DIGIT ONE
+0x32   0x0032  #       DIGIT TWO
+0x33   0x0033  #       DIGIT THREE
+0x34   0x0034  #       DIGIT FOUR
+0x35   0x0035  #       DIGIT FIVE
+0x36   0x0036  #       DIGIT SIX
+0x37   0x0037  #       DIGIT SEVEN
+0x38   0x0038  #       DIGIT EIGHT
+0x39   0x0039  #       DIGIT NINE
+0x3A   0x003A  #       COLON
+0x3B   0x003B  #       SEMICOLON
+0x3C   0x003C  #       LESS-THAN SIGN
+0x3D   0x003D  #       EQUALS SIGN
+0x3E   0x003E  #       GREATER-THAN SIGN
+0x3F   0x003F  #       QUESTION MARK
+0x40   0x0040  #       COMMERCIAL AT
+0x41   0x0041  #       LATIN CAPITAL LETTER A
+0x42   0x0042  #       LATIN CAPITAL LETTER B
+0x43   0x0043  #       LATIN CAPITAL LETTER C
+0x44   0x0044  #       LATIN CAPITAL LETTER D
+0x45   0x0045  #       LATIN CAPITAL LETTER E
+0x46   0x0046  #       LATIN CAPITAL LETTER F
+0x47   0x0047  #       LATIN CAPITAL LETTER G
+0x48   0x0048  #       LATIN CAPITAL LETTER H
+0x49   0x0049  #       LATIN CAPITAL LETTER I
+0x4A   0x004A  #       LATIN CAPITAL LETTER J
+0x4B   0x004B  #       LATIN CAPITAL LETTER K
+0x4C   0x004C  #       LATIN CAPITAL LETTER L
+0x4D   0x004D  #       LATIN CAPITAL LETTER M
+0x4E   0x004E  #       LATIN CAPITAL LETTER N
+0x4F   0x004F  #       LATIN CAPITAL LETTER O
+0x50   0x0050  #       LATIN CAPITAL LETTER P
+0x51   0x0051  #       LATIN CAPITAL LETTER Q
+0x52   0x0052  #       LATIN CAPITAL LETTER R
+0x53   0x0053  #       LATIN CAPITAL LETTER S
+0x54   0x0054  #       LATIN CAPITAL LETTER T
+0x55   0x0055  #       LATIN CAPITAL LETTER U
+0x56   0x0056  #       LATIN CAPITAL LETTER V
+0x57   0x0057  #       LATIN CAPITAL LETTER W
+0x58   0x0058  #       LATIN CAPITAL LETTER X
+0x59   0x0059  #       LATIN CAPITAL LETTER Y
+0x5A   0x005A  #       LATIN CAPITAL LETTER Z
+0x5B   0x005B  #       LEFT SQUARE BRACKET
+0x5C   0x005C  #       REVERSE SOLIDUS
+0x5D   0x005D  #       RIGHT SQUARE BRACKET
+0x5E   0x005E  #       CIRCUMFLEX ACCENT
+0x5F   0x005F  #       LOW LINE
+0x60   0x0060  #       GRAVE ACCENT
+0x61   0x0061  #       LATIN SMALL LETTER A
+0x62   0x0062  #       LATIN SMALL LETTER B
+0x63   0x0063  #       LATIN SMALL LETTER C
+0x64   0x0064  #       LATIN SMALL LETTER D
+0x65   0x0065  #       LATIN SMALL LETTER E
+0x66   0x0066  #       LATIN SMALL LETTER F
+0x67   0x0067  #       LATIN SMALL LETTER G
+0x68   0x0068  #       LATIN SMALL LETTER H
+0x69   0x0069  #       LATIN SMALL LETTER I
+0x6A   0x006A  #       LATIN SMALL LETTER J
+0x6B   0x006B  #       LATIN SMALL LETTER K
+0x6C   0x006C  #       LATIN SMALL LETTER L
+0x6D   0x006D  #       LATIN SMALL LETTER M
+0x6E   0x006E  #       LATIN SMALL LETTER N
+0x6F   0x006F  #       LATIN SMALL LETTER O
+0x70   0x0070  #       LATIN SMALL LETTER P
+0x71   0x0071  #       LATIN SMALL LETTER Q
+0x72   0x0072  #       LATIN SMALL LETTER R
+0x73   0x0073  #       LATIN SMALL LETTER S
+0x74   0x0074  #       LATIN SMALL LETTER T
+0x75   0x0075  #       LATIN SMALL LETTER U
+0x76   0x0076  #       LATIN SMALL LETTER V
+0x77   0x0077  #       LATIN SMALL LETTER W
+0x78   0x0078  #       LATIN SMALL LETTER X
+0x79   0x0079  #       LATIN SMALL LETTER Y
+0x7A   0x007A  #       LATIN SMALL LETTER Z
+0x7B   0x007B  #       LEFT CURLY BRACKET
+0x7C   0x007C  #       VERTICAL LINE
+0x7D   0x007D  #       RIGHT CURLY BRACKET
+0x7E   0x007E  #       TILDE
+0x7F   0x007F  #       DELETE
+0x80   0x0080  #       <control>
+0x81   0x0081  #       <control>
+0x82   0x0082  #       <control>
+0x83   0x0083  #       <control>
+0x84   0x0084  #       <control>
+0x85   0x0085  #       <control>
+0x86   0x0086  #       <control>
+0x87   0x0087  #       <control>
+0x88   0x0088  #       <control>
+0x89   0x0089  #       <control>
+0x8A   0x008A  #       <control>
+0x8B   0x008B  #       <control>
+0x8C   0x008C  #       <control>
+0x8D   0x008D  #       <control>
+0x8E   0x008E  #       <control>
+0x8F   0x008F  #       <control>
+0x90   0x0090  #       <control>
+0x91   0x0091  #       <control>
+0x92   0x0092  #       <control>
+0x93   0x0093  #       <control>
+0x94   0x0094  #       <control>
+0x95   0x0095  #       <control>
+0x96   0x0096  #       <control>
+0x97   0x0097  #       <control>
+0x98   0x0098  #       <control>
+0x99   0x0099  #       <control>
+0x9A   0x009A  #       <control>
+0x9B   0x009B  #       <control>
+0x9C   0x009C  #       <control>
+0x9D   0x009D  #       <control>
+0x9E   0x009E  #       <control>
+0x9F   0x009F  #       <control>
+0xA0   0x00A0  #       NO-BREAK SPACE
+0xA1   0x00A1  #       INVERTED EXCLAMATION MARK
+0xA2   0x00A2  #       CENT SIGN
+0xA3   0x00A3  #       POUND SIGN
+0xA4   0x20AC  #       EURO SIGN
+0xA5   0x00A5  #       YEN SIGN
+0xA6   0x0160  #       LATIN CAPITAL LETTER S WITH CARON
+0xA7   0x00A7  #       SECTION SIGN
+0xA8   0x0161  #       LATIN SMALL LETTER S WITH CARON
+0xA9   0x00A9  #       COPYRIGHT SIGN
+0xAA   0x00AA  #       FEMININE ORDINAL INDICATOR
+0xAB   0x00AB  #       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC   0x00AC  #       NOT SIGN
+0xAD   0x00AD  #       SOFT HYPHEN
+0xAE   0x00AE  #       REGISTERED SIGN
+0xAF   0x00AF  #       MACRON
+0xB0   0x00B0  #       DEGREE SIGN
+0xB1   0x00B1  #       PLUS-MINUS SIGN
+0xB2   0x00B2  #       SUPERSCRIPT TWO
+0xB3   0x00B3  #       SUPERSCRIPT THREE
+0xB4   0x017D  #       LATIN CAPITAL LETTER Z WITH CARON
+0xB5   0x00B5  #       MICRO SIGN
+0xB6   0x00B6  #       PILCROW SIGN
+0xB7   0x00B7  #       MIDDLE DOT
+0xB8   0x017E  #       LATIN SMALL LETTER Z WITH CARON
+0xB9   0x00B9  #       SUPERSCRIPT ONE
+0xBA   0x00BA  #       MASCULINE ORDINAL INDICATOR
+0xBB   0x00BB  #       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC   0x0152  #       LATIN CAPITAL LIGATURE OE
+0xBD   0x0153  #       LATIN SMALL LIGATURE OE
+0xBE   0x0178  #       LATIN CAPITAL LETTER Y WITH DIAERESIS
+0xBF   0x00BF  #       INVERTED QUESTION MARK
+0xC0   0x00C0  #       LATIN CAPITAL LETTER A WITH GRAVE
+0xC1   0x00C1  #       LATIN CAPITAL LETTER A WITH ACUTE
+0xC2   0x00C2  #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3   0x00C3  #       LATIN CAPITAL LETTER A WITH TILDE
+0xC4   0x00C4  #       LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5   0x00C5  #       LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6   0x00C6  #       LATIN CAPITAL LETTER AE
+0xC7   0x00C7  #       LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8   0x00C8  #       LATIN CAPITAL LETTER E WITH GRAVE
+0xC9   0x00C9  #       LATIN CAPITAL LETTER E WITH ACUTE
+0xCA   0x00CA  #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB   0x00CB  #       LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC   0x00CC  #       LATIN CAPITAL LETTER I WITH GRAVE
+0xCD   0x00CD  #       LATIN CAPITAL LETTER I WITH ACUTE
+0xCE   0x00CE  #       LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF   0x00CF  #       LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0   0x00D0  #       LATIN CAPITAL LETTER ETH
+0xD1   0x00D1  #       LATIN CAPITAL LETTER N WITH TILDE
+0xD2   0x00D2  #       LATIN CAPITAL LETTER O WITH GRAVE
+0xD3   0x00D3  #       LATIN CAPITAL LETTER O WITH ACUTE
+0xD4   0x00D4  #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5   0x00D5  #       LATIN CAPITAL LETTER O WITH TILDE
+0xD6   0x00D6  #       LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7   0x00D7  #       MULTIPLICATION SIGN
+0xD8   0x00D8  #       LATIN CAPITAL LETTER O WITH STROKE
+0xD9   0x00D9  #       LATIN CAPITAL LETTER U WITH GRAVE
+0xDA   0x00DA  #       LATIN CAPITAL LETTER U WITH ACUTE
+0xDB   0x00DB  #       LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC   0x00DC  #       LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD   0x00DD  #       LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE   0x00DE  #       LATIN CAPITAL LETTER THORN
+0xDF   0x00DF  #       LATIN SMALL LETTER SHARP S
+0xE0   0x00E0  #       LATIN SMALL LETTER A WITH GRAVE
+0xE1   0x00E1  #       LATIN SMALL LETTER A WITH ACUTE
+0xE2   0x00E2  #       LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3   0x00E3  #       LATIN SMALL LETTER A WITH TILDE
+0xE4   0x00E4  #       LATIN SMALL LETTER A WITH DIAERESIS
+0xE5   0x00E5  #       LATIN SMALL LETTER A WITH RING ABOVE
+0xE6   0x00E6  #       LATIN SMALL LETTER AE
+0xE7   0x00E7  #       LATIN SMALL LETTER C WITH CEDILLA
+0xE8   0x00E8  #       LATIN SMALL LETTER E WITH GRAVE
+0xE9   0x00E9  #       LATIN SMALL LETTER E WITH ACUTE
+0xEA   0x00EA  #       LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB   0x00EB  #       LATIN SMALL LETTER E WITH DIAERESIS
+0xEC   0x00EC  #       LATIN SMALL LETTER I WITH GRAVE
+0xED   0x00ED  #       LATIN SMALL LETTER I WITH ACUTE
+0xEE   0x00EE  #       LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF   0x00EF  #       LATIN SMALL LETTER I WITH DIAERESIS
+0xF0   0x00F0  #       LATIN SMALL LETTER ETH
+0xF1   0x00F1  #       LATIN SMALL LETTER N WITH TILDE
+0xF2   0x00F2  #       LATIN SMALL LETTER O WITH GRAVE
+0xF3   0x00F3  #       LATIN SMALL LETTER O WITH ACUTE
+0xF4   0x00F4  #       LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5   0x00F5  #       LATIN SMALL LETTER O WITH TILDE
+0xF6   0x00F6  #       LATIN SMALL LETTER O WITH DIAERESIS
+0xF7   0x00F7  #       DIVISION SIGN
+0xF8   0x00F8  #       LATIN SMALL LETTER O WITH STROKE
+0xF9   0x00F9  #       LATIN SMALL LETTER U WITH GRAVE
+0xFA   0x00FA  #       LATIN SMALL LETTER U WITH ACUTE
+0xFB   0x00FB  #       LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC   0x00FC  #       LATIN SMALL LETTER U WITH DIAERESIS
+0xFD   0x00FD  #       LATIN SMALL LETTER Y WITH ACUTE
+0xFE   0x00FE  #       LATIN SMALL LETTER THORN
+0xFF   0x00FF  #       LATIN SMALL LETTER Y WITH DIAERESIS
+
diff --git a/ext/standard/html_tables/mappings/8859-5.TXT b/ext/standard/html_tables/mappings/8859-5.TXT
new file mode 100644 (file)
index 0000000..a7ed1ce
--- /dev/null
@@ -0,0 +1,303 @@
+#
+#      Name:             ISO 8859-5:1999 to Unicode
+#      Unicode version:  3.0
+#      Table version:    1.0
+#      Table format:     Format A
+#      Date:             1999 July 27
+#      Authors:          Ken Whistler <kenw@sybase.com>
+#
+#      Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#      This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#      No claims are made as to fitness for any particular purpose.  No
+#      warranties of any kind are expressed or implied.  The recipient
+#      agrees to determine applicability of information provided.  If this
+#      file has been provided on optical media by Unicode, Inc., the sole
+#      remedy for any claim will be exchange of defective media within 90
+#      days of receipt.
+#
+#      Unicode, Inc. hereby grants the right to freely use the information
+#      supplied in this file in the creation of products supporting the
+#      Unicode Standard, and to make copies of this file in any form for
+#      internal or external distribution as long as this notice remains
+#      attached.
+#
+#      General notes:
+#
+#      This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-5:1999 characters map into Unicode.
+#
+#      Format:  Three tab-separated columns
+#               Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
+#               Column #2 is the Unicode (in hex as 0xXXXX)
+#               Column #3 the Unicode name (follows a comment sign, '#')
+#
+#      The entries are in ISO/IEC 8859-5 order.
+#
+#      Version history
+#      1.0 version updates 0.1 version by adding mappings for all
+#      control characters.
+#
+#      Updated versions of this file may be found in:
+#              <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#      Any comments or problems, contact <errata@unicode.org>
+#      Please note that <errata@unicode.org> is an archival address;
+#      notices will be checked, but do not expect an immediate response.
+#
+0x00   0x0000  #       NULL
+0x01   0x0001  #       START OF HEADING
+0x02   0x0002  #       START OF TEXT
+0x03   0x0003  #       END OF TEXT
+0x04   0x0004  #       END OF TRANSMISSION
+0x05   0x0005  #       ENQUIRY
+0x06   0x0006  #       ACKNOWLEDGE
+0x07   0x0007  #       BELL
+0x08   0x0008  #       BACKSPACE
+0x09   0x0009  #       HORIZONTAL TABULATION
+0x0A   0x000A  #       LINE FEED
+0x0B   0x000B  #       VERTICAL TABULATION
+0x0C   0x000C  #       FORM FEED
+0x0D   0x000D  #       CARRIAGE RETURN
+0x0E   0x000E  #       SHIFT OUT
+0x0F   0x000F  #       SHIFT IN
+0x10   0x0010  #       DATA LINK ESCAPE
+0x11   0x0011  #       DEVICE CONTROL ONE
+0x12   0x0012  #       DEVICE CONTROL TWO
+0x13   0x0013  #       DEVICE CONTROL THREE
+0x14   0x0014  #       DEVICE CONTROL FOUR
+0x15   0x0015  #       NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #       SYNCHRONOUS IDLE
+0x17   0x0017  #       END OF TRANSMISSION BLOCK
+0x18   0x0018  #       CANCEL
+0x19   0x0019  #       END OF MEDIUM
+0x1A   0x001A  #       SUBSTITUTE
+0x1B   0x001B  #       ESCAPE
+0x1C   0x001C  #       FILE SEPARATOR
+0x1D   0x001D  #       GROUP SEPARATOR
+0x1E   0x001E  #       RECORD SEPARATOR
+0x1F   0x001F  #       UNIT SEPARATOR
+0x20   0x0020  #       SPACE
+0x21   0x0021  #       EXCLAMATION MARK
+0x22   0x0022  #       QUOTATION MARK
+0x23   0x0023  #       NUMBER SIGN
+0x24   0x0024  #       DOLLAR SIGN
+0x25   0x0025  #       PERCENT SIGN
+0x26   0x0026  #       AMPERSAND
+0x27   0x0027  #       APOSTROPHE
+0x28   0x0028  #       LEFT PARENTHESIS
+0x29   0x0029  #       RIGHT PARENTHESIS
+0x2A   0x002A  #       ASTERISK
+0x2B   0x002B  #       PLUS SIGN
+0x2C   0x002C  #       COMMA
+0x2D   0x002D  #       HYPHEN-MINUS
+0x2E   0x002E  #       FULL STOP
+0x2F   0x002F  #       SOLIDUS
+0x30   0x0030  #       DIGIT ZERO
+0x31   0x0031  #       DIGIT ONE
+0x32   0x0032  #       DIGIT TWO
+0x33   0x0033  #       DIGIT THREE
+0x34   0x0034  #       DIGIT FOUR
+0x35   0x0035  #       DIGIT FIVE
+0x36   0x0036  #       DIGIT SIX
+0x37   0x0037  #       DIGIT SEVEN
+0x38   0x0038  #       DIGIT EIGHT
+0x39   0x0039  #       DIGIT NINE
+0x3A   0x003A  #       COLON
+0x3B   0x003B  #       SEMICOLON
+0x3C   0x003C  #       LESS-THAN SIGN
+0x3D   0x003D  #       EQUALS SIGN
+0x3E   0x003E  #       GREATER-THAN SIGN
+0x3F   0x003F  #       QUESTION MARK
+0x40   0x0040  #       COMMERCIAL AT
+0x41   0x0041  #       LATIN CAPITAL LETTER A
+0x42   0x0042  #       LATIN CAPITAL LETTER B
+0x43   0x0043  #       LATIN CAPITAL LETTER C
+0x44   0x0044  #       LATIN CAPITAL LETTER D
+0x45   0x0045  #       LATIN CAPITAL LETTER E
+0x46   0x0046  #       LATIN CAPITAL LETTER F
+0x47   0x0047  #       LATIN CAPITAL LETTER G
+0x48   0x0048  #       LATIN CAPITAL LETTER H
+0x49   0x0049  #       LATIN CAPITAL LETTER I
+0x4A   0x004A  #       LATIN CAPITAL LETTER J
+0x4B   0x004B  #       LATIN CAPITAL LETTER K
+0x4C   0x004C  #       LATIN CAPITAL LETTER L
+0x4D   0x004D  #       LATIN CAPITAL LETTER M
+0x4E   0x004E  #       LATIN CAPITAL LETTER N
+0x4F   0x004F  #       LATIN CAPITAL LETTER O
+0x50   0x0050  #       LATIN CAPITAL LETTER P
+0x51   0x0051  #       LATIN CAPITAL LETTER Q
+0x52   0x0052  #       LATIN CAPITAL LETTER R
+0x53   0x0053  #       LATIN CAPITAL LETTER S
+0x54   0x0054  #       LATIN CAPITAL LETTER T
+0x55   0x0055  #       LATIN CAPITAL LETTER U
+0x56   0x0056  #       LATIN CAPITAL LETTER V
+0x57   0x0057  #       LATIN CAPITAL LETTER W
+0x58   0x0058  #       LATIN CAPITAL LETTER X
+0x59   0x0059  #       LATIN CAPITAL LETTER Y
+0x5A   0x005A  #       LATIN CAPITAL LETTER Z
+0x5B   0x005B  #       LEFT SQUARE BRACKET
+0x5C   0x005C  #       REVERSE SOLIDUS
+0x5D   0x005D  #       RIGHT SQUARE BRACKET
+0x5E   0x005E  #       CIRCUMFLEX ACCENT
+0x5F   0x005F  #       LOW LINE
+0x60   0x0060  #       GRAVE ACCENT
+0x61   0x0061  #       LATIN SMALL LETTER A
+0x62   0x0062  #       LATIN SMALL LETTER B
+0x63   0x0063  #       LATIN SMALL LETTER C
+0x64   0x0064  #       LATIN SMALL LETTER D
+0x65   0x0065  #       LATIN SMALL LETTER E
+0x66   0x0066  #       LATIN SMALL LETTER F
+0x67   0x0067  #       LATIN SMALL LETTER G
+0x68   0x0068  #       LATIN SMALL LETTER H
+0x69   0x0069  #       LATIN SMALL LETTER I
+0x6A   0x006A  #       LATIN SMALL LETTER J
+0x6B   0x006B  #       LATIN SMALL LETTER K
+0x6C   0x006C  #       LATIN SMALL LETTER L
+0x6D   0x006D  #       LATIN SMALL LETTER M
+0x6E   0x006E  #       LATIN SMALL LETTER N
+0x6F   0x006F  #       LATIN SMALL LETTER O
+0x70   0x0070  #       LATIN SMALL LETTER P
+0x71   0x0071  #       LATIN SMALL LETTER Q
+0x72   0x0072  #       LATIN SMALL LETTER R
+0x73   0x0073  #       LATIN SMALL LETTER S
+0x74   0x0074  #       LATIN SMALL LETTER T
+0x75   0x0075  #       LATIN SMALL LETTER U
+0x76   0x0076  #       LATIN SMALL LETTER V
+0x77   0x0077  #       LATIN SMALL LETTER W
+0x78   0x0078  #       LATIN SMALL LETTER X
+0x79   0x0079  #       LATIN SMALL LETTER Y
+0x7A   0x007A  #       LATIN SMALL LETTER Z
+0x7B   0x007B  #       LEFT CURLY BRACKET
+0x7C   0x007C  #       VERTICAL LINE
+0x7D   0x007D  #       RIGHT CURLY BRACKET
+0x7E   0x007E  #       TILDE
+0x7F   0x007F  #       DELETE
+0x80   0x0080  #       <control>
+0x81   0x0081  #       <control>
+0x82   0x0082  #       <control>
+0x83   0x0083  #       <control>
+0x84   0x0084  #       <control>
+0x85   0x0085  #       <control>
+0x86   0x0086  #       <control>
+0x87   0x0087  #       <control>
+0x88   0x0088  #       <control>
+0x89   0x0089  #       <control>
+0x8A   0x008A  #       <control>
+0x8B   0x008B  #       <control>
+0x8C   0x008C  #       <control>
+0x8D   0x008D  #       <control>
+0x8E   0x008E  #       <control>
+0x8F   0x008F  #       <control>
+0x90   0x0090  #       <control>
+0x91   0x0091  #       <control>
+0x92   0x0092  #       <control>
+0x93   0x0093  #       <control>
+0x94   0x0094  #       <control>
+0x95   0x0095  #       <control>
+0x96   0x0096  #       <control>
+0x97   0x0097  #       <control>
+0x98   0x0098  #       <control>
+0x99   0x0099  #       <control>
+0x9A   0x009A  #       <control>
+0x9B   0x009B  #       <control>
+0x9C   0x009C  #       <control>
+0x9D   0x009D  #       <control>
+0x9E   0x009E  #       <control>
+0x9F   0x009F  #       <control>
+0xA0   0x00A0  #       NO-BREAK SPACE
+0xA1   0x0401  #       CYRILLIC CAPITAL LETTER IO
+0xA2   0x0402  #       CYRILLIC CAPITAL LETTER DJE
+0xA3   0x0403  #       CYRILLIC CAPITAL LETTER GJE
+0xA4   0x0404  #       CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xA5   0x0405  #       CYRILLIC CAPITAL LETTER DZE
+0xA6   0x0406  #       CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xA7   0x0407  #       CYRILLIC CAPITAL LETTER YI
+0xA8   0x0408  #       CYRILLIC CAPITAL LETTER JE
+0xA9   0x0409  #       CYRILLIC CAPITAL LETTER LJE
+0xAA   0x040A  #       CYRILLIC CAPITAL LETTER NJE
+0xAB   0x040B  #       CYRILLIC CAPITAL LETTER TSHE
+0xAC   0x040C  #       CYRILLIC CAPITAL LETTER KJE
+0xAD   0x00AD  #       SOFT HYPHEN
+0xAE   0x040E  #       CYRILLIC CAPITAL LETTER SHORT U
+0xAF   0x040F  #       CYRILLIC CAPITAL LETTER DZHE
+0xB0   0x0410  #       CYRILLIC CAPITAL LETTER A
+0xB1   0x0411  #       CYRILLIC CAPITAL LETTER BE
+0xB2   0x0412  #       CYRILLIC CAPITAL LETTER VE
+0xB3   0x0413  #       CYRILLIC CAPITAL LETTER GHE
+0xB4   0x0414  #       CYRILLIC CAPITAL LETTER DE
+0xB5   0x0415  #       CYRILLIC CAPITAL LETTER IE
+0xB6   0x0416  #       CYRILLIC CAPITAL LETTER ZHE
+0xB7   0x0417  #       CYRILLIC CAPITAL LETTER ZE
+0xB8   0x0418  #       CYRILLIC CAPITAL LETTER I
+0xB9   0x0419  #       CYRILLIC CAPITAL LETTER SHORT I
+0xBA   0x041A  #       CYRILLIC CAPITAL LETTER KA
+0xBB   0x041B  #       CYRILLIC CAPITAL LETTER EL
+0xBC   0x041C  #       CYRILLIC CAPITAL LETTER EM
+0xBD   0x041D  #       CYRILLIC CAPITAL LETTER EN
+0xBE   0x041E  #       CYRILLIC CAPITAL LETTER O
+0xBF   0x041F  #       CYRILLIC CAPITAL LETTER PE
+0xC0   0x0420  #       CYRILLIC CAPITAL LETTER ER
+0xC1   0x0421  #       CYRILLIC CAPITAL LETTER ES
+0xC2   0x0422  #       CYRILLIC CAPITAL LETTER TE
+0xC3   0x0423  #       CYRILLIC CAPITAL LETTER U
+0xC4   0x0424  #       CYRILLIC CAPITAL LETTER EF
+0xC5   0x0425  #       CYRILLIC CAPITAL LETTER HA
+0xC6   0x0426  #       CYRILLIC CAPITAL LETTER TSE
+0xC7   0x0427  #       CYRILLIC CAPITAL LETTER CHE
+0xC8   0x0428  #       CYRILLIC CAPITAL LETTER SHA
+0xC9   0x0429  #       CYRILLIC CAPITAL LETTER SHCHA
+0xCA   0x042A  #       CYRILLIC CAPITAL LETTER HARD SIGN
+0xCB   0x042B  #       CYRILLIC CAPITAL LETTER YERU
+0xCC   0x042C  #       CYRILLIC CAPITAL LETTER SOFT SIGN
+0xCD   0x042D  #       CYRILLIC CAPITAL LETTER E
+0xCE   0x042E  #       CYRILLIC CAPITAL LETTER YU
+0xCF   0x042F  #       CYRILLIC CAPITAL LETTER YA
+0xD0   0x0430  #       CYRILLIC SMALL LETTER A
+0xD1   0x0431  #       CYRILLIC SMALL LETTER BE
+0xD2   0x0432  #       CYRILLIC SMALL LETTER VE
+0xD3   0x0433  #       CYRILLIC SMALL LETTER GHE
+0xD4   0x0434  #       CYRILLIC SMALL LETTER DE
+0xD5   0x0435  #       CYRILLIC SMALL LETTER IE
+0xD6   0x0436  #       CYRILLIC SMALL LETTER ZHE
+0xD7   0x0437  #       CYRILLIC SMALL LETTER ZE
+0xD8   0x0438  #       CYRILLIC SMALL LETTER I
+0xD9   0x0439  #       CYRILLIC SMALL LETTER SHORT I
+0xDA   0x043A  #       CYRILLIC SMALL LETTER KA
+0xDB   0x043B  #       CYRILLIC SMALL LETTER EL
+0xDC   0x043C  #       CYRILLIC SMALL LETTER EM
+0xDD   0x043D  #       CYRILLIC SMALL LETTER EN
+0xDE   0x043E  #       CYRILLIC SMALL LETTER O
+0xDF   0x043F  #       CYRILLIC SMALL LETTER PE
+0xE0   0x0440  #       CYRILLIC SMALL LETTER ER
+0xE1   0x0441  #       CYRILLIC SMALL LETTER ES
+0xE2   0x0442  #       CYRILLIC SMALL LETTER TE
+0xE3   0x0443  #       CYRILLIC SMALL LETTER U
+0xE4   0x0444  #       CYRILLIC SMALL LETTER EF
+0xE5   0x0445  #       CYRILLIC SMALL LETTER HA
+0xE6   0x0446  #       CYRILLIC SMALL LETTER TSE
+0xE7   0x0447  #       CYRILLIC SMALL LETTER CHE
+0xE8   0x0448  #       CYRILLIC SMALL LETTER SHA
+0xE9   0x0449  #       CYRILLIC SMALL LETTER SHCHA
+0xEA   0x044A  #       CYRILLIC SMALL LETTER HARD SIGN
+0xEB   0x044B  #       CYRILLIC SMALL LETTER YERU
+0xEC   0x044C  #       CYRILLIC SMALL LETTER SOFT SIGN
+0xED   0x044D  #       CYRILLIC SMALL LETTER E
+0xEE   0x044E  #       CYRILLIC SMALL LETTER YU
+0xEF   0x044F  #       CYRILLIC SMALL LETTER YA
+0xF0   0x2116  #       NUMERO SIGN
+0xF1   0x0451  #       CYRILLIC SMALL LETTER IO
+0xF2   0x0452  #       CYRILLIC SMALL LETTER DJE
+0xF3   0x0453  #       CYRILLIC SMALL LETTER GJE
+0xF4   0x0454  #       CYRILLIC SMALL LETTER UKRAINIAN IE
+0xF5   0x0455  #       CYRILLIC SMALL LETTER DZE
+0xF6   0x0456  #       CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xF7   0x0457  #       CYRILLIC SMALL LETTER YI
+0xF8   0x0458  #       CYRILLIC SMALL LETTER JE
+0xF9   0x0459  #       CYRILLIC SMALL LETTER LJE
+0xFA   0x045A  #       CYRILLIC SMALL LETTER NJE
+0xFB   0x045B  #       CYRILLIC SMALL LETTER TSHE
+0xFC   0x045C  #       CYRILLIC SMALL LETTER KJE
+0xFD   0x00A7  #       SECTION SIGN
+0xFE   0x045E  #       CYRILLIC SMALL LETTER SHORT U
+0xFF   0x045F  #       CYRILLIC SMALL LETTER DZHE
diff --git a/ext/standard/html_tables/mappings/CP1251.TXT b/ext/standard/html_tables/mappings/CP1251.TXT
new file mode 100644 (file)
index 0000000..4d9b355
--- /dev/null
@@ -0,0 +1,274 @@
+#
+#    Name:     cp1251 to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.01
+#    Table format:  Format A
+#    Date:          04/15/98
+#
+#    Contact:       Shawn.Steele@microsoft.com
+#
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1251 code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp1251 order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0A   0x000A  #LINE FEED
+0x0B   0x000B  #VERTICAL TABULATION
+0x0C   0x000C  #FORM FEED
+0x0D   0x000D  #CARRIAGE RETURN
+0x0E   0x000E  #SHIFT OUT
+0x0F   0x000F  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1A   0x001A  #SUBSTITUTE
+0x1B   0x001B  #ESCAPE
+0x1C   0x001C  #FILE SEPARATOR
+0x1D   0x001D  #GROUP SEPARATOR
+0x1E   0x001E  #RECORD SEPARATOR
+0x1F   0x001F  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2A   0x002A  #ASTERISK
+0x2B   0x002B  #PLUS SIGN
+0x2C   0x002C  #COMMA
+0x2D   0x002D  #HYPHEN-MINUS
+0x2E   0x002E  #FULL STOP
+0x2F   0x002F  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3A   0x003A  #COLON
+0x3B   0x003B  #SEMICOLON
+0x3C   0x003C  #LESS-THAN SIGN
+0x3D   0x003D  #EQUALS SIGN
+0x3E   0x003E  #GREATER-THAN SIGN
+0x3F   0x003F  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4A   0x004A  #LATIN CAPITAL LETTER J
+0x4B   0x004B  #LATIN CAPITAL LETTER K
+0x4C   0x004C  #LATIN CAPITAL LETTER L
+0x4D   0x004D  #LATIN CAPITAL LETTER M
+0x4E   0x004E  #LATIN CAPITAL LETTER N
+0x4F   0x004F  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5A   0x005A  #LATIN CAPITAL LETTER Z
+0x5B   0x005B  #LEFT SQUARE BRACKET
+0x5C   0x005C  #REVERSE SOLIDUS
+0x5D   0x005D  #RIGHT SQUARE BRACKET
+0x5E   0x005E  #CIRCUMFLEX ACCENT
+0x5F   0x005F  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6A   0x006A  #LATIN SMALL LETTER J
+0x6B   0x006B  #LATIN SMALL LETTER K
+0x6C   0x006C  #LATIN SMALL LETTER L
+0x6D   0x006D  #LATIN SMALL LETTER M
+0x6E   0x006E  #LATIN SMALL LETTER N
+0x6F   0x006F  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7A   0x007A  #LATIN SMALL LETTER Z
+0x7B   0x007B  #LEFT CURLY BRACKET
+0x7C   0x007C  #VERTICAL LINE
+0x7D   0x007D  #RIGHT CURLY BRACKET
+0x7E   0x007E  #TILDE
+0x7F   0x007F  #DELETE
+0x80   0x0402  #CYRILLIC CAPITAL LETTER DJE
+0x81   0x0403  #CYRILLIC CAPITAL LETTER GJE
+0x82   0x201A  #SINGLE LOW-9 QUOTATION MARK
+0x83   0x0453  #CYRILLIC SMALL LETTER GJE
+0x84   0x201E  #DOUBLE LOW-9 QUOTATION MARK
+0x85   0x2026  #HORIZONTAL ELLIPSIS
+0x86   0x2020  #DAGGER
+0x87   0x2021  #DOUBLE DAGGER
+0x88   0x20AC  #EURO SIGN
+0x89   0x2030  #PER MILLE SIGN
+0x8A   0x0409  #CYRILLIC CAPITAL LETTER LJE
+0x8B   0x2039  #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8C   0x040A  #CYRILLIC CAPITAL LETTER NJE
+0x8D   0x040C  #CYRILLIC CAPITAL LETTER KJE
+0x8E   0x040B  #CYRILLIC CAPITAL LETTER TSHE
+0x8F   0x040F  #CYRILLIC CAPITAL LETTER DZHE
+0x90   0x0452  #CYRILLIC SMALL LETTER DJE
+0x91   0x2018  #LEFT SINGLE QUOTATION MARK
+0x92   0x2019  #RIGHT SINGLE QUOTATION MARK
+0x93   0x201C  #LEFT DOUBLE QUOTATION MARK
+0x94   0x201D  #RIGHT DOUBLE QUOTATION MARK
+0x95   0x2022  #BULLET
+0x96   0x2013  #EN DASH
+0x97   0x2014  #EM DASH
+0x98           #UNDEFINED
+0x99   0x2122  #TRADE MARK SIGN
+0x9A   0x0459  #CYRILLIC SMALL LETTER LJE
+0x9B   0x203A  #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9C   0x045A  #CYRILLIC SMALL LETTER NJE
+0x9D   0x045C  #CYRILLIC SMALL LETTER KJE
+0x9E   0x045B  #CYRILLIC SMALL LETTER TSHE
+0x9F   0x045F  #CYRILLIC SMALL LETTER DZHE
+0xA0   0x00A0  #NO-BREAK SPACE
+0xA1   0x040E  #CYRILLIC CAPITAL LETTER SHORT U
+0xA2   0x045E  #CYRILLIC SMALL LETTER SHORT U
+0xA3   0x0408  #CYRILLIC CAPITAL LETTER JE
+0xA4   0x00A4  #CURRENCY SIGN
+0xA5   0x0490  #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0xA6   0x00A6  #BROKEN BAR
+0xA7   0x00A7  #SECTION SIGN
+0xA8   0x0401  #CYRILLIC CAPITAL LETTER IO
+0xA9   0x00A9  #COPYRIGHT SIGN
+0xAA   0x0404  #CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xAB   0x00AB  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC   0x00AC  #NOT SIGN
+0xAD   0x00AD  #SOFT HYPHEN
+0xAE   0x00AE  #REGISTERED SIGN
+0xAF   0x0407  #CYRILLIC CAPITAL LETTER YI
+0xB0   0x00B0  #DEGREE SIGN
+0xB1   0x00B1  #PLUS-MINUS SIGN
+0xB2   0x0406  #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xB3   0x0456  #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xB4   0x0491  #CYRILLIC SMALL LETTER GHE WITH UPTURN
+0xB5   0x00B5  #MICRO SIGN
+0xB6   0x00B6  #PILCROW SIGN
+0xB7   0x00B7  #MIDDLE DOT
+0xB8   0x0451  #CYRILLIC SMALL LETTER IO
+0xB9   0x2116  #NUMERO SIGN
+0xBA   0x0454  #CYRILLIC SMALL LETTER UKRAINIAN IE
+0xBB   0x00BB  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC   0x0458  #CYRILLIC SMALL LETTER JE
+0xBD   0x0405  #CYRILLIC CAPITAL LETTER DZE
+0xBE   0x0455  #CYRILLIC SMALL LETTER DZE
+0xBF   0x0457  #CYRILLIC SMALL LETTER YI
+0xC0   0x0410  #CYRILLIC CAPITAL LETTER A
+0xC1   0x0411  #CYRILLIC CAPITAL LETTER BE
+0xC2   0x0412  #CYRILLIC CAPITAL LETTER VE
+0xC3   0x0413  #CYRILLIC CAPITAL LETTER GHE
+0xC4   0x0414  #CYRILLIC CAPITAL LETTER DE
+0xC5   0x0415  #CYRILLIC CAPITAL LETTER IE
+0xC6   0x0416  #CYRILLIC CAPITAL LETTER ZHE
+0xC7   0x0417  #CYRILLIC CAPITAL LETTER ZE
+0xC8   0x0418  #CYRILLIC CAPITAL LETTER I
+0xC9   0x0419  #CYRILLIC CAPITAL LETTER SHORT I
+0xCA   0x041A  #CYRILLIC CAPITAL LETTER KA
+0xCB   0x041B  #CYRILLIC CAPITAL LETTER EL
+0xCC   0x041C  #CYRILLIC CAPITAL LETTER EM
+0xCD   0x041D  #CYRILLIC CAPITAL LETTER EN
+0xCE   0x041E  #CYRILLIC CAPITAL LETTER O
+0xCF   0x041F  #CYRILLIC CAPITAL LETTER PE
+0xD0   0x0420  #CYRILLIC CAPITAL LETTER ER
+0xD1   0x0421  #CYRILLIC CAPITAL LETTER ES
+0xD2   0x0422  #CYRILLIC CAPITAL LETTER TE
+0xD3   0x0423  #CYRILLIC CAPITAL LETTER U
+0xD4   0x0424  #CYRILLIC CAPITAL LETTER EF
+0xD5   0x0425  #CYRILLIC CAPITAL LETTER HA
+0xD6   0x0426  #CYRILLIC CAPITAL LETTER TSE
+0xD7   0x0427  #CYRILLIC CAPITAL LETTER CHE
+0xD8   0x0428  #CYRILLIC CAPITAL LETTER SHA
+0xD9   0x0429  #CYRILLIC CAPITAL LETTER SHCHA
+0xDA   0x042A  #CYRILLIC CAPITAL LETTER HARD SIGN
+0xDB   0x042B  #CYRILLIC CAPITAL LETTER YERU
+0xDC   0x042C  #CYRILLIC CAPITAL LETTER SOFT SIGN
+0xDD   0x042D  #CYRILLIC CAPITAL LETTER E
+0xDE   0x042E  #CYRILLIC CAPITAL LETTER YU
+0xDF   0x042F  #CYRILLIC CAPITAL LETTER YA
+0xE0   0x0430  #CYRILLIC SMALL LETTER A
+0xE1   0x0431  #CYRILLIC SMALL LETTER BE
+0xE2   0x0432  #CYRILLIC SMALL LETTER VE
+0xE3   0x0433  #CYRILLIC SMALL LETTER GHE
+0xE4   0x0434  #CYRILLIC SMALL LETTER DE
+0xE5   0x0435  #CYRILLIC SMALL LETTER IE
+0xE6   0x0436  #CYRILLIC SMALL LETTER ZHE
+0xE7   0x0437  #CYRILLIC SMALL LETTER ZE
+0xE8   0x0438  #CYRILLIC SMALL LETTER I
+0xE9   0x0439  #CYRILLIC SMALL LETTER SHORT I
+0xEA   0x043A  #CYRILLIC SMALL LETTER KA
+0xEB   0x043B  #CYRILLIC SMALL LETTER EL
+0xEC   0x043C  #CYRILLIC SMALL LETTER EM
+0xED   0x043D  #CYRILLIC SMALL LETTER EN
+0xEE   0x043E  #CYRILLIC SMALL LETTER O
+0xEF   0x043F  #CYRILLIC SMALL LETTER PE
+0xF0   0x0440  #CYRILLIC SMALL LETTER ER
+0xF1   0x0441  #CYRILLIC SMALL LETTER ES
+0xF2   0x0442  #CYRILLIC SMALL LETTER TE
+0xF3   0x0443  #CYRILLIC SMALL LETTER U
+0xF4   0x0444  #CYRILLIC SMALL LETTER EF
+0xF5   0x0445  #CYRILLIC SMALL LETTER HA
+0xF6   0x0446  #CYRILLIC SMALL LETTER TSE
+0xF7   0x0447  #CYRILLIC SMALL LETTER CHE
+0xF8   0x0448  #CYRILLIC SMALL LETTER SHA
+0xF9   0x0449  #CYRILLIC SMALL LETTER SHCHA
+0xFA   0x044A  #CYRILLIC SMALL LETTER HARD SIGN
+0xFB   0x044B  #CYRILLIC SMALL LETTER YERU
+0xFC   0x044C  #CYRILLIC SMALL LETTER SOFT SIGN
+0xFD   0x044D  #CYRILLIC SMALL LETTER E
+0xFE   0x044E  #CYRILLIC SMALL LETTER YU
+0xFF   0x044F  #CYRILLIC SMALL LETTER YA
diff --git a/ext/standard/html_tables/mappings/CP1252.TXT b/ext/standard/html_tables/mappings/CP1252.TXT
new file mode 100644 (file)
index 0000000..8ff4b20
--- /dev/null
@@ -0,0 +1,274 @@
+#
+#    Name:     cp1252 to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.01
+#    Table format:  Format A
+#    Date:          04/15/98
+#
+#    Contact:       Shawn.Steele@microsoft.com
+#
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1252 code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp1252 order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0A   0x000A  #LINE FEED
+0x0B   0x000B  #VERTICAL TABULATION
+0x0C   0x000C  #FORM FEED
+0x0D   0x000D  #CARRIAGE RETURN
+0x0E   0x000E  #SHIFT OUT
+0x0F   0x000F  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1A   0x001A  #SUBSTITUTE
+0x1B   0x001B  #ESCAPE
+0x1C   0x001C  #FILE SEPARATOR
+0x1D   0x001D  #GROUP SEPARATOR
+0x1E   0x001E  #RECORD SEPARATOR
+0x1F   0x001F  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2A   0x002A  #ASTERISK
+0x2B   0x002B  #PLUS SIGN
+0x2C   0x002C  #COMMA
+0x2D   0x002D  #HYPHEN-MINUS
+0x2E   0x002E  #FULL STOP
+0x2F   0x002F  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3A   0x003A  #COLON
+0x3B   0x003B  #SEMICOLON
+0x3C   0x003C  #LESS-THAN SIGN
+0x3D   0x003D  #EQUALS SIGN
+0x3E   0x003E  #GREATER-THAN SIGN
+0x3F   0x003F  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4A   0x004A  #LATIN CAPITAL LETTER J
+0x4B   0x004B  #LATIN CAPITAL LETTER K
+0x4C   0x004C  #LATIN CAPITAL LETTER L
+0x4D   0x004D  #LATIN CAPITAL LETTER M
+0x4E   0x004E  #LATIN CAPITAL LETTER N
+0x4F   0x004F  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5A   0x005A  #LATIN CAPITAL LETTER Z
+0x5B   0x005B  #LEFT SQUARE BRACKET
+0x5C   0x005C  #REVERSE SOLIDUS
+0x5D   0x005D  #RIGHT SQUARE BRACKET
+0x5E   0x005E  #CIRCUMFLEX ACCENT
+0x5F   0x005F  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6A   0x006A  #LATIN SMALL LETTER J
+0x6B   0x006B  #LATIN SMALL LETTER K
+0x6C   0x006C  #LATIN SMALL LETTER L
+0x6D   0x006D  #LATIN SMALL LETTER M
+0x6E   0x006E  #LATIN SMALL LETTER N
+0x6F   0x006F  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7A   0x007A  #LATIN SMALL LETTER Z
+0x7B   0x007B  #LEFT CURLY BRACKET
+0x7C   0x007C  #VERTICAL LINE
+0x7D   0x007D  #RIGHT CURLY BRACKET
+0x7E   0x007E  #TILDE
+0x7F   0x007F  #DELETE
+0x80   0x20AC  #EURO SIGN
+0x81           #UNDEFINED
+0x82   0x201A  #SINGLE LOW-9 QUOTATION MARK
+0x83   0x0192  #LATIN SMALL LETTER F WITH HOOK
+0x84   0x201E  #DOUBLE LOW-9 QUOTATION MARK
+0x85   0x2026  #HORIZONTAL ELLIPSIS
+0x86   0x2020  #DAGGER
+0x87   0x2021  #DOUBLE DAGGER
+0x88   0x02C6  #MODIFIER LETTER CIRCUMFLEX ACCENT
+0x89   0x2030  #PER MILLE SIGN
+0x8A   0x0160  #LATIN CAPITAL LETTER S WITH CARON
+0x8B   0x2039  #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8C   0x0152  #LATIN CAPITAL LIGATURE OE
+0x8D           #UNDEFINED
+0x8E   0x017D  #LATIN CAPITAL LETTER Z WITH CARON
+0x8F           #UNDEFINED
+0x90           #UNDEFINED
+0x91   0x2018  #LEFT SINGLE QUOTATION MARK
+0x92   0x2019  #RIGHT SINGLE QUOTATION MARK
+0x93   0x201C  #LEFT DOUBLE QUOTATION MARK
+0x94   0x201D  #RIGHT DOUBLE QUOTATION MARK
+0x95   0x2022  #BULLET
+0x96   0x2013  #EN DASH
+0x97   0x2014  #EM DASH
+0x98   0x02DC  #SMALL TILDE
+0x99   0x2122  #TRADE MARK SIGN
+0x9A   0x0161  #LATIN SMALL LETTER S WITH CARON
+0x9B   0x203A  #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9C   0x0153  #LATIN SMALL LIGATURE OE
+0x9D           #UNDEFINED
+0x9E   0x017E  #LATIN SMALL LETTER Z WITH CARON
+0x9F   0x0178  #LATIN CAPITAL LETTER Y WITH DIAERESIS
+0xA0   0x00A0  #NO-BREAK SPACE
+0xA1   0x00A1  #INVERTED EXCLAMATION MARK
+0xA2   0x00A2  #CENT SIGN
+0xA3   0x00A3  #POUND SIGN
+0xA4   0x00A4  #CURRENCY SIGN
+0xA5   0x00A5  #YEN SIGN
+0xA6   0x00A6  #BROKEN BAR
+0xA7   0x00A7  #SECTION SIGN
+0xA8   0x00A8  #DIAERESIS
+0xA9   0x00A9  #COPYRIGHT SIGN
+0xAA   0x00AA  #FEMININE ORDINAL INDICATOR
+0xAB   0x00AB  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC   0x00AC  #NOT SIGN
+0xAD   0x00AD  #SOFT HYPHEN
+0xAE   0x00AE  #REGISTERED SIGN
+0xAF   0x00AF  #MACRON
+0xB0   0x00B0  #DEGREE SIGN
+0xB1   0x00B1  #PLUS-MINUS SIGN
+0xB2   0x00B2  #SUPERSCRIPT TWO
+0xB3   0x00B3  #SUPERSCRIPT THREE
+0xB4   0x00B4  #ACUTE ACCENT
+0xB5   0x00B5  #MICRO SIGN
+0xB6   0x00B6  #PILCROW SIGN
+0xB7   0x00B7  #MIDDLE DOT
+0xB8   0x00B8  #CEDILLA
+0xB9   0x00B9  #SUPERSCRIPT ONE
+0xBA   0x00BA  #MASCULINE ORDINAL INDICATOR
+0xBB   0x00BB  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC   0x00BC  #VULGAR FRACTION ONE QUARTER
+0xBD   0x00BD  #VULGAR FRACTION ONE HALF
+0xBE   0x00BE  #VULGAR FRACTION THREE QUARTERS
+0xBF   0x00BF  #INVERTED QUESTION MARK
+0xC0   0x00C0  #LATIN CAPITAL LETTER A WITH GRAVE
+0xC1   0x00C1  #LATIN CAPITAL LETTER A WITH ACUTE
+0xC2   0x00C2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3   0x00C3  #LATIN CAPITAL LETTER A WITH TILDE
+0xC4   0x00C4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5   0x00C5  #LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6   0x00C6  #LATIN CAPITAL LETTER AE
+0xC7   0x00C7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8   0x00C8  #LATIN CAPITAL LETTER E WITH GRAVE
+0xC9   0x00C9  #LATIN CAPITAL LETTER E WITH ACUTE
+0xCA   0x00CA  #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB   0x00CB  #LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC   0x00CC  #LATIN CAPITAL LETTER I WITH GRAVE
+0xCD   0x00CD  #LATIN CAPITAL LETTER I WITH ACUTE
+0xCE   0x00CE  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF   0x00CF  #LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0   0x00D0  #LATIN CAPITAL LETTER ETH
+0xD1   0x00D1  #LATIN CAPITAL LETTER N WITH TILDE
+0xD2   0x00D2  #LATIN CAPITAL LETTER O WITH GRAVE
+0xD3   0x00D3  #LATIN CAPITAL LETTER O WITH ACUTE
+0xD4   0x00D4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5   0x00D5  #LATIN CAPITAL LETTER O WITH TILDE
+0xD6   0x00D6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7   0x00D7  #MULTIPLICATION SIGN
+0xD8   0x00D8  #LATIN CAPITAL LETTER O WITH STROKE
+0xD9   0x00D9  #LATIN CAPITAL LETTER U WITH GRAVE
+0xDA   0x00DA  #LATIN CAPITAL LETTER U WITH ACUTE
+0xDB   0x00DB  #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC   0x00DC  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD   0x00DD  #LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE   0x00DE  #LATIN CAPITAL LETTER THORN
+0xDF   0x00DF  #LATIN SMALL LETTER SHARP S
+0xE0   0x00E0  #LATIN SMALL LETTER A WITH GRAVE
+0xE1   0x00E1  #LATIN SMALL LETTER A WITH ACUTE
+0xE2   0x00E2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3   0x00E3  #LATIN SMALL LETTER A WITH TILDE
+0xE4   0x00E4  #LATIN SMALL LETTER A WITH DIAERESIS
+0xE5   0x00E5  #LATIN SMALL LETTER A WITH RING ABOVE
+0xE6   0x00E6  #LATIN SMALL LETTER AE
+0xE7   0x00E7  #LATIN SMALL LETTER C WITH CEDILLA
+0xE8   0x00E8  #LATIN SMALL LETTER E WITH GRAVE
+0xE9   0x00E9  #LATIN SMALL LETTER E WITH ACUTE
+0xEA   0x00EA  #LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB   0x00EB  #LATIN SMALL LETTER E WITH DIAERESIS
+0xEC   0x00EC  #LATIN SMALL LETTER I WITH GRAVE
+0xED   0x00ED  #LATIN SMALL LETTER I WITH ACUTE
+0xEE   0x00EE  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF   0x00EF  #LATIN SMALL LETTER I WITH DIAERESIS
+0xF0   0x00F0  #LATIN SMALL LETTER ETH
+0xF1   0x00F1  #LATIN SMALL LETTER N WITH TILDE
+0xF2   0x00F2  #LATIN SMALL LETTER O WITH GRAVE
+0xF3   0x00F3  #LATIN SMALL LETTER O WITH ACUTE
+0xF4   0x00F4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5   0x00F5  #LATIN SMALL LETTER O WITH TILDE
+0xF6   0x00F6  #LATIN SMALL LETTER O WITH DIAERESIS
+0xF7   0x00F7  #DIVISION SIGN
+0xF8   0x00F8  #LATIN SMALL LETTER O WITH STROKE
+0xF9   0x00F9  #LATIN SMALL LETTER U WITH GRAVE
+0xFA   0x00FA  #LATIN SMALL LETTER U WITH ACUTE
+0xFB   0x00FB  #LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC   0x00FC  #LATIN SMALL LETTER U WITH DIAERESIS
+0xFD   0x00FD  #LATIN SMALL LETTER Y WITH ACUTE
+0xFE   0x00FE  #LATIN SMALL LETTER THORN
+0xFF   0x00FF  #LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/ext/standard/html_tables/mappings/CP866.TXT b/ext/standard/html_tables/mappings/CP866.TXT
new file mode 100644 (file)
index 0000000..b0213a1
--- /dev/null
@@ -0,0 +1,275 @@
+#
+#    Name:     cp866_DOSCyrillicRussian to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Contact: Shawn.Steele@microsoft.com
+#                   
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp866_DOSCyrillicRussian code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp866_DOSCyrillicRussian order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0a   0x000a  #LINE FEED
+0x0b   0x000b  #VERTICAL TABULATION
+0x0c   0x000c  #FORM FEED
+0x0d   0x000d  #CARRIAGE RETURN
+0x0e   0x000e  #SHIFT OUT
+0x0f   0x000f  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1a   0x001a  #SUBSTITUTE
+0x1b   0x001b  #ESCAPE
+0x1c   0x001c  #FILE SEPARATOR
+0x1d   0x001d  #GROUP SEPARATOR
+0x1e   0x001e  #RECORD SEPARATOR
+0x1f   0x001f  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2a   0x002a  #ASTERISK
+0x2b   0x002b  #PLUS SIGN
+0x2c   0x002c  #COMMA
+0x2d   0x002d  #HYPHEN-MINUS
+0x2e   0x002e  #FULL STOP
+0x2f   0x002f  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3a   0x003a  #COLON
+0x3b   0x003b  #SEMICOLON
+0x3c   0x003c  #LESS-THAN SIGN
+0x3d   0x003d  #EQUALS SIGN
+0x3e   0x003e  #GREATER-THAN SIGN
+0x3f   0x003f  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4a   0x004a  #LATIN CAPITAL LETTER J
+0x4b   0x004b  #LATIN CAPITAL LETTER K
+0x4c   0x004c  #LATIN CAPITAL LETTER L
+0x4d   0x004d  #LATIN CAPITAL LETTER M
+0x4e   0x004e  #LATIN CAPITAL LETTER N
+0x4f   0x004f  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5a   0x005a  #LATIN CAPITAL LETTER Z
+0x5b   0x005b  #LEFT SQUARE BRACKET
+0x5c   0x005c  #REVERSE SOLIDUS
+0x5d   0x005d  #RIGHT SQUARE BRACKET
+0x5e   0x005e  #CIRCUMFLEX ACCENT
+0x5f   0x005f  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6a   0x006a  #LATIN SMALL LETTER J
+0x6b   0x006b  #LATIN SMALL LETTER K
+0x6c   0x006c  #LATIN SMALL LETTER L
+0x6d   0x006d  #LATIN SMALL LETTER M
+0x6e   0x006e  #LATIN SMALL LETTER N
+0x6f   0x006f  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7a   0x007a  #LATIN SMALL LETTER Z
+0x7b   0x007b  #LEFT CURLY BRACKET
+0x7c   0x007c  #VERTICAL LINE
+0x7d   0x007d  #RIGHT CURLY BRACKET
+0x7e   0x007e  #TILDE
+0x7f   0x007f  #DELETE
+0x80   0x0410  #CYRILLIC CAPITAL LETTER A
+0x81   0x0411  #CYRILLIC CAPITAL LETTER BE
+0x82   0x0412  #CYRILLIC CAPITAL LETTER VE
+0x83   0x0413  #CYRILLIC CAPITAL LETTER GHE
+0x84   0x0414  #CYRILLIC CAPITAL LETTER DE
+0x85   0x0415  #CYRILLIC CAPITAL LETTER IE
+0x86   0x0416  #CYRILLIC CAPITAL LETTER ZHE
+0x87   0x0417  #CYRILLIC CAPITAL LETTER ZE
+0x88   0x0418  #CYRILLIC CAPITAL LETTER I
+0x89   0x0419  #CYRILLIC CAPITAL LETTER SHORT I
+0x8a   0x041a  #CYRILLIC CAPITAL LETTER KA
+0x8b   0x041b  #CYRILLIC CAPITAL LETTER EL
+0x8c   0x041c  #CYRILLIC CAPITAL LETTER EM
+0x8d   0x041d  #CYRILLIC CAPITAL LETTER EN
+0x8e   0x041e  #CYRILLIC CAPITAL LETTER O
+0x8f   0x041f  #CYRILLIC CAPITAL LETTER PE
+0x90   0x0420  #CYRILLIC CAPITAL LETTER ER
+0x91   0x0421  #CYRILLIC CAPITAL LETTER ES
+0x92   0x0422  #CYRILLIC CAPITAL LETTER TE
+0x93   0x0423  #CYRILLIC CAPITAL LETTER U
+0x94   0x0424  #CYRILLIC CAPITAL LETTER EF
+0x95   0x0425  #CYRILLIC CAPITAL LETTER HA
+0x96   0x0426  #CYRILLIC CAPITAL LETTER TSE
+0x97   0x0427  #CYRILLIC CAPITAL LETTER CHE
+0x98   0x0428  #CYRILLIC CAPITAL LETTER SHA
+0x99   0x0429  #CYRILLIC CAPITAL LETTER SHCHA
+0x9a   0x042a  #CYRILLIC CAPITAL LETTER HARD SIGN
+0x9b   0x042b  #CYRILLIC CAPITAL LETTER YERU
+0x9c   0x042c  #CYRILLIC CAPITAL LETTER SOFT SIGN
+0x9d   0x042d  #CYRILLIC CAPITAL LETTER E
+0x9e   0x042e  #CYRILLIC CAPITAL LETTER YU
+0x9f   0x042f  #CYRILLIC CAPITAL LETTER YA
+0xa0   0x0430  #CYRILLIC SMALL LETTER A
+0xa1   0x0431  #CYRILLIC SMALL LETTER BE
+0xa2   0x0432  #CYRILLIC SMALL LETTER VE
+0xa3   0x0433  #CYRILLIC SMALL LETTER GHE
+0xa4   0x0434  #CYRILLIC SMALL LETTER DE
+0xa5   0x0435  #CYRILLIC SMALL LETTER IE
+0xa6   0x0436  #CYRILLIC SMALL LETTER ZHE
+0xa7   0x0437  #CYRILLIC SMALL LETTER ZE
+0xa8   0x0438  #CYRILLIC SMALL LETTER I
+0xa9   0x0439  #CYRILLIC SMALL LETTER SHORT I
+0xaa   0x043a  #CYRILLIC SMALL LETTER KA
+0xab   0x043b  #CYRILLIC SMALL LETTER EL
+0xac   0x043c  #CYRILLIC SMALL LETTER EM
+0xad   0x043d  #CYRILLIC SMALL LETTER EN
+0xae   0x043e  #CYRILLIC SMALL LETTER O
+0xaf   0x043f  #CYRILLIC SMALL LETTER PE
+0xb0   0x2591  #LIGHT SHADE
+0xb1   0x2592  #MEDIUM SHADE
+0xb2   0x2593  #DARK SHADE
+0xb3   0x2502  #BOX DRAWINGS LIGHT VERTICAL
+0xb4   0x2524  #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5   0x2561  #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb6   0x2562  #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xb7   0x2556  #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xb8   0x2555  #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xb9   0x2563  #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba   0x2551  #BOX DRAWINGS DOUBLE VERTICAL
+0xbb   0x2557  #BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc   0x255d  #BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd   0x255c  #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xbe   0x255b  #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xbf   0x2510  #BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0   0x2514  #BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1   0x2534  #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2   0x252c  #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3   0x251c  #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4   0x2500  #BOX DRAWINGS LIGHT HORIZONTAL
+0xc5   0x253c  #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6   0x255e  #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xc7   0x255f  #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xc8   0x255a  #BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9   0x2554  #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca   0x2569  #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb   0x2566  #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc   0x2560  #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd   0x2550  #BOX DRAWINGS DOUBLE HORIZONTAL
+0xce   0x256c  #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf   0x2567  #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xd0   0x2568  #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xd1   0x2564  #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xd2   0x2565  #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xd3   0x2559  #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xd4   0x2558  #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xd5   0x2552  #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xd6   0x2553  #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xd7   0x256b  #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xd8   0x256a  #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xd9   0x2518  #BOX DRAWINGS LIGHT UP AND LEFT
+0xda   0x250c  #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb   0x2588  #FULL BLOCK
+0xdc   0x2584  #LOWER HALF BLOCK
+0xdd   0x258c  #LEFT HALF BLOCK
+0xde   0x2590  #RIGHT HALF BLOCK
+0xdf   0x2580  #UPPER HALF BLOCK
+0xe0   0x0440  #CYRILLIC SMALL LETTER ER
+0xe1   0x0441  #CYRILLIC SMALL LETTER ES
+0xe2   0x0442  #CYRILLIC SMALL LETTER TE
+0xe3   0x0443  #CYRILLIC SMALL LETTER U
+0xe4   0x0444  #CYRILLIC SMALL LETTER EF
+0xe5   0x0445  #CYRILLIC SMALL LETTER HA
+0xe6   0x0446  #CYRILLIC SMALL LETTER TSE
+0xe7   0x0447  #CYRILLIC SMALL LETTER CHE
+0xe8   0x0448  #CYRILLIC SMALL LETTER SHA
+0xe9   0x0449  #CYRILLIC SMALL LETTER SHCHA
+0xea   0x044a  #CYRILLIC SMALL LETTER HARD SIGN
+0xeb   0x044b  #CYRILLIC SMALL LETTER YERU
+0xec   0x044c  #CYRILLIC SMALL LETTER SOFT SIGN
+0xed   0x044d  #CYRILLIC SMALL LETTER E
+0xee   0x044e  #CYRILLIC SMALL LETTER YU
+0xef   0x044f  #CYRILLIC SMALL LETTER YA
+0xf0   0x0401  #CYRILLIC CAPITAL LETTER IO
+0xf1   0x0451  #CYRILLIC SMALL LETTER IO
+0xf2   0x0404  #CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xf3   0x0454  #CYRILLIC SMALL LETTER UKRAINIAN IE
+0xf4   0x0407  #CYRILLIC CAPITAL LETTER YI
+0xf5   0x0457  #CYRILLIC SMALL LETTER YI
+0xf6   0x040e  #CYRILLIC CAPITAL LETTER SHORT U
+0xf7   0x045e  #CYRILLIC SMALL LETTER SHORT U
+0xf8   0x00b0  #DEGREE SIGN
+0xf9   0x2219  #BULLET OPERATOR
+0xfa   0x00b7  #MIDDLE DOT
+0xfb   0x221a  #SQUARE ROOT
+0xfc   0x2116  #NUMERO SIGN
+0xfd   0x00a4  #CURRENCY SIGN
+0xfe   0x25a0  #BLACK SQUARE
+0xff   0x00a0  #NO-BREAK SPACE
+
+\1a
\ No newline at end of file
diff --git a/ext/standard/html_tables/mappings/KOI8-R.TXT b/ext/standard/html_tables/mappings/KOI8-R.TXT
new file mode 100644 (file)
index 0000000..5105610
--- /dev/null
@@ -0,0 +1,302 @@
+#
+#      Name:             KOI8-R (RFC1489) to Unicode
+#      Unicode version:  3.0
+#      Table version:    1.0
+#      Table format:     Format A
+#      Date:             18 August 1999
+#      Authors:          Helmut Richter <richter@lrz.de>
+#
+#      Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#      This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#      No claims are made as to fitness for any particular purpose.  No
+#      warranties of any kind are expressed or implied.  The recipient
+#      agrees to determine applicability of information provided.  If this
+#      file has been provided on optical media by Unicode, Inc., the sole
+#      remedy for any claim will be exchange of defective media within 90
+#      days of receipt.
+#
+#      Unicode, Inc. hereby grants the right to freely use the information
+#      supplied in this file in the creation of products supporting the
+#      Unicode Standard, and to make copies of this file in any form for
+#      internal or external distribution as long as this notice remains
+#      attached.
+#
+#      General notes:
+#
+#      This table contains the data the Unicode Consortium has on how
+#       KOI8-R characters map into Unicode. The underlying document is the
+#      mapping described in RFC 1489. No statements are made as to whether
+#      this mapping is the same as the mapping defined as "Code Page 878"
+#      with some vendors.
+#
+#      Format:  Three tab-separated columns
+#               Column #1 is the KOI8-R code (in hex as 0xXX)
+#               Column #2 is the Unicode (in hex as 0xXXXX)
+#               Column #3 the Unicode name (follows a comment sign, '#')
+#
+#      The entries are in KOI8-R order.
+#
+#      Version history
+#      1.0 version: created.
+#
+#      Any comments or problems, contact <errata@unicode.org>
+#      Please note that <errata@unicode.org> is an archival address;
+#      notices will be checked, but do not expect an immediate response.
+#
+0x00   0x0000  #       NULL
+0x01   0x0001  #       START OF HEADING
+0x02   0x0002  #       START OF TEXT
+0x03   0x0003  #       END OF TEXT
+0x04   0x0004  #       END OF TRANSMISSION
+0x05   0x0005  #       ENQUIRY
+0x06   0x0006  #       ACKNOWLEDGE
+0x07   0x0007  #       BELL
+0x08   0x0008  #       BACKSPACE
+0x09   0x0009  #       HORIZONTAL TABULATION
+0x0A   0x000A  #       LINE FEED
+0x0B   0x000B  #       VERTICAL TABULATION
+0x0C   0x000C  #       FORM FEED
+0x0D   0x000D  #       CARRIAGE RETURN
+0x0E   0x000E  #       SHIFT OUT
+0x0F   0x000F  #       SHIFT IN
+0x10   0x0010  #       DATA LINK ESCAPE
+0x11   0x0011  #       DEVICE CONTROL ONE
+0x12   0x0012  #       DEVICE CONTROL TWO
+0x13   0x0013  #       DEVICE CONTROL THREE
+0x14   0x0014  #       DEVICE CONTROL FOUR
+0x15   0x0015  #       NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #       SYNCHRONOUS IDLE
+0x17   0x0017  #       END OF TRANSMISSION BLOCK
+0x18   0x0018  #       CANCEL
+0x19   0x0019  #       END OF MEDIUM
+0x1A   0x001A  #       SUBSTITUTE
+0x1B   0x001B  #       ESCAPE
+0x1C   0x001C  #       FILE SEPARATOR
+0x1D   0x001D  #       GROUP SEPARATOR
+0x1E   0x001E  #       RECORD SEPARATOR
+0x1F   0x001F  #       UNIT SEPARATOR
+0x20   0x0020  #       SPACE
+0x21   0x0021  #       EXCLAMATION MARK
+0x22   0x0022  #       QUOTATION MARK
+0x23   0x0023  #       NUMBER SIGN
+0x24   0x0024  #       DOLLAR SIGN
+0x25   0x0025  #       PERCENT SIGN
+0x26   0x0026  #       AMPERSAND
+0x27   0x0027  #       APOSTROPHE
+0x28   0x0028  #       LEFT PARENTHESIS
+0x29   0x0029  #       RIGHT PARENTHESIS
+0x2A   0x002A  #       ASTERISK
+0x2B   0x002B  #       PLUS SIGN
+0x2C   0x002C  #       COMMA
+0x2D   0x002D  #       HYPHEN-MINUS
+0x2E   0x002E  #       FULL STOP
+0x2F   0x002F  #       SOLIDUS
+0x30   0x0030  #       DIGIT ZERO
+0x31   0x0031  #       DIGIT ONE
+0x32   0x0032  #       DIGIT TWO
+0x33   0x0033  #       DIGIT THREE
+0x34   0x0034  #       DIGIT FOUR
+0x35   0x0035  #       DIGIT FIVE
+0x36   0x0036  #       DIGIT SIX
+0x37   0x0037  #       DIGIT SEVEN
+0x38   0x0038  #       DIGIT EIGHT
+0x39   0x0039  #       DIGIT NINE
+0x3A   0x003A  #       COLON
+0x3B   0x003B  #       SEMICOLON
+0x3C   0x003C  #       LESS-THAN SIGN
+0x3D   0x003D  #       EQUALS SIGN
+0x3E   0x003E  #       GREATER-THAN SIGN
+0x3F   0x003F  #       QUESTION MARK
+0x40   0x0040  #       COMMERCIAL AT
+0x41   0x0041  #       LATIN CAPITAL LETTER A
+0x42   0x0042  #       LATIN CAPITAL LETTER B
+0x43   0x0043  #       LATIN CAPITAL LETTER C
+0x44   0x0044  #       LATIN CAPITAL LETTER D
+0x45   0x0045  #       LATIN CAPITAL LETTER E
+0x46   0x0046  #       LATIN CAPITAL LETTER F
+0x47   0x0047  #       LATIN CAPITAL LETTER G
+0x48   0x0048  #       LATIN CAPITAL LETTER H
+0x49   0x0049  #       LATIN CAPITAL LETTER I
+0x4A   0x004A  #       LATIN CAPITAL LETTER J
+0x4B   0x004B  #       LATIN CAPITAL LETTER K
+0x4C   0x004C  #       LATIN CAPITAL LETTER L
+0x4D   0x004D  #       LATIN CAPITAL LETTER M
+0x4E   0x004E  #       LATIN CAPITAL LETTER N
+0x4F   0x004F  #       LATIN CAPITAL LETTER O
+0x50   0x0050  #       LATIN CAPITAL LETTER P
+0x51   0x0051  #       LATIN CAPITAL LETTER Q
+0x52   0x0052  #       LATIN CAPITAL LETTER R
+0x53   0x0053  #       LATIN CAPITAL LETTER S
+0x54   0x0054  #       LATIN CAPITAL LETTER T
+0x55   0x0055  #       LATIN CAPITAL LETTER U
+0x56   0x0056  #       LATIN CAPITAL LETTER V
+0x57   0x0057  #       LATIN CAPITAL LETTER W
+0x58   0x0058  #       LATIN CAPITAL LETTER X
+0x59   0x0059  #       LATIN CAPITAL LETTER Y
+0x5A   0x005A  #       LATIN CAPITAL LETTER Z
+0x5B   0x005B  #       LEFT SQUARE BRACKET
+0x5C   0x005C  #       REVERSE SOLIDUS
+0x5D   0x005D  #       RIGHT SQUARE BRACKET
+0x5E   0x005E  #       CIRCUMFLEX ACCENT
+0x5F   0x005F  #       LOW LINE
+0x60   0x0060  #       GRAVE ACCENT
+0x61   0x0061  #       LATIN SMALL LETTER A
+0x62   0x0062  #       LATIN SMALL LETTER B
+0x63   0x0063  #       LATIN SMALL LETTER C
+0x64   0x0064  #       LATIN SMALL LETTER D
+0x65   0x0065  #       LATIN SMALL LETTER E
+0x66   0x0066  #       LATIN SMALL LETTER F
+0x67   0x0067  #       LATIN SMALL LETTER G
+0x68   0x0068  #       LATIN SMALL LETTER H
+0x69   0x0069  #       LATIN SMALL LETTER I
+0x6A   0x006A  #       LATIN SMALL LETTER J
+0x6B   0x006B  #       LATIN SMALL LETTER K
+0x6C   0x006C  #       LATIN SMALL LETTER L
+0x6D   0x006D  #       LATIN SMALL LETTER M
+0x6E   0x006E  #       LATIN SMALL LETTER N
+0x6F   0x006F  #       LATIN SMALL LETTER O
+0x70   0x0070  #       LATIN SMALL LETTER P
+0x71   0x0071  #       LATIN SMALL LETTER Q
+0x72   0x0072  #       LATIN SMALL LETTER R
+0x73   0x0073  #       LATIN SMALL LETTER S
+0x74   0x0074  #       LATIN SMALL LETTER T
+0x75   0x0075  #       LATIN SMALL LETTER U
+0x76   0x0076  #       LATIN SMALL LETTER V
+0x77   0x0077  #       LATIN SMALL LETTER W
+0x78   0x0078  #       LATIN SMALL LETTER X
+0x79   0x0079  #       LATIN SMALL LETTER Y
+0x7A   0x007A  #       LATIN SMALL LETTER Z
+0x7B   0x007B  #       LEFT CURLY BRACKET
+0x7C   0x007C  #       VERTICAL LINE
+0x7D   0x007D  #       RIGHT CURLY BRACKET
+0x7E   0x007E  #       TILDE
+0x7F   0x007F  #       DELETE
+0x80   0x2500  #       BOX DRAWINGS LIGHT HORIZONTAL
+0x81   0x2502  #       BOX DRAWINGS LIGHT VERTICAL
+0x82   0x250C  #       BOX DRAWINGS LIGHT DOWN AND RIGHT
+0x83   0x2510  #       BOX DRAWINGS LIGHT DOWN AND LEFT
+0x84   0x2514  #       BOX DRAWINGS LIGHT UP AND RIGHT
+0x85   0x2518  #       BOX DRAWINGS LIGHT UP AND LEFT
+0x86   0x251C  #       BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0x87   0x2524  #       BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0x88   0x252C  #       BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0x89   0x2534  #       BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0x8A   0x253C  #       BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0x8B   0x2580  #       UPPER HALF BLOCK
+0x8C   0x2584  #       LOWER HALF BLOCK
+0x8D   0x2588  #       FULL BLOCK
+0x8E   0x258C  #       LEFT HALF BLOCK
+0x8F   0x2590  #       RIGHT HALF BLOCK
+0x90   0x2591  #       LIGHT SHADE
+0x91   0x2592  #       MEDIUM SHADE
+0x92   0x2593  #       DARK SHADE
+0x93   0x2320  #       TOP HALF INTEGRAL
+0x94   0x25A0  #       BLACK SQUARE
+0x95   0x2219  #       BULLET OPERATOR
+0x96   0x221A  #       SQUARE ROOT
+0x97   0x2248  #       ALMOST EQUAL TO
+0x98   0x2264  #       LESS-THAN OR EQUAL TO
+0x99   0x2265  #       GREATER-THAN OR EQUAL TO
+0x9A   0x00A0  #       NO-BREAK SPACE
+0x9B   0x2321  #       BOTTOM HALF INTEGRAL
+0x9C   0x00B0  #       DEGREE SIGN
+0x9D   0x00B2  #       SUPERSCRIPT TWO
+0x9E   0x00B7  #       MIDDLE DOT
+0x9F   0x00F7  #       DIVISION SIGN
+0xA0   0x2550  #       BOX DRAWINGS DOUBLE HORIZONTAL
+0xA1   0x2551  #       BOX DRAWINGS DOUBLE VERTICAL
+0xA2   0x2552  #       BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xA3   0x0451  #       CYRILLIC SMALL LETTER IO
+0xA4   0x2553  #       BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xA5   0x2554  #       BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xA6   0x2555  #       BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xA7   0x2556  #       BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xA8   0x2557  #       BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xA9   0x2558  #       BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xAA   0x2559  #       BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xAB   0x255A  #       BOX DRAWINGS DOUBLE UP AND RIGHT
+0xAC   0x255B  #       BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xAD   0x255C  #       BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xAE   0x255D  #       BOX DRAWINGS DOUBLE UP AND LEFT
+0xAF   0x255E  #       BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xB0   0x255F  #       BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xB1   0x2560  #       BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xB2   0x2561  #       BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xB3   0x0401  #       CYRILLIC CAPITAL LETTER IO
+0xB4   0x2562  #       BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xB5   0x2563  #       BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xB6   0x2564  #       BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xB7   0x2565  #       BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xB8   0x2566  #       BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xB9   0x2567  #       BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xBA   0x2568  #       BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xBB   0x2569  #       BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xBC   0x256A  #       BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xBD   0x256B  #       BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xBE   0x256C  #       BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xBF   0x00A9  #       COPYRIGHT SIGN
+0xC0   0x044E  #       CYRILLIC SMALL LETTER YU
+0xC1   0x0430  #       CYRILLIC SMALL LETTER A
+0xC2   0x0431  #       CYRILLIC SMALL LETTER BE
+0xC3   0x0446  #       CYRILLIC SMALL LETTER TSE
+0xC4   0x0434  #       CYRILLIC SMALL LETTER DE
+0xC5   0x0435  #       CYRILLIC SMALL LETTER IE
+0xC6   0x0444  #       CYRILLIC SMALL LETTER EF
+0xC7   0x0433  #       CYRILLIC SMALL LETTER GHE
+0xC8   0x0445  #       CYRILLIC SMALL LETTER HA
+0xC9   0x0438  #       CYRILLIC SMALL LETTER I
+0xCA   0x0439  #       CYRILLIC SMALL LETTER SHORT I
+0xCB   0x043A  #       CYRILLIC SMALL LETTER KA
+0xCC   0x043B  #       CYRILLIC SMALL LETTER EL
+0xCD   0x043C  #       CYRILLIC SMALL LETTER EM
+0xCE   0x043D  #       CYRILLIC SMALL LETTER EN
+0xCF   0x043E  #       CYRILLIC SMALL LETTER O
+0xD0   0x043F  #       CYRILLIC SMALL LETTER PE
+0xD1   0x044F  #       CYRILLIC SMALL LETTER YA
+0xD2   0x0440  #       CYRILLIC SMALL LETTER ER
+0xD3   0x0441  #       CYRILLIC SMALL LETTER ES
+0xD4   0x0442  #       CYRILLIC SMALL LETTER TE
+0xD5   0x0443  #       CYRILLIC SMALL LETTER U
+0xD6   0x0436  #       CYRILLIC SMALL LETTER ZHE
+0xD7   0x0432  #       CYRILLIC SMALL LETTER VE
+0xD8   0x044C  #       CYRILLIC SMALL LETTER SOFT SIGN
+0xD9   0x044B  #       CYRILLIC SMALL LETTER YERU
+0xDA   0x0437  #       CYRILLIC SMALL LETTER ZE
+0xDB   0x0448  #       CYRILLIC SMALL LETTER SHA
+0xDC   0x044D  #       CYRILLIC SMALL LETTER E
+0xDD   0x0449  #       CYRILLIC SMALL LETTER SHCHA
+0xDE   0x0447  #       CYRILLIC SMALL LETTER CHE
+0xDF   0x044A  #       CYRILLIC SMALL LETTER HARD SIGN
+0xE0   0x042E  #       CYRILLIC CAPITAL LETTER YU
+0xE1   0x0410  #       CYRILLIC CAPITAL LETTER A
+0xE2   0x0411  #       CYRILLIC CAPITAL LETTER BE
+0xE3   0x0426  #       CYRILLIC CAPITAL LETTER TSE
+0xE4   0x0414  #       CYRILLIC CAPITAL LETTER DE
+0xE5   0x0415  #       CYRILLIC CAPITAL LETTER IE
+0xE6   0x0424  #       CYRILLIC CAPITAL LETTER EF
+0xE7   0x0413  #       CYRILLIC CAPITAL LETTER GHE
+0xE8   0x0425  #       CYRILLIC CAPITAL LETTER HA
+0xE9   0x0418  #       CYRILLIC CAPITAL LETTER I
+0xEA   0x0419  #       CYRILLIC CAPITAL LETTER SHORT I
+0xEB   0x041A  #       CYRILLIC CAPITAL LETTER KA
+0xEC   0x041B  #       CYRILLIC CAPITAL LETTER EL
+0xED   0x041C  #       CYRILLIC CAPITAL LETTER EM
+0xEE   0x041D  #       CYRILLIC CAPITAL LETTER EN
+0xEF   0x041E  #       CYRILLIC CAPITAL LETTER O
+0xF0   0x041F  #       CYRILLIC CAPITAL LETTER PE
+0xF1   0x042F  #       CYRILLIC CAPITAL LETTER YA
+0xF2   0x0420  #       CYRILLIC CAPITAL LETTER ER
+0xF3   0x0421  #       CYRILLIC CAPITAL LETTER ES
+0xF4   0x0422  #       CYRILLIC CAPITAL LETTER TE
+0xF5   0x0423  #       CYRILLIC CAPITAL LETTER U
+0xF6   0x0416  #       CYRILLIC CAPITAL LETTER ZHE
+0xF7   0x0412  #       CYRILLIC CAPITAL LETTER VE
+0xF8   0x042C  #       CYRILLIC CAPITAL LETTER SOFT SIGN
+0xF9   0x042B  #       CYRILLIC CAPITAL LETTER YERU
+0xFA   0x0417  #       CYRILLIC CAPITAL LETTER ZE
+0xFB   0x0428  #       CYRILLIC CAPITAL LETTER SHA
+0xFC   0x042D  #       CYRILLIC CAPITAL LETTER E
+0xFD   0x0429  #       CYRILLIC CAPITAL LETTER SHCHA
+0xFE   0x0427  #       CYRILLIC CAPITAL LETTER CHE
+0xFF   0x042A  #       CYRILLIC CAPITAL LETTER HARD SIGN
diff --git a/ext/standard/html_tables/mappings/ROMAN.TXT b/ext/standard/html_tables/mappings/ROMAN.TXT
new file mode 100644 (file)
index 0000000..5b3b8b4
--- /dev/null
@@ -0,0 +1,370 @@
+#=======================================================================
+#   File name:  ROMAN.TXT
+#
+#   Contents:   Map (external version) from Mac OS Roman
+#               character set to Unicode 2.1 and later.
+#
+#   Copyright:  (c) 1994-2002, 2005 by Apple Computer, Inc., all rights
+#               reserved.
+#
+#   Contact:    charsets@apple.com
+#
+#   Changes:
+#
+#       c02  2005-Apr-05    Update header comments. Matches internal xml
+#                           <c1.1> and Text Encoding Converter 2.0.
+#      b4,c1 2002-Dec-19    Update URLs, notes. Matches internal
+#                           utom<b5>.
+#       b03  1999-Sep-22    Update contact e-mail address. Matches
+#                           internal utom<b4>, ufrm<b3>, and Text
+#                           Encoding Converter version 1.5.
+#       b02  1998-Aug-18    Encoding changed for Mac OS 8.5; change
+#                           mapping of 0xDB from CURRENCY SIGN to
+#                           EURO SIGN. Matches internal utom<b3>,
+#                           ufrm<b3>.
+#       n08  1998-Feb-05    Minor update to header comments
+#       n06  1997-Dec-14    Add warning about future changes to 0xDB
+#                           from CURRENCY SIGN to EURO SIGN. Clarify
+#                           some header information
+#       n04  1997-Dec-01    Update to match internal utom<n3>, ufrm<n22>:
+#                           Change standard mapping for 0xBD from U+2126
+#                           to its canonical decomposition, U+03A9.
+#       n03  1995-Apr-15    First version (after fixing some typos).
+#                           Matches internal ufrm<n9>.
+#
+# Standard header:
+# ----------------
+#
+#   Apple, the Apple logo, and Macintosh are trademarks of Apple
+#   Computer, Inc., registered in the United States and other countries.
+#   Unicode is a trademark of Unicode Inc. For the sake of brevity,
+#   throughout this document, "Macintosh" can be used to refer to
+#   Macintosh computers and "Unicode" can be used to refer to the
+#   Unicode standard.
+#
+#   Apple Computer, Inc. ("Apple") makes no warranty or representation,
+#   either express or implied, with respect to this document and the
+#   included data, its quality, accuracy, or fitness for a particular
+#   purpose. In no event will Apple be liable for direct, indirect,
+#   special, incidental, or consequential damages resulting from any
+#   defect or inaccuracy in this document or the included data.
+#
+#   These mapping tables and character lists are subject to change.
+#   The latest tables should be available from the following:
+#
+#   <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
+#
+#   For general information about Mac OS encodings and these mapping
+#   tables, see the file "README.TXT".
+#
+# Format:
+# -------
+#
+#   Three tab-separated columns;
+#   '#' begins a comment which continues to the end of the line.
+#     Column #1 is the Mac OS Roman code (in hex as 0xNN)
+#     Column #2 is the corresponding Unicode (in hex as 0xNNNN)
+#     Column #3 is a comment containing the Unicode name
+#
+#   The entries are in Mac OS Roman code order.
+#
+#   One of these mappings requires the use of a corporate character.
+#   See the file "CORPCHAR.TXT" and notes below.
+#
+#   Control character mappings are not shown in this table, following
+#   the conventions of the standard UTC mapping tables. However, the
+#   Mac OS Roman character set uses the standard control characters at
+#   0x00-0x1F and 0x7F.
+#
+# Notes on Mac OS Roman:
+# ----------------------
+#
+#   This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa
+#   environments, it is only supported directly in programming
+#   interfaces for QuickDraw Text, the Script Manager, and related
+#   Text Utilities. For other purposes it is supported via transcoding
+#   to and from Unicode.
+#
+#   This character set is used for at least the following Mac OS
+#   localizations: U.S., British, Canadian French, French, Swiss
+#   French, German, Swiss German, Italian, Swiss Italian, Dutch,
+#   Swedish, Norwegian, Danish, Finnish, Spanish, Catalan,
+#   Portuguese, Brazilian, and the default International system.
+#
+#   Variants of Mac OS Roman are used for Croatian, Icelandic,
+#   Turkish, Romanian, and other encodings. Separate mapping tables
+#   are available for these encodings.
+#
+#   Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was
+#   mapped to U+00A4. In Mac OS 8.5 and later versions, code point
+#   0xDB is changed to EURO SIGN and maps to U+20AC; the standard
+#   Apple fonts are updated for Mac OS 8.5 to reflect this. There is
+#   a "currency sign" variant of the Mac OS Roman encoding that still
+#   maps 0xDB to U+00A4; this can be used for older fonts.
+#
+#   Before Mac OS 8.5, the ROM bitmap versions of the fonts Chicago,
+#   New York, Geneva, and Monaco did not implement the full Mac OS
+#   Roman character set; they only supported character codes up to
+#   0xD8. The TrueType versions of these fonts have always implemented
+#   the full character set, as with the bitmap and TrueType versions
+#   of the other standard Roman fonts.
+#
+#   In all Mac OS encodings, fonts such as Chicago which are used
+#   as "system" fonts (for menus, dialogs, etc.) have four glyphs
+#   at code points 0x11-0x14 for transient use by the Menu Manager.
+#   These glyphs are not intended as characters for use in normal
+#   text, and the associated code points are not generally
+#   interpreted as associated with these glyphs; they are usually
+#   interpreted (if at all) as the control codes DC1-DC4.
+#
+# Unicode mapping issues and notes:
+# ---------------------------------
+#
+#   The following corporate zone Unicode character is used in this
+#   mapping:
+#
+#     0xF8FF  Apple logo
+#
+#   NOTE: The graphic image associated with the Apple logo character
+#   is not authorized for use without permission of Apple, and
+#   unauthorized use might constitute trademark infringement.
+#
+# Details of mapping changes in each version:
+# -------------------------------------------
+#
+#   Changes from version n08 to version b02:
+#
+#   - Encoding changed for Mac OS 8.5; change mapping of 0xDB from
+#   CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC).
+#
+#   Changes from version n03 to version n04:
+#
+#   - Change mapping of 0xBD from U+2126 to its canonical
+#     decomposition, U+03A9.
+#
+##################
+
+0x20   0x0020  # SPACE
+0x21   0x0021  # EXCLAMATION MARK
+0x22   0x0022  # QUOTATION MARK
+0x23   0x0023  # NUMBER SIGN
+0x24   0x0024  # DOLLAR SIGN
+0x25   0x0025  # PERCENT SIGN
+0x26   0x0026  # AMPERSAND
+0x27   0x0027  # APOSTROPHE
+0x28   0x0028  # LEFT PARENTHESIS
+0x29   0x0029  # RIGHT PARENTHESIS
+0x2A   0x002A  # ASTERISK
+0x2B   0x002B  # PLUS SIGN
+0x2C   0x002C  # COMMA
+0x2D   0x002D  # HYPHEN-MINUS
+0x2E   0x002E  # FULL STOP
+0x2F   0x002F  # SOLIDUS
+0x30   0x0030  # DIGIT ZERO
+0x31   0x0031  # DIGIT ONE
+0x32   0x0032  # DIGIT TWO
+0x33   0x0033  # DIGIT THREE
+0x34   0x0034  # DIGIT FOUR
+0x35   0x0035  # DIGIT FIVE
+0x36   0x0036  # DIGIT SIX
+0x37   0x0037  # DIGIT SEVEN
+0x38   0x0038  # DIGIT EIGHT
+0x39   0x0039  # DIGIT NINE
+0x3A   0x003A  # COLON
+0x3B   0x003B  # SEMICOLON
+0x3C   0x003C  # LESS-THAN SIGN
+0x3D   0x003D  # EQUALS SIGN
+0x3E   0x003E  # GREATER-THAN SIGN
+0x3F   0x003F  # QUESTION MARK
+0x40   0x0040  # COMMERCIAL AT
+0x41   0x0041  # LATIN CAPITAL LETTER A
+0x42   0x0042  # LATIN CAPITAL LETTER B
+0x43   0x0043  # LATIN CAPITAL LETTER C
+0x44   0x0044  # LATIN CAPITAL LETTER D
+0x45   0x0045  # LATIN CAPITAL LETTER E
+0x46   0x0046  # LATIN CAPITAL LETTER F
+0x47   0x0047  # LATIN CAPITAL LETTER G
+0x48   0x0048  # LATIN CAPITAL LETTER H
+0x49   0x0049  # LATIN CAPITAL LETTER I
+0x4A   0x004A  # LATIN CAPITAL LETTER J
+0x4B   0x004B  # LATIN CAPITAL LETTER K
+0x4C   0x004C  # LATIN CAPITAL LETTER L
+0x4D   0x004D  # LATIN CAPITAL LETTER M
+0x4E   0x004E  # LATIN CAPITAL LETTER N
+0x4F   0x004F  # LATIN CAPITAL LETTER O
+0x50   0x0050  # LATIN CAPITAL LETTER P
+0x51   0x0051  # LATIN CAPITAL LETTER Q
+0x52   0x0052  # LATIN CAPITAL LETTER R
+0x53   0x0053  # LATIN CAPITAL LETTER S
+0x54   0x0054  # LATIN CAPITAL LETTER T
+0x55   0x0055  # LATIN CAPITAL LETTER U
+0x56   0x0056  # LATIN CAPITAL LETTER V
+0x57   0x0057  # LATIN CAPITAL LETTER W
+0x58   0x0058  # LATIN CAPITAL LETTER X
+0x59   0x0059  # LATIN CAPITAL LETTER Y
+0x5A   0x005A  # LATIN CAPITAL LETTER Z
+0x5B   0x005B  # LEFT SQUARE BRACKET
+0x5C   0x005C  # REVERSE SOLIDUS
+0x5D   0x005D  # RIGHT SQUARE BRACKET
+0x5E   0x005E  # CIRCUMFLEX ACCENT
+0x5F   0x005F  # LOW LINE
+0x60   0x0060  # GRAVE ACCENT
+0x61   0x0061  # LATIN SMALL LETTER A
+0x62   0x0062  # LATIN SMALL LETTER B
+0x63   0x0063  # LATIN SMALL LETTER C
+0x64   0x0064  # LATIN SMALL LETTER D
+0x65   0x0065  # LATIN SMALL LETTER E
+0x66   0x0066  # LATIN SMALL LETTER F
+0x67   0x0067  # LATIN SMALL LETTER G
+0x68   0x0068  # LATIN SMALL LETTER H
+0x69   0x0069  # LATIN SMALL LETTER I
+0x6A   0x006A  # LATIN SMALL LETTER J
+0x6B   0x006B  # LATIN SMALL LETTER K
+0x6C   0x006C  # LATIN SMALL LETTER L
+0x6D   0x006D  # LATIN SMALL LETTER M
+0x6E   0x006E  # LATIN SMALL LETTER N
+0x6F   0x006F  # LATIN SMALL LETTER O
+0x70   0x0070  # LATIN SMALL LETTER P
+0x71   0x0071  # LATIN SMALL LETTER Q
+0x72   0x0072  # LATIN SMALL LETTER R
+0x73   0x0073  # LATIN SMALL LETTER S
+0x74   0x0074  # LATIN SMALL LETTER T
+0x75   0x0075  # LATIN SMALL LETTER U
+0x76   0x0076  # LATIN SMALL LETTER V
+0x77   0x0077  # LATIN SMALL LETTER W
+0x78   0x0078  # LATIN SMALL LETTER X
+0x79   0x0079  # LATIN SMALL LETTER Y
+0x7A   0x007A  # LATIN SMALL LETTER Z
+0x7B   0x007B  # LEFT CURLY BRACKET
+0x7C   0x007C  # VERTICAL LINE
+0x7D   0x007D  # RIGHT CURLY BRACKET
+0x7E   0x007E  # TILDE
+#
+0x80   0x00C4  # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x81   0x00C5  # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x82   0x00C7  # LATIN CAPITAL LETTER C WITH CEDILLA
+0x83   0x00C9  # LATIN CAPITAL LETTER E WITH ACUTE
+0x84   0x00D1  # LATIN CAPITAL LETTER N WITH TILDE
+0x85   0x00D6  # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x86   0x00DC  # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x87   0x00E1  # LATIN SMALL LETTER A WITH ACUTE
+0x88   0x00E0  # LATIN SMALL LETTER A WITH GRAVE
+0x89   0x00E2  # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x8A   0x00E4  # LATIN SMALL LETTER A WITH DIAERESIS
+0x8B   0x00E3  # LATIN SMALL LETTER A WITH TILDE
+0x8C   0x00E5  # LATIN SMALL LETTER A WITH RING ABOVE
+0x8D   0x00E7  # LATIN SMALL LETTER C WITH CEDILLA
+0x8E   0x00E9  # LATIN SMALL LETTER E WITH ACUTE
+0x8F   0x00E8  # LATIN SMALL LETTER E WITH GRAVE
+0x90   0x00EA  # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x91   0x00EB  # LATIN SMALL LETTER E WITH DIAERESIS
+0x92   0x00ED  # LATIN SMALL LETTER I WITH ACUTE
+0x93   0x00EC  # LATIN SMALL LETTER I WITH GRAVE
+0x94   0x00EE  # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x95   0x00EF  # LATIN SMALL LETTER I WITH DIAERESIS
+0x96   0x00F1  # LATIN SMALL LETTER N WITH TILDE
+0x97   0x00F3  # LATIN SMALL LETTER O WITH ACUTE
+0x98   0x00F2  # LATIN SMALL LETTER O WITH GRAVE
+0x99   0x00F4  # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x9A   0x00F6  # LATIN SMALL LETTER O WITH DIAERESIS
+0x9B   0x00F5  # LATIN SMALL LETTER O WITH TILDE
+0x9C   0x00FA  # LATIN SMALL LETTER U WITH ACUTE
+0x9D   0x00F9  # LATIN SMALL LETTER U WITH GRAVE
+0x9E   0x00FB  # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x9F   0x00FC  # LATIN SMALL LETTER U WITH DIAERESIS
+0xA0   0x2020  # DAGGER
+0xA1   0x00B0  # DEGREE SIGN
+0xA2   0x00A2  # CENT SIGN
+0xA3   0x00A3  # POUND SIGN
+0xA4   0x00A7  # SECTION SIGN
+0xA5   0x2022  # BULLET
+0xA6   0x00B6  # PILCROW SIGN
+0xA7   0x00DF  # LATIN SMALL LETTER SHARP S
+0xA8   0x00AE  # REGISTERED SIGN
+0xA9   0x00A9  # COPYRIGHT SIGN
+0xAA   0x2122  # TRADE MARK SIGN
+0xAB   0x00B4  # ACUTE ACCENT
+0xAC   0x00A8  # DIAERESIS
+0xAD   0x2260  # NOT EQUAL TO
+0xAE   0x00C6  # LATIN CAPITAL LETTER AE
+0xAF   0x00D8  # LATIN CAPITAL LETTER O WITH STROKE
+0xB0   0x221E  # INFINITY
+0xB1   0x00B1  # PLUS-MINUS SIGN
+0xB2   0x2264  # LESS-THAN OR EQUAL TO
+0xB3   0x2265  # GREATER-THAN OR EQUAL TO
+0xB4   0x00A5  # YEN SIGN
+0xB5   0x00B5  # MICRO SIGN
+0xB6   0x2202  # PARTIAL DIFFERENTIAL
+0xB7   0x2211  # N-ARY SUMMATION
+0xB8   0x220F  # N-ARY PRODUCT
+0xB9   0x03C0  # GREEK SMALL LETTER PI
+0xBA   0x222B  # INTEGRAL
+0xBB   0x00AA  # FEMININE ORDINAL INDICATOR
+0xBC   0x00BA  # MASCULINE ORDINAL INDICATOR
+0xBD   0x03A9  # GREEK CAPITAL LETTER OMEGA
+0xBE   0x00E6  # LATIN SMALL LETTER AE
+0xBF   0x00F8  # LATIN SMALL LETTER O WITH STROKE
+0xC0   0x00BF  # INVERTED QUESTION MARK
+0xC1   0x00A1  # INVERTED EXCLAMATION MARK
+0xC2   0x00AC  # NOT SIGN
+0xC3   0x221A  # SQUARE ROOT
+0xC4   0x0192  # LATIN SMALL LETTER F WITH HOOK
+0xC5   0x2248  # ALMOST EQUAL TO
+0xC6   0x2206  # INCREMENT
+0xC7   0x00AB  # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xC8   0x00BB  # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xC9   0x2026  # HORIZONTAL ELLIPSIS
+0xCA   0x00A0  # NO-BREAK SPACE
+0xCB   0x00C0  # LATIN CAPITAL LETTER A WITH GRAVE
+0xCC   0x00C3  # LATIN CAPITAL LETTER A WITH TILDE
+0xCD   0x00D5  # LATIN CAPITAL LETTER O WITH TILDE
+0xCE   0x0152  # LATIN CAPITAL LIGATURE OE
+0xCF   0x0153  # LATIN SMALL LIGATURE OE
+0xD0   0x2013  # EN DASH
+0xD1   0x2014  # EM DASH
+0xD2   0x201C  # LEFT DOUBLE QUOTATION MARK
+0xD3   0x201D  # RIGHT DOUBLE QUOTATION MARK
+0xD4   0x2018  # LEFT SINGLE QUOTATION MARK
+0xD5   0x2019  # RIGHT SINGLE QUOTATION MARK
+0xD6   0x00F7  # DIVISION SIGN
+0xD7   0x25CA  # LOZENGE
+0xD8   0x00FF  # LATIN SMALL LETTER Y WITH DIAERESIS
+0xD9   0x0178  # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0xDA   0x2044  # FRACTION SLASH
+0xDB   0x20AC  # EURO SIGN
+0xDC   0x2039  # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0xDD   0x203A  # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0xDE   0xFB01  # LATIN SMALL LIGATURE FI
+0xDF   0xFB02  # LATIN SMALL LIGATURE FL
+0xE0   0x2021  # DOUBLE DAGGER
+0xE1   0x00B7  # MIDDLE DOT
+0xE2   0x201A  # SINGLE LOW-9 QUOTATION MARK
+0xE3   0x201E  # DOUBLE LOW-9 QUOTATION MARK
+0xE4   0x2030  # PER MILLE SIGN
+0xE5   0x00C2  # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xE6   0x00CA  # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xE7   0x00C1  # LATIN CAPITAL LETTER A WITH ACUTE
+0xE8   0x00CB  # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xE9   0x00C8  # LATIN CAPITAL LETTER E WITH GRAVE
+0xEA   0x00CD  # LATIN CAPITAL LETTER I WITH ACUTE
+0xEB   0x00CE  # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xEC   0x00CF  # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xED   0x00CC  # LATIN CAPITAL LETTER I WITH GRAVE
+0xEE   0x00D3  # LATIN CAPITAL LETTER O WITH ACUTE
+0xEF   0x00D4  # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xF0   0xF8FF  # Apple logo
+0xF1   0x00D2  # LATIN CAPITAL LETTER O WITH GRAVE
+0xF2   0x00DA  # LATIN CAPITAL LETTER U WITH ACUTE
+0xF3   0x00DB  # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xF4   0x00D9  # LATIN CAPITAL LETTER U WITH GRAVE
+0xF5   0x0131  # LATIN SMALL LETTER DOTLESS I
+0xF6   0x02C6  # MODIFIER LETTER CIRCUMFLEX ACCENT
+0xF7   0x02DC  # SMALL TILDE
+0xF8   0x00AF  # MACRON
+0xF9   0x02D8  # BREVE
+0xFA   0x02D9  # DOT ABOVE
+0xFB   0x02DA  # RING ABOVE
+0xFC   0x00B8  # CEDILLA
+0xFD   0x02DD  # DOUBLE ACUTE ACCENT
+0xFE   0x02DB  # OGONEK
+0xFF   0x02C7  # CARON
index 3c38afd8f6ffb90b0bfc8d9b40f0d75a97d0442e..78a1837280757a1112a30ab5a9cbc5149ba20e63 100644 (file)
@@ -6,7 +6,7 @@ function _bin2hex($val) {
     return is_string($val) ? bin2hex($val): $val;
 }
 
-// UTF-8: basic tests
+echo "UTF-8: basic tests\n";
 var_dump(_bin2hex(htmlentities("\xc1\xbf", ENT_QUOTES, "UTF-8")));
 var_dump(_bin2hex(htmlentities("\xc2\x80", ENT_QUOTES, "UTF-8")));
 var_dump(_bin2hex(htmlentities("\xc2\x00", ENT_QUOTES, "UTF-8")));
@@ -36,13 +36,13 @@ var_dump(_bin2hex(htmlentities("\xf7\xbf\xbf\xff", ENT_QUOTES, "UTF-8")));
 var_dump(_bin2hex(htmlentities("\xf8\x88\x80\x80\x80", ENT_QUOTES, "UTF-8")));
 
 echo "--\n";
-// UTF-8: with ENT_IGNORE
+echo "UTF-8: with ENT_IGNORE\n";
 var_dump(_bin2hex(htmlentities("\xc0\xa0\xc2\x80", ENT_QUOTES | ENT_IGNORE, "UTF-8")));
 var_dump(_bin2hex(htmlentities("\xe0\x80\x80\xe0\xa0\x80", ENT_QUOTES | ENT_IGNORE, "UTF-8")));
 var_dump(_bin2hex(htmlentities("\xf0\x80\x80\x80\xf0\x90\x80\x80", ENT_QUOTES | ENT_IGNORE, "UTF-8")));
 
 echo "--\n";
-// UTF-8: alternative (invalid) UTF-8 sequence / surrogate pairs
+echo "UTF-8: alternative (invalid) UTF-8 sequence / surrogate pairs\n";
 var_dump(_bin2hex(htmlspecialchars("\xc0\xa6", ENT_QUOTES, 'UTF-8')));
 var_dump(_bin2hex(htmlspecialchars("\xe0\x80\xa6", ENT_QUOTES, 'UTF-8')));
 var_dump(_bin2hex(htmlspecialchars("\xf0\x80\x80\xa6", ENT_QUOTES, 'UTF-8')));
@@ -51,7 +51,8 @@ var_dump(_bin2hex(htmlspecialchars("\xed\xa0\x80", ENT_QUOTES, 'UTF-8')));
 var_dump(_bin2hex(htmlspecialchars("\xed\xbf\xbf", ENT_QUOTES, 'UTF-8')));
 var_dump(_bin2hex(htmlspecialchars("\xee\x80\x80", ENT_QUOTES, 'UTF-8')));
 
-// Shift_JIS: non-lead byte >= 0x80
+echo "--\n";
+echo "Shift_JIS: non-lead byte >= 0x80\n";
 var_dump(_bin2hex(htmlspecialchars("\x80", ENT_QUOTES, 'Shift_JIS')));
 foreach (array_map('chr', range(0xa0, 0xdf)) as $c) {
     var_dump(_bin2hex(htmlspecialchars($c, ENT_QUOTES, 'Shift_JIS')));
@@ -61,7 +62,7 @@ var_dump(_bin2hex(htmlspecialchars("\xfe", ENT_QUOTES, 'Shift_JIS')));
 var_dump(_bin2hex(htmlspecialchars("\xff", ENT_QUOTES, 'Shift_JIS')));
 
 echo "--\n";
-// Shift_JIS: incomplete / invalid multibyte sequences
+echo "Shift_JIS: incomplete / invalid multibyte sequences\n";
 foreach (array_map('chr', array_merge(range(0x81, 0x9f), range(0xe0, 0xfc))) as $c) {
     var_dump(_bin2hex(htmlspecialchars("$c", ENT_QUOTES, 'Shift_JIS')));
     var_dump(_bin2hex(htmlspecialchars("$c\x3f", ENT_QUOTES, 'Shift_JIS')));
@@ -76,7 +77,7 @@ foreach (array_map('chr', array_merge(range(0x81, 0x9f), range(0xe0, 0xfc))) as
 }
 
 echo "--\n";
-// EUC-JP: non-lead byte >= 0x80
+echo "EUC-JP: non-lead byte >= 0x80\n";
 foreach (array_map('chr', array_merge(range(0x80, 0x8d), range(0x90, 0x9f))) as $c) {
     var_dump(_bin2hex(htmlspecialchars($c, ENT_QUOTES, 'EUC-JP')));
 }
@@ -91,7 +92,7 @@ var_dump(_bin2hex(htmlspecialchars("\x8e\xa1\xa3", ENT_QUOTES, 'EUC-JP')));
 var_dump(_bin2hex(htmlspecialchars("\x8f\xa1\xa3", ENT_QUOTES, 'EUC-JP')));
 
 echo "--\n";
-// EUC-JP: incomplete / invalid multibyte sequences
+echo "EUC-JP: incomplete / invalid multibyte sequences\n";
 foreach (array_map('chr', array_merge(range(0xa1, 0xfe))) as $c) {
     var_dump(_bin2hex(htmlspecialchars("$c", ENT_QUOTES, 'EUC-JP')));
     var_dump(_bin2hex(htmlspecialchars("$c\x26", ENT_QUOTES, 'EUC-JP')));
@@ -117,12 +118,12 @@ foreach (array_map('chr', array_merge(range(0xa1, 0xfe))) as $c) {
 }
 
 echo "--\n";
-// BIG5: non-lead byte >= 0x80
+echo "BIG5: non-lead byte >= 0x80\n";
 var_dump(_bin2hex(htmlspecialchars("\x80", ENT_QUOTES, 'BIG5')));
 var_dump(_bin2hex(htmlspecialchars("\xff", ENT_QUOTES, 'BIG5')));
 
 echo "--\n";
-// BIG5: incomplete / invalid multibyte sequences
+echo "BIG5: incomplete / invalid multibyte sequences\n";
 foreach (array_map('chr', range(0x81, 0xfe)) as $c) {
     var_dump(_bin2hex(htmlspecialchars("$c", ENT_QUOTES, 'BIG5')));
     var_dump(_bin2hex(htmlspecialchars("$c\x3f", ENT_QUOTES, 'BIG5')));
@@ -137,6 +138,7 @@ foreach (array_map('chr', range(0x81, 0xfe)) as $c) {
 }
 ?>
 --EXPECT--
+UTF-8: basic tests
 string(0) ""
 string(4) "c280"
 string(0) ""
@@ -165,10 +167,12 @@ string(0) ""
 string(0) ""
 string(0) ""
 --
+UTF-8: with ENT_IGNORE
 string(4) "c280"
 string(6) "e0a080"
 string(8) "f0908080"
 --
+UTF-8: alternative (invalid) UTF-8 sequence / surrogate pairs
 string(0) ""
 string(0) ""
 string(0) ""
@@ -176,8 +180,10 @@ string(6) "ecbfbf"
 string(0) ""
 string(0) ""
 string(6) "ee8080"
-string(2) "80"
-string(2) "a0"
+--
+Shift_JIS: non-lead byte >= 0x80
+string(0) ""
+string(0) ""
 string(2) "a1"
 string(2) "a2"
 string(2) "a3"
@@ -241,10 +247,11 @@ string(2) "dc"
 string(2) "dd"
 string(2) "de"
 string(2) "df"
-string(2) "fd"
-string(2) "fe"
-string(2) "ff"
+string(0) ""
+string(0) ""
+string(0) ""
 --
+Shift_JIS: incomplete / invalid multibyte sequences
 string(0) ""
 string(0) ""
 string(4) "8140"
@@ -846,6 +853,7 @@ string(0) ""
 string(0) ""
 string(0) ""
 --
+EUC-JP: non-lead byte >= 0x80
 string(2) "80"
 string(2) "81"
 string(2) "82"
@@ -876,7 +884,7 @@ string(2) "9c"
 string(2) "9d"
 string(2) "9e"
 string(2) "9f"
-string(2) "ff"
+string(0) ""
 string(0) ""
 string(0) ""
 string(4) "8ea1"
@@ -884,6 +892,7 @@ string(0) ""
 string(0) ""
 string(6) "8fa1a3"
 --
+EUC-JP: incomplete / invalid multibyte sequences
 string(0) ""
 string(0) ""
 string(0) ""
@@ -894,10 +903,10 @@ string(0) ""
 string(4) "8ea1"
 string(14) "8ea126616d703b"
 string(6) "8ea180"
-string(6) "8ea1a0"
 string(0) ""
 string(0) ""
-string(6) "8ea1ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -915,10 +924,10 @@ string(0) ""
 string(4) "8ea2"
 string(14) "8ea226616d703b"
 string(6) "8ea280"
-string(6) "8ea2a0"
 string(0) ""
 string(0) ""
-string(6) "8ea2ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -936,10 +945,10 @@ string(0) ""
 string(4) "8ea3"
 string(14) "8ea326616d703b"
 string(6) "8ea380"
-string(6) "8ea3a0"
 string(0) ""
 string(0) ""
-string(6) "8ea3ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -957,10 +966,10 @@ string(0) ""
 string(4) "8ea4"
 string(14) "8ea426616d703b"
 string(6) "8ea480"
-string(6) "8ea4a0"
 string(0) ""
 string(0) ""
-string(6) "8ea4ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -978,10 +987,10 @@ string(0) ""
 string(4) "8ea5"
 string(14) "8ea526616d703b"
 string(6) "8ea580"
-string(6) "8ea5a0"
 string(0) ""
 string(0) ""
-string(6) "8ea5ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -999,10 +1008,10 @@ string(0) ""
 string(4) "8ea6"
 string(14) "8ea626616d703b"
 string(6) "8ea680"
-string(6) "8ea6a0"
 string(0) ""
 string(0) ""
-string(6) "8ea6ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1020,10 +1029,10 @@ string(0) ""
 string(4) "8ea7"
 string(14) "8ea726616d703b"
 string(6) "8ea780"
-string(6) "8ea7a0"
 string(0) ""
 string(0) ""
-string(6) "8ea7ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1041,10 +1050,10 @@ string(0) ""
 string(4) "8ea8"
 string(14) "8ea826616d703b"
 string(6) "8ea880"
-string(6) "8ea8a0"
 string(0) ""
 string(0) ""
-string(6) "8ea8ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1062,10 +1071,10 @@ string(0) ""
 string(4) "8ea9"
 string(14) "8ea926616d703b"
 string(6) "8ea980"
-string(6) "8ea9a0"
 string(0) ""
 string(0) ""
-string(6) "8ea9ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1083,10 +1092,10 @@ string(0) ""
 string(4) "8eaa"
 string(14) "8eaa26616d703b"
 string(6) "8eaa80"
-string(6) "8eaaa0"
 string(0) ""
 string(0) ""
-string(6) "8eaaff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1104,10 +1113,10 @@ string(0) ""
 string(4) "8eab"
 string(14) "8eab26616d703b"
 string(6) "8eab80"
-string(6) "8eaba0"
 string(0) ""
 string(0) ""
-string(6) "8eabff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1125,10 +1134,10 @@ string(0) ""
 string(4) "8eac"
 string(14) "8eac26616d703b"
 string(6) "8eac80"
-string(6) "8eaca0"
 string(0) ""
 string(0) ""
-string(6) "8eacff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1146,10 +1155,10 @@ string(0) ""
 string(4) "8ead"
 string(14) "8ead26616d703b"
 string(6) "8ead80"
-string(6) "8eada0"
 string(0) ""
 string(0) ""
-string(6) "8eadff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1167,10 +1176,10 @@ string(0) ""
 string(4) "8eae"
 string(14) "8eae26616d703b"
 string(6) "8eae80"
-string(6) "8eaea0"
 string(0) ""
 string(0) ""
-string(6) "8eaeff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1188,10 +1197,10 @@ string(0) ""
 string(4) "8eaf"
 string(14) "8eaf26616d703b"
 string(6) "8eaf80"
-string(6) "8eafa0"
 string(0) ""
 string(0) ""
-string(6) "8eafff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1209,10 +1218,10 @@ string(0) ""
 string(4) "8eb0"
 string(14) "8eb026616d703b"
 string(6) "8eb080"
-string(6) "8eb0a0"
 string(0) ""
 string(0) ""
-string(6) "8eb0ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1230,10 +1239,10 @@ string(0) ""
 string(4) "8eb1"
 string(14) "8eb126616d703b"
 string(6) "8eb180"
-string(6) "8eb1a0"
 string(0) ""
 string(0) ""
-string(6) "8eb1ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1251,10 +1260,10 @@ string(0) ""
 string(4) "8eb2"
 string(14) "8eb226616d703b"
 string(6) "8eb280"
-string(6) "8eb2a0"
 string(0) ""
 string(0) ""
-string(6) "8eb2ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1272,10 +1281,10 @@ string(0) ""
 string(4) "8eb3"
 string(14) "8eb326616d703b"
 string(6) "8eb380"
-string(6) "8eb3a0"
 string(0) ""
 string(0) ""
-string(6) "8eb3ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1293,10 +1302,10 @@ string(0) ""
 string(4) "8eb4"
 string(14) "8eb426616d703b"
 string(6) "8eb480"
-string(6) "8eb4a0"
 string(0) ""
 string(0) ""
-string(6) "8eb4ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1314,10 +1323,10 @@ string(0) ""
 string(4) "8eb5"
 string(14) "8eb526616d703b"
 string(6) "8eb580"
-string(6) "8eb5a0"
 string(0) ""
 string(0) ""
-string(6) "8eb5ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1335,10 +1344,10 @@ string(0) ""
 string(4) "8eb6"
 string(14) "8eb626616d703b"
 string(6) "8eb680"
-string(6) "8eb6a0"
 string(0) ""
 string(0) ""
-string(6) "8eb6ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1356,10 +1365,10 @@ string(0) ""
 string(4) "8eb7"
 string(14) "8eb726616d703b"
 string(6) "8eb780"
-string(6) "8eb7a0"
 string(0) ""
 string(0) ""
-string(6) "8eb7ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1377,10 +1386,10 @@ string(0) ""
 string(4) "8eb8"
 string(14) "8eb826616d703b"
 string(6) "8eb880"
-string(6) "8eb8a0"
 string(0) ""
 string(0) ""
-string(6) "8eb8ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1398,10 +1407,10 @@ string(0) ""
 string(4) "8eb9"
 string(14) "8eb926616d703b"
 string(6) "8eb980"
-string(6) "8eb9a0"
 string(0) ""
 string(0) ""
-string(6) "8eb9ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1419,10 +1428,10 @@ string(0) ""
 string(4) "8eba"
 string(14) "8eba26616d703b"
 string(6) "8eba80"
-string(6) "8ebaa0"
 string(0) ""
 string(0) ""
-string(6) "8ebaff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1440,10 +1449,10 @@ string(0) ""
 string(4) "8ebb"
 string(14) "8ebb26616d703b"
 string(6) "8ebb80"
-string(6) "8ebba0"
 string(0) ""
 string(0) ""
-string(6) "8ebbff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1461,10 +1470,10 @@ string(0) ""
 string(4) "8ebc"
 string(14) "8ebc26616d703b"
 string(6) "8ebc80"
-string(6) "8ebca0"
 string(0) ""
 string(0) ""
-string(6) "8ebcff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1482,10 +1491,10 @@ string(0) ""
 string(4) "8ebd"
 string(14) "8ebd26616d703b"
 string(6) "8ebd80"
-string(6) "8ebda0"
 string(0) ""
 string(0) ""
-string(6) "8ebdff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1503,10 +1512,10 @@ string(0) ""
 string(4) "8ebe"
 string(14) "8ebe26616d703b"
 string(6) "8ebe80"
-string(6) "8ebea0"
 string(0) ""
 string(0) ""
-string(6) "8ebeff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1524,10 +1533,10 @@ string(0) ""
 string(4) "8ebf"
 string(14) "8ebf26616d703b"
 string(6) "8ebf80"
-string(6) "8ebfa0"
 string(0) ""
 string(0) ""
-string(6) "8ebfff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1545,10 +1554,10 @@ string(0) ""
 string(4) "8ec0"
 string(14) "8ec026616d703b"
 string(6) "8ec080"
-string(6) "8ec0a0"
 string(0) ""
 string(0) ""
-string(6) "8ec0ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1566,10 +1575,10 @@ string(0) ""
 string(4) "8ec1"
 string(14) "8ec126616d703b"
 string(6) "8ec180"
-string(6) "8ec1a0"
 string(0) ""
 string(0) ""
-string(6) "8ec1ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1587,10 +1596,10 @@ string(0) ""
 string(4) "8ec2"
 string(14) "8ec226616d703b"
 string(6) "8ec280"
-string(6) "8ec2a0"
 string(0) ""
 string(0) ""
-string(6) "8ec2ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1608,10 +1617,10 @@ string(0) ""
 string(4) "8ec3"
 string(14) "8ec326616d703b"
 string(6) "8ec380"
-string(6) "8ec3a0"
 string(0) ""
 string(0) ""
-string(6) "8ec3ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1629,10 +1638,10 @@ string(0) ""
 string(4) "8ec4"
 string(14) "8ec426616d703b"
 string(6) "8ec480"
-string(6) "8ec4a0"
 string(0) ""
 string(0) ""
-string(6) "8ec4ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1650,10 +1659,10 @@ string(0) ""
 string(4) "8ec5"
 string(14) "8ec526616d703b"
 string(6) "8ec580"
-string(6) "8ec5a0"
 string(0) ""
 string(0) ""
-string(6) "8ec5ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1671,10 +1680,10 @@ string(0) ""
 string(4) "8ec6"
 string(14) "8ec626616d703b"
 string(6) "8ec680"
-string(6) "8ec6a0"
 string(0) ""
 string(0) ""
-string(6) "8ec6ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1692,10 +1701,10 @@ string(0) ""
 string(4) "8ec7"
 string(14) "8ec726616d703b"
 string(6) "8ec780"
-string(6) "8ec7a0"
 string(0) ""
 string(0) ""
-string(6) "8ec7ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1713,10 +1722,10 @@ string(0) ""
 string(4) "8ec8"
 string(14) "8ec826616d703b"
 string(6) "8ec880"
-string(6) "8ec8a0"
 string(0) ""
 string(0) ""
-string(6) "8ec8ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1734,10 +1743,10 @@ string(0) ""
 string(4) "8ec9"
 string(14) "8ec926616d703b"
 string(6) "8ec980"
-string(6) "8ec9a0"
 string(0) ""
 string(0) ""
-string(6) "8ec9ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1755,10 +1764,10 @@ string(0) ""
 string(4) "8eca"
 string(14) "8eca26616d703b"
 string(6) "8eca80"
-string(6) "8ecaa0"
 string(0) ""
 string(0) ""
-string(6) "8ecaff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1776,10 +1785,10 @@ string(0) ""
 string(4) "8ecb"
 string(14) "8ecb26616d703b"
 string(6) "8ecb80"
-string(6) "8ecba0"
 string(0) ""
 string(0) ""
-string(6) "8ecbff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1797,10 +1806,10 @@ string(0) ""
 string(4) "8ecc"
 string(14) "8ecc26616d703b"
 string(6) "8ecc80"
-string(6) "8ecca0"
 string(0) ""
 string(0) ""
-string(6) "8eccff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1818,10 +1827,10 @@ string(0) ""
 string(4) "8ecd"
 string(14) "8ecd26616d703b"
 string(6) "8ecd80"
-string(6) "8ecda0"
 string(0) ""
 string(0) ""
-string(6) "8ecdff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1839,10 +1848,10 @@ string(0) ""
 string(4) "8ece"
 string(14) "8ece26616d703b"
 string(6) "8ece80"
-string(6) "8ecea0"
 string(0) ""
 string(0) ""
-string(6) "8eceff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1860,10 +1869,10 @@ string(0) ""
 string(4) "8ecf"
 string(14) "8ecf26616d703b"
 string(6) "8ecf80"
-string(6) "8ecfa0"
 string(0) ""
 string(0) ""
-string(6) "8ecfff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1881,10 +1890,10 @@ string(0) ""
 string(4) "8ed0"
 string(14) "8ed026616d703b"
 string(6) "8ed080"
-string(6) "8ed0a0"
 string(0) ""
 string(0) ""
-string(6) "8ed0ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1902,10 +1911,10 @@ string(0) ""
 string(4) "8ed1"
 string(14) "8ed126616d703b"
 string(6) "8ed180"
-string(6) "8ed1a0"
 string(0) ""
 string(0) ""
-string(6) "8ed1ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1923,10 +1932,10 @@ string(0) ""
 string(4) "8ed2"
 string(14) "8ed226616d703b"
 string(6) "8ed280"
-string(6) "8ed2a0"
 string(0) ""
 string(0) ""
-string(6) "8ed2ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1944,10 +1953,10 @@ string(0) ""
 string(4) "8ed3"
 string(14) "8ed326616d703b"
 string(6) "8ed380"
-string(6) "8ed3a0"
 string(0) ""
 string(0) ""
-string(6) "8ed3ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1965,10 +1974,10 @@ string(0) ""
 string(4) "8ed4"
 string(14) "8ed426616d703b"
 string(6) "8ed480"
-string(6) "8ed4a0"
 string(0) ""
 string(0) ""
-string(6) "8ed4ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -1986,10 +1995,10 @@ string(0) ""
 string(4) "8ed5"
 string(14) "8ed526616d703b"
 string(6) "8ed580"
-string(6) "8ed5a0"
 string(0) ""
 string(0) ""
-string(6) "8ed5ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2007,10 +2016,10 @@ string(0) ""
 string(4) "8ed6"
 string(14) "8ed626616d703b"
 string(6) "8ed680"
-string(6) "8ed6a0"
 string(0) ""
 string(0) ""
-string(6) "8ed6ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2028,10 +2037,10 @@ string(0) ""
 string(4) "8ed7"
 string(14) "8ed726616d703b"
 string(6) "8ed780"
-string(6) "8ed7a0"
 string(0) ""
 string(0) ""
-string(6) "8ed7ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2049,10 +2058,10 @@ string(0) ""
 string(4) "8ed8"
 string(14) "8ed826616d703b"
 string(6) "8ed880"
-string(6) "8ed8a0"
 string(0) ""
 string(0) ""
-string(6) "8ed8ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2070,10 +2079,10 @@ string(0) ""
 string(4) "8ed9"
 string(14) "8ed926616d703b"
 string(6) "8ed980"
-string(6) "8ed9a0"
 string(0) ""
 string(0) ""
-string(6) "8ed9ff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2091,10 +2100,10 @@ string(0) ""
 string(4) "8eda"
 string(14) "8eda26616d703b"
 string(6) "8eda80"
-string(6) "8edaa0"
 string(0) ""
 string(0) ""
-string(6) "8edaff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2112,10 +2121,10 @@ string(0) ""
 string(4) "8edb"
 string(14) "8edb26616d703b"
 string(6) "8edb80"
-string(6) "8edba0"
 string(0) ""
 string(0) ""
-string(6) "8edbff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2133,10 +2142,10 @@ string(0) ""
 string(4) "8edc"
 string(14) "8edc26616d703b"
 string(6) "8edc80"
-string(6) "8edca0"
 string(0) ""
 string(0) ""
-string(6) "8edcff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2154,10 +2163,10 @@ string(0) ""
 string(4) "8edd"
 string(14) "8edd26616d703b"
 string(6) "8edd80"
-string(6) "8edda0"
 string(0) ""
 string(0) ""
-string(6) "8eddff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2175,10 +2184,10 @@ string(0) ""
 string(4) "8ede"
 string(14) "8ede26616d703b"
 string(6) "8ede80"
-string(6) "8edea0"
 string(0) ""
 string(0) ""
-string(6) "8edeff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2196,10 +2205,10 @@ string(0) ""
 string(4) "8edf"
 string(14) "8edf26616d703b"
 string(6) "8edf80"
-string(6) "8edfa0"
 string(0) ""
 string(0) ""
-string(6) "8edfff"
+string(0) ""
+string(0) ""
 string(0) ""
 string(0) ""
 string(0) ""
@@ -2859,9 +2868,11 @@ string(6) "8ffea1"
 string(6) "8ffefe"
 string(0) ""
 --
+BIG5: non-lead byte >= 0x80
 string(2) "80"
 string(2) "ff"
 --
+BIG5: incomplete / invalid multibyte sequences
 string(0) ""
 string(0) ""
 string(4) "8140"
index 0adafa33854c9d998976ea12ad5e5d4426da9981..87857d9cbdcd58aec17f58d3eeeac232f6eebab3 100644 (file)
---TEST--
-Test get_html_translation_table() function : basic functionality - with default args
---FILE--
-<?php
-/* Prototype  : array get_html_translation_table ( [int $table [, int $quote_style [, string charset_hint]]] )
- * Description: Returns the internal translation table used by htmlspecialchars and htmlentities
- * Source code: ext/standard/html.c
-*/
-
-/* Test get_html_translation_table() when table is specified as HTML_ENTITIES */
-
-
-echo "*** Testing get_html_translation_table() : basic functionality ***\n";
-
-echo "-- with table = HTML_ENTITIES --\n";
-$table = HTML_ENTITIES;
-var_dump( get_html_translation_table($table, ENT_COMPAT, "UTF-8") );
-
-echo "-- with table = HTML_SPECIALCHARS --\n";
-$table = HTML_SPECIALCHARS; 
-var_dump( get_html_translation_table($table, ENT_COMPAT, "UTF-8") );
-
-echo "Done\n";
-?>
---EXPECTF--
-*** Testing get_html_translation_table() : basic functionality ***
--- with table = HTML_ENTITIES --
-array(252) {
-  [" "]=>
-  string(6) "&nbsp;"
-  ["¡"]=>
-  string(7) "&iexcl;"
-  ["¢"]=>
-  string(6) "&cent;"
-  ["£"]=>
-  string(7) "&pound;"
-  ["¤"]=>
-  string(8) "&curren;"
-  ["¥"]=>
-  string(5) "&yen;"
-  ["¦"]=>
-  string(8) "&brvbar;"
-  ["§"]=>
-  string(6) "&sect;"
-  ["¨"]=>
-  string(5) "&uml;"
-  ["©"]=>
-  string(6) "&copy;"
-  ["ª"]=>
-  string(6) "&ordf;"
-  ["«"]=>
-  string(7) "&laquo;"
-  ["¬"]=>
-  string(5) "&not;"
-  ["­"]=>
-  string(5) "&shy;"
-  ["®"]=>
-  string(5) "&reg;"
-  ["¯"]=>
-  string(6) "&macr;"
-  ["°"]=>
-  string(5) "&deg;"
-  ["±"]=>
-  string(8) "&plusmn;"
-  ["²"]=>
-  string(6) "&sup2;"
-  ["³"]=>
-  string(6) "&sup3;"
-  ["´"]=>
-  string(7) "&acute;"
-  ["µ"]=>
-  string(7) "&micro;"
-  ["¶"]=>
-  string(6) "&para;"
-  ["·"]=>
-  string(8) "&middot;"
-  ["¸"]=>
-  string(7) "&cedil;"
-  ["¹"]=>
-  string(6) "&sup1;"
-  ["º"]=>
-  string(6) "&ordm;"
-  ["»"]=>
-  string(7) "&raquo;"
-  ["¼"]=>
-  string(8) "&frac14;"
-  ["½"]=>
-  string(8) "&frac12;"
-  ["¾"]=>
-  string(8) "&frac34;"
-  ["¿"]=>
-  string(8) "&iquest;"
-  ["À"]=>
-  string(8) "&Agrave;"
-  ["Á"]=>
-  string(8) "&Aacute;"
-  ["Â"]=>
-  string(7) "&Acirc;"
-  ["Ã"]=>
-  string(8) "&Atilde;"
-  ["Ä"]=>
-  string(6) "&Auml;"
-  ["Å"]=>
-  string(7) "&Aring;"
-  ["Æ"]=>
-  string(7) "&AElig;"
-  ["Ç"]=>
-  string(8) "&Ccedil;"
-  ["È"]=>
-  string(8) "&Egrave;"
-  ["É"]=>
-  string(8) "&Eacute;"
-  ["Ê"]=>
-  string(7) "&Ecirc;"
-  ["Ë"]=>
-  string(6) "&Euml;"
-  ["Ì"]=>
-  string(8) "&Igrave;"
-  ["Í"]=>
-  string(8) "&Iacute;"
-  ["Î"]=>
-  string(7) "&Icirc;"
-  ["Ï"]=>
-  string(6) "&Iuml;"
-  ["Ð"]=>
-  string(5) "&ETH;"
-  ["Ñ"]=>
-  string(8) "&Ntilde;"
-  ["Ò"]=>
-  string(8) "&Ograve;"
-  ["Ó"]=>
-  string(8) "&Oacute;"
-  ["Ô"]=>
-  string(7) "&Ocirc;"
-  ["Õ"]=>
-  string(8) "&Otilde;"
-  ["Ö"]=>
-  string(6) "&Ouml;"
-  ["×"]=>
-  string(7) "&times;"
-  ["Ø"]=>
-  string(8) "&Oslash;"
-  ["Ù"]=>
-  string(8) "&Ugrave;"
-  ["Ú"]=>
-  string(8) "&Uacute;"
-  ["Û"]=>
-  string(7) "&Ucirc;"
-  ["Ü"]=>
-  string(6) "&Uuml;"
-  ["Ý"]=>
-  string(8) "&Yacute;"
-  ["Þ"]=>
-  string(7) "&THORN;"
-  ["ß"]=>
-  string(7) "&szlig;"
-  ["à"]=>
-  string(8) "&agrave;"
-  ["á"]=>
-  string(8) "&aacute;"
-  ["â"]=>
-  string(7) "&acirc;"
-  ["ã"]=>
-  string(8) "&atilde;"
-  ["ä"]=>
-  string(6) "&auml;"
-  ["å"]=>
-  string(7) "&aring;"
-  ["æ"]=>
-  string(7) "&aelig;"
-  ["ç"]=>
-  string(8) "&ccedil;"
-  ["è"]=>
-  string(8) "&egrave;"
-  ["é"]=>
-  string(8) "&eacute;"
-  ["ê"]=>
-  string(7) "&ecirc;"
-  ["ë"]=>
-  string(6) "&euml;"
-  ["ì"]=>
-  string(8) "&igrave;"
-  ["í"]=>
-  string(8) "&iacute;"
-  ["î"]=>
-  string(7) "&icirc;"
-  ["ï"]=>
-  string(6) "&iuml;"
-  ["ð"]=>
-  string(5) "&eth;"
-  ["ñ"]=>
-  string(8) "&ntilde;"
-  ["ò"]=>
-  string(8) "&ograve;"
-  ["ó"]=>
-  string(8) "&oacute;"
-  ["ô"]=>
-  string(7) "&ocirc;"
-  ["õ"]=>
-  string(8) "&otilde;"
-  ["ö"]=>
-  string(6) "&ouml;"
-  ["÷"]=>
-  string(8) "&divide;"
-  ["ø"]=>
-  string(8) "&oslash;"
-  ["ù"]=>
-  string(8) "&ugrave;"
-  ["ú"]=>
-  string(8) "&uacute;"
-  ["û"]=>
-  string(7) "&ucirc;"
-  ["ü"]=>
-  string(6) "&uuml;"
-  ["ý"]=>
-  string(8) "&yacute;"
-  ["þ"]=>
-  string(7) "&thorn;"
-  ["ÿ"]=>
-  string(6) "&yuml;"
-  ["Œ"]=>
-  string(7) "&OElig;"
-  ["œ"]=>
-  string(7) "&oelig;"
-  ["Š"]=>
-  string(8) "&Scaron;"
-  ["š"]=>
-  string(8) "&scaron;"
-  ["Ÿ"]=>
-  string(6) "&Yuml;"
-  ["ƒ"]=>
-  string(6) "&fnof;"
-  ["ˆ"]=>
-  string(6) "&circ;"
-  ["˜"]=>
-  string(7) "&tilde;"
-  ["Α"]=>
-  string(7) "&Alpha;"
-  ["Β"]=>
-  string(6) "&Beta;"
-  ["Γ"]=>
-  string(7) "&Gamma;"
-  ["Δ"]=>
-  string(7) "&Delta;"
-  ["Ε"]=>
-  string(9) "&Epsilon;"
-  ["Ζ"]=>
-  string(6) "&Zeta;"
-  ["Η"]=>
-  string(5) "&Eta;"
-  ["Θ"]=>
-  string(7) "&Theta;"
-  ["Ι"]=>
-  string(6) "&Iota;"
-  ["Κ"]=>
-  string(7) "&Kappa;"
-  ["Λ"]=>
-  string(8) "&Lambda;"
-  ["Μ"]=>
-  string(4) "&Mu;"
-  ["Ν"]=>
-  string(4) "&Nu;"
-  ["Ξ"]=>
-  string(4) "&Xi;"
-  ["Ο"]=>
-  string(9) "&Omicron;"
-  ["Π"]=>
-  string(4) "&Pi;"
-  ["Ρ"]=>
-  string(5) "&Rho;"
-  ["Σ"]=>
-  string(7) "&Sigma;"
-  ["Τ"]=>
-  string(5) "&Tau;"
-  ["Υ"]=>
-  string(9) "&Upsilon;"
-  ["Φ"]=>
-  string(5) "&Phi;"
-  ["Χ"]=>
-  string(5) "&Chi;"
-  ["Ψ"]=>
-  string(5) "&Psi;"
-  ["Ω"]=>
-  string(7) "&Omega;"
-  ["α"]=>
-  string(7) "&alpha;"
-  ["β"]=>
-  string(6) "&beta;"
-  ["γ"]=>
-  string(7) "&gamma;"
-  ["δ"]=>
-  string(7) "&delta;"
-  ["ε"]=>
-  string(9) "&epsilon;"
-  ["ζ"]=>
-  string(6) "&zeta;"
-  ["η"]=>
-  string(5) "&eta;"
-  ["θ"]=>
-  string(7) "&theta;"
-  ["ι"]=>
-  string(6) "&iota;"
-  ["κ"]=>
-  string(7) "&kappa;"
-  ["λ"]=>
-  string(8) "&lambda;"
-  ["μ"]=>
-  string(4) "&mu;"
-  ["ν"]=>
-  string(4) "&nu;"
-  ["ξ"]=>
-  string(4) "&xi;"
-  ["ο"]=>
-  string(9) "&omicron;"
-  ["π"]=>
-  string(4) "&pi;"
-  ["ρ"]=>
-  string(5) "&rho;"
-  ["ς"]=>
-  string(8) "&sigmaf;"
-  ["σ"]=>
-  string(7) "&sigma;"
-  ["τ"]=>
-  string(5) "&tau;"
-  ["υ"]=>
-  string(9) "&upsilon;"
-  ["φ"]=>
-  string(5) "&phi;"
-  ["χ"]=>
-  string(5) "&chi;"
-  ["ψ"]=>
-  string(5) "&psi;"
-  ["ω"]=>
-  string(7) "&omega;"
-  ["ϑ"]=>
-  string(10) "&thetasym;"
-  ["ϒ"]=>
-  string(7) "&upsih;"
-  ["ϖ"]=>
-  string(5) "&piv;"
-  [" "]=>
-  string(6) "&ensp;"
-  [" "]=>
-  string(6) "&emsp;"
-  [" "]=>
-  string(8) "&thinsp;"
-  ["‌"]=>
-  string(6) "&zwnj;"
-  ["‍"]=>
-  string(5) "&zwj;"
-  ["‎"]=>
-  string(5) "&lrm;"
-  ["‏"]=>
-  string(5) "&rlm;"
-  ["–"]=>
-  string(7) "&ndash;"
-  ["—"]=>
-  string(7) "&mdash;"
-  ["‘"]=>
-  string(7) "&lsquo;"
-  ["’"]=>
-  string(7) "&rsquo;"
-  ["‚"]=>
-  string(7) "&sbquo;"
-  ["“"]=>
-  string(7) "&ldquo;"
-  ["”"]=>
-  string(7) "&rdquo;"
-  ["„"]=>
-  string(7) "&bdquo;"
-  ["†"]=>
-  string(8) "&dagger;"
-  ["‡"]=>
-  string(8) "&Dagger;"
-  ["•"]=>
-  string(6) "&bull;"
-  ["…"]=>
-  string(8) "&hellip;"
-  ["‰"]=>
-  string(8) "&permil;"
-  ["′"]=>
-  string(7) "&prime;"
-  ["″"]=>
-  string(7) "&Prime;"
-  ["‹"]=>
-  string(8) "&lsaquo;"
-  ["›"]=>
-  string(8) "&rsaquo;"
-  ["‾"]=>
-  string(7) "&oline;"
-  ["⁄"]=>
-  string(7) "&frasl;"
-  ["€"]=>
-  string(6) "&euro;"
-  ["ℑ"]=>
-  string(7) "&image;"
-  ["℘"]=>
-  string(8) "&weierp;"
-  ["ℜ"]=>
-  string(6) "&real;"
-  ["™"]=>
-  string(7) "&trade;"
-  ["ℵ"]=>
-  string(9) "&alefsym;"
-  ["←"]=>
-  string(6) "&larr;"
-  ["↑"]=>
-  string(6) "&uarr;"
-  ["→"]=>
-  string(6) "&rarr;"
-  ["↓"]=>
-  string(6) "&darr;"
-  ["↔"]=>
-  string(6) "&harr;"
-  ["↵"]=>
-  string(7) "&crarr;"
-  ["⇐"]=>
-  string(6) "&lArr;"
-  ["⇑"]=>
-  string(6) "&uArr;"
-  ["⇒"]=>
-  string(6) "&rArr;"
-  ["⇓"]=>
-  string(6) "&dArr;"
-  ["⇔"]=>
-  string(6) "&hArr;"
-  ["∀"]=>
-  string(8) "&forall;"
-  ["∂"]=>
-  string(6) "&part;"
-  ["∃"]=>
-  string(7) "&exist;"
-  ["∅"]=>
-  string(7) "&empty;"
-  ["∇"]=>
-  string(7) "&nabla;"
-  ["∈"]=>
-  string(6) "&isin;"
-  ["∉"]=>
-  string(7) "&notin;"
-  ["∋"]=>
-  string(4) "&ni;"
-  ["∏"]=>
-  string(6) "&prod;"
-  ["∑"]=>
-  string(5) "&sum;"
-  ["−"]=>
-  string(7) "&minus;"
-  ["∗"]=>
-  string(8) "&lowast;"
-  ["√"]=>
-  string(7) "&radic;"
-  ["∝"]=>
-  string(6) "&prop;"
-  ["∞"]=>
-  string(7) "&infin;"
-  ["∠"]=>
-  string(5) "&ang;"
-  ["∧"]=>
-  string(5) "&and;"
-  ["∨"]=>
-  string(4) "&or;"
-  ["∩"]=>
-  string(5) "&cap;"
-  ["∪"]=>
-  string(5) "&cup;"
-  ["∫"]=>
-  string(5) "&int;"
-  ["∴"]=>
-  string(8) "&there4;"
-  ["∼"]=>
-  string(5) "&sim;"
-  ["≅"]=>
-  string(6) "&cong;"
-  ["≈"]=>
-  string(7) "&asymp;"
-  ["≠"]=>
-  string(4) "&ne;"
-  ["≡"]=>
-  string(7) "&equiv;"
-  ["≤"]=>
-  string(4) "&le;"
-  ["≥"]=>
-  string(4) "&ge;"
-  ["⊂"]=>
-  string(5) "&sub;"
-  ["⊃"]=>
-  string(5) "&sup;"
-  ["⊄"]=>
-  string(6) "&nsub;"
-  ["⊆"]=>
-  string(6) "&sube;"
-  ["⊇"]=>
-  string(6) "&supe;"
-  ["⊕"]=>
-  string(7) "&oplus;"
-  ["⊗"]=>
-  string(8) "&otimes;"
-  ["⊥"]=>
-  string(6) "&perp;"
-  ["⋅"]=>
-  string(6) "&sdot;"
-  ["⌈"]=>
-  string(7) "&lceil;"
-  ["⌉"]=>
-  string(7) "&rceil;"
-  ["⌊"]=>
-  string(8) "&lfloor;"
-  ["⌋"]=>
-  string(8) "&rfloor;"
-  ["〈"]=>
-  string(6) "&lang;"
-  ["〉"]=>
-  string(6) "&rang;"
-  ["◊"]=>
-  string(5) "&loz;"
-  ["♠"]=>
-  string(8) "&spades;"
-  ["♣"]=>
-  string(7) "&clubs;"
-  ["♥"]=>
-  string(8) "&hearts;"
-  ["♦"]=>
-  string(7) "&diams;"
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
-}
--- with table = HTML_SPECIALCHARS --
-array(4) {
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
-}
-Done
+--TEST--\r
+Test get_html_translation_table() function : basic functionality - with default args\r
+--FILE--\r
+<?php\r
+/* Prototype  : array get_html_translation_table ( [int $table [, int $quote_style [, string charset_hint]]] )\r
+ * Description: Returns the internal translation table used by htmlspecialchars and htmlentities\r
+ * Source code: ext/standard/html.c\r
+*/\r
+\r
+/* Test get_html_translation_table() when table is specified as HTML_ENTITIES */\r
+\r
+\r
+echo "*** Testing get_html_translation_table() : basic functionality ***\n";\r
+\r
+echo "-- with table = HTML_ENTITIES --\n";\r
+$table = HTML_ENTITIES;\r
+$tt = get_html_translation_table($table, ENT_COMPAT, "UTF-8");\r
+asort($tt);\r
+var_dump( $tt );\r
+\r
+echo "-- with table = HTML_SPECIALCHARS --\n";\r
+$table = HTML_SPECIALCHARS;\r
+$tt = get_html_translation_table($table, ENT_COMPAT, "UTF-8");\r
+asort($tt);\r
+var_dump( $tt );\r
+\r
+echo "Done\n";\r
+?>\r
+--EXPECT--\r
+*** Testing get_html_translation_table() : basic functionality ***\r
+-- with table = HTML_ENTITIES --\r
+array(252) {\r
+  ["Æ"]=>\r
+  string(7) "&AElig;"\r
+  ["Á"]=>\r
+  string(8) "&Aacute;"\r
+  ["Â"]=>\r
+  string(7) "&Acirc;"\r
+  ["À"]=>\r
+  string(8) "&Agrave;"\r
+  ["Α"]=>\r
+  string(7) "&Alpha;"\r
+  ["Å"]=>\r
+  string(7) "&Aring;"\r
+  ["Ã"]=>\r
+  string(8) "&Atilde;"\r
+  ["Ä"]=>\r
+  string(6) "&Auml;"\r
+  ["Β"]=>\r
+  string(6) "&Beta;"\r
+  ["Ç"]=>\r
+  string(8) "&Ccedil;"\r
+  ["Χ"]=>\r
+  string(5) "&Chi;"\r
+  ["‡"]=>\r
+  string(8) "&Dagger;"\r
+  ["Δ"]=>\r
+  string(7) "&Delta;"\r
+  ["Ð"]=>\r
+  string(5) "&ETH;"\r
+  ["É"]=>\r
+  string(8) "&Eacute;"\r
+  ["Ê"]=>\r
+  string(7) "&Ecirc;"\r
+  ["È"]=>\r
+  string(8) "&Egrave;"\r
+  ["Ε"]=>\r
+  string(9) "&Epsilon;"\r
+  ["Η"]=>\r
+  string(5) "&Eta;"\r
+  ["Ë"]=>\r
+  string(6) "&Euml;"\r
+  ["Γ"]=>\r
+  string(7) "&Gamma;"\r
+  ["Í"]=>\r
+  string(8) "&Iacute;"\r
+  ["Î"]=>\r
+  string(7) "&Icirc;"\r
+  ["Ì"]=>\r
+  string(8) "&Igrave;"\r
+  ["Ι"]=>\r
+  string(6) "&Iota;"\r
+  ["Ï"]=>\r
+  string(6) "&Iuml;"\r
+  ["Κ"]=>\r
+  string(7) "&Kappa;"\r
+  ["Λ"]=>\r
+  string(8) "&Lambda;"\r
+  ["Μ"]=>\r
+  string(4) "&Mu;"\r
+  ["Ñ"]=>\r
+  string(8) "&Ntilde;"\r
+  ["Ν"]=>\r
+  string(4) "&Nu;"\r
+  ["Œ"]=>\r
+  string(7) "&OElig;"\r
+  ["Ó"]=>\r
+  string(8) "&Oacute;"\r
+  ["Ô"]=>\r
+  string(7) "&Ocirc;"\r
+  ["Ò"]=>\r
+  string(8) "&Ograve;"\r
+  ["Ω"]=>\r
+  string(7) "&Omega;"\r
+  ["Ο"]=>\r
+  string(9) "&Omicron;"\r
+  ["Ø"]=>\r
+  string(8) "&Oslash;"\r
+  ["Õ"]=>\r
+  string(8) "&Otilde;"\r
+  ["Ö"]=>\r
+  string(6) "&Ouml;"\r
+  ["Φ"]=>\r
+  string(5) "&Phi;"\r
+  ["Π"]=>\r
+  string(4) "&Pi;"\r
+  ["″"]=>\r
+  string(7) "&Prime;"\r
+  ["Ψ"]=>\r
+  string(5) "&Psi;"\r
+  ["Ρ"]=>\r
+  string(5) "&Rho;"\r
+  ["Š"]=>\r
+  string(8) "&Scaron;"\r
+  ["Σ"]=>\r
+  string(7) "&Sigma;"\r
+  ["Þ"]=>\r
+  string(7) "&THORN;"\r
+  ["Τ"]=>\r
+  string(5) "&Tau;"\r
+  ["Θ"]=>\r
+  string(7) "&Theta;"\r
+  ["Ú"]=>\r
+  string(8) "&Uacute;"\r
+  ["Û"]=>\r
+  string(7) "&Ucirc;"\r
+  ["Ù"]=>\r
+  string(8) "&Ugrave;"\r
+  ["Υ"]=>\r
+  string(9) "&Upsilon;"\r
+  ["Ü"]=>\r
+  string(6) "&Uuml;"\r
+  ["Ξ"]=>\r
+  string(4) "&Xi;"\r
+  ["Ý"]=>\r
+  string(8) "&Yacute;"\r
+  ["Ÿ"]=>\r
+  string(6) "&Yuml;"\r
+  ["Ζ"]=>\r
+  string(6) "&Zeta;"\r
+  ["á"]=>\r
+  string(8) "&aacute;"\r
+  ["â"]=>\r
+  string(7) "&acirc;"\r
+  ["´"]=>\r
+  string(7) "&acute;"\r
+  ["æ"]=>\r
+  string(7) "&aelig;"\r
+  ["à"]=>\r
+  string(8) "&agrave;"\r
+  ["ℵ"]=>\r
+  string(9) "&alefsym;"\r
+  ["α"]=>\r
+  string(7) "&alpha;"\r
+  ["&"]=>\r
+  string(5) "&amp;"\r
+  ["∧"]=>\r
+  string(5) "&and;"\r
+  ["∠"]=>\r
+  string(5) "&ang;"\r
+  ["å"]=>\r
+  string(7) "&aring;"\r
+  ["≈"]=>\r
+  string(7) "&asymp;"\r
+  ["ã"]=>\r
+  string(8) "&atilde;"\r
+  ["ä"]=>\r
+  string(6) "&auml;"\r
+  ["„"]=>\r
+  string(7) "&bdquo;"\r
+  ["β"]=>\r
+  string(6) "&beta;"\r
+  ["¦"]=>\r
+  string(8) "&brvbar;"\r
+  ["•"]=>\r
+  string(6) "&bull;"\r
+  ["∩"]=>\r
+  string(5) "&cap;"\r
+  ["ç"]=>\r
+  string(8) "&ccedil;"\r
+  ["¸"]=>\r
+  string(7) "&cedil;"\r
+  ["¢"]=>\r
+  string(6) "&cent;"\r
+  ["χ"]=>\r
+  string(5) "&chi;"\r
+  ["ˆ"]=>\r
+  string(6) "&circ;"\r
+  ["♣"]=>\r
+  string(7) "&clubs;"\r
+  ["≅"]=>\r
+  string(6) "&cong;"\r
+  ["©"]=>\r
+  string(6) "&copy;"\r
+  ["↵"]=>\r
+  string(7) "&crarr;"\r
+  ["∪"]=>\r
+  string(5) "&cup;"\r
+  ["¤"]=>\r
+  string(8) "&curren;"\r
+  ["⇓"]=>\r
+  string(6) "&dArr;"\r
+  ["†"]=>\r
+  string(8) "&dagger;"\r
+  ["↓"]=>\r
+  string(6) "&darr;"\r
+  ["°"]=>\r
+  string(5) "&deg;"\r
+  ["δ"]=>\r
+  string(7) "&delta;"\r
+  ["♦"]=>\r
+  string(7) "&diams;"\r
+  ["÷"]=>\r
+  string(8) "&divide;"\r
+  ["é"]=>\r
+  string(8) "&eacute;"\r
+  ["ê"]=>\r
+  string(7) "&ecirc;"\r
+  ["è"]=>\r
+  string(8) "&egrave;"\r
+  ["∅"]=>\r
+  string(7) "&empty;"\r
+  [" "]=>\r
+  string(6) "&emsp;"\r
+  [" "]=>\r
+  string(6) "&ensp;"\r
+  ["ε"]=>\r
+  string(9) "&epsilon;"\r
+  ["≡"]=>\r
+  string(7) "&equiv;"\r
+  ["η"]=>\r
+  string(5) "&eta;"\r
+  ["ð"]=>\r
+  string(5) "&eth;"\r
+  ["ë"]=>\r
+  string(6) "&euml;"\r
+  ["€"]=>\r
+  string(6) "&euro;"\r
+  ["∃"]=>\r
+  string(7) "&exist;"\r
+  ["ƒ"]=>\r
+  string(6) "&fnof;"\r
+  ["∀"]=>\r
+  string(8) "&forall;"\r
+  ["½"]=>\r
+  string(8) "&frac12;"\r
+  ["¼"]=>\r
+  string(8) "&frac14;"\r
+  ["¾"]=>\r
+  string(8) "&frac34;"\r
+  ["⁄"]=>\r
+  string(7) "&frasl;"\r
+  ["γ"]=>\r
+  string(7) "&gamma;"\r
+  ["≥"]=>\r
+  string(4) "&ge;"\r
+  [">"]=>\r
+  string(4) "&gt;"\r
+  ["⇔"]=>\r
+  string(6) "&hArr;"\r
+  ["↔"]=>\r
+  string(6) "&harr;"\r
+  ["♥"]=>\r
+  string(8) "&hearts;"\r
+  ["…"]=>\r
+  string(8) "&hellip;"\r
+  ["í"]=>\r
+  string(8) "&iacute;"\r
+  ["î"]=>\r
+  string(7) "&icirc;"\r
+  ["¡"]=>\r
+  string(7) "&iexcl;"\r
+  ["ì"]=>\r
+  string(8) "&igrave;"\r
+  ["ℑ"]=>\r
+  string(7) "&image;"\r
+  ["∞"]=>\r
+  string(7) "&infin;"\r
+  ["∫"]=>\r
+  string(5) "&int;"\r
+  ["ι"]=>\r
+  string(6) "&iota;"\r
+  ["¿"]=>\r
+  string(8) "&iquest;"\r
+  ["∈"]=>\r
+  string(6) "&isin;"\r
+  ["ï"]=>\r
+  string(6) "&iuml;"\r
+  ["κ"]=>\r
+  string(7) "&kappa;"\r
+  ["⇐"]=>\r
+  string(6) "&lArr;"\r
+  ["λ"]=>\r
+  string(8) "&lambda;"\r
+  ["〈"]=>\r
+  string(6) "&lang;"\r
+  ["«"]=>\r
+  string(7) "&laquo;"\r
+  ["←"]=>\r
+  string(6) "&larr;"\r
+  ["⌈"]=>\r
+  string(7) "&lceil;"\r
+  ["“"]=>\r
+  string(7) "&ldquo;"\r
+  ["≤"]=>\r
+  string(4) "&le;"\r
+  ["⌊"]=>\r
+  string(8) "&lfloor;"\r
+  ["∗"]=>\r
+  string(8) "&lowast;"\r
+  ["◊"]=>\r
+  string(5) "&loz;"\r
+  ["‎"]=>\r
+  string(5) "&lrm;"\r
+  ["‹"]=>\r
+  string(8) "&lsaquo;"\r
+  ["‘"]=>\r
+  string(7) "&lsquo;"\r
+  ["<"]=>\r
+  string(4) "&lt;"\r
+  ["¯"]=>\r
+  string(6) "&macr;"\r
+  ["—"]=>\r
+  string(7) "&mdash;"\r
+  ["µ"]=>\r
+  string(7) "&micro;"\r
+  ["·"]=>\r
+  string(8) "&middot;"\r
+  ["−"]=>\r
+  string(7) "&minus;"\r
+  ["μ"]=>\r
+  string(4) "&mu;"\r
+  ["∇"]=>\r
+  string(7) "&nabla;"\r
+  [" "]=>\r
+  string(6) "&nbsp;"\r
+  ["–"]=>\r
+  string(7) "&ndash;"\r
+  ["≠"]=>\r
+  string(4) "&ne;"\r
+  ["∋"]=>\r
+  string(4) "&ni;"\r
+  ["¬"]=>\r
+  string(5) "&not;"\r
+  ["∉"]=>\r
+  string(7) "&notin;"\r
+  ["⊄"]=>\r
+  string(6) "&nsub;"\r
+  ["ñ"]=>\r
+  string(8) "&ntilde;"\r
+  ["ν"]=>\r
+  string(4) "&nu;"\r
+  ["ó"]=>\r
+  string(8) "&oacute;"\r
+  ["ô"]=>\r
+  string(7) "&ocirc;"\r
+  ["œ"]=>\r
+  string(7) "&oelig;"\r
+  ["ò"]=>\r
+  string(8) "&ograve;"\r
+  ["‾"]=>\r
+  string(7) "&oline;"\r
+  ["ω"]=>\r
+  string(7) "&omega;"\r
+  ["ο"]=>\r
+  string(9) "&omicron;"\r
+  ["⊕"]=>\r
+  string(7) "&oplus;"\r
+  ["∨"]=>\r
+  string(4) "&or;"\r
+  ["ª"]=>\r
+  string(6) "&ordf;"\r
+  ["º"]=>\r
+  string(6) "&ordm;"\r
+  ["ø"]=>\r
+  string(8) "&oslash;"\r
+  ["õ"]=>\r
+  string(8) "&otilde;"\r
+  ["⊗"]=>\r
+  string(8) "&otimes;"\r
+  ["ö"]=>\r
+  string(6) "&ouml;"\r
+  ["¶"]=>\r
+  string(6) "&para;"\r
+  ["∂"]=>\r
+  string(6) "&part;"\r
+  ["‰"]=>\r
+  string(8) "&permil;"\r
+  ["⊥"]=>\r
+  string(6) "&perp;"\r
+  ["φ"]=>\r
+  string(5) "&phi;"\r
+  ["π"]=>\r
+  string(4) "&pi;"\r
+  ["ϖ"]=>\r
+  string(5) "&piv;"\r
+  ["±"]=>\r
+  string(8) "&plusmn;"\r
+  ["£"]=>\r
+  string(7) "&pound;"\r
+  ["′"]=>\r
+  string(7) "&prime;"\r
+  ["∏"]=>\r
+  string(6) "&prod;"\r
+  ["∝"]=>\r
+  string(6) "&prop;"\r
+  ["ψ"]=>\r
+  string(5) "&psi;"\r
+  ["""]=>\r
+  string(6) "&quot;"\r
+  ["⇒"]=>\r
+  string(6) "&rArr;"\r
+  ["√"]=>\r
+  string(7) "&radic;"\r
+  ["〉"]=>\r
+  string(6) "&rang;"\r
+  ["»"]=>\r
+  string(7) "&raquo;"\r
+  ["→"]=>\r
+  string(6) "&rarr;"\r
+  ["⌉"]=>\r
+  string(7) "&rceil;"\r
+  ["”"]=>\r
+  string(7) "&rdquo;"\r
+  ["ℜ"]=>\r
+  string(6) "&real;"\r
+  ["®"]=>\r
+  string(5) "&reg;"\r
+  ["⌋"]=>\r
+  string(8) "&rfloor;"\r
+  ["ρ"]=>\r
+  string(5) "&rho;"\r
+  ["‏"]=>\r
+  string(5) "&rlm;"\r
+  ["›"]=>\r
+  string(8) "&rsaquo;"\r
+  ["’"]=>\r
+  string(7) "&rsquo;"\r
+  ["‚"]=>\r
+  string(7) "&sbquo;"\r
+  ["š"]=>\r
+  string(8) "&scaron;"\r
+  ["⋅"]=>\r
+  string(6) "&sdot;"\r
+  ["§"]=>\r
+  string(6) "&sect;"\r
+  ["­"]=>\r
+  string(5) "&shy;"\r
+  ["σ"]=>\r
+  string(7) "&sigma;"\r
+  ["ς"]=>\r
+  string(8) "&sigmaf;"\r
+  ["∼"]=>\r
+  string(5) "&sim;"\r
+  ["♠"]=>\r
+  string(8) "&spades;"\r
+  ["⊂"]=>\r
+  string(5) "&sub;"\r
+  ["⊆"]=>\r
+  string(6) "&sube;"\r
+  ["∑"]=>\r
+  string(5) "&sum;"\r
+  ["¹"]=>\r
+  string(6) "&sup1;"\r
+  ["²"]=>\r
+  string(6) "&sup2;"\r
+  ["³"]=>\r
+  string(6) "&sup3;"\r
+  ["⊃"]=>\r
+  string(5) "&sup;"\r
+  ["⊇"]=>\r
+  string(6) "&supe;"\r
+  ["ß"]=>\r
+  string(7) "&szlig;"\r
+  ["τ"]=>\r
+  string(5) "&tau;"\r
+  ["∴"]=>\r
+  string(8) "&there4;"\r
+  ["θ"]=>\r
+  string(7) "&theta;"\r
+  ["ϑ"]=>\r
+  string(10) "&thetasym;"\r
+  [" "]=>\r
+  string(8) "&thinsp;"\r
+  ["þ"]=>\r
+  string(7) "&thorn;"\r
+  ["˜"]=>\r
+  string(7) "&tilde;"\r
+  ["×"]=>\r
+  string(7) "&times;"\r
+  ["™"]=>\r
+  string(7) "&trade;"\r
+  ["⇑"]=>\r
+  string(6) "&uArr;"\r
+  ["ú"]=>\r
+  string(8) "&uacute;"\r
+  ["↑"]=>\r
+  string(6) "&uarr;"\r
+  ["û"]=>\r
+  string(7) "&ucirc;"\r
+  ["ù"]=>\r
+  string(8) "&ugrave;"\r
+  ["¨"]=>\r
+  string(5) "&uml;"\r
+  ["ϒ"]=>\r
+  string(7) "&upsih;"\r
+  ["υ"]=>\r
+  string(9) "&upsilon;"\r
+  ["ü"]=>\r
+  string(6) "&uuml;"\r
+  ["℘"]=>\r
+  string(8) "&weierp;"\r
+  ["ξ"]=>\r
+  string(4) "&xi;"\r
+  ["ý"]=>\r
+  string(8) "&yacute;"\r
+  ["¥"]=>\r
+  string(5) "&yen;"\r
+  ["ÿ"]=>\r
+  string(6) "&yuml;"\r
+  ["ζ"]=>\r
+  string(6) "&zeta;"\r
+  ["‍"]=>\r
+  string(5) "&zwj;"\r
+  ["‌"]=>\r
+  string(6) "&zwnj;"\r
+}\r
+-- with table = HTML_SPECIALCHARS --\r
+array(4) {\r
+  ["&"]=>\r
+  string(5) "&amp;"\r
+  [">"]=>\r
+  string(4) "&gt;"\r
+  ["<"]=>\r
+  string(4) "&lt;"\r
+  ["""]=>\r
+  string(6) "&quot;"\r
+}\r
+Done\r
index 8d27e15ed8ce03d1a8ceea7654c5a2aa5a07d3ec..1ab2ffab25b101770df76fce9bd0e34ded11cb11 100644 (file)
@@ -20,1540 +20,1546 @@ echo "*** Testing get_html_translation_table() : basic functionality ***\n";
 echo "-- with table = HTML_ENTITIES & quote_style = ENT_COMPAT --\n";
 $table = HTML_ENTITIES;
 $quote_style = ENT_COMPAT;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 echo "-- with table = HTML_ENTITIES & quote_style = ENT_QUOTES --\n";
 $quote_style = ENT_QUOTES;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 echo "-- with table = HTML_ENTITIES & quote_style = ENT_NOQUOTES --\n";
 $quote_style = ENT_NOQUOTES;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 
 echo "Done\n";
 ?>
---EXPECTF--
+--EXPECT--
 *** Testing get_html_translation_table() : basic functionality ***
 -- with table = HTML_ENTITIES & quote_style = ENT_COMPAT --
 array(252) {
-  [" "]=>
-  string(6) "&nbsp;"
-  ["¡"]=>
-  string(7) "&iexcl;"
-  ["¢"]=>
-  string(6) "&cent;"
-  ["£"]=>
-  string(7) "&pound;"
-  ["¤"]=>
-  string(8) "&curren;"
-  ["¥"]=>
-  string(5) "&yen;"
-  ["¦"]=>
-  string(8) "&brvbar;"
-  ["§"]=>
-  string(6) "&sect;"
-  ["¨"]=>
-  string(5) "&uml;"
-  ["©"]=>
-  string(6) "&copy;"
-  ["ª"]=>
-  string(6) "&ordf;"
-  ["«"]=>
-  string(7) "&laquo;"
-  ["¬"]=>
-  string(5) "&not;"
-  ["­"]=>
-  string(5) "&shy;"
-  ["®"]=>
-  string(5) "&reg;"
-  ["¯"]=>
-  string(6) "&macr;"
-  ["°"]=>
-  string(5) "&deg;"
-  ["±"]=>
-  string(8) "&plusmn;"
-  ["²"]=>
-  string(6) "&sup2;"
-  ["³"]=>
-  string(6) "&sup3;"
-  ["´"]=>
-  string(7) "&acute;"
-  ["µ"]=>
-  string(7) "&micro;"
-  ["¶"]=>
-  string(6) "&para;"
-  ["·"]=>
-  string(8) "&middot;"
-  ["¸"]=>
-  string(7) "&cedil;"
-  ["¹"]=>
-  string(6) "&sup1;"
-  ["º"]=>
-  string(6) "&ordm;"
-  ["»"]=>
-  string(7) "&raquo;"
-  ["¼"]=>
-  string(8) "&frac14;"
-  ["½"]=>
-  string(8) "&frac12;"
-  ["¾"]=>
-  string(8) "&frac34;"
-  ["¿"]=>
-  string(8) "&iquest;"
-  ["À"]=>
-  string(8) "&Agrave;"
+  ["Æ"]=>
+  string(7) "&AElig;"
   ["Á"]=>
   string(8) "&Aacute;"
   ["Â"]=>
   string(7) "&Acirc;"
+  ["À"]=>
+  string(8) "&Agrave;"
+  ["Α"]=>
+  string(7) "&Alpha;"
+  ["Å"]=>
+  string(7) "&Aring;"
   ["Ã"]=>
   string(8) "&Atilde;"
   ["Ä"]=>
   string(6) "&Auml;"
-  ["Å"]=>
-  string(7) "&Aring;"
-  ["Æ"]=>
-  string(7) "&AElig;"
+  ["Β"]=>
+  string(6) "&Beta;"
   ["Ç"]=>
   string(8) "&Ccedil;"
-  ["È"]=>
-  string(8) "&Egrave;"
+  ["Χ"]=>
+  string(5) "&Chi;"
+  ["‡"]=>
+  string(8) "&Dagger;"
+  ["Δ"]=>
+  string(7) "&Delta;"
+  ["Ð"]=>
+  string(5) "&ETH;"
   ["É"]=>
   string(8) "&Eacute;"
   ["Ê"]=>
   string(7) "&Ecirc;"
+  ["È"]=>
+  string(8) "&Egrave;"
+  ["Ε"]=>
+  string(9) "&Epsilon;"
+  ["Η"]=>
+  string(5) "&Eta;"
   ["Ë"]=>
   string(6) "&Euml;"
-  ["Ì"]=>
-  string(8) "&Igrave;"
+  ["Γ"]=>
+  string(7) "&Gamma;"
   ["Í"]=>
   string(8) "&Iacute;"
   ["Î"]=>
   string(7) "&Icirc;"
+  ["Ì"]=>
+  string(8) "&Igrave;"
+  ["Ι"]=>
+  string(6) "&Iota;"
   ["Ï"]=>
   string(6) "&Iuml;"
-  ["Ð"]=>
-  string(5) "&ETH;"
+  ["Κ"]=>
+  string(7) "&Kappa;"
+  ["Λ"]=>
+  string(8) "&Lambda;"
+  ["Μ"]=>
+  string(4) "&Mu;"
   ["Ñ"]=>
   string(8) "&Ntilde;"
-  ["Ò"]=>
-  string(8) "&Ograve;"
+  ["Ν"]=>
+  string(4) "&Nu;"
+  ["Œ"]=>
+  string(7) "&OElig;"
   ["Ó"]=>
   string(8) "&Oacute;"
   ["Ô"]=>
   string(7) "&Ocirc;"
+  ["Ò"]=>
+  string(8) "&Ograve;"
+  ["Ω"]=>
+  string(7) "&Omega;"
+  ["Ο"]=>
+  string(9) "&Omicron;"
+  ["Ø"]=>
+  string(8) "&Oslash;"
   ["Õ"]=>
   string(8) "&Otilde;"
   ["Ö"]=>
   string(6) "&Ouml;"
-  ["×"]=>
-  string(7) "&times;"
-  ["Ø"]=>
-  string(8) "&Oslash;"
-  ["Ù"]=>
-  string(8) "&Ugrave;"
+  ["Φ"]=>
+  string(5) "&Phi;"
+  ["Π"]=>
+  string(4) "&Pi;"
+  ["″"]=>
+  string(7) "&Prime;"
+  ["Ψ"]=>
+  string(5) "&Psi;"
+  ["Ρ"]=>
+  string(5) "&Rho;"
+  ["Š"]=>
+  string(8) "&Scaron;"
+  ["Σ"]=>
+  string(7) "&Sigma;"
+  ["Þ"]=>
+  string(7) "&THORN;"
+  ["Τ"]=>
+  string(5) "&Tau;"
+  ["Θ"]=>
+  string(7) "&Theta;"
   ["Ú"]=>
   string(8) "&Uacute;"
   ["Û"]=>
   string(7) "&Ucirc;"
+  ["Ù"]=>
+  string(8) "&Ugrave;"
+  ["Υ"]=>
+  string(9) "&Upsilon;"
   ["Ü"]=>
   string(6) "&Uuml;"
+  ["Ξ"]=>
+  string(4) "&Xi;"
   ["Ý"]=>
   string(8) "&Yacute;"
-  ["Þ"]=>
-  string(7) "&THORN;"
-  ["ß"]=>
-  string(7) "&szlig;"
-  ["à"]=>
-  string(8) "&agrave;"
+  ["Ÿ"]=>
+  string(6) "&Yuml;"
+  ["Ζ"]=>
+  string(6) "&Zeta;"
   ["á"]=>
   string(8) "&aacute;"
   ["â"]=>
   string(7) "&acirc;"
+  ["´"]=>
+  string(7) "&acute;"
+  ["æ"]=>
+  string(7) "&aelig;"
+  ["à"]=>
+  string(8) "&agrave;"
+  ["ℵ"]=>
+  string(9) "&alefsym;"
+  ["α"]=>
+  string(7) "&alpha;"
+  ["&"]=>
+  string(5) "&amp;"
+  ["∧"]=>
+  string(5) "&and;"
+  ["∠"]=>
+  string(5) "&ang;"
+  ["å"]=>
+  string(7) "&aring;"
+  ["≈"]=>
+  string(7) "&asymp;"
   ["ã"]=>
   string(8) "&atilde;"
   ["ä"]=>
   string(6) "&auml;"
-  ["å"]=>
-  string(7) "&aring;"
-  ["æ"]=>
-  string(7) "&aelig;"
+  ["„"]=>
+  string(7) "&bdquo;"
+  ["β"]=>
+  string(6) "&beta;"
+  ["¦"]=>
+  string(8) "&brvbar;"
+  ["•"]=>
+  string(6) "&bull;"
+  ["∩"]=>
+  string(5) "&cap;"
   ["ç"]=>
   string(8) "&ccedil;"
-  ["è"]=>
-  string(8) "&egrave;"
+  ["¸"]=>
+  string(7) "&cedil;"
+  ["¢"]=>
+  string(6) "&cent;"
+  ["χ"]=>
+  string(5) "&chi;"
+  ["ˆ"]=>
+  string(6) "&circ;"
+  ["♣"]=>
+  string(7) "&clubs;"
+  ["≅"]=>
+  string(6) "&cong;"
+  ["©"]=>
+  string(6) "&copy;"
+  ["↵"]=>
+  string(7) "&crarr;"
+  ["∪"]=>
+  string(5) "&cup;"
+  ["¤"]=>
+  string(8) "&curren;"
+  ["⇓"]=>
+  string(6) "&dArr;"
+  ["†"]=>
+  string(8) "&dagger;"
+  ["↓"]=>
+  string(6) "&darr;"
+  ["°"]=>
+  string(5) "&deg;"
+  ["δ"]=>
+  string(7) "&delta;"
+  ["♦"]=>
+  string(7) "&diams;"
+  ["÷"]=>
+  string(8) "&divide;"
   ["é"]=>
   string(8) "&eacute;"
   ["ê"]=>
   string(7) "&ecirc;"
+  ["è"]=>
+  string(8) "&egrave;"
+  ["∅"]=>
+  string(7) "&empty;"
+  [" "]=>
+  string(6) "&emsp;"
+  [" "]=>
+  string(6) "&ensp;"
+  ["ε"]=>
+  string(9) "&epsilon;"
+  ["≡"]=>
+  string(7) "&equiv;"
+  ["η"]=>
+  string(5) "&eta;"
+  ["ð"]=>
+  string(5) "&eth;"
   ["ë"]=>
   string(6) "&euml;"
-  ["ì"]=>
-  string(8) "&igrave;"
+  ["€"]=>
+  string(6) "&euro;"
+  ["∃"]=>
+  string(7) "&exist;"
+  ["ƒ"]=>
+  string(6) "&fnof;"
+  ["∀"]=>
+  string(8) "&forall;"
+  ["½"]=>
+  string(8) "&frac12;"
+  ["¼"]=>
+  string(8) "&frac14;"
+  ["¾"]=>
+  string(8) "&frac34;"
+  ["⁄"]=>
+  string(7) "&frasl;"
+  ["γ"]=>
+  string(7) "&gamma;"
+  ["≥"]=>
+  string(4) "&ge;"
+  [">"]=>
+  string(4) "&gt;"
+  ["⇔"]=>
+  string(6) "&hArr;"
+  ["↔"]=>
+  string(6) "&harr;"
+  ["♥"]=>
+  string(8) "&hearts;"
+  ["…"]=>
+  string(8) "&hellip;"
   ["í"]=>
   string(8) "&iacute;"
   ["î"]=>
   string(7) "&icirc;"
+  ["¡"]=>
+  string(7) "&iexcl;"
+  ["ì"]=>
+  string(8) "&igrave;"
+  ["ℑ"]=>
+  string(7) "&image;"
+  ["∞"]=>
+  string(7) "&infin;"
+  ["∫"]=>
+  string(5) "&int;"
+  ["ι"]=>
+  string(6) "&iota;"
+  ["¿"]=>
+  string(8) "&iquest;"
+  ["∈"]=>
+  string(6) "&isin;"
   ["ï"]=>
   string(6) "&iuml;"
-  ["ð"]=>
-  string(5) "&eth;"
+  ["κ"]=>
+  string(7) "&kappa;"
+  ["⇐"]=>
+  string(6) "&lArr;"
+  ["λ"]=>
+  string(8) "&lambda;"
+  ["〈"]=>
+  string(6) "&lang;"
+  ["«"]=>
+  string(7) "&laquo;"
+  ["←"]=>
+  string(6) "&larr;"
+  ["⌈"]=>
+  string(7) "&lceil;"
+  ["“"]=>
+  string(7) "&ldquo;"
+  ["≤"]=>
+  string(4) "&le;"
+  ["⌊"]=>
+  string(8) "&lfloor;"
+  ["∗"]=>
+  string(8) "&lowast;"
+  ["◊"]=>
+  string(5) "&loz;"
+  ["‎"]=>
+  string(5) "&lrm;"
+  ["‹"]=>
+  string(8) "&lsaquo;"
+  ["‘"]=>
+  string(7) "&lsquo;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["¯"]=>
+  string(6) "&macr;"
+  ["—"]=>
+  string(7) "&mdash;"
+  ["µ"]=>
+  string(7) "&micro;"
+  ["·"]=>
+  string(8) "&middot;"
+  ["−"]=>
+  string(7) "&minus;"
+  ["μ"]=>
+  string(4) "&mu;"
+  ["∇"]=>
+  string(7) "&nabla;"
+  [" "]=>
+  string(6) "&nbsp;"
+  ["–"]=>
+  string(7) "&ndash;"
+  ["≠"]=>
+  string(4) "&ne;"
+  ["∋"]=>
+  string(4) "&ni;"
+  ["¬"]=>
+  string(5) "&not;"
+  ["∉"]=>
+  string(7) "&notin;"
+  ["⊄"]=>
+  string(6) "&nsub;"
   ["ñ"]=>
   string(8) "&ntilde;"
-  ["ò"]=>
-  string(8) "&ograve;"
+  ["ν"]=>
+  string(4) "&nu;"
   ["ó"]=>
   string(8) "&oacute;"
   ["ô"]=>
   string(7) "&ocirc;"
+  ["œ"]=>
+  string(7) "&oelig;"
+  ["ò"]=>
+  string(8) "&ograve;"
+  ["‾"]=>
+  string(7) "&oline;"
+  ["ω"]=>
+  string(7) "&omega;"
+  ["ο"]=>
+  string(9) "&omicron;"
+  ["⊕"]=>
+  string(7) "&oplus;"
+  ["∨"]=>
+  string(4) "&or;"
+  ["ª"]=>
+  string(6) "&ordf;"
+  ["º"]=>
+  string(6) "&ordm;"
+  ["ø"]=>
+  string(8) "&oslash;"
   ["õ"]=>
   string(8) "&otilde;"
+  ["⊗"]=>
+  string(8) "&otimes;"
   ["ö"]=>
   string(6) "&ouml;"
-  ["÷"]=>
-  string(8) "&divide;"
-  ["ø"]=>
-  string(8) "&oslash;"
-  ["ù"]=>
-  string(8) "&ugrave;"
+  ["¶"]=>
+  string(6) "&para;"
+  ["∂"]=>
+  string(6) "&part;"
+  ["‰"]=>
+  string(8) "&permil;"
+  ["⊥"]=>
+  string(6) "&perp;"
+  ["φ"]=>
+  string(5) "&phi;"
+  ["π"]=>
+  string(4) "&pi;"
+  ["ϖ"]=>
+  string(5) "&piv;"
+  ["±"]=>
+  string(8) "&plusmn;"
+  ["£"]=>
+  string(7) "&pound;"
+  ["′"]=>
+  string(7) "&prime;"
+  ["∏"]=>
+  string(6) "&prod;"
+  ["∝"]=>
+  string(6) "&prop;"
+  ["ψ"]=>
+  string(5) "&psi;"
+  ["""]=>
+  string(6) "&quot;"
+  ["⇒"]=>
+  string(6) "&rArr;"
+  ["√"]=>
+  string(7) "&radic;"
+  ["〉"]=>
+  string(6) "&rang;"
+  ["»"]=>
+  string(7) "&raquo;"
+  ["→"]=>
+  string(6) "&rarr;"
+  ["⌉"]=>
+  string(7) "&rceil;"
+  ["”"]=>
+  string(7) "&rdquo;"
+  ["ℜ"]=>
+  string(6) "&real;"
+  ["®"]=>
+  string(5) "&reg;"
+  ["⌋"]=>
+  string(8) "&rfloor;"
+  ["ρ"]=>
+  string(5) "&rho;"
+  ["‏"]=>
+  string(5) "&rlm;"
+  ["›"]=>
+  string(8) "&rsaquo;"
+  ["’"]=>
+  string(7) "&rsquo;"
+  ["‚"]=>
+  string(7) "&sbquo;"
+  ["š"]=>
+  string(8) "&scaron;"
+  ["⋅"]=>
+  string(6) "&sdot;"
+  ["§"]=>
+  string(6) "&sect;"
+  ["­"]=>
+  string(5) "&shy;"
+  ["σ"]=>
+  string(7) "&sigma;"
+  ["ς"]=>
+  string(8) "&sigmaf;"
+  ["∼"]=>
+  string(5) "&sim;"
+  ["♠"]=>
+  string(8) "&spades;"
+  ["⊂"]=>
+  string(5) "&sub;"
+  ["⊆"]=>
+  string(6) "&sube;"
+  ["∑"]=>
+  string(5) "&sum;"
+  ["¹"]=>
+  string(6) "&sup1;"
+  ["²"]=>
+  string(6) "&sup2;"
+  ["³"]=>
+  string(6) "&sup3;"
+  ["⊃"]=>
+  string(5) "&sup;"
+  ["⊇"]=>
+  string(6) "&supe;"
+  ["ß"]=>
+  string(7) "&szlig;"
+  ["τ"]=>
+  string(5) "&tau;"
+  ["∴"]=>
+  string(8) "&there4;"
+  ["θ"]=>
+  string(7) "&theta;"
+  ["ϑ"]=>
+  string(10) "&thetasym;"
+  [" "]=>
+  string(8) "&thinsp;"
+  ["þ"]=>
+  string(7) "&thorn;"
+  ["˜"]=>
+  string(7) "&tilde;"
+  ["×"]=>
+  string(7) "&times;"
+  ["™"]=>
+  string(7) "&trade;"
+  ["⇑"]=>
+  string(6) "&uArr;"
   ["ú"]=>
   string(8) "&uacute;"
+  ["↑"]=>
+  string(6) "&uarr;"
   ["û"]=>
   string(7) "&ucirc;"
-  ["ü"]=>
-  string(6) "&uuml;"
+  ["ù"]=>
+  string(8) "&ugrave;"
+  ["¨"]=>
+  string(5) "&uml;"
+  ["ϒ"]=>
+  string(7) "&upsih;"
+  ["υ"]=>
+  string(9) "&upsilon;"
+  ["ü"]=>
+  string(6) "&uuml;"
+  ["℘"]=>
+  string(8) "&weierp;"
+  ["ξ"]=>
+  string(4) "&xi;"
   ["ý"]=>
   string(8) "&yacute;"
-  ["þ"]=>
-  string(7) "&thorn;"
+  ["¥"]=>
+  string(5) "&yen;"
   ["ÿ"]=>
   string(6) "&yuml;"
-  ["Œ"]=>
-  string(7) "&OElig;"
-  ["œ"]=>
-  string(7) "&oelig;"
-  ["Š"]=>
-  string(8) "&Scaron;"
-  ["š"]=>
-  string(8) "&scaron;"
-  ["Ÿ"]=>
-  string(6) "&Yuml;"
-  ["ƒ"]=>
-  string(6) "&fnof;"
-  ["ˆ"]=>
-  string(6) "&circ;"
-  ["˜"]=>
-  string(7) "&tilde;"
+  ["ζ"]=>
+  string(6) "&zeta;"
+  ["‍"]=>
+  string(5) "&zwj;"
+  ["‌"]=>
+  string(6) "&zwnj;"
+}
+-- with table = HTML_ENTITIES & quote_style = ENT_QUOTES --
+array(253) {
+  ["'"]=>
+  string(6) "&#039;"
+  ["Æ"]=>
+  string(7) "&AElig;"
+  ["Á"]=>
+  string(8) "&Aacute;"
+  ["Â"]=>
+  string(7) "&Acirc;"
+  ["À"]=>
+  string(8) "&Agrave;"
   ["Α"]=>
   string(7) "&Alpha;"
+  ["Å"]=>
+  string(7) "&Aring;"
+  ["Ã"]=>
+  string(8) "&Atilde;"
+  ["Ä"]=>
+  string(6) "&Auml;"
   ["Β"]=>
   string(6) "&Beta;"
-  ["Γ"]=>
-  string(7) "&Gamma;"
+  ["Ç"]=>
+  string(8) "&Ccedil;"
+  ["Χ"]=>
+  string(5) "&Chi;"
+  ["‡"]=>
+  string(8) "&Dagger;"
   ["Δ"]=>
   string(7) "&Delta;"
+  ["Ð"]=>
+  string(5) "&ETH;"
+  ["É"]=>
+  string(8) "&Eacute;"
+  ["Ê"]=>
+  string(7) "&Ecirc;"
+  ["È"]=>
+  string(8) "&Egrave;"
   ["Ε"]=>
   string(9) "&Epsilon;"
-  ["Ζ"]=>
-  string(6) "&Zeta;"
   ["Η"]=>
   string(5) "&Eta;"
-  ["Θ"]=>
-  string(7) "&Theta;"
+  ["Ë"]=>
+  string(6) "&Euml;"
+  ["Γ"]=>
+  string(7) "&Gamma;"
+  ["Í"]=>
+  string(8) "&Iacute;"
+  ["Î"]=>
+  string(7) "&Icirc;"
+  ["Ì"]=>
+  string(8) "&Igrave;"
   ["Ι"]=>
   string(6) "&Iota;"
+  ["Ï"]=>
+  string(6) "&Iuml;"
   ["Κ"]=>
   string(7) "&Kappa;"
   ["Λ"]=>
   string(8) "&Lambda;"
   ["Μ"]=>
   string(4) "&Mu;"
+  ["Ñ"]=>
+  string(8) "&Ntilde;"
   ["Ν"]=>
   string(4) "&Nu;"
-  ["Ξ"]=>
-  string(4) "&Xi;"
+  ["Œ"]=>
+  string(7) "&OElig;"
+  ["Ó"]=>
+  string(8) "&Oacute;"
+  ["Ô"]=>
+  string(7) "&Ocirc;"
+  ["Ò"]=>
+  string(8) "&Ograve;"
+  ["Ω"]=>
+  string(7) "&Omega;"
   ["Ο"]=>
   string(9) "&Omicron;"
+  ["Ø"]=>
+  string(8) "&Oslash;"
+  ["Õ"]=>
+  string(8) "&Otilde;"
+  ["Ö"]=>
+  string(6) "&Ouml;"
+  ["Φ"]=>
+  string(5) "&Phi;"
   ["Π"]=>
   string(4) "&Pi;"
+  ["″"]=>
+  string(7) "&Prime;"
+  ["Ψ"]=>
+  string(5) "&Psi;"
   ["Ρ"]=>
   string(5) "&Rho;"
+  ["Š"]=>
+  string(8) "&Scaron;"
   ["Σ"]=>
   string(7) "&Sigma;"
+  ["Þ"]=>
+  string(7) "&THORN;"
   ["Τ"]=>
   string(5) "&Tau;"
+  ["Θ"]=>
+  string(7) "&Theta;"
+  ["Ú"]=>
+  string(8) "&Uacute;"
+  ["Û"]=>
+  string(7) "&Ucirc;"
+  ["Ù"]=>
+  string(8) "&Ugrave;"
   ["Υ"]=>
   string(9) "&Upsilon;"
-  ["Φ"]=>
-  string(5) "&Phi;"
-  ["Χ"]=>
-  string(5) "&Chi;"
-  ["Ψ"]=>
-  string(5) "&Psi;"
-  ["Ω"]=>
-  string(7) "&Omega;"
+  ["Ü"]=>
+  string(6) "&Uuml;"
+  ["Ξ"]=>
+  string(4) "&Xi;"
+  ["Ý"]=>
+  string(8) "&Yacute;"
+  ["Ÿ"]=>
+  string(6) "&Yuml;"
+  ["Ζ"]=>
+  string(6) "&Zeta;"
+  ["á"]=>
+  string(8) "&aacute;"
+  ["â"]=>
+  string(7) "&acirc;"
+  ["´"]=>
+  string(7) "&acute;"
+  ["æ"]=>
+  string(7) "&aelig;"
+  ["à"]=>
+  string(8) "&agrave;"
+  ["ℵ"]=>
+  string(9) "&alefsym;"
   ["α"]=>
   string(7) "&alpha;"
+  ["&"]=>
+  string(5) "&amp;"
+  ["∧"]=>
+  string(5) "&and;"
+  ["∠"]=>
+  string(5) "&ang;"
+  ["å"]=>
+  string(7) "&aring;"
+  ["≈"]=>
+  string(7) "&asymp;"
+  ["ã"]=>
+  string(8) "&atilde;"
+  ["ä"]=>
+  string(6) "&auml;"
+  ["„"]=>
+  string(7) "&bdquo;"
   ["β"]=>
   string(6) "&beta;"
-  ["γ"]=>
-  string(7) "&gamma;"
+  ["¦"]=>
+  string(8) "&brvbar;"
+  ["•"]=>
+  string(6) "&bull;"
+  ["∩"]=>
+  string(5) "&cap;"
+  ["ç"]=>
+  string(8) "&ccedil;"
+  ["¸"]=>
+  string(7) "&cedil;"
+  ["¢"]=>
+  string(6) "&cent;"
+  ["χ"]=>
+  string(5) "&chi;"
+  ["ˆ"]=>
+  string(6) "&circ;"
+  ["♣"]=>
+  string(7) "&clubs;"
+  ["≅"]=>
+  string(6) "&cong;"
+  ["©"]=>
+  string(6) "&copy;"
+  ["↵"]=>
+  string(7) "&crarr;"
+  ["∪"]=>
+  string(5) "&cup;"
+  ["¤"]=>
+  string(8) "&curren;"
+  ["⇓"]=>
+  string(6) "&dArr;"
+  ["†"]=>
+  string(8) "&dagger;"
+  ["↓"]=>
+  string(6) "&darr;"
+  ["°"]=>
+  string(5) "&deg;"
   ["δ"]=>
   string(7) "&delta;"
+  ["♦"]=>
+  string(7) "&diams;"
+  ["÷"]=>
+  string(8) "&divide;"
+  ["é"]=>
+  string(8) "&eacute;"
+  ["ê"]=>
+  string(7) "&ecirc;"
+  ["è"]=>
+  string(8) "&egrave;"
+  ["∅"]=>
+  string(7) "&empty;"
+  [" "]=>
+  string(6) "&emsp;"
+  [" "]=>
+  string(6) "&ensp;"
   ["ε"]=>
   string(9) "&epsilon;"
-  ["ζ"]=>
-  string(6) "&zeta;"
+  [""]=>
+  string(7) "&equiv;"
   ["η"]=>
   string(5) "&eta;"
-  ["θ"]=>
-  string(7) "&theta;"
-  ["ι"]=>
-  string(6) "&iota;"
-  ["κ"]=>
-  string(7) "&kappa;"
-  ["λ"]=>
-  string(8) "&lambda;"
-  ["μ"]=>
-  string(4) "&mu;"
-  ["ν"]=>
-  string(4) "&nu;"
-  ["ξ"]=>
-  string(4) "&xi;"
-  ["ο"]=>
-  string(9) "&omicron;"
-  ["π"]=>
-  string(4) "&pi;"
-  ["ρ"]=>
-  string(5) "&rho;"
-  ["ς"]=>
-  string(8) "&sigmaf;"
-  ["σ"]=>
-  string(7) "&sigma;"
-  ["τ"]=>
-  string(5) "&tau;"
-  ["υ"]=>
-  string(9) "&upsilon;"
-  ["φ"]=>
-  string(5) "&phi;"
-  ["χ"]=>
-  string(5) "&chi;"
-  ["ψ"]=>
-  string(5) "&psi;"
-  ["ω"]=>
-  string(7) "&omega;"
-  ["ϑ"]=>
-  string(10) "&thetasym;"
-  ["ϒ"]=>
-  string(7) "&upsih;"
-  ["ϖ"]=>
-  string(5) "&piv;"
-  [" "]=>
-  string(6) "&ensp;"
-  [" "]=>
-  string(6) "&emsp;"
-  [" "]=>
-  string(8) "&thinsp;"
-  ["‌"]=>
-  string(6) "&zwnj;"
-  ["‍"]=>
-  string(5) "&zwj;"
-  ["‎"]=>
-  string(5) "&lrm;"
-  ["‏"]=>
-  string(5) "&rlm;"
-  ["–"]=>
-  string(7) "&ndash;"
-  ["—"]=>
-  string(7) "&mdash;"
-  ["‘"]=>
-  string(7) "&lsquo;"
-  ["’"]=>
-  string(7) "&rsquo;"
-  ["‚"]=>
-  string(7) "&sbquo;"
-  ["“"]=>
-  string(7) "&ldquo;"
-  ["”"]=>
-  string(7) "&rdquo;"
-  ["„"]=>
-  string(7) "&bdquo;"
-  ["†"]=>
-  string(8) "&dagger;"
-  ["‡"]=>
-  string(8) "&Dagger;"
-  ["•"]=>
-  string(6) "&bull;"
-  ["…"]=>
-  string(8) "&hellip;"
-  ["‰"]=>
-  string(8) "&permil;"
-  ["′"]=>
-  string(7) "&prime;"
-  ["″"]=>
-  string(7) "&Prime;"
-  ["‹"]=>
-  string(8) "&lsaquo;"
-  ["›"]=>
-  string(8) "&rsaquo;"
-  ["‾"]=>
-  string(7) "&oline;"
-  ["⁄"]=>
-  string(7) "&frasl;"
+  ["ð"]=>
+  string(5) "&eth;"
+  ["ë"]=>
+  string(6) "&euml;"
   ["€"]=>
   string(6) "&euro;"
-  ["ℑ"]=>
-  string(7) "&image;"
-  ["℘"]=>
-  string(8) "&weierp;"
-  ["ℜ"]=>
-  string(6) "&real;"
-  ["™"]=>
-  string(7) "&trade;"
-  ["ℵ"]=>
-  string(9) "&alefsym;"
-  ["←"]=>
-  string(6) "&larr;"
-  ["↑"]=>
-  string(6) "&uarr;"
-  ["→"]=>
-  string(6) "&rarr;"
-  ["↓"]=>
-  string(6) "&darr;"
-  ["↔"]=>
-  string(6) "&harr;"
-  ["↵"]=>
-  string(7) "&crarr;"
-  ["⇐"]=>
-  string(6) "&lArr;"
-  ["⇑"]=>
-  string(6) "&uArr;"
-  ["⇒"]=>
-  string(6) "&rArr;"
-  ["⇓"]=>
-  string(6) "&dArr;"
-  ["⇔"]=>
-  string(6) "&hArr;"
-  ["∀"]=>
-  string(8) "&forall;"
-  ["∂"]=>
-  string(6) "&part;"
   ["∃"]=>
   string(7) "&exist;"
-  ["∅"]=>
-  string(7) "&empty;"
-  ["∇"]=>
-  string(7) "&nabla;"
-  ["∈"]=>
-  string(6) "&isin;"
-  ["∉"]=>
-  string(7) "&notin;"
-  ["∋"]=>
-  string(4) "&ni;"
-  ["∏"]=>
-  string(6) "&prod;"
-  ["∑"]=>
-  string(5) "&sum;"
-  ["−"]=>
-  string(7) "&minus;"
-  ["∗"]=>
-  string(8) "&lowast;"
-  ["√"]=>
-  string(7) "&radic;"
-  ["∝"]=>
-  string(6) "&prop;"
-  ["∞"]=>
-  string(7) "&infin;"
-  ["∠"]=>
-  string(5) "&ang;"
-  ["∧"]=>
-  string(5) "&and;"
-  ["∨"]=>
-  string(4) "&or;"
-  ["∩"]=>
-  string(5) "&cap;"
-  ["∪"]=>
-  string(5) "&cup;"
-  ["∫"]=>
-  string(5) "&int;"
-  ["∴"]=>
-  string(8) "&there4;"
-  ["∼"]=>
-  string(5) "&sim;"
-  ["≅"]=>
-  string(6) "&cong;"
-  ["≈"]=>
-  string(7) "&asymp;"
-  ["≠"]=>
-  string(4) "&ne;"
-  ["≡"]=>
-  string(7) "&equiv;"
-  ["≤"]=>
-  string(4) "&le;"
-  ["≥"]=>
-  string(4) "&ge;"
-  ["⊂"]=>
-  string(5) "&sub;"
-  ["⊃"]=>
-  string(5) "&sup;"
-  ["⊄"]=>
-  string(6) "&nsub;"
-  ["⊆"]=>
-  string(6) "&sube;"
-  ["⊇"]=>
-  string(6) "&supe;"
-  ["⊕"]=>
-  string(7) "&oplus;"
-  ["⊗"]=>
-  string(8) "&otimes;"
-  ["⊥"]=>
-  string(6) "&perp;"
-  ["⋅"]=>
-  string(6) "&sdot;"
-  ["⌈"]=>
-  string(7) "&lceil;"
-  ["⌉"]=>
-  string(7) "&rceil;"
-  ["⌊"]=>
-  string(8) "&lfloor;"
-  ["⌋"]=>
-  string(8) "&rfloor;"
-  ["〈"]=>
-  string(6) "&lang;"
-  ["〉"]=>
-  string(6) "&rang;"
-  ["◊"]=>
-  string(5) "&loz;"
-  ["♠"]=>
-  string(8) "&spades;"
-  ["♣"]=>
-  string(7) "&clubs;"
-  ["♥"]=>
-  string(8) "&hearts;"
-  ["♦"]=>
-  string(7) "&diams;"
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
-}
--- with table = HTML_ENTITIES & quote_style = ENT_QUOTES --
-array(253) {
-  [" "]=>
-  string(6) "&nbsp;"
-  ["¡"]=>
-  string(7) "&iexcl;"
-  ["¢"]=>
-  string(6) "&cent;"
-  ["£"]=>
-  string(7) "&pound;"
-  ["¤"]=>
-  string(8) "&curren;"
-  ["¥"]=>
-  string(5) "&yen;"
-  ["¦"]=>
-  string(8) "&brvbar;"
-  ["§"]=>
-  string(6) "&sect;"
-  ["¨"]=>
-  string(5) "&uml;"
-  ["©"]=>
-  string(6) "&copy;"
-  ["ª"]=>
-  string(6) "&ordf;"
-  ["«"]=>
-  string(7) "&laquo;"
-  ["¬"]=>
-  string(5) "&not;"
-  ["­"]=>
-  string(5) "&shy;"
-  ["®"]=>
-  string(5) "&reg;"
-  ["¯"]=>
-  string(6) "&macr;"
-  ["°"]=>
-  string(5) "&deg;"
-  ["±"]=>
-  string(8) "&plusmn;"
-  ["²"]=>
-  string(6) "&sup2;"
-  ["³"]=>
-  string(6) "&sup3;"
-  ["´"]=>
-  string(7) "&acute;"
-  ["µ"]=>
-  string(7) "&micro;"
-  ["¶"]=>
-  string(6) "&para;"
-  ["·"]=>
-  string(8) "&middot;"
-  ["¸"]=>
-  string(7) "&cedil;"
-  ["¹"]=>
-  string(6) "&sup1;"
-  ["º"]=>
-  string(6) "&ordm;"
-  ["»"]=>
-  string(7) "&raquo;"
-  ["¼"]=>
-  string(8) "&frac14;"
+  ["ƒ"]=>
+  string(6) "&fnof;"
+  ["∀"]=>
+  string(8) "&forall;"
   ["½"]=>
   string(8) "&frac12;"
+  ["¼"]=>
+  string(8) "&frac14;"
   ["¾"]=>
   string(8) "&frac34;"
-  ["¿"]=>
-  string(8) "&iquest;"
-  ["À"]=>
-  string(8) "&Agrave;"
-  ["Á"]=>
-  string(8) "&Aacute;"
-  ["Â"]=>
-  string(7) "&Acirc;"
-  ["Ã"]=>
-  string(8) "&Atilde;"
-  ["Ä"]=>
-  string(6) "&Auml;"
-  ["Å"]=>
-  string(7) "&Aring;"
-  ["Æ"]=>
-  string(7) "&AElig;"
-  ["Ç"]=>
-  string(8) "&Ccedil;"
-  ["È"]=>
-  string(8) "&Egrave;"
-  ["É"]=>
-  string(8) "&Eacute;"
-  ["Ê"]=>
-  string(7) "&Ecirc;"
-  ["Ë"]=>
-  string(6) "&Euml;"
-  ["Ì"]=>
-  string(8) "&Igrave;"
-  ["Í"]=>
-  string(8) "&Iacute;"
-  ["Î"]=>
-  string(7) "&Icirc;"
-  ["Ï"]=>
-  string(6) "&Iuml;"
-  ["Ð"]=>
-  string(5) "&ETH;"
-  ["Ñ"]=>
-  string(8) "&Ntilde;"
-  ["Ò"]=>
-  string(8) "&Ograve;"
-  ["Ó"]=>
-  string(8) "&Oacute;"
-  ["Ô"]=>
-  string(7) "&Ocirc;"
-  ["Õ"]=>
-  string(8) "&Otilde;"
-  ["Ö"]=>
-  string(6) "&Ouml;"
-  ["×"]=>
-  string(7) "&times;"
-  ["Ø"]=>
-  string(8) "&Oslash;"
-  ["Ù"]=>
-  string(8) "&Ugrave;"
-  ["Ú"]=>
-  string(8) "&Uacute;"
-  ["Û"]=>
-  string(7) "&Ucirc;"
-  ["Ü"]=>
-  string(6) "&Uuml;"
-  ["Ý"]=>
-  string(8) "&Yacute;"
-  ["Þ"]=>
-  string(7) "&THORN;"
-  ["ß"]=>
-  string(7) "&szlig;"
-  ["à"]=>
-  string(8) "&agrave;"
-  ["á"]=>
-  string(8) "&aacute;"
-  ["â"]=>
-  string(7) "&acirc;"
-  ["ã"]=>
-  string(8) "&atilde;"
-  ["ä"]=>
-  string(6) "&auml;"
-  ["å"]=>
-  string(7) "&aring;"
-  ["æ"]=>
-  string(7) "&aelig;"
-  ["ç"]=>
-  string(8) "&ccedil;"
-  ["è"]=>
-  string(8) "&egrave;"
-  ["é"]=>
-  string(8) "&eacute;"
-  ["ê"]=>
-  string(7) "&ecirc;"
-  ["ë"]=>
-  string(6) "&euml;"
-  ["ì"]=>
-  string(8) "&igrave;"
-  ["í"]=>
-  string(8) "&iacute;"
-  ["î"]=>
-  string(7) "&icirc;"
-  ["ï"]=>
-  string(6) "&iuml;"
-  ["ð"]=>
-  string(5) "&eth;"
-  ["ñ"]=>
-  string(8) "&ntilde;"
-  ["ò"]=>
-  string(8) "&ograve;"
-  ["ó"]=>
-  string(8) "&oacute;"
-  ["ô"]=>
-  string(7) "&ocirc;"
-  ["õ"]=>
-  string(8) "&otilde;"
-  ["ö"]=>
-  string(6) "&ouml;"
-  ["÷"]=>
-  string(8) "&divide;"
-  ["ø"]=>
-  string(8) "&oslash;"
-  ["ù"]=>
-  string(8) "&ugrave;"
-  ["ú"]=>
-  string(8) "&uacute;"
-  ["û"]=>
-  string(7) "&ucirc;"
-  ["ü"]=>
-  string(6) "&uuml;"
-  ["ý"]=>
-  string(8) "&yacute;"
-  ["þ"]=>
-  string(7) "&thorn;"
-  ["ÿ"]=>
-  string(6) "&yuml;"
-  ["Œ"]=>
-  string(7) "&OElig;"
-  ["œ"]=>
-  string(7) "&oelig;"
-  ["Š"]=>
-  string(8) "&Scaron;"
-  ["š"]=>
-  string(8) "&scaron;"
-  ["Ÿ"]=>
-  string(6) "&Yuml;"
-  ["ƒ"]=>
-  string(6) "&fnof;"
-  ["ˆ"]=>
-  string(6) "&circ;"
-  ["˜"]=>
-  string(7) "&tilde;"
-  ["Α"]=>
-  string(7) "&Alpha;"
-  ["Β"]=>
-  string(6) "&Beta;"
-  ["Γ"]=>
-  string(7) "&Gamma;"
-  ["Δ"]=>
-  string(7) "&Delta;"
-  ["Ε"]=>
-  string(9) "&Epsilon;"
-  ["Ζ"]=>
-  string(6) "&Zeta;"
-  ["Η"]=>
-  string(5) "&Eta;"
-  ["Θ"]=>
-  string(7) "&Theta;"
-  ["Ι"]=>
-  string(6) "&Iota;"
-  ["Κ"]=>
-  string(7) "&Kappa;"
-  ["Λ"]=>
-  string(8) "&Lambda;"
-  ["Μ"]=>
-  string(4) "&Mu;"
-  ["Ν"]=>
-  string(4) "&Nu;"
-  ["Ξ"]=>
-  string(4) "&Xi;"
-  ["Ο"]=>
-  string(9) "&Omicron;"
-  ["Π"]=>
-  string(4) "&Pi;"
-  ["Ρ"]=>
-  string(5) "&Rho;"
-  ["Σ"]=>
-  string(7) "&Sigma;"
-  ["Τ"]=>
-  string(5) "&Tau;"
-  ["Υ"]=>
-  string(9) "&Upsilon;"
-  ["Φ"]=>
-  string(5) "&Phi;"
-  ["Χ"]=>
-  string(5) "&Chi;"
-  ["Ψ"]=>
-  string(5) "&Psi;"
-  ["Ω"]=>
-  string(7) "&Omega;"
-  ["α"]=>
-  string(7) "&alpha;"
-  ["β"]=>
-  string(6) "&beta;"
+  ["⁄"]=>
+  string(7) "&frasl;"
   ["γ"]=>
   string(7) "&gamma;"
-  ["δ"]=>
-  string(7) "&delta;"
-  ["ε"]=>
-  string(9) "&epsilon;"
-  ["ζ"]=>
-  string(6) "&zeta;"
-  ["η"]=>
-  string(5) "&eta;"
-  ["θ"]=>
-  string(7) "&theta;"
+  ["≥"]=>
+  string(4) "&ge;"
+  [">"]=>
+  string(4) "&gt;"
+  ["⇔"]=>
+  string(6) "&hArr;"
+  ["↔"]=>
+  string(6) "&harr;"
+  ["♥"]=>
+  string(8) "&hearts;"
+  ["…"]=>
+  string(8) "&hellip;"
+  ["í"]=>
+  string(8) "&iacute;"
+  ["î"]=>
+  string(7) "&icirc;"
+  ["¡"]=>
+  string(7) "&iexcl;"
+  ["ì"]=>
+  string(8) "&igrave;"
+  ["ℑ"]=>
+  string(7) "&image;"
+  ["∞"]=>
+  string(7) "&infin;"
+  ["∫"]=>
+  string(5) "&int;"
   ["ι"]=>
   string(6) "&iota;"
+  ["¿"]=>
+  string(8) "&iquest;"
+  ["∈"]=>
+  string(6) "&isin;"
+  ["ï"]=>
+  string(6) "&iuml;"
   ["κ"]=>
   string(7) "&kappa;"
+  ["⇐"]=>
+  string(6) "&lArr;"
   ["λ"]=>
   string(8) "&lambda;"
-  ["μ"]=>
-  string(4) "&mu;"
-  ["ν"]=>
-  string(4) "&nu;"
-  ["ξ"]=>
-  string(4) "&xi;"
-  ["ο"]=>
-  string(9) "&omicron;"
-  ["π"]=>
-  string(4) "&pi;"
-  ["ρ"]=>
-  string(5) "&rho;"
-  ["ς"]=>
-  string(8) "&sigmaf;"
-  ["σ"]=>
-  string(7) "&sigma;"
-  ["τ"]=>
-  string(5) "&tau;"
-  ["υ"]=>
-  string(9) "&upsilon;"
-  ["φ"]=>
-  string(5) "&phi;"
-  ["χ"]=>
-  string(5) "&chi;"
-  ["ψ"]=>
-  string(5) "&psi;"
-  ["ω"]=>
-  string(7) "&omega;"
-  ["ϑ"]=>
-  string(10) "&thetasym;"
-  ["ϒ"]=>
-  string(7) "&upsih;"
-  ["ϖ"]=>
-  string(5) "&piv;"
-  [" "]=>
-  string(6) "&ensp;"
-  [" "]=>
-  string(6) "&emsp;"
-  [" "]=>
-  string(8) "&thinsp;"
-  ["‌"]=>
-  string(6) "&zwnj;"
-  ["‍"]=>
-  string(5) "&zwj;"
-  ["‎"]=>
-  string(5) "&lrm;"
-  ["‏"]=>
-  string(5) "&rlm;"
-  ["–"]=>
-  string(7) "&ndash;"
-  ["—"]=>
-  string(7) "&mdash;"
-  ["‘"]=>
-  string(7) "&lsquo;"
-  ["’"]=>
-  string(7) "&rsquo;"
-  ["‚"]=>
-  string(7) "&sbquo;"
+  ["〈"]=>
+  string(6) "&lang;"
+  ["«"]=>
+  string(7) "&laquo;"
+  ["←"]=>
+  string(6) "&larr;"
+  ["⌈"]=>
+  string(7) "&lceil;"
   ["“"]=>
   string(7) "&ldquo;"
-  ["”"]=>
-  string(7) "&rdquo;"
-  ["„"]=>
-  string(7) "&bdquo;"
-  ["†"]=>
-  string(8) "&dagger;"
-  ["‡"]=>
-  string(8) "&Dagger;"
-  ["•"]=>
-  string(6) "&bull;"
-  ["…"]=>
-  string(8) "&hellip;"
-  ["‰"]=>
-  string(8) "&permil;"
-  ["′"]=>
-  string(7) "&prime;"
-  ["″"]=>
-  string(7) "&Prime;"
+  ["≤"]=>
+  string(4) "&le;"
+  ["⌊"]=>
+  string(8) "&lfloor;"
+  ["∗"]=>
+  string(8) "&lowast;"
+  ["◊"]=>
+  string(5) "&loz;"
+  ["‎"]=>
+  string(5) "&lrm;"
   ["‹"]=>
   string(8) "&lsaquo;"
-  ["›"]=>
-  string(8) "&rsaquo;"
-  ["‾"]=>
-  string(7) "&oline;"
-  ["⁄"]=>
-  string(7) "&frasl;"
-  ["€"]=>
-  string(6) "&euro;"
-  ["ℑ"]=>
-  string(7) "&image;"
-  ["℘"]=>
-  string(8) "&weierp;"
-  ["ℜ"]=>
-  string(6) "&real;"
-  ["™"]=>
-  string(7) "&trade;"
-  ["ℵ"]=>
-  string(9) "&alefsym;"
-  ["←"]=>
-  string(6) "&larr;"
-  ["↑"]=>
-  string(6) "&uarr;"
-  ["→"]=>
-  string(6) "&rarr;"
-  ["↓"]=>
-  string(6) "&darr;"
-  ["↔"]=>
-  string(6) "&harr;"
-  ["↵"]=>
-  string(7) "&crarr;"
-  ["⇐"]=>
-  string(6) "&lArr;"
-  ["⇑"]=>
-  string(6) "&uArr;"
-  ["⇒"]=>
-  string(6) "&rArr;"
-  ["⇓"]=>
-  string(6) "&dArr;"
-  ["⇔"]=>
-  string(6) "&hArr;"
-  ["∀"]=>
-  string(8) "&forall;"
-  ["∂"]=>
-  string(6) "&part;"
-  ["∃"]=>
-  string(7) "&exist;"
-  ["∅"]=>
-  string(7) "&empty;"
-  ["∇"]=>
-  string(7) "&nabla;"
-  ["∈"]=>
-  string(6) "&isin;"
-  ["∉"]=>
-  string(7) "&notin;"
-  ["∋"]=>
-  string(4) "&ni;"
-  ["∏"]=>
-  string(6) "&prod;"
-  ["∑"]=>
-  string(5) "&sum;"
+  ["‘"]=>
+  string(7) "&lsquo;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["¯"]=>
+  string(6) "&macr;"
+  ["—"]=>
+  string(7) "&mdash;"
+  ["µ"]=>
+  string(7) "&micro;"
+  ["·"]=>
+  string(8) "&middot;"
   ["−"]=>
   string(7) "&minus;"
-  ["∗"]=>
-  string(8) "&lowast;"
-  ["√"]=>
-  string(7) "&radic;"
-  ["∝"]=>
-  string(6) "&prop;"
-  ["∞"]=>
-  string(7) "&infin;"
-  ["∠"]=>
-  string(5) "&ang;"
-  ["∧"]=>
-  string(5) "&and;"
-  ["∨"]=>
-  string(4) "&or;"
-  ["∩"]=>
-  string(5) "&cap;"
-  ["∪"]=>
-  string(5) "&cup;"
-  ["∫"]=>
-  string(5) "&int;"
-  ["∴"]=>
-  string(8) "&there4;"
-  ["∼"]=>
-  string(5) "&sim;"
-  ["≅"]=>
-  string(6) "&cong;"
-  ["≈"]=>
-  string(7) "&asymp;"
+  ["μ"]=>
+  string(4) "&mu;"
+  ["∇"]=>
+  string(7) "&nabla;"
+  [" "]=>
+  string(6) "&nbsp;"
+  ["–"]=>
+  string(7) "&ndash;"
   ["≠"]=>
   string(4) "&ne;"
-  ["≡"]=>
-  string(7) "&equiv;"
-  ["≤"]=>
-  string(4) "&le;"
-  ["≥"]=>
-  string(4) "&ge;"
-  ["⊂"]=>
-  string(5) "&sub;"
-  ["⊃"]=>
-  string(5) "&sup;"
+  ["∋"]=>
+  string(4) "&ni;"
+  ["¬"]=>
+  string(5) "&not;"
+  ["∉"]=>
+  string(7) "&notin;"
   ["⊄"]=>
   string(6) "&nsub;"
-  ["⊆"]=>
-  string(6) "&sube;"
-  ["⊇"]=>
-  string(6) "&supe;"
+  ["ñ"]=>
+  string(8) "&ntilde;"
+  ["ν"]=>
+  string(4) "&nu;"
+  ["ó"]=>
+  string(8) "&oacute;"
+  ["ô"]=>
+  string(7) "&ocirc;"
+  ["œ"]=>
+  string(7) "&oelig;"
+  ["ò"]=>
+  string(8) "&ograve;"
+  ["‾"]=>
+  string(7) "&oline;"
+  ["ω"]=>
+  string(7) "&omega;"
+  ["ο"]=>
+  string(9) "&omicron;"
   ["⊕"]=>
   string(7) "&oplus;"
+  ["∨"]=>
+  string(4) "&or;"
+  ["ª"]=>
+  string(6) "&ordf;"
+  ["º"]=>
+  string(6) "&ordm;"
+  ["ø"]=>
+  string(8) "&oslash;"
+  ["õ"]=>
+  string(8) "&otilde;"
   ["⊗"]=>
   string(8) "&otimes;"
+  ["ö"]=>
+  string(6) "&ouml;"
+  ["¶"]=>
+  string(6) "&para;"
+  ["∂"]=>
+  string(6) "&part;"
+  ["‰"]=>
+  string(8) "&permil;"
   ["⊥"]=>
   string(6) "&perp;"
-  ["⋅"]=>
-  string(6) "&sdot;"
-  ["⌈"]=>
-  string(7) "&lceil;"
+  ["φ"]=>
+  string(5) "&phi;"
+  ["π"]=>
+  string(4) "&pi;"
+  ["ϖ"]=>
+  string(5) "&piv;"
+  ["±"]=>
+  string(8) "&plusmn;"
+  ["£"]=>
+  string(7) "&pound;"
+  ["′"]=>
+  string(7) "&prime;"
+  ["∏"]=>
+  string(6) "&prod;"
+  ["∝"]=>
+  string(6) "&prop;"
+  ["ψ"]=>
+  string(5) "&psi;"
+  ["""]=>
+  string(6) "&quot;"
+  ["⇒"]=>
+  string(6) "&rArr;"
+  ["√"]=>
+  string(7) "&radic;"
+  ["〉"]=>
+  string(6) "&rang;"
+  ["»"]=>
+  string(7) "&raquo;"
+  ["→"]=>
+  string(6) "&rarr;"
   ["⌉"]=>
   string(7) "&rceil;"
-  ["⌊"]=>
-  string(8) "&lfloor;"
+  ["”"]=>
+  string(7) "&rdquo;"
+  ["ℜ"]=>
+  string(6) "&real;"
+  ["®"]=>
+  string(5) "&reg;"
   ["⌋"]=>
   string(8) "&rfloor;"
-  ["〈"]=>
-  string(6) "&lang;"
-  ["〉"]=>
-  string(6) "&rang;"
-  ["◊"]=>
-  string(5) "&loz;"
-  ["♠"]=>
-  string(8) "&spades;"
-  ["♣"]=>
-  string(7) "&clubs;"
-  ["♥"]=>
-  string(8) "&hearts;"
-  ["♦"]=>
-  string(7) "&diams;"
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["'"]=>
-  string(6) "&#039;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
-}
--- with table = HTML_ENTITIES & quote_style = ENT_NOQUOTES --
-array(251) {
-  [" "]=>
-  string(6) "&nbsp;"
-  ["¡"]=>
-  string(7) "&iexcl;"
-  ["¢"]=>
-  string(6) "&cent;"
-  ["£"]=>
-  string(7) "&pound;"
-  ["¤"]=>
-  string(8) "&curren;"
-  ["¥"]=>
-  string(5) "&yen;"
-  ["¦"]=>
-  string(8) "&brvbar;"
+  ["ρ"]=>
+  string(5) "&rho;"
+  ["‏"]=>
+  string(5) "&rlm;"
+  ["›"]=>
+  string(8) "&rsaquo;"
+  ["’"]=>
+  string(7) "&rsquo;"
+  ["‚"]=>
+  string(7) "&sbquo;"
+  ["š"]=>
+  string(8) "&scaron;"
+  ["⋅"]=>
+  string(6) "&sdot;"
   ["§"]=>
   string(6) "&sect;"
-  ["¨"]=>
-  string(5) "&uml;"
-  ["©"]=>
-  string(6) "&copy;"
-  ["ª"]=>
-  string(6) "&ordf;"
-  ["«"]=>
-  string(7) "&laquo;"
-  ["¬"]=>
-  string(5) "&not;"
   ["­"]=>
   string(5) "&shy;"
-  ["®"]=>
-  string(5) "&reg;"
-  ["¯"]=>
-  string(6) "&macr;"
-  ["°"]=>
-  string(5) "&deg;"
-  ["±"]=>
-  string(8) "&plusmn;"
+  ["σ"]=>
+  string(7) "&sigma;"
+  ["ς"]=>
+  string(8) "&sigmaf;"
+  ["∼"]=>
+  string(5) "&sim;"
+  ["♠"]=>
+  string(8) "&spades;"
+  ["⊂"]=>
+  string(5) "&sub;"
+  ["⊆"]=>
+  string(6) "&sube;"
+  ["∑"]=>
+  string(5) "&sum;"
+  ["¹"]=>
+  string(6) "&sup1;"
   ["²"]=>
   string(6) "&sup2;"
   ["³"]=>
   string(6) "&sup3;"
-  ["´"]=>
-  string(7) "&acute;"
-  ["µ"]=>
-  string(7) "&micro;"
-  ["¶"]=>
-  string(6) "&para;"
-  ["·"]=>
-  string(8) "&middot;"
-  ["¸"]=>
-  string(7) "&cedil;"
-  ["¹"]=>
-  string(6) "&sup1;"
-  ["º"]=>
-  string(6) "&ordm;"
-  ["»"]=>
-  string(7) "&raquo;"
-  ["¼"]=>
-  string(8) "&frac14;"
-  ["½"]=>
-  string(8) "&frac12;"
-  ["¾"]=>
-  string(8) "&frac34;"
-  ["¿"]=>
-  string(8) "&iquest;"
-  ["À"]=>
-  string(8) "&Agrave;"
+  ["⊃"]=>
+  string(5) "&sup;"
+  ["⊇"]=>
+  string(6) "&supe;"
+  ["ß"]=>
+  string(7) "&szlig;"
+  ["τ"]=>
+  string(5) "&tau;"
+  ["∴"]=>
+  string(8) "&there4;"
+  ["θ"]=>
+  string(7) "&theta;"
+  ["ϑ"]=>
+  string(10) "&thetasym;"
+  [" "]=>
+  string(8) "&thinsp;"
+  ["þ"]=>
+  string(7) "&thorn;"
+  ["˜"]=>
+  string(7) "&tilde;"
+  ["×"]=>
+  string(7) "&times;"
+  ["™"]=>
+  string(7) "&trade;"
+  ["⇑"]=>
+  string(6) "&uArr;"
+  ["ú"]=>
+  string(8) "&uacute;"
+  ["↑"]=>
+  string(6) "&uarr;"
+  ["û"]=>
+  string(7) "&ucirc;"
+  ["ù"]=>
+  string(8) "&ugrave;"
+  ["¨"]=>
+  string(5) "&uml;"
+  ["ϒ"]=>
+  string(7) "&upsih;"
+  ["υ"]=>
+  string(9) "&upsilon;"
+  ["ü"]=>
+  string(6) "&uuml;"
+  ["℘"]=>
+  string(8) "&weierp;"
+  ["ξ"]=>
+  string(4) "&xi;"
+  ["ý"]=>
+  string(8) "&yacute;"
+  ["¥"]=>
+  string(5) "&yen;"
+  ["ÿ"]=>
+  string(6) "&yuml;"
+  ["ζ"]=>
+  string(6) "&zeta;"
+  ["‍"]=>
+  string(5) "&zwj;"
+  ["‌"]=>
+  string(6) "&zwnj;"
+}
+-- with table = HTML_ENTITIES & quote_style = ENT_NOQUOTES --
+array(251) {
+  ["Æ"]=>
+  string(7) "&AElig;"
   ["Á"]=>
   string(8) "&Aacute;"
   ["Â"]=>
   string(7) "&Acirc;"
+  ["À"]=>
+  string(8) "&Agrave;"
+  ["Α"]=>
+  string(7) "&Alpha;"
+  ["Å"]=>
+  string(7) "&Aring;"
   ["Ã"]=>
   string(8) "&Atilde;"
   ["Ä"]=>
   string(6) "&Auml;"
-  ["Å"]=>
-  string(7) "&Aring;"
-  ["Æ"]=>
-  string(7) "&AElig;"
+  ["Β"]=>
+  string(6) "&Beta;"
   ["Ç"]=>
   string(8) "&Ccedil;"
-  ["È"]=>
-  string(8) "&Egrave;"
+  ["Χ"]=>
+  string(5) "&Chi;"
+  ["‡"]=>
+  string(8) "&Dagger;"
+  ["Δ"]=>
+  string(7) "&Delta;"
+  ["Ð"]=>
+  string(5) "&ETH;"
   ["É"]=>
   string(8) "&Eacute;"
   ["Ê"]=>
   string(7) "&Ecirc;"
+  ["È"]=>
+  string(8) "&Egrave;"
+  ["Ε"]=>
+  string(9) "&Epsilon;"
+  ["Η"]=>
+  string(5) "&Eta;"
   ["Ë"]=>
   string(6) "&Euml;"
-  ["Ì"]=>
-  string(8) "&Igrave;"
+  ["Γ"]=>
+  string(7) "&Gamma;"
   ["Í"]=>
   string(8) "&Iacute;"
   ["Î"]=>
   string(7) "&Icirc;"
+  ["Ì"]=>
+  string(8) "&Igrave;"
+  ["Ι"]=>
+  string(6) "&Iota;"
   ["Ï"]=>
   string(6) "&Iuml;"
-  ["Ð"]=>
-  string(5) "&ETH;"
+  ["Κ"]=>
+  string(7) "&Kappa;"
+  ["Λ"]=>
+  string(8) "&Lambda;"
+  ["Μ"]=>
+  string(4) "&Mu;"
   ["Ñ"]=>
   string(8) "&Ntilde;"
-  ["Ò"]=>
-  string(8) "&Ograve;"
+  ["Ν"]=>
+  string(4) "&Nu;"
+  ["Œ"]=>
+  string(7) "&OElig;"
   ["Ó"]=>
   string(8) "&Oacute;"
   ["Ô"]=>
   string(7) "&Ocirc;"
+  ["Ò"]=>
+  string(8) "&Ograve;"
+  ["Ω"]=>
+  string(7) "&Omega;"
+  ["Ο"]=>
+  string(9) "&Omicron;"
+  ["Ø"]=>
+  string(8) "&Oslash;"
   ["Õ"]=>
   string(8) "&Otilde;"
   ["Ö"]=>
   string(6) "&Ouml;"
-  ["×"]=>
-  string(7) "&times;"
-  ["Ø"]=>
-  string(8) "&Oslash;"
-  ["Ù"]=>
-  string(8) "&Ugrave;"
+  ["Φ"]=>
+  string(5) "&Phi;"
+  ["Π"]=>
+  string(4) "&Pi;"
+  ["″"]=>
+  string(7) "&Prime;"
+  ["Ψ"]=>
+  string(5) "&Psi;"
+  ["Ρ"]=>
+  string(5) "&Rho;"
+  ["Š"]=>
+  string(8) "&Scaron;"
+  ["Σ"]=>
+  string(7) "&Sigma;"
+  ["Þ"]=>
+  string(7) "&THORN;"
+  ["Τ"]=>
+  string(5) "&Tau;"
+  ["Θ"]=>
+  string(7) "&Theta;"
   ["Ú"]=>
   string(8) "&Uacute;"
   ["Û"]=>
   string(7) "&Ucirc;"
+  ["Ù"]=>
+  string(8) "&Ugrave;"
+  ["Υ"]=>
+  string(9) "&Upsilon;"
   ["Ü"]=>
   string(6) "&Uuml;"
+  ["Ξ"]=>
+  string(4) "&Xi;"
   ["Ý"]=>
   string(8) "&Yacute;"
-  ["Þ"]=>
-  string(7) "&THORN;"
-  ["ß"]=>
-  string(7) "&szlig;"
-  ["à"]=>
-  string(8) "&agrave;"
+  ["Ÿ"]=>
+  string(6) "&Yuml;"
+  ["Ζ"]=>
+  string(6) "&Zeta;"
   ["á"]=>
   string(8) "&aacute;"
   ["â"]=>
   string(7) "&acirc;"
-  ["ã"]=>
-  string(8) "&atilde;"
-  ["ä"]=>
-  string(6) "&auml;"
-  ["å"]=>
-  string(7) "&aring;"
+  ["´"]=>
+  string(7) "&acute;"
   ["æ"]=>
   string(7) "&aelig;"
-  ["ç"]=>
-  string(8) "&ccedil;"
-  ["è"]=>
-  string(8) "&egrave;"
-  ["é"]=>
-  string(8) "&eacute;"
-  ["ê"]=>
-  string(7) "&ecirc;"
-  ["ë"]=>
-  string(6) "&euml;"
-  ["ì"]=>
-  string(8) "&igrave;"
-  ["í"]=>
-  string(8) "&iacute;"
-  ["î"]=>
-  string(7) "&icirc;"
-  ["ï"]=>
-  string(6) "&iuml;"
-  ["ð"]=>
-  string(5) "&eth;"
-  ["ñ"]=>
-  string(8) "&ntilde;"
-  ["ò"]=>
-  string(8) "&ograve;"
-  ["ó"]=>
-  string(8) "&oacute;"
-  ["ô"]=>
-  string(7) "&ocirc;"
-  ["õ"]=>
-  string(8) "&otilde;"
-  ["ö"]=>
-  string(6) "&ouml;"
-  ["÷"]=>
-  string(8) "&divide;"
-  ["ø"]=>
-  string(8) "&oslash;"
-  ["ù"]=>
-  string(8) "&ugrave;"
-  ["ú"]=>
-  string(8) "&uacute;"
-  ["û"]=>
-  string(7) "&ucirc;"
-  ["ü"]=>
-  string(6) "&uuml;"
-  ["ý"]=>
-  string(8) "&yacute;"
-  ["þ"]=>
-  string(7) "&thorn;"
-  ["ÿ"]=>
-  string(6) "&yuml;"
-  ["Œ"]=>
-  string(7) "&OElig;"
-  ["œ"]=>
-  string(7) "&oelig;"
-  ["Š"]=>
-  string(8) "&Scaron;"
-  ["š"]=>
-  string(8) "&scaron;"
-  ["Ÿ"]=>
-  string(6) "&Yuml;"
-  ["ƒ"]=>
-  string(6) "&fnof;"
-  ["ˆ"]=>
-  string(6) "&circ;"
-  ["˜"]=>
-  string(7) "&tilde;"
-  ["Α"]=>
-  string(7) "&Alpha;"
-  ["Β"]=>
-  string(6) "&Beta;"
-  ["Γ"]=>
-  string(7) "&Gamma;"
-  ["Δ"]=>
-  string(7) "&Delta;"
-  ["Ε"]=>
-  string(9) "&Epsilon;"
-  ["Ζ"]=>
-  string(6) "&Zeta;"
-  ["Η"]=>
-  string(5) "&Eta;"
-  ["Θ"]=>
-  string(7) "&Theta;"
-  ["Ι"]=>
-  string(6) "&Iota;"
-  ["Κ"]=>
-  string(7) "&Kappa;"
-  ["Λ"]=>
-  string(8) "&Lambda;"
-  ["Μ"]=>
-  string(4) "&Mu;"
-  ["Ν"]=>
-  string(4) "&Nu;"
-  ["Ξ"]=>
-  string(4) "&Xi;"
-  ["Ο"]=>
-  string(9) "&Omicron;"
-  ["Π"]=>
-  string(4) "&Pi;"
-  ["Ρ"]=>
-  string(5) "&Rho;"
-  ["Σ"]=>
-  string(7) "&Sigma;"
-  ["Τ"]=>
-  string(5) "&Tau;"
-  ["Υ"]=>
-  string(9) "&Upsilon;"
-  ["Φ"]=>
-  string(5) "&Phi;"
-  ["Χ"]=>
-  string(5) "&Chi;"
-  ["Ψ"]=>
-  string(5) "&Psi;"
-  ["Ω"]=>
-  string(7) "&Omega;"
+  ["à"]=>
+  string(8) "&agrave;"
+  ["ℵ"]=>
+  string(9) "&alefsym;"
   ["α"]=>
   string(7) "&alpha;"
+  ["&"]=>
+  string(5) "&amp;"
+  ["∧"]=>
+  string(5) "&and;"
+  ["∠"]=>
+  string(5) "&ang;"
+  ["å"]=>
+  string(7) "&aring;"
+  ["≈"]=>
+  string(7) "&asymp;"
+  ["ã"]=>
+  string(8) "&atilde;"
+  ["ä"]=>
+  string(6) "&auml;"
+  ["„"]=>
+  string(7) "&bdquo;"
   ["β"]=>
   string(6) "&beta;"
-  ["γ"]=>
-  string(7) "&gamma;"
+  ["¦"]=>
+  string(8) "&brvbar;"
+  ["•"]=>
+  string(6) "&bull;"
+  ["∩"]=>
+  string(5) "&cap;"
+  ["ç"]=>
+  string(8) "&ccedil;"
+  ["¸"]=>
+  string(7) "&cedil;"
+  ["¢"]=>
+  string(6) "&cent;"
+  ["χ"]=>
+  string(5) "&chi;"
+  ["ˆ"]=>
+  string(6) "&circ;"
+  ["♣"]=>
+  string(7) "&clubs;"
+  ["≅"]=>
+  string(6) "&cong;"
+  ["©"]=>
+  string(6) "&copy;"
+  ["↵"]=>
+  string(7) "&crarr;"
+  ["∪"]=>
+  string(5) "&cup;"
+  ["¤"]=>
+  string(8) "&curren;"
+  ["⇓"]=>
+  string(6) "&dArr;"
+  ["†"]=>
+  string(8) "&dagger;"
+  ["↓"]=>
+  string(6) "&darr;"
+  ["°"]=>
+  string(5) "&deg;"
   ["δ"]=>
   string(7) "&delta;"
+  ["♦"]=>
+  string(7) "&diams;"
+  ["÷"]=>
+  string(8) "&divide;"
+  ["é"]=>
+  string(8) "&eacute;"
+  ["ê"]=>
+  string(7) "&ecirc;"
+  ["è"]=>
+  string(8) "&egrave;"
+  ["∅"]=>
+  string(7) "&empty;"
+  [" "]=>
+  string(6) "&emsp;"
+  [" "]=>
+  string(6) "&ensp;"
   ["ε"]=>
   string(9) "&epsilon;"
-  ["ζ"]=>
-  string(6) "&zeta;"
+  [""]=>
+  string(7) "&equiv;"
   ["η"]=>
   string(5) "&eta;"
-  ["θ"]=>
-  string(7) "&theta;"
+  ["ð"]=>
+  string(5) "&eth;"
+  ["ë"]=>
+  string(6) "&euml;"
+  ["€"]=>
+  string(6) "&euro;"
+  ["∃"]=>
+  string(7) "&exist;"
+  ["ƒ"]=>
+  string(6) "&fnof;"
+  ["∀"]=>
+  string(8) "&forall;"
+  ["½"]=>
+  string(8) "&frac12;"
+  ["¼"]=>
+  string(8) "&frac14;"
+  ["¾"]=>
+  string(8) "&frac34;"
+  ["⁄"]=>
+  string(7) "&frasl;"
+  ["γ"]=>
+  string(7) "&gamma;"
+  ["≥"]=>
+  string(4) "&ge;"
+  [">"]=>
+  string(4) "&gt;"
+  ["⇔"]=>
+  string(6) "&hArr;"
+  ["↔"]=>
+  string(6) "&harr;"
+  ["♥"]=>
+  string(8) "&hearts;"
+  ["…"]=>
+  string(8) "&hellip;"
+  ["í"]=>
+  string(8) "&iacute;"
+  ["î"]=>
+  string(7) "&icirc;"
+  ["¡"]=>
+  string(7) "&iexcl;"
+  ["ì"]=>
+  string(8) "&igrave;"
+  ["ℑ"]=>
+  string(7) "&image;"
+  ["∞"]=>
+  string(7) "&infin;"
+  ["∫"]=>
+  string(5) "&int;"
   ["ι"]=>
   string(6) "&iota;"
+  ["¿"]=>
+  string(8) "&iquest;"
+  ["∈"]=>
+  string(6) "&isin;"
+  ["ï"]=>
+  string(6) "&iuml;"
   ["κ"]=>
   string(7) "&kappa;"
+  ["⇐"]=>
+  string(6) "&lArr;"
   ["λ"]=>
   string(8) "&lambda;"
-  ["μ"]=>
-  string(4) "&mu;"
-  ["ν"]=>
-  string(4) "&nu;"
-  ["ξ"]=>
-  string(4) "&xi;"
-  ["ο"]=>
-  string(9) "&omicron;"
-  ["π"]=>
-  string(4) "&pi;"
-  ["ρ"]=>
-  string(5) "&rho;"
-  ["ς"]=>
-  string(8) "&sigmaf;"
-  ["σ"]=>
-  string(7) "&sigma;"
-  ["τ"]=>
-  string(5) "&tau;"
-  ["υ"]=>
-  string(9) "&upsilon;"
-  ["φ"]=>
-  string(5) "&phi;"
-  ["χ"]=>
-  string(5) "&chi;"
-  ["ψ"]=>
-  string(5) "&psi;"
-  ["ω"]=>
-  string(7) "&omega;"
-  ["ϑ"]=>
-  string(10) "&thetasym;"
-  ["ϒ"]=>
-  string(7) "&upsih;"
-  ["ϖ"]=>
-  string(5) "&piv;"
-  [" "]=>
-  string(6) "&ensp;"
-  [" "]=>
-  string(6) "&emsp;"
-  [" "]=>
-  string(8) "&thinsp;"
-  ["‌"]=>
-  string(6) "&zwnj;"
-  ["‍"]=>
-  string(5) "&zwj;"
-  ["‎"]=>
-  string(5) "&lrm;"
-  ["‏"]=>
-  string(5) "&rlm;"
-  ["–"]=>
-  string(7) "&ndash;"
-  ["—"]=>
-  string(7) "&mdash;"
-  ["‘"]=>
-  string(7) "&lsquo;"
-  ["’"]=>
-  string(7) "&rsquo;"
-  ["‚"]=>
-  string(7) "&sbquo;"
+  ["〈"]=>
+  string(6) "&lang;"
+  ["«"]=>
+  string(7) "&laquo;"
+  ["←"]=>
+  string(6) "&larr;"
+  ["⌈"]=>
+  string(7) "&lceil;"
   ["“"]=>
   string(7) "&ldquo;"
-  ["”"]=>
-  string(7) "&rdquo;"
-  ["„"]=>
-  string(7) "&bdquo;"
-  ["†"]=>
-  string(8) "&dagger;"
-  ["‡"]=>
-  string(8) "&Dagger;"
-  ["•"]=>
-  string(6) "&bull;"
-  ["…"]=>
-  string(8) "&hellip;"
-  ["‰"]=>
-  string(8) "&permil;"
-  ["′"]=>
-  string(7) "&prime;"
-  ["″"]=>
-  string(7) "&Prime;"
+  ["≤"]=>
+  string(4) "&le;"
+  ["⌊"]=>
+  string(8) "&lfloor;"
+  ["∗"]=>
+  string(8) "&lowast;"
+  ["◊"]=>
+  string(5) "&loz;"
+  ["‎"]=>
+  string(5) "&lrm;"
   ["‹"]=>
   string(8) "&lsaquo;"
-  ["›"]=>
-  string(8) "&rsaquo;"
-  ["‾"]=>
-  string(7) "&oline;"
-  ["⁄"]=>
-  string(7) "&frasl;"
-  ["€"]=>
-  string(6) "&euro;"
-  ["ℑ"]=>
-  string(7) "&image;"
-  ["℘"]=>
-  string(8) "&weierp;"
-  ["ℜ"]=>
-  string(6) "&real;"
-  ["™"]=>
-  string(7) "&trade;"
-  ["ℵ"]=>
-  string(9) "&alefsym;"
-  ["←"]=>
-  string(6) "&larr;"
-  ["↑"]=>
-  string(6) "&uarr;"
-  ["→"]=>
-  string(6) "&rarr;"
-  ["↓"]=>
-  string(6) "&darr;"
-  ["↔"]=>
-  string(6) "&harr;"
-  ["↵"]=>
-  string(7) "&crarr;"
-  ["⇐"]=>
-  string(6) "&lArr;"
-  ["⇑"]=>
-  string(6) "&uArr;"
-  ["⇒"]=>
-  string(6) "&rArr;"
-  ["⇓"]=>
-  string(6) "&dArr;"
-  ["⇔"]=>
-  string(6) "&hArr;"
-  ["∀"]=>
-  string(8) "&forall;"
-  ["∂"]=>
-  string(6) "&part;"
-  ["∃"]=>
-  string(7) "&exist;"
-  ["∅"]=>
-  string(7) "&empty;"
-  ["∇"]=>
-  string(7) "&nabla;"
-  ["∈"]=>
-  string(6) "&isin;"
-  ["∉"]=>
-  string(7) "&notin;"
-  ["∋"]=>
-  string(4) "&ni;"
-  ["∏"]=>
-  string(6) "&prod;"
-  ["∑"]=>
-  string(5) "&sum;"
+  ["‘"]=>
+  string(7) "&lsquo;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["¯"]=>
+  string(6) "&macr;"
+  ["—"]=>
+  string(7) "&mdash;"
+  ["µ"]=>
+  string(7) "&micro;"
+  ["·"]=>
+  string(8) "&middot;"
   ["−"]=>
   string(7) "&minus;"
-  ["∗"]=>
-  string(8) "&lowast;"
-  ["√"]=>
-  string(7) "&radic;"
-  ["∝"]=>
-  string(6) "&prop;"
-  ["∞"]=>
-  string(7) "&infin;"
-  ["∠"]=>
-  string(5) "&ang;"
-  ["∧"]=>
-  string(5) "&and;"
-  ["∨"]=>
-  string(4) "&or;"
-  ["∩"]=>
-  string(5) "&cap;"
-  ["∪"]=>
-  string(5) "&cup;"
-  ["∫"]=>
-  string(5) "&int;"
-  ["∴"]=>
-  string(8) "&there4;"
-  ["∼"]=>
-  string(5) "&sim;"
-  ["≅"]=>
-  string(6) "&cong;"
-  ["≈"]=>
-  string(7) "&asymp;"
+  ["μ"]=>
+  string(4) "&mu;"
+  ["∇"]=>
+  string(7) "&nabla;"
+  [" "]=>
+  string(6) "&nbsp;"
+  ["–"]=>
+  string(7) "&ndash;"
   ["≠"]=>
   string(4) "&ne;"
-  ["≡"]=>
-  string(7) "&equiv;"
-  ["≤"]=>
-  string(4) "&le;"
-  ["≥"]=>
-  string(4) "&ge;"
-  ["⊂"]=>
-  string(5) "&sub;"
-  ["⊃"]=>
-  string(5) "&sup;"
+  ["∋"]=>
+  string(4) "&ni;"
+  ["¬"]=>
+  string(5) "&not;"
+  ["∉"]=>
+  string(7) "&notin;"
   ["⊄"]=>
   string(6) "&nsub;"
-  ["⊆"]=>
-  string(6) "&sube;"
-  ["⊇"]=>
-  string(6) "&supe;"
+  ["ñ"]=>
+  string(8) "&ntilde;"
+  ["ν"]=>
+  string(4) "&nu;"
+  ["ó"]=>
+  string(8) "&oacute;"
+  ["ô"]=>
+  string(7) "&ocirc;"
+  ["œ"]=>
+  string(7) "&oelig;"
+  ["ò"]=>
+  string(8) "&ograve;"
+  ["‾"]=>
+  string(7) "&oline;"
+  ["ω"]=>
+  string(7) "&omega;"
+  ["ο"]=>
+  string(9) "&omicron;"
   ["⊕"]=>
   string(7) "&oplus;"
+  ["∨"]=>
+  string(4) "&or;"
+  ["ª"]=>
+  string(6) "&ordf;"
+  ["º"]=>
+  string(6) "&ordm;"
+  ["ø"]=>
+  string(8) "&oslash;"
+  ["õ"]=>
+  string(8) "&otilde;"
   ["⊗"]=>
   string(8) "&otimes;"
+  ["ö"]=>
+  string(6) "&ouml;"
+  ["¶"]=>
+  string(6) "&para;"
+  ["∂"]=>
+  string(6) "&part;"
+  ["‰"]=>
+  string(8) "&permil;"
   ["⊥"]=>
   string(6) "&perp;"
-  ["⋅"]=>
-  string(6) "&sdot;"
-  ["⌈"]=>
-  string(7) "&lceil;"
+  ["φ"]=>
+  string(5) "&phi;"
+  ["π"]=>
+  string(4) "&pi;"
+  ["ϖ"]=>
+  string(5) "&piv;"
+  ["±"]=>
+  string(8) "&plusmn;"
+  ["£"]=>
+  string(7) "&pound;"
+  ["′"]=>
+  string(7) "&prime;"
+  ["∏"]=>
+  string(6) "&prod;"
+  ["∝"]=>
+  string(6) "&prop;"
+  ["ψ"]=>
+  string(5) "&psi;"
+  ["⇒"]=>
+  string(6) "&rArr;"
+  ["√"]=>
+  string(7) "&radic;"
+  ["〉"]=>
+  string(6) "&rang;"
+  ["»"]=>
+  string(7) "&raquo;"
+  ["→"]=>
+  string(6) "&rarr;"
   ["⌉"]=>
   string(7) "&rceil;"
-  ["⌊"]=>
-  string(8) "&lfloor;"
+  ["”"]=>
+  string(7) "&rdquo;"
+  ["ℜ"]=>
+  string(6) "&real;"
+  ["®"]=>
+  string(5) "&reg;"
   ["⌋"]=>
   string(8) "&rfloor;"
-  ["〈"]=>
-  string(6) "&lang;"
-  ["〉"]=>
-  string(6) "&rang;"
-  ["◊"]=>
-  string(5) "&loz;"
+  ["ρ"]=>
+  string(5) "&rho;"
+  ["‏"]=>
+  string(5) "&rlm;"
+  ["›"]=>
+  string(8) "&rsaquo;"
+  ["’"]=>
+  string(7) "&rsquo;"
+  ["‚"]=>
+  string(7) "&sbquo;"
+  ["š"]=>
+  string(8) "&scaron;"
+  ["⋅"]=>
+  string(6) "&sdot;"
+  ["§"]=>
+  string(6) "&sect;"
+  ["­"]=>
+  string(5) "&shy;"
+  ["σ"]=>
+  string(7) "&sigma;"
+  ["ς"]=>
+  string(8) "&sigmaf;"
+  ["∼"]=>
+  string(5) "&sim;"
   ["♠"]=>
   string(8) "&spades;"
-  ["♣"]=>
-  string(7) "&clubs;"
-  ["♥"]=>
-  string(8) "&hearts;"
-  ["♦"]=>
-  string(7) "&diams;"
-  ["&"]=>
-  string(5) "&amp;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
+  ["⊂"]=>
+  string(5) "&sub;"
+  ["⊆"]=>
+  string(6) "&sube;"
+  ["∑"]=>
+  string(5) "&sum;"
+  ["¹"]=>
+  string(6) "&sup1;"
+  ["²"]=>
+  string(6) "&sup2;"
+  ["³"]=>
+  string(6) "&sup3;"
+  ["⊃"]=>
+  string(5) "&sup;"
+  ["⊇"]=>
+  string(6) "&supe;"
+  ["ß"]=>
+  string(7) "&szlig;"
+  ["τ"]=>
+  string(5) "&tau;"
+  ["∴"]=>
+  string(8) "&there4;"
+  ["θ"]=>
+  string(7) "&theta;"
+  ["ϑ"]=>
+  string(10) "&thetasym;"
+  [" "]=>
+  string(8) "&thinsp;"
+  ["þ"]=>
+  string(7) "&thorn;"
+  ["˜"]=>
+  string(7) "&tilde;"
+  ["×"]=>
+  string(7) "&times;"
+  ["™"]=>
+  string(7) "&trade;"
+  ["⇑"]=>
+  string(6) "&uArr;"
+  ["ú"]=>
+  string(8) "&uacute;"
+  ["↑"]=>
+  string(6) "&uarr;"
+  ["û"]=>
+  string(7) "&ucirc;"
+  ["ù"]=>
+  string(8) "&ugrave;"
+  ["¨"]=>
+  string(5) "&uml;"
+  ["ϒ"]=>
+  string(7) "&upsih;"
+  ["υ"]=>
+  string(9) "&upsilon;"
+  ["ü"]=>
+  string(6) "&uuml;"
+  ["℘"]=>
+  string(8) "&weierp;"
+  ["ξ"]=>
+  string(4) "&xi;"
+  ["ý"]=>
+  string(8) "&yacute;"
+  ["¥"]=>
+  string(5) "&yen;"
+  ["ÿ"]=>
+  string(6) "&yuml;"
+  ["ζ"]=>
+  string(6) "&zeta;"
+  ["‍"]=>
+  string(5) "&zwj;"
+  ["‌"]=>
+  string(6) "&zwnj;"
 }
 Done
index e7c66b5b092d4202f677f49bcbe6e13aecca13f7..4e1cdddd29325c6a71a48299040fe28e08764b65 100644 (file)
@@ -15,15 +15,21 @@ echo "*** Testing get_html_translation_table() : basic functionality ***\n";
 echo "-- with table = HTML_SPECIALCHARS & quote_style = ENT_COMPAT --\n";
 $table = HTML_SPECIALCHARS;
 $quote_style = ENT_COMPAT;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 echo "-- with table = HTML_SPECIALCHARS & quote_style = ENT_QUOTES --\n";
 $quote_style = ENT_QUOTES;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 echo "-- with table = HTML_SPECIALCHARS & quote_style = ENT_NOQUOTES --\n";
 $quote_style = ENT_NOQUOTES;
-var_dump( get_html_translation_table($table, $quote_style, "UTF-8") );
+$tt = get_html_translation_table($table, $quote_style, "UTF-8");
+asort( $tt );
+var_dump( $tt );
 
 echo "Done\n";
 ?>
@@ -33,33 +39,33 @@ echo "Done\n";
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- with table = HTML_SPECIALCHARS & quote_style = ENT_QUOTES --
 array(5) {
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
   ["'"]=>
   string(6) "&#039;"
-  ["<"]=>
-  string(4) "&lt;"
+  ["&"]=>
+  string(5) "&amp;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- with table = HTML_SPECIALCHARS & quote_style = ENT_NOQUOTES --
 array(3) {
   ["&"]=>
   string(5) "&amp;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
 }
 Done
index 938fff4f5c14b30dbfc56a72125651fab7792e1a..1a908efdb41baea1ead184a98663402fa8bf9b2c 100644 (file)
@@ -12,11 +12,15 @@ echo "*** Testing get_html_translation_table() : basic functionality/Windows-125
 
 echo "-- with table = HTML_ENTITIES --\n";
 $table = HTML_ENTITIES;
-var_dump( get_html_translation_table($table, ENT_COMPAT, "WINDOWS-1252") );
+$tt = get_html_translation_table($table, ENT_COMPAT, "WINDOWS-1252");
+asort( $tt );
+var_dump( $tt );
 
 echo "-- with table = HTML_SPECIALCHARS --\n";
 $table = HTML_SPECIALCHARS; 
-var_dump( get_html_translation_table($table, ENT_COMPAT, "WINDOWS-1252") );
+$tt = get_html_translation_table($table, ENT_COMPAT, "WINDOWS-1252");
+asort( $tt );
+var_dump( $tt );
 
 echo "Done\n";
 ?>
@@ -24,266 +28,266 @@ echo "Done\n";
 *** Testing get_html_translation_table() : basic functionality/Windows-1252 ***
 -- with table = HTML_ENTITIES --
 array(125) {
-  ["\80"]=>
-  string(6) "&euro;"
-  ["\82"]=>
-  string(7) "&sbquo;"
-  ["\83"]=>
-  string(6) "&fnof;"
-  ["\84"]=>
-  string(7) "&bdquo;"
-  ["\85"]=>
-  string(8) "&hellip;"
-  ["\86"]=>
-  string(8) "&dagger;"
-  ["\87"]=>
-  string(8) "&Dagger;"
-  ["\88"]=>
-  string(6) "&circ;"
-  ["\89"]=>
-  string(8) "&permil;"
-  ["\8a"]=>
-  string(8) "&Scaron;"
-  ["\8b"]=>
-  string(8) "&lsaquo;"
-  ["\8c"]=>
-  string(7) "&OElig;"
-  ["\91"]=>
-  string(7) "&lsquo;"
-  ["\92"]=>
-  string(7) "&rsquo;"
-  ["\93"]=>
-  string(7) "&ldquo;"
-  ["\94"]=>
-  string(7) "&rdquo;"
-  ["\95"]=>
-  string(6) "&bull;"
-  ["\96"]=>
-  string(7) "&ndash;"
-  ["\97"]=>
-  string(7) "&mdash;"
-  ["\98"]=>
-  string(7) "&tilde;"
-  ["\99"]=>
-  string(7) "&trade;"
-  ["\9a"]=>
-  string(8) "&scaron;"
-  ["\9b"]=>
-  string(8) "&rsaquo;"
-  ["\9c"]=>
-  string(7) "&oelig;"
-  ["\9f"]=>
-  string(6) "&Yuml;"
-  [" "]=>
-  string(6) "&nbsp;"
-  ["¡"]=>
-  string(7) "&iexcl;"
-  ["¢"]=>
-  string(6) "&cent;"
-  ["£"]=>
-  string(7) "&pound;"
-  ["¤"]=>
-  string(8) "&curren;"
-  ["¥"]=>
-  string(5) "&yen;"
-  ["¦"]=>
-  string(8) "&brvbar;"
-  ["§"]=>
-  string(6) "&sect;"
-  ["¨"]=>
-  string(5) "&uml;"
-  ["©"]=>
-  string(6) "&copy;"
-  ["ª"]=>
-  string(6) "&ordf;"
-  ["«"]=>
-  string(7) "&laquo;"
-  ["¬"]=>
-  string(5) "&not;"
-  ["­"]=>
-  string(5) "&shy;"
-  ["®"]=>
-  string(5) "&reg;"
-  ["¯"]=>
-  string(6) "&macr;"
-  ["°"]=>
-  string(5) "&deg;"
-  ["±"]=>
-  string(8) "&plusmn;"
-  ["²"]=>
-  string(6) "&sup2;"
-  ["³"]=>
-  string(6) "&sup3;"
-  ["´"]=>
-  string(7) "&acute;"
-  ["µ"]=>
-  string(7) "&micro;"
-  ["¶"]=>
-  string(6) "&para;"
-  ["·"]=>
-  string(8) "&middot;"
-  ["¸"]=>
-  string(7) "&cedil;"
-  ["¹"]=>
-  string(6) "&sup1;"
-  ["º"]=>
-  string(6) "&ordm;"
-  ["»"]=>
-  string(7) "&raquo;"
-  ["¼"]=>
-  string(8) "&frac14;"
-  ["½"]=>
-  string(8) "&frac12;"
-  ["¾"]=>
-  string(8) "&frac34;"
-  ["¿"]=>
-  string(8) "&iquest;"
-  ["À"]=>
-  string(8) "&Agrave;"
+  ["Æ"]=>
+  string(7) "&AElig;"
   ["Á"]=>
   string(8) "&Aacute;"
   ["Â"]=>
   string(7) "&Acirc;"
+  ["À"]=>
+  string(8) "&Agrave;"
+  ["Å"]=>
+  string(7) "&Aring;"
   ["Ã"]=>
   string(8) "&Atilde;"
   ["Ä"]=>
   string(6) "&Auml;"
-  ["Å"]=>
-  string(7) "&Aring;"
-  ["Æ"]=>
-  string(7) "&AElig;"
   ["Ç"]=>
   string(8) "&Ccedil;"
-  ["È"]=>
-  string(8) "&Egrave;"
+  ["\87"]=>
+  string(8) "&Dagger;"
+  ["Ð"]=>
+  string(5) "&ETH;"
   ["É"]=>
   string(8) "&Eacute;"
   ["Ê"]=>
   string(7) "&Ecirc;"
+  ["È"]=>
+  string(8) "&Egrave;"
   ["Ë"]=>
   string(6) "&Euml;"
-  ["Ì"]=>
-  string(8) "&Igrave;"
   ["Í"]=>
   string(8) "&Iacute;"
   ["Î"]=>
   string(7) "&Icirc;"
+  ["Ì"]=>
+  string(8) "&Igrave;"
   ["Ï"]=>
   string(6) "&Iuml;"
-  ["Ð"]=>
-  string(5) "&ETH;"
   ["Ñ"]=>
   string(8) "&Ntilde;"
-  ["Ò"]=>
-  string(8) "&Ograve;"
+  ["\8c"]=>
+  string(7) "&OElig;"
   ["Ó"]=>
   string(8) "&Oacute;"
   ["Ô"]=>
   string(7) "&Ocirc;"
+  ["Ò"]=>
+  string(8) "&Ograve;"
+  ["Ø"]=>
+  string(8) "&Oslash;"
   ["Õ"]=>
   string(8) "&Otilde;"
   ["Ö"]=>
   string(6) "&Ouml;"
-  ["×"]=>
-  string(7) "&times;"
-  ["Ø"]=>
-  string(8) "&Oslash;"
-  ["Ù"]=>
-  string(8) "&Ugrave;"
+  ["\8a"]=>
+  string(8) "&Scaron;"
+  ["Þ"]=>
+  string(7) "&THORN;"
   ["Ú"]=>
   string(8) "&Uacute;"
   ["Û"]=>
   string(7) "&Ucirc;"
+  ["Ù"]=>
+  string(8) "&Ugrave;"
   ["Ü"]=>
   string(6) "&Uuml;"
   ["Ý"]=>
   string(8) "&Yacute;"
-  ["Þ"]=>
-  string(7) "&THORN;"
-  ["ß"]=>
-  string(7) "&szlig;"
-  ["à"]=>
-  string(8) "&agrave;"
+  ["\9f"]=>
+  string(6) "&Yuml;"
   ["á"]=>
   string(8) "&aacute;"
   ["â"]=>
   string(7) "&acirc;"
+  ["´"]=>
+  string(7) "&acute;"
+  ["æ"]=>
+  string(7) "&aelig;"
+  ["à"]=>
+  string(8) "&agrave;"
+  ["&"]=>
+  string(5) "&amp;"
+  ["å"]=>
+  string(7) "&aring;"
   ["ã"]=>
   string(8) "&atilde;"
   ["ä"]=>
   string(6) "&auml;"
-  ["å"]=>
-  string(7) "&aring;"
-  ["æ"]=>
-  string(7) "&aelig;"
+  ["\84"]=>
+  string(7) "&bdquo;"
+  ["¦"]=>
+  string(8) "&brvbar;"
+  ["\95"]=>
+  string(6) "&bull;"
   ["ç"]=>
   string(8) "&ccedil;"
-  ["è"]=>
-  string(8) "&egrave;"
+  ["¸"]=>
+  string(7) "&cedil;"
+  ["¢"]=>
+  string(6) "&cent;"
+  ["\88"]=>
+  string(6) "&circ;"
+  ["©"]=>
+  string(6) "&copy;"
+  ["¤"]=>
+  string(8) "&curren;"
+  ["\86"]=>
+  string(8) "&dagger;"
+  ["°"]=>
+  string(5) "&deg;"
+  ["÷"]=>
+  string(8) "&divide;"
   ["é"]=>
   string(8) "&eacute;"
   ["ê"]=>
   string(7) "&ecirc;"
+  ["è"]=>
+  string(8) "&egrave;"
+  ["ð"]=>
+  string(5) "&eth;"
   ["ë"]=>
   string(6) "&euml;"
-  ["ì"]=>
-  string(8) "&igrave;"
+  ["\80"]=>
+  string(6) "&euro;"
+  ["\83"]=>
+  string(6) "&fnof;"
+  ["½"]=>
+  string(8) "&frac12;"
+  ["¼"]=>
+  string(8) "&frac14;"
+  ["¾"]=>
+  string(8) "&frac34;"
+  [">"]=>
+  string(4) "&gt;"
+  ["\85"]=>
+  string(8) "&hellip;"
   ["í"]=>
   string(8) "&iacute;"
   ["î"]=>
   string(7) "&icirc;"
+  ["¡"]=>
+  string(7) "&iexcl;"
+  ["ì"]=>
+  string(8) "&igrave;"
+  ["¿"]=>
+  string(8) "&iquest;"
   ["ï"]=>
   string(6) "&iuml;"
-  ["ð"]=>
-  string(5) "&eth;"
+  ["«"]=>
+  string(7) "&laquo;"
+  ["\93"]=>
+  string(7) "&ldquo;"
+  ["\8b"]=>
+  string(8) "&lsaquo;"
+  ["\91"]=>
+  string(7) "&lsquo;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["¯"]=>
+  string(6) "&macr;"
+  ["\97"]=>
+  string(7) "&mdash;"
+  ["µ"]=>
+  string(7) "&micro;"
+  ["·"]=>
+  string(8) "&middot;"
+  [" "]=>
+  string(6) "&nbsp;"
+  ["\96"]=>
+  string(7) "&ndash;"
+  ["¬"]=>
+  string(5) "&not;"
   ["ñ"]=>
   string(8) "&ntilde;"
-  ["ò"]=>
-  string(8) "&ograve;"
   ["ó"]=>
   string(8) "&oacute;"
   ["ô"]=>
   string(7) "&ocirc;"
+  ["\9c"]=>
+  string(7) "&oelig;"
+  ["ò"]=>
+  string(8) "&ograve;"
+  ["ª"]=>
+  string(6) "&ordf;"
+  ["º"]=>
+  string(6) "&ordm;"
+  ["ø"]=>
+  string(8) "&oslash;"
   ["õ"]=>
   string(8) "&otilde;"
   ["ö"]=>
   string(6) "&ouml;"
-  ["÷"]=>
-  string(8) "&divide;"
-  ["ø"]=>
-  string(8) "&oslash;"
-  ["ù"]=>
-  string(8) "&ugrave;"
+  ["¶"]=>
+  string(6) "&para;"
+  ["\89"]=>
+  string(8) "&permil;"
+  ["±"]=>
+  string(8) "&plusmn;"
+  ["£"]=>
+  string(7) "&pound;"
+  ["""]=>
+  string(6) "&quot;"
+  ["»"]=>
+  string(7) "&raquo;"
+  ["\94"]=>
+  string(7) "&rdquo;"
+  ["®"]=>
+  string(5) "&reg;"
+  ["\9b"]=>
+  string(8) "&rsaquo;"
+  ["\92"]=>
+  string(7) "&rsquo;"
+  ["\82"]=>
+  string(7) "&sbquo;"
+  ["\9a"]=>
+  string(8) "&scaron;"
+  ["§"]=>
+  string(6) "&sect;"
+  ["­"]=>
+  string(5) "&shy;"
+  ["¹"]=>
+  string(6) "&sup1;"
+  ["²"]=>
+  string(6) "&sup2;"
+  ["³"]=>
+  string(6) "&sup3;"
+  ["ß"]=>
+  string(7) "&szlig;"
+  ["þ"]=>
+  string(7) "&thorn;"
+  ["\98"]=>
+  string(7) "&tilde;"
+  ["×"]=>
+  string(7) "&times;"
+  ["\99"]=>
+  string(7) "&trade;"
   ["ú"]=>
   string(8) "&uacute;"
   ["û"]=>
   string(7) "&ucirc;"
+  ["ù"]=>
+  string(8) "&ugrave;"
+  ["¨"]=>
+  string(5) "&uml;"
   ["ü"]=>
   string(6) "&uuml;"
   ["ý"]=>
   string(8) "&yacute;"
-  ["þ"]=>
-  string(7) "&thorn;"
+  ["¥"]=>
+  string(5) "&yen;"
   ["ÿ"]=>
   string(6) "&yuml;"
-  ["&"]=>
-  string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
-  [">"]=>
-  string(4) "&gt;"
 }
 -- with table = HTML_SPECIALCHARS --
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 Done
diff --git a/ext/standard/tests/strings/get_html_translation_table_basic5.phpt b/ext/standard/tests/strings/get_html_translation_table_basic5.phpt
new file mode 100644 (file)
index 0000000..600ad43
--- /dev/null
@@ -0,0 +1,1598 @@
+--TEST--
+Test get_html_translation_table() function : basic functionality - HTML 5
+--FILE--
+<?php
+echo "*** Testing get_html_translation_table() : basic functionality/HTML 5 ***\n";
+
+echo "-- with table = HTML_ENTITIES, ENT_COMPAT --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_COMPAT | ENT_HTML5, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_ENTITIES, ENT_QUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_ENTITIES, ENT_NOQUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_COMPAT --\n";
+$table = HTML_SPECIALCHARS; 
+$tt = get_html_translation_table($table, ENT_COMPAT, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_QUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing get_html_translation_table() : basic functionality/HTML 5 ***
+-- with table = HTML_ENTITIES, ENT_COMPAT --
+int(1509)
+Array
+(
+    [Æ] => &AElig;
+    [Á] => &Aacute;
+    [Ă] => &Abreve;
+    [Â] => &Acirc;
+    [А] => &Acy;
+    [𝔄] => &Afr;
+    [À] => &Agrave;
+    [Α] => &Alpha;
+    [Ā] => &Amacr;
+    [⩓] => &And;
+    [Ą] => &Aogon;
+    [𝔸] => &Aopf;
+    [Å] => &Aring;
+    [𝒜] => &Ascr;
+    [Ã] => &Atilde;
+    [Ä] => &Auml;
+    [⫧] => &Barv;
+    [Б] => &Bcy;
+    [∵] => &Because;
+    [Β] => &Beta;
+    [𝔅] => &Bfr;
+    [𝔹] => &Bopf;
+    [˘] => &Breve;
+    [ℬ] => &Bscr;
+    [Ч] => &CHcy;
+    [Ć] => &Cacute;
+    [⋒] => &Cap;
+    [ⅅ] => &CapitalDifferentialD;
+    [Č] => &Ccaron;
+    [Ç] => &Ccedil;
+    [Ĉ] => &Ccirc;
+    [∰] => &Cconint;
+    [Ċ] => &Cdot;
+    [¸] => &Cedilla;
+    [·] => &CenterDot;
+    [ℭ] => &Cfr;
+    [Χ] => &Chi;
+    [⊙] => &CircleDot;
+    [⊕] => &CirclePlus;
+    [⊗] => &CircleTimes;
+    [∷] => &Colon;
+    [⩴] => &Colone;
+    [≡] => &Congruent;
+    [∮] => &ContourIntegral;
+    [∐] => &Coproduct;
+    [⨯] => &Cross;
+    [𝒞] => &Cscr;
+    [⋓] => &Cup;
+    [≍] => &CupCap;
+    [⤑] => &DDotrahd;
+    [Ђ] => &DJcy;
+    [Ѕ] => &DScy;
+    [Џ] => &DZcy;
+    [‡] => &Dagger;
+    [↡] => &Darr;
+    [⫤] => &Dashv;
+    [Ď] => &Dcaron;
+    [Д] => &Dcy;
+    [Δ] => &Delta;
+    [𝔇] => &Dfr;
+    [´] => &DiacriticalAcute;
+    [˝] => &DiacriticalDoubleAcute;
+    [˜] => &DiacriticalTilde;
+    [ⅆ] => &DifferentialD;
+    [𝔻] => &Dopf;
+    [⃜] => &DotDot;
+    [∯] => &DoubleContourIntegral;
+    [¨] => &DoubleDot;
+    [⇐] => &DoubleLeftArrow;
+    [⟹] => &DoubleLongRightArrow;
+    [⊨] => &DoubleRightTee;
+    [⇑] => &DoubleUpArrow;
+    [⤓] => &DownArrowBar;
+    [⇵] => &DownArrowUpArrow;
+    [̑] => &DownBreve;
+    [⥐] => &DownLeftRightVector;
+    [⥞] => &DownLeftTeeVector;
+    [⥖] => &DownLeftVectorBar;
+    [⥟] => &DownRightTeeVector;
+    [⥗] => &DownRightVectorBar;
+    [⊤] => &DownTee;
+    [↧] => &DownTeeArrow;
+    [⇓] => &Downarrow;
+    [𝒟] => &Dscr;
+    [Đ] => &Dstrok;
+    [Ŋ] => &ENG;
+    [Ð] => &ETH;
+    [É] => &Eacute;
+    [Ě] => &Ecaron;
+    [Ê] => &Ecirc;
+    [Э] => &Ecy;
+    [Ė] => &Edot;
+    [𝔈] => &Efr;
+    [È] => &Egrave;
+    [Ē] => &Emacr;
+    [◻] => &EmptySmallSquare;
+    [▫] => &EmptyVerySmallSquare;
+    [Ę] => &Eogon;
+    [𝔼] => &Eopf;
+    [Ε] => &Epsilon;
+    [⩵] => &Equal;
+    [⩳] => &Esim;
+    [Η] => &Eta;
+    [Ë] => &Euml;
+    [∃] => &Exists;
+    [Ф] => &Fcy;
+    [𝔉] => &Ffr;
+    [◼] => &FilledSmallSquare;
+    [𝔽] => &Fopf;
+    [ℱ] => &Fouriertrf;
+    [Ѓ] => &GJcy;
+    [Γ] => &Gamma;
+    [Ϝ] => &Gammad;
+    [Ğ] => &Gbreve;
+    [Ģ] => &Gcedil;
+    [Ĝ] => &Gcirc;
+    [Г] => &Gcy;
+    [Ġ] => &Gdot;
+    [𝔊] => &Gfr;
+    [⋙] => &Gg;
+    [𝔾] => &Gopf;
+    [⪢] => &GreaterGreater;
+    [≳] => &GreaterTilde;
+    [𝒢] => &Gscr;
+    [Ъ] => &HARDcy;
+    [ˇ] => &Hacek;
+    [^] => &Hat;
+    [Ĥ] => &Hcirc;
+    [ℌ] => &Hfr;
+    [ℋ] => &HilbertSpace;
+    [ℍ] => &Hopf;
+    [─] => &HorizontalLine;
+    [Ħ] => &Hstrok;
+    [≏] => &HumpEqual;
+    [Е] => &IEcy;
+    [IJ] => &IJlig;
+    [Ё] => &IOcy;
+    [Í] => &Iacute;
+    [Î] => &Icirc;
+    [И] => &Icy;
+    [İ] => &Idot;
+    [ℑ] => &Ifr;
+    [Ì] => &Igrave;
+    [Ī] => &Imacr;
+    [ⅈ] => &ImaginaryI;
+    [⇒] => &Implies;
+    [∬] => &Int;
+    [∫] => &Integral;
+    [⁢] => &InvisibleTimes;
+    [Į] => &Iogon;
+    [𝕀] => &Iopf;
+    [Ι] => &Iota;
+    [Ĩ] => &Itilde;
+    [І] => &Iukcy;
+    [Ï] => &Iuml;
+    [Ĵ] => &Jcirc;
+    [Й] => &Jcy;
+    [𝔍] => &Jfr;
+    [𝕁] => &Jopf;
+    [𝒥] => &Jscr;
+    [Ј] => &Jsercy;
+    [Є] => &Jukcy;
+    [Х] => &KHcy;
+    [Ќ] => &KJcy;
+    [Κ] => &Kappa;
+    [Ķ] => &Kcedil;
+    [К] => &Kcy;
+    [𝔎] => &Kfr;
+    [𝕂] => &Kopf;
+    [𝒦] => &Kscr;
+    [Љ] => &LJcy;
+    [Ĺ] => &Lacute;
+    [Λ] => &Lambda;
+    [⟪] => &Lang;
+    [↞] => &Larr;
+    [Ľ] => &Lcaron;
+    [Ļ] => &Lcedil;
+    [Л] => &Lcy;
+    [⇤] => &LeftArrowBar;
+    [⟦] => &LeftDoubleBracket;
+    [⥡] => &LeftDownTeeVector;
+    [⥙] => &LeftDownVectorBar;
+    [⌊] => &LeftFloor;
+    [⥎] => &LeftRightVector;
+    [↤] => &LeftTeeArrow;
+    [⥚] => &LeftTeeVector;
+    [⧏] => &LeftTriangleBar;
+    [⊴] => &LeftTriangleEqual;
+    [⥑] => &LeftUpDownVector;
+    [⥠] => &LeftUpTeeVector;
+    [⥘] => &LeftUpVectorBar;
+    [⥒] => &LeftVectorBar;
+    [⪡] => &LessLess;
+    [≲] => &LessTilde;
+    [𝔏] => &Lfr;
+    [⋘] => &Ll;
+    [Ŀ] => &Lmidot;
+    [⟷] => &LongLeftRightArrow;
+    [⟶] => &LongRightArrow;
+    [𝕃] => &Lopf;
+    [↘] => &LowerRightArrow;
+    [↰] => &Lsh;
+    [Ł] => &Lstrok;
+    [⤅] => &Map;
+    [М] => &Mcy;
+    [ ] => &MediumSpace;
+    [ℳ] => &Mellintrf;
+    [𝔐] => &Mfr;
+    [∓] => &MinusPlus;
+    [𝕄] => &Mopf;
+    [Μ] => &Mu;
+    [Њ] => &NJcy;
+    [Ń] => &Nacute;
+    [Ň] => &Ncaron;
+    [Ņ] => &Ncedil;
+    [Н] => &Ncy;
+    [
+] => &NewLine;
+    [𝔑] => &Nfr;
+    [⁠] => &NoBreak;
+    [⫬] => &Not;
+    [≢] => &NotCongruent;
+    [≭] => &NotCupCap;
+    [≠] => &NotEqual;
+    [≧̸] => &NotGreaterFullEqual
+    [≫̸] => &NotGreaterGreater
+    [≹] => &NotGreaterLess;
+    [⧏̸] => &NotLeftTriangleBar
+    [≮] => &NotLess;
+    [≰] => &NotLessEqual;
+    [⪢̸] => &NotNestedGreaterGreater
+    [⪡̸] => &NotNestedLessLess
+    [⪯̸] => &NotPrecedesEqual
+    [⋠] => &NotPrecedesSlantEqual;
+    [⧐̸] => &NotRightTriangleBar
+    [⋭] => &NotRightTriangleEqual;
+    [⊏̸] => &NotSquareSubset
+    [⋢] => &NotSquareSubsetEqual;
+    [⊐̸] => &NotSquareSuperset
+    [⋣] => &NotSquareSupersetEqual;
+    [⊈] => &NotSubsetEqual;
+    [⊁] => &NotSucceeds;
+    [⪰̸] => &NotSucceedsEqual
+    [⋡] => &NotSucceedsSlantEqual;
+    [≿̸] => &NotSucceedsTilde
+    [⊉] => &NotSupersetEqual;
+    [≁] => &NotTilde;
+    [𝒩] => &Nscr;
+    [Ñ] => &Ntilde;
+    [Ν] => &Nu;
+    [Œ] => &OElig;
+    [Ó] => &Oacute;
+    [Ô] => &Ocirc;
+    [О] => &Ocy;
+    [Ő] => &Odblac;
+    [𝔒] => &Ofr;
+    [Ò] => &Ograve;
+    [Ō] => &Omacr;
+    [Ω] => &Omega;
+    [Ο] => &Omicron;
+    [𝕆] => &Oopf;
+    [“] => &OpenCurlyDoubleQuote;
+    [‘] => &OpenCurlyQuote;
+    [⩔] => &Or;
+    [𝒪] => &Oscr;
+    [Ø] => &Oslash;
+    [Õ] => &Otilde;
+    [⨷] => &Otimes;
+    [Ö] => &Ouml;
+    [⏞] => &OverBrace;
+    [⎴] => &OverBracket;
+    [⏜] => &OverParenthesis;
+    [П] => &Pcy;
+    [𝔓] => &Pfr;
+    [Φ] => &Phi;
+    [Π] => &Pi;
+    [⪻] => &Pr;
+    [≼] => &PrecedesSlantEqual;
+    [″] => &Prime;
+    [𝒫] => &Pscr;
+    [Ψ] => &Psi;
+    [𝔔] => &Qfr;
+    [𝒬] => &Qscr;
+    [Ŕ] => &Racute;
+    [⟫] => &Rang;
+    [⤖] => &Rarrtl;
+    [Ř] => &Rcaron;
+    [Ŗ] => &Rcedil;
+    [Р] => &Rcy;
+    [∋] => &ReverseElement;
+    [⥯] => &ReverseUpEquilibrium;
+    [ℜ] => &Rfr;
+    [Ρ] => &Rho;
+    [⟩] => &RightAngleBracket;
+    [⇥] => &RightArrowBar;
+    [⌉] => &RightCeiling;
+    [⟧] => &RightDoubleBracket;
+    [⥝] => &RightDownTeeVector;
+    [⇂] => &RightDownVector;
+    [⥕] => &RightDownVectorBar;
+    [⌋] => &RightFloor;
+    [⥛] => &RightTeeVector;
+    [⧐] => &RightTriangleBar;
+    [⊵] => &RightTriangleEqual;
+    [⥏] => &RightUpDownVector;
+    [⥜] => &RightUpTeeVector;
+    [↾] => &RightUpVector;
+    [⥔] => &RightUpVectorBar;
+    [⥓] => &RightVectorBar;
+    [ℝ] => &Ropf;
+    [⥰] => &RoundImplies;
+    [⧴] => &RuleDelayed;
+    [Щ] => &SHCHcy;
+    [Ш] => &SHcy;
+    [Ь] => &SOFTcy;
+    [Ś] => &Sacute;
+    [⪼] => &Sc;
+    [Š] => &Scaron;
+    [Ş] => &Scedil;
+    [Ŝ] => &Scirc;
+    [С] => &Scy;
+    [𝔖] => &Sfr;
+    [Σ] => &Sigma;
+    [𝕊] => &Sopf;
+    [√] => &Sqrt;
+    [□] => &Square;
+    [⊑] => &SquareSubsetEqual;
+    [⊒] => &SquareSupersetEqual;
+    [𝒮] => &Sscr;
+    [⋆] => &Star;
+    [⋐] => &Sub;
+    [⊆] => &SubsetEqual;
+    [⪰] => &SucceedsEqual;
+    [≿] => &SucceedsTilde;
+    [⋑] => &Supset;
+    [Þ] => &THORN;
+    [Ћ] => &TSHcy;
+    [Ц] => &TScy;
+    [  ] => &Tab;
+    [Τ] => &Tau;
+    [Ť] => &Tcaron;
+    [Ţ] => &Tcedil;
+    [Т] => &Tcy;
+    [𝔗] => &Tfr;
+    [Θ] => &Theta;
+    [  ] => &ThickSpace
+    [ ] => &ThinSpace;
+    [≅] => &TildeFullEqual;
+    [𝕋] => &Topf;
+    [⃛] => &TripleDot;
+    [𝒯] => &Tscr;
+    [Ŧ] => &Tstrok;
+    [Ú] => &Uacute;
+    [↟] => &Uarr;
+    [⥉] => &Uarrocir;
+    [Ў] => &Ubrcy;
+    [Ŭ] => &Ubreve;
+    [Û] => &Ucirc;
+    [У] => &Ucy;
+    [Ű] => &Udblac;
+    [𝔘] => &Ufr;
+    [Ù] => &Ugrave;
+    [Ū] => &Umacr;
+    [⏟] => &UnderBrace;
+    [⏝] => &UnderParenthesis;
+    [⊎] => &UnionPlus;
+    [Ų] => &Uogon;
+    [𝕌] => &Uopf;
+    [⤒] => &UpArrowBar;
+    [↕] => &UpDownArrow;
+    [↥] => &UpTeeArrow;
+    [⇕] => &Updownarrow;
+    [↗] => &UpperRightArrow;
+    [Υ] => &Upsilon;
+    [Ů] => &Uring;
+    [𝒰] => &Uscr;
+    [Ũ] => &Utilde;
+    [Ü] => &Uuml;
+    [⊫] => &VDash;
+    [⫫] => &Vbar;
+    [В] => &Vcy;
+    [⊩] => &Vdash;
+    [⫦] => &Vdashl;
+    [‖] => &Verbar;
+    [❘] => &VerticalSeparator;
+    [𝔙] => &Vfr;
+    [𝕍] => &Vopf;
+    [𝒱] => &Vscr;
+    [⊪] => &Vvdash;
+    [Ŵ] => &Wcirc;
+    [𝔚] => &Wfr;
+    [𝕎] => &Wopf;
+    [𝒲] => &Wscr;
+    [𝔛] => &Xfr;
+    [Ξ] => &Xi;
+    [𝕏] => &Xopf;
+    [𝒳] => &Xscr;
+    [Я] => &YAcy;
+    [Ї] => &YIcy;
+    [Ю] => &YUcy;
+    [Ý] => &Yacute;
+    [Ŷ] => &Ycirc;
+    [Ы] => &Ycy;
+    [𝔜] => &Yfr;
+    [𝕐] => &Yopf;
+    [𝒴] => &Yscr;
+    [Ÿ] => &Yuml;
+    [Ж] => &ZHcy;
+    [Ź] => &Zacute;
+    [Ž] => &Zcaron;
+    [З] => &Zcy;
+    [Ż] => &Zdot;
+    [​] => &ZeroWidthSpace;
+    [Ζ] => &Zeta;
+    [ℨ] => &Zfr;
+    [ℤ] => &Zopf;
+    [𝒵] => &Zscr;
+    [á] => &aacute;
+    [ă] => &abreve;
+    [∾] => &ac;
+    [∾̳] => &acE
+    [∿] => &acd;
+    [â] => &acirc;
+    [а] => &acy;
+    [æ] => &aelig;
+    [⁡] => &af;
+    [𝔞] => &afr;
+    [à] => &agrave;
+    [ℵ] => &aleph;
+    [α] => &alpha;
+    [ā] => &amacr;
+    [⨿] => &amalg;
+    [&] => &amp;
+    [∧] => &and;
+    [⩕] => &andand;
+    [⩜] => &andd;
+    [⩘] => &andslope;
+    [⩚] => &andv;
+    [⦤] => &ange;
+    [∠] => &angle;
+    [∡] => &angmsd;
+    [⦨] => &angmsdaa;
+    [⦩] => &angmsdab;
+    [⦪] => &angmsdac;
+    [⦫] => &angmsdad;
+    [⦬] => &angmsdae;
+    [⦭] => &angmsdaf;
+    [⦮] => &angmsdag;
+    [⦯] => &angmsdah;
+    [∟] => &angrt;
+    [⊾] => &angrtvb;
+    [⦝] => &angrtvbd;
+    [∢] => &angsph;
+    [⍼] => &angzarr;
+    [ą] => &aogon;
+    [𝕒] => &aopf;
+    [⩰] => &apE;
+    [⩯] => &apacir;
+    [≊] => &ape;
+    [≋] => &apid;
+    [≈] => &approx;
+    [å] => &aring;
+    [𝒶] => &ascr;
+    [*] => &ast;
+    [ã] => &atilde;
+    [ä] => &auml;
+    [∳] => &awconint;
+    [⨑] => &awint;
+    [⫭] => &bNot;
+    [϶] => &backepsilon;
+    [‵] => &backprime;
+    [⋍] => &backsimeq;
+    [⊽] => &barvee;
+    [⌅] => &barwed;
+    [⎵] => &bbrk;
+    [⎶] => &bbrktbrk;
+    [≌] => &bcong;
+    [б] => &bcy;
+    [„] => &bdquo;
+    [⦰] => &bemptyv;
+    [β] => &beta;
+    [ℶ] => &beth;
+    [≬] => &between;
+    [𝔟] => &bfr;
+    [⋂] => &bigcap;
+    [◯] => &bigcirc;
+    [⋃] => &bigcup;
+    [⨁] => &bigoplus;
+    [⨂] => &bigotimes;
+    [⨆] => &bigsqcup;
+    [▽] => &bigtriangledown;
+    [△] => &bigtriangleup;
+    [⨄] => &biguplus;
+    [⤍] => &bkarow;
+    [▴] => &blacktriangle;
+    [▾] => &blacktriangledown;
+    [◂] => &blacktriangleleft;
+    [▸] => &blacktriangleright;
+    [␣] => &blank;
+    [▒] => &blk12;
+    [░] => &blk14;
+    [▓] => &blk34;
+    [█] => &block;
+    [=⃥] => &bne
+    [≡⃥] => &bnequiv
+    [⌐] => &bnot;
+    [𝕓] => &bopf;
+    [⋈] => &bowtie;
+    [╗] => &boxDL;
+    [╔] => &boxDR;
+    [╖] => &boxDl;
+    [╓] => &boxDr;
+    [═] => &boxH;
+    [╦] => &boxHD;
+    [╩] => &boxHU;
+    [╤] => &boxHd;
+    [╧] => &boxHu;
+    [╝] => &boxUL;
+    [╚] => &boxUR;
+    [╜] => &boxUl;
+    [╙] => &boxUr;
+    [║] => &boxV;
+    [╬] => &boxVH;
+    [╣] => &boxVL;
+    [╠] => &boxVR;
+    [╫] => &boxVh;
+    [╢] => &boxVl;
+    [╟] => &boxVr;
+    [⧉] => &boxbox;
+    [╕] => &boxdL;
+    [╒] => &boxdR;
+    [┐] => &boxdl;
+    [┌] => &boxdr;
+    [╥] => &boxhD;
+    [╨] => &boxhU;
+    [┬] => &boxhd;
+    [┴] => &boxhu;
+    [⊟] => &boxminus;
+    [⊞] => &boxplus;
+    [╛] => &boxuL;
+    [╘] => &boxuR;
+    [┘] => &boxul;
+    [└] => &boxur;
+    [│] => &boxv;
+    [╪] => &boxvH;
+    [╡] => &boxvL;
+    [╞] => &boxvR;
+    [┼] => &boxvh;
+    [┤] => &boxvl;
+    [├] => &boxvr;
+    [¦] => &brvbar;
+    [𝒷] => &bscr;
+    [⁏] => &bsemi;
+    [∽] => &bsim;
+    [\] => &bsol;
+    [⧅] => &bsolb;
+    [⟈] => &bsolhsub;
+    [•] => &bull;
+    [≎] => &bump;
+    [⪮] => &bumpE;
+    [ć] => &cacute;
+    [∩] => &cap;
+    [⩄] => &capand;
+    [⩉] => &capbrcup;
+    [⩋] => &capcap;
+    [⩇] => &capcup;
+    [⩀] => &capdot;
+    [∩︀] => &caps
+    [⁁] => &caret;
+    [⩍] => &ccaps;
+    [č] => &ccaron;
+    [ç] => &ccedil;
+    [ĉ] => &ccirc;
+    [⩌] => &ccups;
+    [⩐] => &ccupssm;
+    [ċ] => &cdot;
+    [⦲] => &cemptyv;
+    [¢] => &cent;
+    [𝔠] => &cfr;
+    [ч] => &chcy;
+    [✓] => &check;
+    [χ] => &chi;
+    [○] => &cir;
+    [⧃] => &cirE;
+    [ˆ] => &circ;
+    [≗] => &circeq;
+    [⨐] => &cirfnint;
+    [⫯] => &cirmid;
+    [⧂] => &cirscir;
+    [♣] => &clubs;
+    [:] => &colon;
+    [≔] => &coloneq;
+    [,] => &comma;
+    [@] => &commat;
+    [∁] => &comp;
+    [∘] => &compfn;
+    [ℂ] => &complexes;
+    [⩭] => &congdot;
+    [𝕔] => &copf;
+    [©] => &copy;
+    [℗] => &copysr;
+    [↵] => &crarr;
+    [✗] => &cross;
+    [𝒸] => &cscr;
+    [⫏] => &csub;
+    [⫑] => &csube;
+    [⫐] => &csup;
+    [⫒] => &csupe;
+    [⋯] => &ctdot;
+    [⤸] => &cudarrl;
+    [⤵] => &cudarrr;
+    [⋟] => &cuesc;
+    [⤽] => &cularrp;
+    [∪] => &cup;
+    [⩈] => &cupbrcap;
+    [⩆] => &cupcap;
+    [⩊] => &cupcup;
+    [⊍] => &cupdot;
+    [⩅] => &cupor;
+    [∪︀] => &cups
+    [↷] => &curarr;
+    [⤼] => &curarrm;
+    [⋞] => &curlyeqprec;
+    [⋎] => &curlyvee;
+    [⋏] => &curlywedge;
+    [¤] => &curren;
+    [↶] => &curvearrowleft;
+    [∲] => &cwconint;
+    [∱] => &cwint;
+    [⌭] => &cylcty;
+    [⥥] => &dHar;
+    [†] => &dagger;
+    [ℸ] => &daleth;
+    [↓] => &darr;
+    [⊣] => &dashv;
+    [⤏] => &dbkarow;
+    [ď] => &dcaron;
+    [д] => &dcy;
+    [⩷] => &ddotseq;
+    [°] => &deg;
+    [δ] => &delta;
+    [⦱] => &demptyv;
+    [⥿] => &dfisht;
+    [𝔡] => &dfr;
+    [⇃] => &dharl;
+    [⋄] => &diamond;
+    [♦] => &diamondsuit;
+    [⋲] => &disin;
+    [÷] => &divide;
+    [⋇] => &divonx;
+    [ђ] => &djcy;
+    [⌍] => &dlcrop;
+    [$] => &dollar;
+    [𝕕] => &dopf;
+    [˙] => &dot;
+    [≑] => &doteqdot;
+    [⌆] => &doublebarwedge;
+    [⇊] => &downdownarrows;
+    [⤐] => &drbkarow;
+    [⌟] => &drcorn;
+    [⌌] => &drcrop;
+    [𝒹] => &dscr;
+    [ѕ] => &dscy;
+    [⧶] => &dsol;
+    [đ] => &dstrok;
+    [⋱] => &dtdot;
+    [⦦] => &dwangle;
+    [џ] => &dzcy;
+    [⟿] => &dzigrarr;
+    [é] => &eacute;
+    [⩮] => &easter;
+    [ě] => &ecaron;
+    [≖] => &ecir;
+    [ê] => &ecirc;
+    [э] => &ecy;
+    [ė] => &edot;
+    [𝔢] => &efr;
+    [⪚] => &eg;
+    [è] => &egrave;
+    [⪖] => &egs;
+    [⪘] => &egsdot;
+    [⪙] => &el;
+    [⏧] => &elinters;
+    [ℓ] => &ell;
+    [⪕] => &els;
+    [⪗] => &elsdot;
+    [ē] => &emacr;
+    [∅] => &empty;
+    [ ] => &emsp13;
+    [ ] => &emsp14;
+    [ ] => &emsp;
+    [ŋ] => &eng;
+    [ ] => &ensp;
+    [ę] => &eogon;
+    [𝕖] => &eopf;
+    [⋕] => &epar;
+    [⧣] => &eparsl;
+    [⩱] => &eplus;
+    [ε] => &epsi;
+    [≕] => &eqcolon;
+    [=] => &equals;
+    [≟] => &equest;
+    [⩸] => &equivDD;
+    [⧥] => &eqvparsl;
+    [⥱] => &erarr;
+    [ℯ] => &escr;
+    [≐] => &esdot;
+    [≂] => &esim;
+    [η] => &eta;
+    [ð] => &eth;
+    [ë] => &euml;
+    [€] => &euro;
+    [!] => &excl;
+    [ℰ] => &expectation;
+    [ⅇ] => &exponentiale;
+    [≒] => &fallingdotseq;
+    [ф] => &fcy;
+    [♀] => &female;
+    [ffi] => &ffilig;
+    [ff] => &fflig;
+    [ffl] => &ffllig;
+    [𝔣] => &ffr;
+    [fi] => &filig;
+    [fj] => &fjlig
+    [♭] => &flat;
+    [fl] => &fllig;
+    [▱] => &fltns;
+    [ƒ] => &fnof;
+    [𝕗] => &fopf;
+    [∀] => &forall;
+    [⫙] => &forkv;
+    [⨍] => &fpartint;
+    [⅓] => &frac13;
+    [¼] => &frac14;
+    [⅕] => &frac15;
+    [⅙] => &frac16;
+    [⅛] => &frac18;
+    [⅔] => &frac23;
+    [⅖] => &frac25;
+    [¾] => &frac34;
+    [⅗] => &frac35;
+    [⅜] => &frac38;
+    [⅘] => &frac45;
+    [⅚] => &frac56;
+    [⅝] => &frac58;
+    [⅞] => &frac78;
+    [⁄] => &frasl;
+    [⌢] => &frown;
+    [𝒻] => &fscr;
+    [⪌] => &gEl;
+    [ǵ] => &gacute;
+    [γ] => &gamma;
+    [ϝ] => &gammad;
+    [⪆] => &gap;
+    [ğ] => &gbreve;
+    [ĝ] => &gcirc;
+    [г] => &gcy;
+    [ġ] => &gdot;
+    [≥] => &ge;
+    [≧] => &geqq;
+    [⩾] => &ges;
+    [⪩] => &gescc;
+    [⪀] => &gesdot;
+    [⪂] => &gesdoto;
+    [⪄] => &gesdotol;
+    [⋛︀] => &gesl
+    [⪔] => &gesles;
+    [𝔤] => &gfr;
+    [≫] => &gg;
+    [ℷ] => &gimel;
+    [ѓ] => &gjcy;
+    [≷] => &gl;
+    [⪒] => &glE;
+    [⪥] => &gla;
+    [⪤] => &glj;
+    [⪊] => &gnap;
+    [⪈] => &gne;
+    [≩] => &gneqq;
+    [⋧] => &gnsim;
+    [𝕘] => &gopf;
+    [`] => &grave;
+    [ℊ] => &gscr;
+    [⪎] => &gsime;
+    [⪐] => &gsiml;
+    [>] => &gt;
+    [⪧] => &gtcc;
+    [⩺] => &gtcir;
+    [⦕] => &gtlPar;
+    [⩼] => &gtquest;
+    [⥸] => &gtrarr;
+    [⋗] => &gtrdot;
+    [⋛] => &gtreqless;
+    [≩︀] => &gvertneqq
+    [⇔] => &hArr;
+    [ ] => &hairsp;
+    [½] => &half;
+    [ъ] => &hardcy;
+    [↔] => &harr;
+    [⥈] => &harrcir;
+    [↭] => &harrw;
+    [ĥ] => &hcirc;
+    [♥] => &hearts;
+    […] => &hellip;
+    [⊹] => &hercon;
+    [𝔥] => &hfr;
+    [⇿] => &hoarr;
+    [∻] => &homtht;
+    [𝕙] => &hopf;
+    [―] => &horbar;
+    [𝒽] => &hscr;
+    [ħ] => &hstrok;
+    [⁃] => &hybull;
+    [‐] => &hyphen;
+    [í] => &iacute;
+    [⁣] => &ic;
+    [î] => &icirc;
+    [и] => &icy;
+    [е] => &iecy;
+    [¡] => &iexcl;
+    [𝔦] => &ifr;
+    [ì] => &igrave;
+    [⨌] => &iiiint;
+    [⧜] => &iinfin;
+    [℩] => &iiota;
+    [ij] => &ijlig;
+    [ī] => &imacr;
+    [ℐ] => &imagline;
+    [⊷] => &imof;
+    [Ƶ] => &imped;
+    [℅] => &incare;
+    [∞] => &infin;
+    [⧝] => &infintie;
+    [ı] => &inodot;
+    [⊺] => &intcal;
+    [⨗] => &intlarhk;
+    [ё] => &iocy;
+    [į] => &iogon;
+    [𝕚] => &iopf;
+    [ι] => &iota;
+    [⨼] => &iprod;
+    [¿] => &iquest;
+    [𝒾] => &iscr;
+    [⋹] => &isinE;
+    [⋵] => &isindot;
+    [⋴] => &isins;
+    [⋳] => &isinsv;
+    [∈] => &isinv;
+    [ĩ] => &itilde;
+    [і] => &iukcy;
+    [ï] => &iuml;
+    [ĵ] => &jcirc;
+    [й] => &jcy;
+    [𝔧] => &jfr;
+    [ȷ] => &jmath;
+    [𝕛] => &jopf;
+    [𝒿] => &jscr;
+    [ј] => &jsercy;
+    [є] => &jukcy;
+    [κ] => &kappa;
+    [ķ] => &kcedil;
+    [к] => &kcy;
+    [𝔨] => &kfr;
+    [ĸ] => &kgreen;
+    [х] => &khcy;
+    [ќ] => &kjcy;
+    [𝕜] => &kopf;
+    [𝓀] => &kscr;
+    [⇚] => &lAarr;
+    [⤛] => &lAtail;
+    [⤎] => &lBarr;
+    [≦] => &lE;
+    [⥢] => &lHar;
+    [ĺ] => &lacute;
+    [⦴] => &laemptyv;
+    [ℒ] => &lagran;
+    [λ] => &lambda;
+    [⦑] => &langd;
+    [⟨] => &langle;
+    [⪅] => &lap;
+    [«] => &laquo;
+    [←] => &larr;
+    [⤟] => &larrbfs;
+    [⤝] => &larrfs;
+    [↩] => &larrhk;
+    [↫] => &larrlp;
+    [⤹] => &larrpl;
+    [⥳] => &larrsim;
+    [↢] => &larrtl;
+    [⪫] => &lat;
+    [⤙] => &latail;
+    [⪭] => &late;
+    [⪭︀] => &lates
+    [⤌] => &lbarr;
+    [❲] => &lbbrk;
+    [{] => &lbrace;
+    [[] => &lbrack;
+    [⦋] => &lbrke;
+    [⦏] => &lbrksld;
+    [⦍] => &lbrkslu;
+    [ľ] => &lcaron;
+    [ļ] => &lcedil;
+    [⌈] => &lceil;
+    [л] => &lcy;
+    [⤶] => &ldca;
+    [⥧] => &ldrdhar;
+    [⥋] => &ldrushar;
+    [↲] => &ldsh;
+    [↽] => &leftharpoondown;
+    [↼] => &leftharpoonup;
+    [⇋] => &leftrightharpoons;
+    [≤] => &leq;
+    [⩽] => &les;
+    [⪨] => &lescc;
+    [⩿] => &lesdot;
+    [⪁] => &lesdoto;
+    [⪃] => &lesdotor;
+    [⋚︀] => &lesg
+    [⪓] => &lesges;
+    [⋖] => &lessdot;
+    [⋚] => &lesseqgtr;
+    [⪋] => &lesseqqgtr;
+    [≶] => &lessgtr;
+    [⥼] => &lfisht;
+    [𝔩] => &lfr;
+    [⪑] => &lgE;
+    [⥪] => &lharul;
+    [▄] => &lhblk;
+    [љ] => &ljcy;
+    [≪] => &ll;
+    [⇇] => &llarr;
+    [⌞] => &llcorner;
+    [⥫] => &llhard;
+    [◺] => &lltri;
+    [ŀ] => &lmidot;
+    [⎰] => &lmoust;
+    [⪉] => &lnap;
+    [⪇] => &lne;
+    [≨] => &lneqq;
+    [⋦] => &lnsim;
+    [⟬] => &loang;
+    [⇽] => &loarr;
+    [⟵] => &longleftarrow;
+    [↬] => &looparrowright;
+    [⦅] => &lopar;
+    [𝕝] => &lopf;
+    [⨭] => &loplus;
+    [⨴] => &lotimes;
+    [∗] => &lowast;
+    [_] => &lowbar;
+    [◊] => &lozenge;
+    [⧫] => &lozf;
+    [(] => &lpar;
+    [⦓] => &lparlt;
+    [⇆] => &lrarr;
+    [⥭] => &lrhard;
+    [‎] => &lrm;
+    [⊿] => &lrtri;
+    [‹] => &lsaquo;
+    [𝓁] => &lscr;
+    [⪍] => &lsime;
+    [⪏] => &lsimg;
+    [ł] => &lstrok;
+    [<] => &lt;
+    [⪦] => &ltcc;
+    [⩹] => &ltcir;
+    [⋋] => &lthree;
+    [⋉] => &ltimes;
+    [⥶] => &ltlarr;
+    [⩻] => &ltquest;
+    [⦖] => &ltrPar;
+    [◃] => &ltri;
+    [⥊] => &lurdshar;
+    [⥦] => &luruhar;
+    [≨︀] => &lvertneqq
+    [∺] => &mDDot;
+    [¯] => &macr;
+    [♂] => &male;
+    [✠] => &maltese;
+    [↦] => &map;
+    [▮] => &marker;
+    [⨩] => &mcomma;
+    [м] => &mcy;
+    [—] => &mdash;
+    [𝔪] => &mfr;
+    [℧] => &mho;
+    [µ] => &micro;
+    [∣] => &mid;
+    [⫰] => &midcir;
+    [−] => &minus;
+    [∸] => &minusd;
+    [⨪] => &minusdu;
+    [⫛] => &mlcp;
+    [⊧] => &models;
+    [𝕞] => &mopf;
+    [𝓂] => &mscr;
+    [μ] => &mu;
+    [⊸] => &mumap;
+    [⋙̸] => &nGg
+    [≫⃒] => &nGt
+    [⇍] => &nLeftarrow;
+    [⋘̸] => &nLl
+    [≪⃒] => &nLt
+    [≪̸] => &nLtv
+    [⊯] => &nVDash;
+    [⊮] => &nVdash;
+    [∇] => &nabla;
+    [ń] => &nacute;
+    [∠⃒] => &nang
+    [⩰̸] => &napE
+    [≋̸] => &napid
+    [ʼn] => &napos;
+    [≉] => &napprox;
+    [♮] => &natur;
+    [ℕ] => &naturals;
+    [ ] => &nbsp;
+    [≎̸] => &nbump
+    [≏̸] => &nbumpe
+    [⩃] => &ncap;
+    [ň] => &ncaron;
+    [ņ] => &ncedil;
+    [≇] => &ncong;
+    [⩭̸] => &ncongdot
+    [⩂] => &ncup;
+    [н] => &ncy;
+    [–] => &ndash;
+    [⇗] => &neArr;
+    [⤤] => &nearhk;
+    [≐̸] => &nedot
+    [≂̸] => &nesim
+    [∄] => &nexist;
+    [𝔫] => &nfr;
+    [≱] => &ngeq;
+    [⩾̸] => &nges
+    [≵] => &ngsim;
+    [≯] => &ngtr;
+    [⇎] => &nhArr;
+    [⫲] => &nhpar;
+    [⋼] => &nis;
+    [⋺] => &nisd;
+    [њ] => &njcy;
+    [≦̸] => &nlE
+    [‥] => &nldr;
+    [↚] => &nleftarrow;
+    [↮] => &nleftrightarrow;
+    [⩽̸] => &nles
+    [≴] => &nlsim;
+    [⋪] => &nltri;
+    [⋬] => &nltrie;
+    [𝕟] => &nopf;
+    [¬] => &not;
+    [∉] => &notin;
+    [⋹̸] => &notinE
+    [⋵̸] => &notindot
+    [⋷] => &notinvb;
+    [⋶] => &notinvc;
+    [∌] => &notniva;
+    [⋾] => &notnivb;
+    [⋽] => &notnivc;
+    [∦] => &nparallel;
+    [∂̸] => &npart
+    [⨔] => &npolint;
+    [⊀] => &npr;
+    [⇏] => &nrArr;
+    [↛] => &nrarr;
+    [⤳̸] => &nrarrc
+    [↝̸] => &nrarrw
+    [𝓃] => &nscr;
+    [∤] => &nshortmid;
+    [≄] => &nsime;
+    [⊄] => &nsub;
+    [⫅̸] => &nsubE
+    [⊅] => &nsup;
+    [⊃⃒] => &nsupset
+    [⫆̸] => &nsupseteqq
+    [ñ] => &ntilde;
+    [≸] => &ntlg;
+    [⋫] => &ntriangleright;
+    [ν] => &nu;
+    [#] => &num;
+    [№] => &numero;
+    [ ] => &numsp;
+    [⊭] => &nvDash;
+    [⤄] => &nvHarr;
+    [≍⃒] => &nvap
+    [⊬] => &nvdash;
+    [≥⃒] => &nvge
+    [>⃒] => &nvgt
+    [⧞] => &nvinfin;
+    [⤂] => &nvlArr;
+    [≤⃒] => &nvle
+    [<⃒] => &nvlt
+    [⊴⃒] => &nvltrie
+    [⤃] => &nvrArr;
+    [⊵⃒] => &nvrtrie
+    [∼⃒] => &nvsim
+    [⇖] => &nwArr;
+    [⤣] => &nwarhk;
+    [↖] => &nwarrow;
+    [⤧] => &nwnear;
+    [Ⓢ] => &oS;
+    [ó] => &oacute;
+    [⊛] => &oast;
+    [⊚] => &ocir;
+    [ô] => &ocirc;
+    [о] => &ocy;
+    [⊝] => &odash;
+    [ő] => &odblac;
+    [⨸] => &odiv;
+    [⦼] => &odsold;
+    [œ] => &oelig;
+    [⦿] => &ofcir;
+    [𝔬] => &ofr;
+    [˛] => &ogon;
+    [ò] => &ograve;
+    [⧁] => &ogt;
+    [⦵] => &ohbar;
+    [↺] => &olarr;
+    [⦾] => &olcir;
+    [⦻] => &olcross;
+    [‾] => &oline;
+    [⧀] => &olt;
+    [ō] => &omacr;
+    [ω] => &omega;
+    [ο] => &omicron;
+    [⦶] => &omid;
+    [⊖] => &ominus;
+    [𝕠] => &oopf;
+    [⦷] => &opar;
+    [⦹] => &operp;
+    [∨] => &or;
+    [↻] => &orarr;
+    [⩝] => &ord;
+    [ℴ] => &orderof;
+    [ª] => &ordf;
+    [º] => &ordm;
+    [⊶] => &origof;
+    [⩖] => &oror;
+    [⩗] => &orslope;
+    [⩛] => &orv;
+    [ø] => &oslash;
+    [⊘] => &osol;
+    [õ] => &otilde;
+    [⨶] => &otimesas;
+    [ö] => &ouml;
+    [⌽] => &ovbar;
+    [¶] => &para;
+    [⫳] => &parsim;
+    [∂] => &part;
+    [п] => &pcy;
+    [%] => &percnt;
+    [.] => &period;
+    [‰] => &permil;
+    [⊥] => &perp;
+    [‱] => &pertenk;
+    [𝔭] => &pfr;
+    [φ] => &phi;
+    [☎] => &phone;
+    [π] => &pi;
+    [⋔] => &pitchfork;
+    [ϖ] => &piv;
+    [ℏ] => &planck;
+    [ℎ] => &planckh;
+    [+] => &plus;
+    [⨣] => &plusacir;
+    [⨢] => &pluscir;
+    [∔] => &plusdo;
+    [⨥] => &plusdu;
+    [⩲] => &pluse;
+    [±] => &plusmn;
+    [⨦] => &plussim;
+    [⨧] => &plustwo;
+    [⨕] => &pointint;
+    [𝕡] => &popf;
+    [£] => &pound;
+    [⪳] => &prE;
+    [≺] => &prec;
+    [⪷] => &precapprox;
+    [⪯] => &preceq;
+    [⪹] => &precnapprox;
+    [⪵] => &precneqq;
+    [⋨] => &precnsim;
+    [≾] => &precsim;
+    [′] => &prime;
+    [ℙ] => &primes;
+    [∏] => &prod;
+    [⌮] => &profalar;
+    [⌒] => &profline;
+    [⌓] => &profsurf;
+    [∝] => &prop;
+    [⊰] => &prurel;
+    [𝓅] => &pscr;
+    [ψ] => &psi;
+    [ ] => &puncsp;
+    [𝔮] => &qfr;
+    [𝕢] => &qopf;
+    [⁗] => &qprime;
+    [𝓆] => &qscr;
+    [⨖] => &quatint;
+    [?] => &quest;
+    ["] => &quot;
+    [⇛] => &rAarr;
+    [⤜] => &rAtail;
+    [⥤] => &rHar;
+    [∽̱] => &race
+    [ŕ] => &racute;
+    [⦳] => &raemptyv;
+    [⦒] => &rangd;
+    [⦥] => &range;
+    [»] => &raquo;
+    [⥵] => &rarrap;
+    [⤠] => &rarrbfs;
+    [⤳] => &rarrc;
+    [⤞] => &rarrfs;
+    [↪] => &rarrhk;
+    [⥅] => &rarrpl;
+    [⥴] => &rarrsim;
+    [↣] => &rarrtl;
+    [↝] => &rarrw;
+    [⤚] => &ratail;
+    [∶] => &ratio;
+    [ℚ] => &rationals;
+    [❳] => &rbbrk;
+    [⦌] => &rbrke;
+    [⦎] => &rbrksld;
+    [⦐] => &rbrkslu;
+    [ř] => &rcaron;
+    [ŗ] => &rcedil;
+    [}] => &rcub;
+    [р] => &rcy;
+    [⤷] => &rdca;
+    [⥩] => &rdldhar;
+    [”] => &rdquo;
+    [↳] => &rdsh;
+    [ℛ] => &realine;
+    [▭] => &rect;
+    [®] => &reg;
+    [⥽] => &rfisht;
+    [𝔯] => &rfr;
+    [⇁] => &rhard;
+    [⇀] => &rharu;
+    [⥬] => &rharul;
+    [ρ] => &rho;
+    [ϱ] => &rhov;
+    [⇄] => &rightleftarrows;
+    [⇌] => &rightleftharpoons;
+    [˚] => &ring;
+    [≓] => &risingdotseq;
+    [‏] => &rlm;
+    [⎱] => &rmoust;
+    [⫮] => &rnmid;
+    [⟭] => &roang;
+    [⇾] => &roarr;
+    [⦆] => &ropar;
+    [𝕣] => &ropf;
+    [⨮] => &roplus;
+    [⨵] => &rotimes;
+    [)] => &rpar;
+    [⦔] => &rpargt;
+    [⨒] => &rppolint;
+    [⇉] => &rrarr;
+    [›] => &rsaquo;
+    [𝓇] => &rscr;
+    [↱] => &rsh;
+    []] => &rsqb;
+    [’] => &rsquo;
+    [⋌] => &rthree;
+    [⋊] => &rtimes;
+    [▹] => &rtri;
+    [⧎] => &rtriltri;
+    [⥨] => &ruluhar;
+    [℞] => &rx;
+    [ś] => &sacute;
+    [‚] => &sbquo;
+    [⪴] => &scE;
+    [š] => &scaron;
+    [ş] => &scedil;
+    [ŝ] => &scirc;
+    [⪶] => &scnE;
+    [⋩] => &scnsim;
+    [⨓] => &scpolint;
+    [с] => &scy;
+    [⋅] => &sdot;
+    [⊡] => &sdotb;
+    [⩦] => &sdote;
+    [⇘] => &seArr;
+    [⤥] => &searhk;
+    [§] => &sect;
+    [;] => &semi;
+    [⤩] => &seswar;
+    [✶] => &sext;
+    [𝔰] => &sfr;
+    [♯] => &sharp;
+    [щ] => &shchcy;
+    [ш] => &shcy;
+    [∥] => &shortparallel;
+    [­] => &shy;
+    [σ] => &sigma;
+    [ς] => &sigmav;
+    [∼] => &sim;
+    [⩪] => &simdot;
+    [≃] => &simeq;
+    [⪞] => &simg;
+    [⪠] => &simgE;
+    [⪝] => &siml;
+    [⪟] => &simlE;
+    [≆] => &simne;
+    [⨤] => &simplus;
+    [⥲] => &simrarr;
+    [⨳] => &smashp;
+    [⧤] => &smeparsl;
+    [⌣] => &smile;
+    [⪪] => &smt;
+    [⪬] => &smte;
+    [⪬︀] => &smtes
+    [ь] => &softcy;
+    [/] => &sol;
+    [⧄] => &solb;
+    [⌿] => &solbar;
+    [𝕤] => &sopf;
+    [♠] => &spadesuit;
+    [⊓] => &sqcap;
+    [⊓︀] => &sqcaps
+    [⊔] => &sqcup;
+    [⊔︀] => &sqcups
+    [⊏] => &sqsub;
+    [⊐] => &sqsupset;
+    [▪] => &squarf;
+    [→] => &srarr;
+    [𝓈] => &sscr;
+    [∖] => &ssetmn;
+    [☆] => &star;
+    [★] => &starf;
+    [ϵ] => &straightepsilon;
+    [ϕ] => &straightphi;
+    [⊂] => &sub;
+    [⫅] => &subE;
+    [⪽] => &subdot;
+    [⫃] => &subedot;
+    [⫁] => &submult;
+    [⪿] => &subplus;
+    [⥹] => &subrarr;
+    [⊊] => &subsetneq;
+    [⫋] => &subsetneqq;
+    [⫇] => &subsim;
+    [⫕] => &subsub;
+    [⫓] => &subsup;
+    [≻] => &succ;
+    [⪸] => &succapprox;
+    [≽] => &succcurlyeq;
+    [⪺] => &succnapprox;
+    [∑] => &sum;
+    [♪] => &sung;
+    [¹] => &sup1;
+    [²] => &sup2;
+    [³] => &sup3;
+    [⊃] => &sup;
+    [⪾] => &supdot;
+    [⫘] => &supdsub;
+    [⊇] => &supe;
+    [⫄] => &supedot;
+    [⟉] => &suphsol;
+    [⫗] => &suphsub;
+    [⥻] => &suplarr;
+    [⫂] => &supmult;
+    [⫌] => &supnE;
+    [⫀] => &supplus;
+    [⫆] => &supseteqq;
+    [⊋] => &supsetneq;
+    [⫈] => &supsim;
+    [⫔] => &supsub;
+    [⫖] => &supsup;
+    [⇙] => &swArr;
+    [⤦] => &swarhk;
+    [↙] => &swarr;
+    [⤪] => &swnwar;
+    [ß] => &szlig;
+    [⌖] => &target;
+    [τ] => &tau;
+    [ť] => &tcaron;
+    [ţ] => &tcedil;
+    [т] => &tcy;
+    [⌕] => &telrec;
+    [𝔱] => &tfr;
+    [∴] => &there4;
+    [θ] => &theta;
+    [ϑ] => &thetasym;
+    [þ] => &thorn;
+    [×] => &times;
+    [⊠] => &timesb;
+    [⨱] => &timesbar;
+    [⨰] => &timesd;
+    [∭] => &tint;
+    [⤨] => &toea;
+    [⌶] => &topbot;
+    [⫱] => &topcir;
+    [𝕥] => &topf;
+    [⫚] => &topfork;
+    [‴] => &tprime;
+    [™] => &trade;
+    [▵] => &triangle;
+    [▿] => &triangledown;
+    [≜] => &triangleq;
+    [◬] => &tridot;
+    [⨺] => &triminus;
+    [⨹] => &triplus;
+    [⧍] => &trisb;
+    [⨻] => &tritime;
+    [⏢] => &trpezium;
+    [𝓉] => &tscr;
+    [ц] => &tscy;
+    [ћ] => &tshcy;
+    [ŧ] => &tstrok;
+    [↠] => &twoheadrightarrow;
+    [⥣] => &uHar;
+    [ú] => &uacute;
+    [↑] => &uarr;
+    [ў] => &ubrcy;
+    [ŭ] => &ubreve;
+    [û] => &ucirc;
+    [у] => &ucy;
+    [⇅] => &udarr;
+    [ű] => &udblac;
+    [⥮] => &udhar;
+    [⥾] => &ufisht;
+    [𝔲] => &ufr;
+    [ù] => &ugrave;
+    [↿] => &uharl;
+    [▀] => &uhblk;
+    [⌜] => &ulcorner;
+    [⌏] => &ulcrop;
+    [◸] => &ultri;
+    [ū] => &umacr;
+    [ų] => &uogon;
+    [𝕦] => &uopf;
+    [υ] => &upsi;
+    [ϒ] => &upsih;
+    [⇈] => &upuparrows;
+    [⌝] => &urcorner;
+    [⌎] => &urcrop;
+    [ů] => &uring;
+    [◹] => &urtri;
+    [𝓊] => &uscr;
+    [⋰] => &utdot;
+    [ũ] => &utilde;
+    [ü] => &uuml;
+    [⦧] => &uwangle;
+    [⫨] => &vBar;
+    [⫩] => &vBarv;
+    [⦜] => &vangrt;
+    [ϰ] => &varkappa;
+    [⫌︀] => &varsupsetneqq
+    [⫽︀] => &varsupsetneqq
+    [⊲] => &vartriangleleft;
+    [в] => &vcy;
+    [⊢] => &vdash;
+    [⊻] => &veebar;
+    [≚] => &veeeq;
+    [⋮] => &vellip;
+    [|] => &vert;
+    [𝔳] => &vfr;
+    [⊂⃒] => &vnsub
+    [𝕧] => &vopf;
+    [⊳] => &vrtri;
+    [𝓋] => &vscr;
+    [⫋︀] => &vsubnE
+    [⊊︀] => &vsubne
+    [⊋︀] => &vsupne
+    [⦚] => &vzigzag;
+    [ŵ] => &wcirc;
+    [⩟] => &wedbar;
+    [≙] => &wedgeq;
+    [𝔴] => &wfr;
+    [𝕨] => &wopf;
+    [℘] => &wp;
+    [≀] => &wr;
+    [𝓌] => &wscr;
+    [𝔵] => &xfr;
+    [⟺] => &xhArr;
+    [ξ] => &xi;
+    [⟸] => &xlArr;
+    [⟼] => &xmap;
+    [⋻] => &xnis;
+    [⨀] => &xodot;
+    [𝕩] => &xopf;
+    [𝓍] => &xscr;
+    [⋁] => &xvee;
+    [⋀] => &xwedge;
+    [ý] => &yacute;
+    [я] => &yacy;
+    [ŷ] => &ycirc;
+    [ы] => &ycy;
+    [¥] => &yen;
+    [𝔶] => &yfr;
+    [ї] => &yicy;
+    [𝕪] => &yopf;
+    [𝓎] => &yscr;
+    [ю] => &yucy;
+    [ÿ] => &yuml;
+    [ź] => &zacute;
+    [ž] => &zcaron;
+    [з] => &zcy;
+    [ż] => &zdot;
+    [ζ] => &zeta;
+    [𝔷] => &zfr;
+    [ж] => &zhcy;
+    [⇝] => &zigrarr;
+    [𝕫] => &zopf;
+    [𝓏] => &zscr;
+    [‍] => &zwj;
+    [‌] => &zwnj;
+)
+-- with table = HTML_ENTITIES, ENT_QUOTES --
+int(1510)
+-- with table = HTML_ENTITIES, ENT_NOQUOTES --
+int(1508)
+-- with table = HTML_SPECIALCHARS, ENT_COMPAT --
+int(4)
+Array
+(
+    [&] => &amp;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_SPECIALCHARS, ENT_QUOTES --
+array(5) {
+  ["&"]=>
+  string(5) "&amp;"
+  ["'"]=>
+  string(6) "&apos;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
+}
+-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --
+array(3) {
+  ["&"]=>
+  string(5) "&amp;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+}
+Done
diff --git a/ext/standard/tests/strings/get_html_translation_table_basic6.phpt b/ext/standard/tests/strings/get_html_translation_table_basic6.phpt
new file mode 100644 (file)
index 0000000..a4b2909
--- /dev/null
@@ -0,0 +1,249 @@
+--TEST--
+Test get_html_translation_table() function : basic functionality - HTML 5/Windows-1251
+--FILE--
+<?php
+
+function so($a,$b) { return ord($a) - ord($b); }
+
+echo "*** Testing get_html_translation_table() : basic functionality - HTML 5/Windows-1251 ***\n";
+
+echo "-- with table = HTML_ENTITIES, ENT_COMPAT --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_COMPAT | ENT_HTML5, "Windows-1251");
+uksort( $tt, 'so' );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_ENTITIES, ENT_QUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "Windows-1251");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_ENTITIES, ENT_NOQUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "Windows-1251");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_COMPAT --\n";
+$table = HTML_SPECIALCHARS; 
+$tt = get_html_translation_table($table, ENT_COMPAT, "Windows-1251");
+uksort( $tt, 'so' );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_QUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "Windows-1251");
+uksort( $tt, 'so' );
+var_dump( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "Windows-1251");
+uasort( $tt, 'so' );
+var_dump( $tt );
+
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing get_html_translation_table() : basic functionality - HTML 5/Windows-1251 ***
+-- with table = HTML_ENTITIES, ENT_COMPAT --
+int(157)
+Array
+(
+    [  ] => &Tab;
+    [
+] => &NewLine;
+    [!] => &excl;
+    ["] => &quot;
+    [#] => &num;
+    [$] => &dollar;
+    [%] => &percnt;
+    [&] => &amp;
+    [(] => &lpar;
+    [)] => &rpar;
+    [*] => &ast;
+    [+] => &plus;
+    [,] => &comma;
+    [.] => &period;
+    [/] => &sol;
+    [:] => &colon;
+    [;] => &semi;
+    [<] => &lt;
+    [=] => &equals;
+    [>] => &gt;
+    [?] => &quest;
+    [@] => &commat;
+    [[] => &lbrack;
+    [\] => &bsol;
+    []] => &rsqb;
+    [^] => &Hat;
+    [_] => &lowbar;
+    [`] => &grave;
+    [fj] => &fjlig
+    [{] => &lbrace;
+    [|] => &vert;
+    [}] => &rcub;
+    [\80] => &DJcy;
+    [\81] => &GJcy;
+    [\82] => &sbquo;
+    [\83] => &gjcy;
+    [\84] => &bdquo;
+    [\85] => &hellip;
+    [\86] => &dagger;
+    [\87] => &Dagger;
+    [\88] => &euro;
+    [\89] => &permil;
+    [\8a] => &LJcy;
+    [\8b] => &lsaquo;
+    [\8c] => &NJcy;
+    [\8d] => &KJcy;
+    [\8e] => &TSHcy;
+    [\8f] => &DZcy;
+    [\90] => &djcy;
+    [\91] => &OpenCurlyQuote;
+    [\92] => &rsquo;
+    [\93] => &OpenCurlyDoubleQuote;
+    [\94] => &rdquo;
+    [\95] => &bull;
+    [\96] => &ndash;
+    [\97] => &mdash;
+    [\99] => &trade;
+    [\9a] => &ljcy;
+    [\9b] => &rsaquo;
+    [\9c] => &njcy;
+    [\9d] => &kjcy;
+    [\9e] => &tshcy;
+    [\9f] => &dzcy;
+    [ ] => &nbsp;
+    [¡] => &Ubrcy;
+    [¢] => &ubrcy;
+    [£] => &Jsercy;
+    [¤] => &curren;
+    [¦] => &brvbar;
+    [§] => &sect;
+    [¨] => &IOcy;
+    [©] => &copy;
+    [ª] => &Jukcy;
+    [«] => &laquo;
+    [¬] => &not;
+    [­] => &shy;
+    [®] => &reg;
+    [¯] => &YIcy;
+    [°] => &deg;
+    [±] => &plusmn;
+    [²] => &Iukcy;
+    [³] => &iukcy;
+    [µ] => &micro;
+    [¶] => &para;
+    [·] => &CenterDot;
+    [¸] => &iocy;
+    [¹] => &numero;
+    [º] => &jukcy;
+    [»] => &raquo;
+    [¼] => &jsercy;
+    [½] => &DScy;
+    [¾] => &dscy;
+    [¿] => &yicy;
+    [À] => &Acy;
+    [Á] => &Bcy;
+    [Â] => &Vcy;
+    [Ã] => &Gcy;
+    [Ä] => &Dcy;
+    [Å] => &IEcy;
+    [Æ] => &ZHcy;
+    [Ç] => &Zcy;
+    [È] => &Icy;
+    [É] => &Jcy;
+    [Ê] => &Kcy;
+    [Ë] => &Lcy;
+    [Ì] => &Mcy;
+    [Í] => &Ncy;
+    [Î] => &Ocy;
+    [Ï] => &Pcy;
+    [Ð] => &Rcy;
+    [Ñ] => &Scy;
+    [Ò] => &Tcy;
+    [Ó] => &Ucy;
+    [Ô] => &Fcy;
+    [Õ] => &KHcy;
+    [Ö] => &TScy;
+    [×] => &CHcy;
+    [Ø] => &SHcy;
+    [Ù] => &SHCHcy;
+    [Ú] => &HARDcy;
+    [Û] => &Ycy;
+    [Ü] => &SOFTcy;
+    [Ý] => &Ecy;
+    [Þ] => &YUcy;
+    [ß] => &YAcy;
+    [à] => &acy;
+    [á] => &bcy;
+    [â] => &vcy;
+    [ã] => &gcy;
+    [ä] => &dcy;
+    [å] => &iecy;
+    [æ] => &zhcy;
+    [ç] => &zcy;
+    [è] => &icy;
+    [é] => &jcy;
+    [ê] => &kcy;
+    [ë] => &lcy;
+    [ì] => &mcy;
+    [í] => &ncy;
+    [î] => &ocy;
+    [ï] => &pcy;
+    [ð] => &rcy;
+    [ñ] => &scy;
+    [ò] => &tcy;
+    [ó] => &ucy;
+    [ô] => &fcy;
+    [õ] => &khcy;
+    [ö] => &tscy;
+    [÷] => &chcy;
+    [ø] => &shcy;
+    [ù] => &shchcy;
+    [ú] => &hardcy;
+    [û] => &ycy;
+    [ü] => &softcy;
+    [ý] => &ecy;
+    [þ] => &yucy;
+    [ÿ] => &yacy;
+)
+-- with table = HTML_ENTITIES, ENT_QUOTES --
+int(158)
+-- with table = HTML_ENTITIES, ENT_NOQUOTES --
+int(156)
+-- with table = HTML_SPECIALCHARS, ENT_COMPAT --
+int(4)
+Array
+(
+    ["] => &quot;
+    [&] => &amp;
+    [<] => &lt;
+    [>] => &gt;
+)
+-- with table = HTML_SPECIALCHARS, ENT_QUOTES --
+array(5) {
+  ["""]=>
+  string(6) "&quot;"
+  ["&"]=>
+  string(5) "&amp;"
+  ["'"]=>
+  string(6) "&apos;"
+  ["<"]=>
+  string(4) "&lt;"
+  [">"]=>
+  string(4) "&gt;"
+}
+-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --
+array(3) {
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["&"]=>
+  string(5) "&amp;"
+}
+Done
diff --git a/ext/standard/tests/strings/get_html_translation_table_basic7.phpt b/ext/standard/tests/strings/get_html_translation_table_basic7.phpt
new file mode 100644 (file)
index 0000000..98ebbb9
--- /dev/null
@@ -0,0 +1,342 @@
+--TEST--
+Test get_html_translation_table() function : basic functionality - XHTML 1.0
+--FILE--
+<?php
+echo "*** Testing get_html_translation_table() : basic functionality/XHTML 1.0 ***\n";
+
+echo "-- with table = HTML_ENTITIES, ENT_QUOTES --\n";
+$table = HTML_ENTITIES;
+/* uses &#039; to share the code path with HTML 4.01 */
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_XHTML, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_ENTITIES, ENT_COMPAT --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_COMPAT | ENT_XHTML, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_ENTITIES, ENT_NOQUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_XHTML, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_COMPAT --\n";
+$table = HTML_SPECIALCHARS; 
+$tt = get_html_translation_table($table, ENT_COMPAT, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_QUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_XHTML, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_XHTML, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing get_html_translation_table() : basic functionality/XHTML 1.0 ***
+-- with table = HTML_ENTITIES, ENT_QUOTES --
+int(253)
+Array
+(
+    ['] => &#039;
+    [Æ] => &AElig;
+    [Á] => &Aacute;
+    [Â] => &Acirc;
+    [À] => &Agrave;
+    [Α] => &Alpha;
+    [Å] => &Aring;
+    [Ã] => &Atilde;
+    [Ä] => &Auml;
+    [Β] => &Beta;
+    [Ç] => &Ccedil;
+    [Χ] => &Chi;
+    [‡] => &Dagger;
+    [Δ] => &Delta;
+    [Ð] => &ETH;
+    [É] => &Eacute;
+    [Ê] => &Ecirc;
+    [È] => &Egrave;
+    [Ε] => &Epsilon;
+    [Η] => &Eta;
+    [Ë] => &Euml;
+    [Γ] => &Gamma;
+    [Í] => &Iacute;
+    [Î] => &Icirc;
+    [Ì] => &Igrave;
+    [Ι] => &Iota;
+    [Ï] => &Iuml;
+    [Κ] => &Kappa;
+    [Λ] => &Lambda;
+    [Μ] => &Mu;
+    [Ñ] => &Ntilde;
+    [Ν] => &Nu;
+    [Œ] => &OElig;
+    [Ó] => &Oacute;
+    [Ô] => &Ocirc;
+    [Ò] => &Ograve;
+    [Ω] => &Omega;
+    [Ο] => &Omicron;
+    [Ø] => &Oslash;
+    [Õ] => &Otilde;
+    [Ö] => &Ouml;
+    [Φ] => &Phi;
+    [Π] => &Pi;
+    [″] => &Prime;
+    [Ψ] => &Psi;
+    [Ρ] => &Rho;
+    [Š] => &Scaron;
+    [Σ] => &Sigma;
+    [Þ] => &THORN;
+    [Τ] => &Tau;
+    [Θ] => &Theta;
+    [Ú] => &Uacute;
+    [Û] => &Ucirc;
+    [Ù] => &Ugrave;
+    [Υ] => &Upsilon;
+    [Ü] => &Uuml;
+    [Ξ] => &Xi;
+    [Ý] => &Yacute;
+    [Ÿ] => &Yuml;
+    [Ζ] => &Zeta;
+    [á] => &aacute;
+    [â] => &acirc;
+    [´] => &acute;
+    [æ] => &aelig;
+    [à] => &agrave;
+    [ℵ] => &alefsym;
+    [α] => &alpha;
+    [&] => &amp;
+    [∧] => &and;
+    [∠] => &ang;
+    [å] => &aring;
+    [≈] => &asymp;
+    [ã] => &atilde;
+    [ä] => &auml;
+    [„] => &bdquo;
+    [β] => &beta;
+    [¦] => &brvbar;
+    [•] => &bull;
+    [∩] => &cap;
+    [ç] => &ccedil;
+    [¸] => &cedil;
+    [¢] => &cent;
+    [χ] => &chi;
+    [ˆ] => &circ;
+    [♣] => &clubs;
+    [≅] => &cong;
+    [©] => &copy;
+    [↵] => &crarr;
+    [∪] => &cup;
+    [¤] => &curren;
+    [⇓] => &dArr;
+    [†] => &dagger;
+    [↓] => &darr;
+    [°] => &deg;
+    [δ] => &delta;
+    [♦] => &diams;
+    [÷] => &divide;
+    [é] => &eacute;
+    [ê] => &ecirc;
+    [è] => &egrave;
+    [∅] => &empty;
+    [ ] => &emsp;
+    [ ] => &ensp;
+    [ε] => &epsilon;
+    [≡] => &equiv;
+    [η] => &eta;
+    [ð] => &eth;
+    [ë] => &euml;
+    [€] => &euro;
+    [∃] => &exist;
+    [ƒ] => &fnof;
+    [∀] => &forall;
+    [½] => &frac12;
+    [¼] => &frac14;
+    [¾] => &frac34;
+    [⁄] => &frasl;
+    [γ] => &gamma;
+    [≥] => &ge;
+    [>] => &gt;
+    [⇔] => &hArr;
+    [↔] => &harr;
+    [♥] => &hearts;
+    […] => &hellip;
+    [í] => &iacute;
+    [î] => &icirc;
+    [¡] => &iexcl;
+    [ì] => &igrave;
+    [ℑ] => &image;
+    [∞] => &infin;
+    [∫] => &int;
+    [ι] => &iota;
+    [¿] => &iquest;
+    [∈] => &isin;
+    [ï] => &iuml;
+    [κ] => &kappa;
+    [⇐] => &lArr;
+    [λ] => &lambda;
+    [〈] => &lang;
+    [«] => &laquo;
+    [←] => &larr;
+    [⌈] => &lceil;
+    [“] => &ldquo;
+    [≤] => &le;
+    [⌊] => &lfloor;
+    [∗] => &lowast;
+    [◊] => &loz;
+    [‎] => &lrm;
+    [‹] => &lsaquo;
+    [‘] => &lsquo;
+    [<] => &lt;
+    [¯] => &macr;
+    [—] => &mdash;
+    [µ] => &micro;
+    [·] => &middot;
+    [−] => &minus;
+    [μ] => &mu;
+    [∇] => &nabla;
+    [ ] => &nbsp;
+    [–] => &ndash;
+    [≠] => &ne;
+    [∋] => &ni;
+    [¬] => &not;
+    [∉] => &notin;
+    [⊄] => &nsub;
+    [ñ] => &ntilde;
+    [ν] => &nu;
+    [ó] => &oacute;
+    [ô] => &ocirc;
+    [œ] => &oelig;
+    [ò] => &ograve;
+    [‾] => &oline;
+    [ω] => &omega;
+    [ο] => &omicron;
+    [⊕] => &oplus;
+    [∨] => &or;
+    [ª] => &ordf;
+    [º] => &ordm;
+    [ø] => &oslash;
+    [õ] => &otilde;
+    [⊗] => &otimes;
+    [ö] => &ouml;
+    [¶] => &para;
+    [∂] => &part;
+    [‰] => &permil;
+    [⊥] => &perp;
+    [φ] => &phi;
+    [π] => &pi;
+    [ϖ] => &piv;
+    [±] => &plusmn;
+    [£] => &pound;
+    [′] => &prime;
+    [∏] => &prod;
+    [∝] => &prop;
+    [ψ] => &psi;
+    ["] => &quot;
+    [⇒] => &rArr;
+    [√] => &radic;
+    [〉] => &rang;
+    [»] => &raquo;
+    [→] => &rarr;
+    [⌉] => &rceil;
+    [”] => &rdquo;
+    [ℜ] => &real;
+    [®] => &reg;
+    [⌋] => &rfloor;
+    [ρ] => &rho;
+    [‏] => &rlm;
+    [›] => &rsaquo;
+    [’] => &rsquo;
+    [‚] => &sbquo;
+    [š] => &scaron;
+    [⋅] => &sdot;
+    [§] => &sect;
+    [­] => &shy;
+    [σ] => &sigma;
+    [ς] => &sigmaf;
+    [∼] => &sim;
+    [♠] => &spades;
+    [⊂] => &sub;
+    [⊆] => &sube;
+    [∑] => &sum;
+    [¹] => &sup1;
+    [²] => &sup2;
+    [³] => &sup3;
+    [⊃] => &sup;
+    [⊇] => &supe;
+    [ß] => &szlig;
+    [τ] => &tau;
+    [∴] => &there4;
+    [θ] => &theta;
+    [ϑ] => &thetasym;
+    [ ] => &thinsp;
+    [þ] => &thorn;
+    [˜] => &tilde;
+    [×] => &times;
+    [™] => &trade;
+    [⇑] => &uArr;
+    [ú] => &uacute;
+    [↑] => &uarr;
+    [û] => &ucirc;
+    [ù] => &ugrave;
+    [¨] => &uml;
+    [ϒ] => &upsih;
+    [υ] => &upsilon;
+    [ü] => &uuml;
+    [℘] => &weierp;
+    [ξ] => &xi;
+    [ý] => &yacute;
+    [¥] => &yen;
+    [ÿ] => &yuml;
+    [ζ] => &zeta;
+    [‍] => &zwj;
+    [‌] => &zwnj;
+)
+-- with table = HTML_ENTITIES, ENT_COMPAT --
+int(252)
+-- with table = HTML_ENTITIES, ENT_NOQUOTES --
+int(251)
+-- with table = HTML_SPECIALCHARS, ENT_COMPAT --
+int(4)
+Array
+(
+    [&] => &amp;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_SPECIALCHARS, ENT_QUOTES --
+array(5) {
+  ["&"]=>
+  string(5) "&amp;"
+  ["'"]=>
+  string(6) "&apos;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
+}
+-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --
+array(3) {
+  ["&"]=>
+  string(5) "&amp;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+}
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/strings/get_html_translation_table_basic8.phpt b/ext/standard/tests/strings/get_html_translation_table_basic8.phpt
new file mode 100644 (file)
index 0000000..8f8ca58
--- /dev/null
@@ -0,0 +1,93 @@
+--TEST--
+Test get_html_translation_table() function : basic functionality - XML 1.0
+--FILE--
+<?php
+echo "*** Testing get_html_translation_table() : basic functionality/XML 1.0 ***\n";
+
+echo "-- with table = HTML_ENTITIES, ENT_QUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_XML1, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_ENTITIES, ENT_COMPAT --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_COMPAT | ENT_XML1, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_ENTITIES, ENT_NOQUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_XML1, "UTF-8");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_COMPAT --\n";
+$table = HTML_SPECIALCHARS; 
+$tt = get_html_translation_table($table, ENT_COMPAT, "UTF-8");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_QUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_XML1, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_XML1, "UTF-8");
+asort( $tt );
+var_dump( $tt );
+
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing get_html_translation_table() : basic functionality/XML 1.0 ***
+-- with table = HTML_ENTITIES, ENT_QUOTES --
+int(5)
+Array
+(
+    [&] => &amp;
+    ['] => &apos;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_ENTITIES, ENT_COMPAT --
+int(4)
+-- with table = HTML_ENTITIES, ENT_NOQUOTES --
+int(3)
+-- with table = HTML_SPECIALCHARS, ENT_COMPAT --
+int(4)
+Array
+(
+    [&] => &amp;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_SPECIALCHARS, ENT_QUOTES --
+array(5) {
+  ["&"]=>
+  string(5) "&amp;"
+  ["'"]=>
+  string(6) "&apos;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
+}
+-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --
+array(3) {
+  ["&"]=>
+  string(5) "&amp;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+}
+Done
diff --git a/ext/standard/tests/strings/get_html_translation_table_basic9.phpt b/ext/standard/tests/strings/get_html_translation_table_basic9.phpt
new file mode 100644 (file)
index 0000000..cd32ccc
--- /dev/null
@@ -0,0 +1,95 @@
+--TEST--
+Test get_html_translation_table() function : basic functionality - HTML5 /sjis
+--FILE--
+<?php
+echo "*** Testing get_html_translation_table() : basic functionality/HTML5/SJIS ***\n";
+echo "*** Only basic entities supported! ***\n";
+
+echo "-- with table = HTML_ENTITIES, ENT_QUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "SJIS");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_ENTITIES, ENT_COMPAT --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_COMPAT | ENT_HTML5, "SJIS");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_ENTITIES, ENT_NOQUOTES --\n";
+$table = HTML_ENTITIES;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "SJIS");
+var_dump( count($tt) );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_COMPAT --\n";
+$table = HTML_SPECIALCHARS; 
+$tt = get_html_translation_table($table, ENT_COMPAT, "SJIS");
+asort( $tt );
+var_dump( count($tt) );
+print_r( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_QUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_QUOTES | ENT_HTML5, "SJIS");
+asort( $tt );
+var_dump( $tt );
+
+echo "-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --\n";
+$table = HTML_SPECIALCHARS;
+$tt = get_html_translation_table($table, ENT_NOQUOTES | ENT_HTML5, "SJIS");
+asort( $tt );
+var_dump( $tt );
+
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing get_html_translation_table() : basic functionality/HTML5/SJIS ***
+*** Only basic entities supported! ***
+-- with table = HTML_ENTITIES, ENT_QUOTES --
+int(5)
+Array
+(
+    [&] => &amp;
+    ['] => &apos;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_ENTITIES, ENT_COMPAT --
+int(4)
+-- with table = HTML_ENTITIES, ENT_NOQUOTES --
+int(3)
+-- with table = HTML_SPECIALCHARS, ENT_COMPAT --
+int(4)
+Array
+(
+    [&] => &amp;
+    [>] => &gt;
+    [<] => &lt;
+    ["] => &quot;
+)
+-- with table = HTML_SPECIALCHARS, ENT_QUOTES --
+array(5) {
+  ["&"]=>
+  string(5) "&amp;"
+  ["'"]=>
+  string(6) "&apos;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
+}
+-- with table = HTML_SPECIALCHARS, ENT_NOQUOTES --
+array(3) {
+  ["&"]=>
+  string(5) "&amp;"
+  [">"]=>
+  string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+}
+Done
\ No newline at end of file
index edae95a2e8ef0121632c6ed6163ea727a2d878ae..7f7e229354aefc07c32e3e523b9d7c1663d46ce6 100644 (file)
@@ -75,14 +75,22 @@ for($index = 0; $index < count($values); $index ++) {
   $v = get_html_translation_table($table, ENT_COMPAT, "UTF-8");
   if (is_array($v) && count($v) > 100)
     var_dump(count($v));
-   else
+   elseif (is_array($v)) {
+    asort($v);
     var_dump($v);
+   } else {
+    var_dump($v);
+   }
    
   $v = get_html_translation_table($table, $quote_style, "UTF-8");
   if (is_array($v) && count($v) > 100)
     var_dump(count($v));
-   else
+   elseif (is_array($v)) {
+    asort($v);
+    var_dump($v);
+   } else {
     var_dump($v);
+   }
 
   $counter ++;
 }
@@ -138,22 +146,22 @@ int(252)
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- Iteration 8 --
 int(252)
@@ -162,22 +170,22 @@ int(252)
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- Iteration 10 --
 
@@ -218,43 +226,43 @@ NULL
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- Iteration 16 --
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- Iteration 17 --
 
@@ -267,42 +275,42 @@ NULL
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 -- Iteration 19 --
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 array(4) {
   ["&"]=>
   string(5) "&amp;"
-  ["""]=>
-  string(6) "&quot;"
-  ["<"]=>
-  string(4) "&lt;"
   [">"]=>
   string(4) "&gt;"
+  ["<"]=>
+  string(4) "&lt;"
+  ["""]=>
+  string(6) "&quot;"
 }
 Done
diff --git a/ext/standard/tests/strings/html_entity_decode1.phpt b/ext/standard/tests/strings/html_entity_decode1.phpt
new file mode 100644 (file)
index 0000000..5eabfc3
--- /dev/null
@@ -0,0 +1,67 @@
+--TEST--
+html_entity_decode: Decoding of entities after invalid entities
+--FILE--
+<?php
+$arr = array(
+    "&",
+    "&&amp;",
+    "&&#x24;",
+    "&#&amp;",
+    "&#&#x24;",
+    "&#x&amp;",
+    "&#x&#x24;",
+    "&#x1&amp;",
+    "&#x1&#x24;",
+    "&#x20&amp;",
+    "&#x20&#x24;",
+    "&#1&amp;",
+    "&#1&#x24;",
+    "&#20&amp;",
+    "&#20&#x24;",
+    "&a&amp;",
+    "&a&#x24;",
+    "&aa&amp;",
+    "&aa&#x24;",
+    "&aa;&amp;",
+    "&aa;&#x24;",
+    "&;&amp;",
+    "&;&#x24;",
+);
+
+$i = 0;
+foreach ($arr as $ent) {
+    if ($i % 2 == 1) {
+        if (($a = html_entity_decode($ent, ENT_QUOTES, 'UTF-8')) !=
+                ($b = htmlspecialchars_decode($ent, ENT_QUOTES))) {
+            echo "htmlspecialchars_decode <-> html_entity_decode inconsistency","\n",
+                 "$b <-> $a","\n";
+        }
+    }
+    echo html_entity_decode($ent, ENT_QUOTES, 'UTF-8'), "\n";
+}
+echo "Done.\n";
+--EXPECT--
+&
+&&
+&$
+&#&
+&#$
+&#x&
+&#x$
+&#x1&
+&#x1$
+&#x20&
+&#x20$
+&#1&
+&#1$
+&#20&
+&#20$
+&a&
+&a$
+&aa&
+&aa$
+&aa;&
+&aa;$
+&;&
+&;$
+Done.
\ No newline at end of file
diff --git a/ext/standard/tests/strings/html_entity_decode2.phpt b/ext/standard/tests/strings/html_entity_decode2.phpt
new file mode 100644 (file)
index 0000000..b8a6e49
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+html_entity_decode: Handling of &apos;
+--FILE--
+<?php
+
+echo "*** HTML 4.01 implicit (shouldn't decode) ***\n";
+echo html_entity_decode("&apos;", ENT_QUOTES, "UTF-8"), "\n";
+
+echo "*** HTML 4.01 (shouldn't decode) ***\n";
+echo html_entity_decode("&apos;", ENT_QUOTES | ENT_HTML401, "UTF-8"), "\n";
+
+echo "*** HTML 5 ***\n";
+echo html_entity_decode("&apos;", ENT_QUOTES | ENT_HTML5, "UTF-8"), "\n";
+
+echo "*** XHTML 1.0 ***\n";
+echo html_entity_decode("&apos;", ENT_QUOTES | ENT_XHTML, "UTF-8"), "\n";
+
+echo "*** XML 1.0 ***\n";
+echo html_entity_decode("&apos;", ENT_QUOTES | ENT_XML1, "UTF-8"), "\n";
+
+echo "Done.\n";
+--EXPECT--
+*** HTML 4.01 implicit (shouldn't decode) ***
+&apos;
+*** HTML 4.01 (shouldn't decode) ***
+&apos;
+*** HTML 5 ***
+'
+*** XHTML 1.0 ***
+'
+*** XML 1.0 ***
+'
+Done.
\ No newline at end of file
diff --git a/ext/standard/tests/strings/html_entity_decode3.phpt b/ext/standard/tests/strings/html_entity_decode3.phpt
new file mode 100644 (file)
index 0000000..fcf2710
--- /dev/null
@@ -0,0 +1,193 @@
+--TEST--
+html_entity_decode: Do not decode numerical entities that refer to non-SGML or otherwise disallowed chars
+--FILE--
+<?php
+
+$tests = array(
+    "&#0;", //C0
+    "&#1;",
+    "&#x09;",
+    "&#x0A;",
+    "&#x0B;",
+    "&#x0C;",
+    "&#x0D;", //note that HTML5 is unique in that it forbids this entity, but allows a literal U+0D
+    "&#x0E;",
+    "&#x1F;",
+    "&#x20;", //allowed always
+    "&#x7F;", //DEL
+    "&#x80;", //C1
+    "&#x9F;",
+    "&#xA0;", //allowed always
+    "&#xD7FF;", //surrogates
+    "&#xD800;",
+    "&#xDFFF;",
+    "&#xE000;", //allowed always
+    "&#xFFFE;", //nonchar
+    "&#xFFFF;",
+    "&#xFDCF;", //allowed always
+    "&#xFDD0;", //nonchar
+    "&#xFDEF;",
+    "&#xFDF0;", //allowed always
+    "&#x2FFFE;", //nonchar
+    "&#x2FFFF;",
+);
+
+echo "*** HTML 4.01  ***\n";
+
+foreach ($tests as $t) {
+    $dec = html_entity_decode($t, ENT_QUOTES | ENT_HTML401, "UTF-8");
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** XHTML 1.0  ***\n";
+
+foreach ($tests as $t) {
+    $dec = html_entity_decode($t, ENT_QUOTES | ENT_XHTML, "UTF-8");
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** HTML5  ***\n";
+
+foreach ($tests as $t) {
+    $dec = html_entity_decode($t, ENT_QUOTES | ENT_HTML5, "UTF-8");
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** XML 1.0  ***\n";
+
+foreach ($tests as $t) {
+    $dec = html_entity_decode($t, ENT_QUOTES | ENT_XML1, "UTF-8");
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\nDone.\n";
+--EXPECT--
+*** HTML 4.01  ***
+&#0;   NOT DECODED
+&#1;   NOT DECODED
+&#x09; DECODED
+&#x0A; DECODED
+&#x0B; NOT DECODED
+&#x0C; NOT DECODED
+&#x0D; DECODED
+&#x0E; NOT DECODED
+&#x1F; NOT DECODED
+&#x20; DECODED
+&#x7F; NOT DECODED
+&#x80; NOT DECODED
+&#x9F; NOT DECODED
+&#xA0; DECODED
+&#xD7FF;       DECODED
+&#xD800;       NOT DECODED
+&#xDFFF;       NOT DECODED
+&#xE000;       DECODED
+&#xFFFE;       DECODED
+&#xFFFF;       DECODED
+&#xFDCF;       DECODED
+&#xFDD0;       DECODED
+&#xFDEF;       DECODED
+&#xFDF0;       DECODED
+&#x2FFFE;      DECODED
+&#x2FFFF;      DECODED
+
+*** XHTML 1.0  ***
+&#0;   NOT DECODED
+&#1;   NOT DECODED
+&#x09; DECODED
+&#x0A; DECODED
+&#x0B; NOT DECODED
+&#x0C; NOT DECODED
+&#x0D; DECODED
+&#x0E; NOT DECODED
+&#x1F; NOT DECODED
+&#x20; DECODED
+&#x7F; DECODED
+&#x80; DECODED
+&#x9F; DECODED
+&#xA0; DECODED
+&#xD7FF;       DECODED
+&#xD800;       NOT DECODED
+&#xDFFF;       NOT DECODED
+&#xE000;       DECODED
+&#xFFFE;       NOT DECODED
+&#xFFFF;       NOT DECODED
+&#xFDCF;       DECODED
+&#xFDD0;       DECODED
+&#xFDEF;       DECODED
+&#xFDF0;       DECODED
+&#x2FFFE;      DECODED
+&#x2FFFF;      DECODED
+
+*** HTML5  ***
+&#0;   NOT DECODED
+&#1;   NOT DECODED
+&#x09; DECODED
+&#x0A; DECODED
+&#x0B; NOT DECODED
+&#x0C; DECODED
+&#x0D; NOT DECODED
+&#x0E; NOT DECODED
+&#x1F; NOT DECODED
+&#x20; DECODED
+&#x7F; NOT DECODED
+&#x80; NOT DECODED
+&#x9F; NOT DECODED
+&#xA0; DECODED
+&#xD7FF;       DECODED
+&#xD800;       NOT DECODED
+&#xDFFF;       NOT DECODED
+&#xE000;       DECODED
+&#xFFFE;       NOT DECODED
+&#xFFFF;       NOT DECODED
+&#xFDCF;       DECODED
+&#xFDD0;       NOT DECODED
+&#xFDEF;       NOT DECODED
+&#xFDF0;       DECODED
+&#x2FFFE;      NOT DECODED
+&#x2FFFF;      NOT DECODED
+
+*** XML 1.0  ***
+&#0;   NOT DECODED
+&#1;   NOT DECODED
+&#x09; DECODED
+&#x0A; DECODED
+&#x0B; NOT DECODED
+&#x0C; NOT DECODED
+&#x0D; DECODED
+&#x0E; NOT DECODED
+&#x1F; NOT DECODED
+&#x20; DECODED
+&#x7F; DECODED
+&#x80; DECODED
+&#x9F; DECODED
+&#xA0; DECODED
+&#xD7FF;       DECODED
+&#xD800;       NOT DECODED
+&#xDFFF;       NOT DECODED
+&#xE000;       DECODED
+&#xFFFE;       NOT DECODED
+&#xFFFF;       NOT DECODED
+&#xFDCF;       DECODED
+&#xFDD0;       DECODED
+&#xFDEF;       DECODED
+&#xFDF0;       DECODED
+&#x2FFFE;      DECODED
+&#x2FFFF;      DECODED
+
+Done.
index 94b23b6660e41782d978a51fd6ed03e1081729dc..76323be30b283318fefb2008cf88c9043fa7c097 100644 (file)
@@ -236,10 +236,10 @@ CYRILLIC CAPITAL LETTER SOFT SIGN: &#x42C; => 9c
 CYRILLIC CAPITAL LETTER E: &#x42D; => 9d
 &#x9D; => &#x9D;
 
-CYRILLIC CAPITAL LETTER YU: &#x42E; => 9f
+CYRILLIC CAPITAL LETTER YU: &#x42E; => 9e
 &#x9E; => &#x9E;
 
-CYRILLIC CAPITAL LETTER YA: &#x42F; => 2623783432463b
+CYRILLIC CAPITAL LETTER YA: &#x42F; => 9f
 &#x9F; => &#x9F;
 
 CYRILLIC SMALL LETTER A: &#x430; => a0
index 3c92bf6fb791bb1f0ba32872a4a106c72aff362f..34753396de958ff53576e375669b3fa57f1ec0bf 100644 (file)
@@ -3,258 +3,258 @@ html_entity_decode() conformance check (HTML 4)
 --FILE--
 <?php
 $map = array(
-    "&quot;",
-    "&amp;",
-    "&lt;",
-    "&gt;",
-    "&nbsp;",
-    "&iexcl;",
-    "&cent;",
-    "&pound;",
-    "&curren;",
-    "&yen;",
-    "&brvbar;",
-    "&sect;",
-    "&uml;",
-    "&copy;",
-    "&ordf;",
-    "&laquo;",
-    "&not;",
-    "&shy;",
-    "&reg;",
-    "&macr;",
-    "&deg;",
-    "&plusmn;",
-    "&sup2;",
-    "&sup3;",
-    "&acute;",
-    "&micro;",
-    "&para;",
-    "&middot;",
-    "&cedil;",
-    "&sup1;",
-    "&ordm;",
-    "&raquo;",
-    "&frac14;",
-    "&frac12;",
-    "&frac34;",
-    "&iquest;",
-    "&Agrave;",
-    "&Aacute;",
-    "&Acirc;",
-    "&Atilde;",
-    "&Auml;",
-    "&Aring;",
-    "&AElig;",
-    "&Ccedil;",
-    "&Egrave;",
-    "&Eacute;",
-    "&Ecirc;",
-    "&Euml;",
-    "&Igrave;",
-    "&Iacute;",
-    "&Icirc;",
-    "&Iuml;",
-    "&ETH;",
-    "&Ntilde;",
-    "&Ograve;",
-    "&Oacute;",
-    "&Ocirc;",
-    "&Otilde;",
-    "&Ouml;",
-    "&times;",
-    "&Oslash;",
-    "&Ugrave;",
-    "&Uacute;",
-    "&Ucirc;",
-    "&Uuml;",
-    "&Yacute;",
-    "&THORN;",
-    "&szlig;",
-    "&agrave;",
-    "&aacute;",
-    "&acirc;",
-    "&atilde;",
-    "&auml;",
-    "&aring;",
-    "&aelig;",
-    "&ccedil;",
-    "&egrave;",
-    "&eacute;",
-    "&ecirc;",
-    "&euml;",
-    "&igrave;",
-    "&iacute;",
-    "&icirc;",
-    "&iuml;",
-    "&eth;",
-    "&ntilde;",
-    "&ograve;",
-    "&oacute;",
-    "&ocirc;",
-    "&otilde;",
-    "&ouml;",
-    "&divide;",
-    "&oslash;",
-    "&ugrave;",
-    "&uacute;",
-    "&ucirc;",
-    "&uuml;",
-    "&yacute;",
-    "&thorn;",
-    "&yuml;",
-    "&OElig;",
-    "&oelig;",
-    "&Scaron;",
-    "&scaron;",
-    "&Yuml;",
-    "&fnof;",
-    "&circ;",
-    "&tilde;",
-    "&Alpha;",
-    "&Beta;",
-    "&Gamma;",
-    "&Delta;",
-    "&Epsilon;",
-    "&Zeta;",
-    "&Eta;",
-    "&Theta;",
-    "&Iota;",
-    "&Kappa;",
-    "&Lambda;",
-    "&Mu;",
-    "&Nu;",
-    "&Xi;",
-    "&Omicron;",
-    "&Pi;",
-    "&Rho;",
-    "&Sigma;",
-    "&Tau;",
-    "&Upsilon;",
-    "&Phi;",
-    "&Chi;",
-    "&Psi;",
-    "&Omega;",
-    "&alpha;",
-    "&beta;",
-    "&gamma;",
-    "&delta;",
-    "&epsilon;",
-    "&zeta;",
-    "&eta;",
-    "&theta;",
-    "&iota;",
-    "&kappa;",
-    "&lambda;",
-    "&mu;",
-    "&nu;",
-    "&xi;",
-    "&omicron;",
-    "&pi;",
-    "&rho;",
-    "&sigmaf;",
-    "&sigma;",
-    "&tau;",
-    "&upsilon;",
-    "&phi;",
-    "&chi;",
-    "&psi;",
-    "&omega;",
-    "&thetasym;",
-    "&upsih;",
-    "&piv;",
-    "&ensp;",
-    "&emsp;",
-    "&thinsp;",
-    "&zwnj;",
-    "&zwj;",
-    "&lrm;",
-    "&rlm;",
-    "&ndash;",
-    "&mdash;",
-    "&lsquo;",
-    "&rsquo;",
-    "&sbquo;",
-    "&ldquo;",
-    "&rdquo;",
-    "&bdquo;",
-    "&dagger;",
-    "&Dagger;",
-    "&bull;",
-    "&hellip;",
-    "&permil;",
-    "&prime;",
-    "&Prime;",
-    "&lsaquo;",
-    "&rsaquo;",
-    "&oline;",
-    "&frasl;",
-    "&euro;",
-    "&image;",
-    "&weierp;",
-    "&real;",
-    "&trade;",
-    "&alefsym;",
-    "&larr;",
-    "&uarr;",
-    "&rarr;",
-    "&darr;",
-    "&harr;",
-    "&crarr;",
-    "&lArr;",
-    "&uArr;",
-    "&rArr;",
-    "&dArr;",
-    "&hArr;",
-    "&forall;",
-    "&part;",
-    "&exist;",
-    "&empty;",
-    "&nabla;",
-    "&isin;",
-    "&notin;",
-    "&ni;",
-    "&prod;",
-    "&sum;",
-    "&minus;",
-    "&lowast;",
-    "&radic;",
-    "&prop;",
-    "&infin;",
-    "&ang;",
-    "&and;",
-    "&or;",
-    "&cap;",
-    "&cup;",
-    "&int;",
-    "&there4;",
-    "&sim;",
-    "&cong;",
-    "&asymp;",
-    "&ne;",
-    "&equiv;",
-    "&le;",
-    "&ge;",
-    "&sub;",
-    "&sup;",
-    "&nsub;",
-    "&sube;",
-    "&supe;",
-    "&oplus;",
-    "&otimes;",
-    "&perp;",
-    "&sdot;",
-    "&lceil;",
-    "&rceil;",
-    "&lfloor;",
-    "&rfloor;",
-    "&lang;",
-    "&rang;",
-    "&loz;",
-    "&spades;",
-    "&clubs;",
-    "&hearts;",
-    "&diams;",
+       "&quot;",
+       "&amp;",
+       "&lt;",
+       "&gt;",
+       "&nbsp;",
+       "&iexcl;",
+       "&cent;",
+       "&pound;",
+       "&curren;",
+       "&yen;",
+       "&brvbar;",
+       "&sect;",
+       "&uml;",
+       "&copy;",
+       "&ordf;",
+       "&laquo;",
+       "&not;",
+       "&shy;",
+       "&reg;",
+       "&macr;",
+       "&deg;",
+       "&plusmn;",
+       "&sup2;",
+       "&sup3;",
+       "&acute;",
+       "&micro;",
+       "&para;",
+       "&middot;",
+       "&cedil;",
+       "&sup1;",
+       "&ordm;",
+       "&raquo;",
+       "&frac14;",
+       "&frac12;",
+       "&frac34;",
+       "&iquest;",
+       "&Agrave;",
+       "&Aacute;",
+       "&Acirc;",
+       "&Atilde;",
+       "&Auml;",
+       "&Aring;",
+       "&AElig;",
+       "&Ccedil;",
+       "&Egrave;",
+       "&Eacute;",
+       "&Ecirc;",
+       "&Euml;",
+       "&Igrave;",
+       "&Iacute;",
+       "&Icirc;",
+       "&Iuml;",
+       "&ETH;",
+       "&Ntilde;",
+       "&Ograve;",
+       "&Oacute;",
+       "&Ocirc;",
+       "&Otilde;",
+       "&Ouml;",
+       "&times;",
+       "&Oslash;",
+       "&Ugrave;",
+       "&Uacute;",
+       "&Ucirc;",
+       "&Uuml;",
+       "&Yacute;",
+       "&THORN;",
+       "&szlig;",
+       "&agrave;",
+       "&aacute;",
+       "&acirc;",
+       "&atilde;",
+       "&auml;",
+       "&aring;",
+       "&aelig;",
+       "&ccedil;",
+       "&egrave;",
+       "&eacute;",
+       "&ecirc;",
+       "&euml;",
+       "&igrave;",
+       "&iacute;",
+       "&icirc;",
+       "&iuml;",
+       "&eth;",
+       "&ntilde;",
+       "&ograve;",
+       "&oacute;",
+       "&ocirc;",
+       "&otilde;",
+       "&ouml;",
+       "&divide;",
+       "&oslash;",
+       "&ugrave;",
+       "&uacute;",
+       "&ucirc;",
+       "&uuml;",
+       "&yacute;",
+       "&thorn;",
+       "&yuml;",
+       "&OElig;",
+       "&oelig;",
+       "&Scaron;",
+       "&scaron;",
+       "&Yuml;",
+       "&fnof;",
+       "&circ;",
+       "&tilde;",
+       "&Alpha;",
+       "&Beta;",
+       "&Gamma;",
+       "&Delta;",
+       "&Epsilon;",
+       "&Zeta;",
+       "&Eta;",
+       "&Theta;",
+       "&Iota;",
+       "&Kappa;",
+       "&Lambda;",
+       "&Mu;",
+       "&Nu;",
+       "&Xi;",
+       "&Omicron;",
+       "&Pi;",
+       "&Rho;",
+       "&Sigma;",
+       "&Tau;",
+       "&Upsilon;",
+       "&Phi;",
+       "&Chi;",
+       "&Psi;",
+       "&Omega;",
+       "&alpha;",
+       "&beta;",
+       "&gamma;",
+       "&delta;",
+       "&epsilon;",
+       "&zeta;",
+       "&eta;",
+       "&theta;",
+       "&iota;",
+       "&kappa;",
+       "&lambda;",
+       "&mu;",
+       "&nu;",
+       "&xi;",
+       "&omicron;",
+       "&pi;",
+       "&rho;",
+       "&sigmaf;",
+       "&sigma;",
+       "&tau;",
+       "&upsilon;",
+       "&phi;",
+       "&chi;",
+       "&psi;",
+       "&omega;",
+       "&thetasym;",
+       "&upsih;",
+       "&piv;",
+       "&ensp;",
+       "&emsp;",
+       "&thinsp;",
+       "&zwnj;",
+       "&zwj;",
+       "&lrm;",
+       "&rlm;",
+       "&ndash;",
+       "&mdash;",
+       "&lsquo;",
+       "&rsquo;",
+       "&sbquo;",
+       "&ldquo;",
+       "&rdquo;",
+       "&bdquo;",
+       "&dagger;",
+       "&Dagger;",
+       "&bull;",
+       "&hellip;",
+       "&permil;",
+       "&prime;",
+       "&Prime;",
+       "&lsaquo;",
+       "&rsaquo;",
+       "&oline;",
+       "&frasl;",
+       "&euro;",
+       "&image;",
+       "&weierp;",
+       "&real;",
+       "&trade;",
+       "&alefsym;",
+       "&larr;",
+       "&uarr;",
+       "&rarr;",
+       "&darr;",
+       "&harr;",
+       "&crarr;",
+       "&lArr;",
+       "&uArr;",
+       "&rArr;",
+       "&dArr;",
+       "&hArr;",
+       "&forall;",
+       "&part;",
+       "&exist;",
+       "&empty;",
+       "&nabla;",
+       "&isin;",
+       "&notin;",
+       "&ni;",
+       "&prod;",
+       "&sum;",
+       "&minus;",
+       "&lowast;",
+       "&radic;",
+       "&prop;",
+       "&infin;",
+       "&ang;",
+       "&and;",
+       "&or;",
+       "&cap;",
+       "&cup;",
+       "&int;",
+       "&there4;",
+       "&sim;",
+       "&cong;",
+       "&asymp;",
+       "&ne;",
+       "&equiv;",
+       "&le;",
+       "&ge;",
+       "&sub;",
+       "&sup;",
+       "&nsub;",
+       "&sube;",
+       "&supe;",
+       "&oplus;",
+       "&otimes;",
+       "&perp;",
+       "&sdot;",
+       "&lceil;",
+       "&rceil;",
+       "&lfloor;",
+       "&rfloor;",
+       "&lang;",
+       "&rang;",
+       "&loz;",
+       "&spades;",
+       "&clubs;",
+       "&hearts;",
+       "&diams;"
 );
 
 foreach ($map as $str) {
diff --git a/ext/standard/tests/strings/html_entity_decode_html5.phpt b/ext/standard/tests/strings/html_entity_decode_html5.phpt
new file mode 100644 (file)
index 0000000..6e0d4cf
--- /dev/null
@@ -0,0 +1,4264 @@
+--TEST--
+html_entity_decode() conformance check (HTML 5)
+--FILE--
+<?php
+$map = array(
+       "&AElig;",
+       "&AMP;",
+       "&Aacute;",
+       "&Abreve;",
+       "&Acirc;",
+       "&Acy;",
+       "&Afr;",
+       "&Agrave;",
+       "&Alpha;",
+       "&Amacr;",
+       "&And;",
+       "&Aogon;",
+       "&Aopf;",
+       "&ApplyFunction;",
+       "&Aring;",
+       "&Ascr;",
+       "&Assign;",
+       "&Atilde;",
+       "&Auml;",
+       "&Backslash;",
+       "&Barv;",
+       "&Barwed;",
+       "&Bcy;",
+       "&Because;",
+       "&Bernoullis;",
+       "&Beta;",
+       "&Bfr;",
+       "&Bopf;",
+       "&Breve;",
+       "&Bscr;",
+       "&Bumpeq;",
+       "&CHcy;",
+       "&COPY;",
+       "&Cacute;",
+       "&Cap;",
+       "&CapitalDifferentialD;",
+       "&Cayleys;",
+       "&Ccaron;",
+       "&Ccedil;",
+       "&Ccirc;",
+       "&Cconint;",
+       "&Cdot;",
+       "&Cedilla;",
+       "&CenterDot;",
+       "&Cfr;",
+       "&Chi;",
+       "&CircleDot;",
+       "&CircleMinus;",
+       "&CirclePlus;",
+       "&CircleTimes;",
+       "&ClockwiseContourIntegral;",
+       "&CloseCurlyDoubleQuote;",
+       "&CloseCurlyQuote;",
+       "&Colon;",
+       "&Colone;",
+       "&Congruent;",
+       "&Conint;",
+       "&ContourIntegral;",
+       "&Copf;",
+       "&Coproduct;",
+       "&CounterClockwiseContourIntegral;",
+       "&Cross;",
+       "&Cscr;",
+       "&Cup;",
+       "&CupCap;",
+       "&DD;",
+       "&DDotrahd;",
+       "&DJcy;",
+       "&DScy;",
+       "&DZcy;",
+       "&Dagger;",
+       "&Darr;",
+       "&Dashv;",
+       "&Dcaron;",
+       "&Dcy;",
+       "&Del;",
+       "&Delta;",
+       "&Dfr;",
+       "&DiacriticalAcute;",
+       "&DiacriticalDot;",
+       "&DiacriticalDoubleAcute;",
+       "&DiacriticalGrave;",
+       "&DiacriticalTilde;",
+       "&Diamond;",
+       "&DifferentialD;",
+       "&Dopf;",
+       "&Dot;",
+       "&DotDot;",
+       "&DotEqual;",
+       "&DoubleContourIntegral;",
+       "&DoubleDot;",
+       "&DoubleDownArrow;",
+       "&DoubleLeftArrow;",
+       "&DoubleLeftRightArrow;",
+       "&DoubleLeftTee;",
+       "&DoubleLongLeftArrow;",
+       "&DoubleLongLeftRightArrow;",
+       "&DoubleLongRightArrow;",
+       "&DoubleRightArrow;",
+       "&DoubleRightTee;",
+       "&DoubleUpArrow;",
+       "&DoubleUpDownArrow;",
+       "&DoubleVerticalBar;",
+       "&DownArrow;",
+       "&DownArrowBar;",
+       "&DownArrowUpArrow;",
+       "&DownBreve;",
+       "&DownLeftRightVector;",
+       "&DownLeftTeeVector;",
+       "&DownLeftVector;",
+       "&DownLeftVectorBar;",
+       "&DownRightTeeVector;",
+       "&DownRightVector;",
+       "&DownRightVectorBar;",
+       "&DownTee;",
+       "&DownTeeArrow;",
+       "&Downarrow;",
+       "&Dscr;",
+       "&Dstrok;",
+       "&ENG;",
+       "&ETH;",
+       "&Eacute;",
+       "&Ecaron;",
+       "&Ecirc;",
+       "&Ecy;",
+       "&Edot;",
+       "&Efr;",
+       "&Egrave;",
+       "&Element;",
+       "&Emacr;",
+       "&EmptySmallSquare;",
+       "&EmptyVerySmallSquare;",
+       "&Eogon;",
+       "&Eopf;",
+       "&Epsilon;",
+       "&Equal;",
+       "&EqualTilde;",
+       "&Equilibrium;",
+       "&Escr;",
+       "&Esim;",
+       "&Eta;",
+       "&Euml;",
+       "&Exists;",
+       "&ExponentialE;",
+       "&Fcy;",
+       "&Ffr;",
+       "&FilledSmallSquare;",
+       "&FilledVerySmallSquare;",
+       "&Fopf;",
+       "&ForAll;",
+       "&Fouriertrf;",
+       "&Fscr;",
+       "&GJcy;",
+       "&GT;",
+       "&Gamma;",
+       "&Gammad;",
+       "&Gbreve;",
+       "&Gcedil;",
+       "&Gcirc;",
+       "&Gcy;",
+       "&Gdot;",
+       "&Gfr;",
+       "&Gg;",
+       "&Gopf;",
+       "&GreaterEqual;",
+       "&GreaterEqualLess;",
+       "&GreaterFullEqual;",
+       "&GreaterGreater;",
+       "&GreaterLess;",
+       "&GreaterSlantEqual;",
+       "&GreaterTilde;",
+       "&Gscr;",
+       "&Gt;",
+       "&HARDcy;",
+       "&Hacek;",
+       "&Hat;",
+       "&Hcirc;",
+       "&Hfr;",
+       "&HilbertSpace;",
+       "&Hopf;",
+       "&HorizontalLine;",
+       "&Hscr;",
+       "&Hstrok;",
+       "&HumpDownHump;",
+       "&HumpEqual;",
+       "&IEcy;",
+       "&IJlig;",
+       "&IOcy;",
+       "&Iacute;",
+       "&Icirc;",
+       "&Icy;",
+       "&Idot;",
+       "&Ifr;",
+       "&Igrave;",
+       "&Im;",
+       "&Imacr;",
+       "&ImaginaryI;",
+       "&Implies;",
+       "&Int;",
+       "&Integral;",
+       "&Intersection;",
+       "&InvisibleComma;",
+       "&InvisibleTimes;",
+       "&Iogon;",
+       "&Iopf;",
+       "&Iota;",
+       "&Iscr;",
+       "&Itilde;",
+       "&Iukcy;",
+       "&Iuml;",
+       "&Jcirc;",
+       "&Jcy;",
+       "&Jfr;",
+       "&Jopf;",
+       "&Jscr;",
+       "&Jsercy;",
+       "&Jukcy;",
+       "&KHcy;",
+       "&KJcy;",
+       "&Kappa;",
+       "&Kcedil;",
+       "&Kcy;",
+       "&Kfr;",
+       "&Kopf;",
+       "&Kscr;",
+       "&LJcy;",
+       "&LT;",
+       "&Lacute;",
+       "&Lambda;",
+       "&Lang;",
+       "&Laplacetrf;",
+       "&Larr;",
+       "&Lcaron;",
+       "&Lcedil;",
+       "&Lcy;",
+       "&LeftAngleBracket;",
+       "&LeftArrow;",
+       "&LeftArrowBar;",
+       "&LeftArrowRightArrow;",
+       "&LeftCeiling;",
+       "&LeftDoubleBracket;",
+       "&LeftDownTeeVector;",
+       "&LeftDownVector;",
+       "&LeftDownVectorBar;",
+       "&LeftFloor;",
+       "&LeftRightArrow;",
+       "&LeftRightVector;",
+       "&LeftTee;",
+       "&LeftTeeArrow;",
+       "&LeftTeeVector;",
+       "&LeftTriangle;",
+       "&LeftTriangleBar;",
+       "&LeftTriangleEqual;",
+       "&LeftUpDownVector;",
+       "&LeftUpTeeVector;",
+       "&LeftUpVector;",
+       "&LeftUpVectorBar;",
+       "&LeftVector;",
+       "&LeftVectorBar;",
+       "&Leftarrow;",
+       "&Leftrightarrow;",
+       "&LessEqualGreater;",
+       "&LessFullEqual;",
+       "&LessGreater;",
+       "&LessLess;",
+       "&LessSlantEqual;",
+       "&LessTilde;",
+       "&Lfr;",
+       "&Ll;",
+       "&Lleftarrow;",
+       "&Lmidot;",
+       "&LongLeftArrow;",
+       "&LongLeftRightArrow;",
+       "&LongRightArrow;",
+       "&Longleftarrow;",
+       "&Longleftrightarrow;",
+       "&Longrightarrow;",
+       "&Lopf;",
+       "&LowerLeftArrow;",
+       "&LowerRightArrow;",
+       "&Lscr;",
+       "&Lsh;",
+       "&Lstrok;",
+       "&Lt;",
+       "&Map;",
+       "&Mcy;",
+       "&MediumSpace;",
+       "&Mellintrf;",
+       "&Mfr;",
+       "&MinusPlus;",
+       "&Mopf;",
+       "&Mscr;",
+       "&Mu;",
+       "&NJcy;",
+       "&Nacute;",
+       "&Ncaron;",
+       "&Ncedil;",
+       "&Ncy;",
+       "&NegativeMediumSpace;",
+       "&NegativeThickSpace;",
+       "&NegativeThinSpace;",
+       "&NegativeVeryThinSpace;",
+       "&NestedGreaterGreater;",
+       "&NestedLessLess;",
+       "&NewLine;",
+       "&Nfr;",
+       "&NoBreak;",
+       "&NonBreakingSpace;",
+       "&Nopf;",
+       "&Not;",
+       "&NotCongruent;",
+       "&NotCupCap;",
+       "&NotDoubleVerticalBar;",
+       "&NotElement;",
+       "&NotEqual;",
+       "&NotEqualTilde;",
+       "&NotExists;",
+       "&NotGreater;",
+       "&NotGreaterEqual;",
+       "&NotGreaterFullEqual;",
+       "&NotGreaterGreater;",
+       "&NotGreaterLess;",
+       "&NotGreaterSlantEqual;",
+       "&NotGreaterTilde;",
+       "&NotHumpDownHump;",
+       "&NotHumpEqual;",
+       "&NotLeftTriangle;",
+       "&NotLeftTriangleBar;",
+       "&NotLeftTriangleEqual;",
+       "&NotLess;",
+       "&NotLessEqual;",
+       "&NotLessGreater;",
+       "&NotLessLess;",
+       "&NotLessSlantEqual;",
+       "&NotLessTilde;",
+       "&NotNestedGreaterGreater;",
+       "&NotNestedLessLess;",
+       "&NotPrecedes;",
+       "&NotPrecedesEqual;",
+       "&NotPrecedesSlantEqual;",
+       "&NotReverseElement;",
+       "&NotRightTriangle;",
+       "&NotRightTriangleBar;",
+       "&NotRightTriangleEqual;",
+       "&NotSquareSubset;",
+       "&NotSquareSubsetEqual;",
+       "&NotSquareSuperset;",
+       "&NotSquareSupersetEqual;",
+       "&NotSubset;",
+       "&NotSubsetEqual;",
+       "&NotSucceeds;",
+       "&NotSucceedsEqual;",
+       "&NotSucceedsSlantEqual;",
+       "&NotSucceedsTilde;",
+       "&NotSuperset;",
+       "&NotSupersetEqual;",
+       "&NotTilde;",
+       "&NotTildeEqual;",
+       "&NotTildeFullEqual;",
+       "&NotTildeTilde;",
+       "&NotVerticalBar;",
+       "&Nscr;",
+       "&Ntilde;",
+       "&Nu;",
+       "&OElig;",
+       "&Oacute;",
+       "&Ocirc;",
+       "&Ocy;",
+       "&Odblac;",
+       "&Ofr;",
+       "&Ograve;",
+       "&Omacr;",
+       "&Omega;",
+       "&Omicron;",
+       "&Oopf;",
+       "&OpenCurlyDoubleQuote;",
+       "&OpenCurlyQuote;",
+       "&Or;",
+       "&Oscr;",
+       "&Oslash;",
+       "&Otilde;",
+       "&Otimes;",
+       "&Ouml;",
+       "&OverBar;",
+       "&OverBrace;",
+       "&OverBracket;",
+       "&OverParenthesis;",
+       "&PartialD;",
+       "&Pcy;",
+       "&Pfr;",
+       "&Phi;",
+       "&Pi;",
+       "&PlusMinus;",
+       "&Poincareplane;",
+       "&Popf;",
+       "&Pr;",
+       "&Precedes;",
+       "&PrecedesEqual;",
+       "&PrecedesSlantEqual;",
+       "&PrecedesTilde;",
+       "&Prime;",
+       "&Product;",
+       "&Proportion;",
+       "&Proportional;",
+       "&Pscr;",
+       "&Psi;",
+       "&QUOT;",
+       "&Qfr;",
+       "&Qopf;",
+       "&Qscr;",
+       "&RBarr;",
+       "&REG;",
+       "&Racute;",
+       "&Rang;",
+       "&Rarr;",
+       "&Rarrtl;",
+       "&Rcaron;",
+       "&Rcedil;",
+       "&Rcy;",
+       "&Re;",
+       "&ReverseElement;",
+       "&ReverseEquilibrium;",
+       "&ReverseUpEquilibrium;",
+       "&Rfr;",
+       "&Rho;",
+       "&RightAngleBracket;",
+       "&RightArrow;",
+       "&RightArrowBar;",
+       "&RightArrowLeftArrow;",
+       "&RightCeiling;",
+       "&RightDoubleBracket;",
+       "&RightDownTeeVector;",
+       "&RightDownVector;",
+       "&RightDownVectorBar;",
+       "&RightFloor;",
+       "&RightTee;",
+       "&RightTeeArrow;",
+       "&RightTeeVector;",
+       "&RightTriangle;",
+       "&RightTriangleBar;",
+       "&RightTriangleEqual;",
+       "&RightUpDownVector;",
+       "&RightUpTeeVector;",
+       "&RightUpVector;",
+       "&RightUpVectorBar;",
+       "&RightVector;",
+       "&RightVectorBar;",
+       "&Rightarrow;",
+       "&Ropf;",
+       "&RoundImplies;",
+       "&Rrightarrow;",
+       "&Rscr;",
+       "&Rsh;",
+       "&RuleDelayed;",
+       "&SHCHcy;",
+       "&SHcy;",
+       "&SOFTcy;",
+       "&Sacute;",
+       "&Sc;",
+       "&Scaron;",
+       "&Scedil;",
+       "&Scirc;",
+       "&Scy;",
+       "&Sfr;",
+       "&ShortDownArrow;",
+       "&ShortLeftArrow;",
+       "&ShortRightArrow;",
+       "&ShortUpArrow;",
+       "&Sigma;",
+       "&SmallCircle;",
+       "&Sopf;",
+       "&Sqrt;",
+       "&Square;",
+       "&SquareIntersection;",
+       "&SquareSubset;",
+       "&SquareSubsetEqual;",
+       "&SquareSuperset;",
+       "&SquareSupersetEqual;",
+       "&SquareUnion;",
+       "&Sscr;",
+       "&Star;",
+       "&Sub;",
+       "&Subset;",
+       "&SubsetEqual;",
+       "&Succeeds;",
+       "&SucceedsEqual;",
+       "&SucceedsSlantEqual;",
+       "&SucceedsTilde;",
+       "&SuchThat;",
+       "&Sum;",
+       "&Sup;",
+       "&Superset;",
+       "&SupersetEqual;",
+       "&Supset;",
+       "&THORN;",
+       "&TRADE;",
+       "&TSHcy;",
+       "&TScy;",
+       "&Tab;",
+       "&Tau;",
+       "&Tcaron;",
+       "&Tcedil;",
+       "&Tcy;",
+       "&Tfr;",
+       "&Therefore;",
+       "&Theta;",
+       "&ThickSpace;",
+       "&ThinSpace;",
+       "&Tilde;",
+       "&TildeEqual;",
+       "&TildeFullEqual;",
+       "&TildeTilde;",
+       "&Topf;",
+       "&TripleDot;",
+       "&Tscr;",
+       "&Tstrok;",
+       "&Uacute;",
+       "&Uarr;",
+       "&Uarrocir;",
+       "&Ubrcy;",
+       "&Ubreve;",
+       "&Ucirc;",
+       "&Ucy;",
+       "&Udblac;",
+       "&Ufr;",
+       "&Ugrave;",
+       "&Umacr;",
+       "&UnderBar;",
+       "&UnderBrace;",
+       "&UnderBracket;",
+       "&UnderParenthesis;",
+       "&Union;",
+       "&UnionPlus;",
+       "&Uogon;",
+       "&Uopf;",
+       "&UpArrow;",
+       "&UpArrowBar;",
+       "&UpArrowDownArrow;",
+       "&UpDownArrow;",
+       "&UpEquilibrium;",
+       "&UpTee;",
+       "&UpTeeArrow;",
+       "&Uparrow;",
+       "&Updownarrow;",
+       "&UpperLeftArrow;",
+       "&UpperRightArrow;",
+       "&Upsi;",
+       "&Upsilon;",
+       "&Uring;",
+       "&Uscr;",
+       "&Utilde;",
+       "&Uuml;",
+       "&VDash;",
+       "&Vbar;",
+       "&Vcy;",
+       "&Vdash;",
+       "&Vdashl;",
+       "&Vee;",
+       "&Verbar;",
+       "&Vert;",
+       "&VerticalBar;",
+       "&VerticalLine;",
+       "&VerticalSeparator;",
+       "&VerticalTilde;",
+       "&VeryThinSpace;",
+       "&Vfr;",
+       "&Vopf;",
+       "&Vscr;",
+       "&Vvdash;",
+       "&Wcirc;",
+       "&Wedge;",
+       "&Wfr;",
+       "&Wopf;",
+       "&Wscr;",
+       "&Xfr;",
+       "&Xi;",
+       "&Xopf;",
+       "&Xscr;",
+       "&YAcy;",
+       "&YIcy;",
+       "&YUcy;",
+       "&Yacute;",
+       "&Ycirc;",
+       "&Ycy;",
+       "&Yfr;",
+       "&Yopf;",
+       "&Yscr;",
+       "&Yuml;",
+       "&ZHcy;",
+       "&Zacute;",
+       "&Zcaron;",
+       "&Zcy;",
+       "&Zdot;",
+       "&ZeroWidthSpace;",
+       "&Zeta;",
+       "&Zfr;",
+       "&Zopf;",
+       "&Zscr;",
+       "&aacute;",
+       "&abreve;",
+       "&ac;",
+       "&acE;",
+       "&acd;",
+       "&acirc;",
+       "&acute;",
+       "&acy;",
+       "&aelig;",
+       "&af;",
+       "&afr;",
+       "&agrave;",
+       "&alefsym;",
+       "&aleph;",
+       "&alpha;",
+       "&amacr;",
+       "&amalg;",
+       "&amp;",
+       "&and;",
+       "&andand;",
+       "&andd;",
+       "&andslope;",
+       "&andv;",
+       "&ang;",
+       "&ange;",
+       "&angle;",
+       "&angmsd;",
+       "&angmsdaa;",
+       "&angmsdab;",
+       "&angmsdac;",
+       "&angmsdad;",
+       "&angmsdae;",
+       "&angmsdaf;",
+       "&angmsdag;",
+       "&angmsdah;",
+       "&angrt;",
+       "&angrtvb;",
+       "&angrtvbd;",
+       "&angsph;",
+       "&angst;",
+       "&angzarr;",
+       "&aogon;",
+       "&aopf;",
+       "&ap;",
+       "&apE;",
+       "&apacir;",
+       "&ape;",
+       "&apid;",
+       "&apos;",
+       "&approx;",
+       "&approxeq;",
+       "&aring;",
+       "&ascr;",
+       "&ast;",
+       "&asymp;",
+       "&asympeq;",
+       "&atilde;",
+       "&auml;",
+       "&awconint;",
+       "&awint;",
+       "&bNot;",
+       "&backcong;",
+       "&backepsilon;",
+       "&backprime;",
+       "&backsim;",
+       "&backsimeq;",
+       "&barvee;",
+       "&barwed;",
+       "&barwedge;",
+       "&bbrk;",
+       "&bbrktbrk;",
+       "&bcong;",
+       "&bcy;",
+       "&bdquo;",
+       "&becaus;",
+       "&because;",
+       "&bemptyv;",
+       "&bepsi;",
+       "&bernou;",
+       "&beta;",
+       "&beth;",
+       "&between;",
+       "&bfr;",
+       "&bigcap;",
+       "&bigcirc;",
+       "&bigcup;",
+       "&bigodot;",
+       "&bigoplus;",
+       "&bigotimes;",
+       "&bigsqcup;",
+       "&bigstar;",
+       "&bigtriangledown;",
+       "&bigtriangleup;",
+       "&biguplus;",
+       "&bigvee;",
+       "&bigwedge;",
+       "&bkarow;",
+       "&blacklozenge;",
+       "&blacksquare;",
+       "&blacktriangle;",
+       "&blacktriangledown;",
+       "&blacktriangleleft;",
+       "&blacktriangleright;",
+       "&blank;",
+       "&blk12;",
+       "&blk14;",
+       "&blk34;",
+       "&block;",
+       "&bne;",
+       "&bnequiv;",
+       "&bnot;",
+       "&bopf;",
+       "&bot;",
+       "&bottom;",
+       "&bowtie;",
+       "&boxDL;",
+       "&boxDR;",
+       "&boxDl;",
+       "&boxDr;",
+       "&boxH;",
+       "&boxHD;",
+       "&boxHU;",
+       "&boxHd;",
+       "&boxHu;",
+       "&boxUL;",
+       "&boxUR;",
+       "&boxUl;",
+       "&boxUr;",
+       "&boxV;",
+       "&boxVH;",
+       "&boxVL;",
+       "&boxVR;",
+       "&boxVh;",
+       "&boxVl;",
+       "&boxVr;",
+       "&boxbox;",
+       "&boxdL;",
+       "&boxdR;",
+       "&boxdl;",
+       "&boxdr;",
+       "&boxh;",
+       "&boxhD;",
+       "&boxhU;",
+       "&boxhd;",
+       "&boxhu;",
+       "&boxminus;",
+       "&boxplus;",
+       "&boxtimes;",
+       "&boxuL;",
+       "&boxuR;",
+       "&boxul;",
+       "&boxur;",
+       "&boxv;",
+       "&boxvH;",
+       "&boxvL;",
+       "&boxvR;",
+       "&boxvh;",
+       "&boxvl;",
+       "&boxvr;",
+       "&bprime;",
+       "&breve;",
+       "&brvbar;",
+       "&bscr;",
+       "&bsemi;",
+       "&bsim;",
+       "&bsime;",
+       "&bsol;",
+       "&bsolb;",
+       "&bsolhsub;",
+       "&bull;",
+       "&bullet;",
+       "&bump;",
+       "&bumpE;",
+       "&bumpe;",
+       "&bumpeq;",
+       "&cacute;",
+       "&cap;",
+       "&capand;",
+       "&capbrcup;",
+       "&capcap;",
+       "&capcup;",
+       "&capdot;",
+       "&caps;",
+       "&caret;",
+       "&caron;",
+       "&ccaps;",
+       "&ccaron;",
+       "&ccedil;",
+       "&ccirc;",
+       "&ccups;",
+       "&ccupssm;",
+       "&cdot;",
+       "&cedil;",
+       "&cemptyv;",
+       "&cent;",
+       "&centerdot;",
+       "&cfr;",
+       "&chcy;",
+       "&check;",
+       "&checkmark;",
+       "&chi;",
+       "&cir;",
+       "&cirE;",
+       "&circ;",
+       "&circeq;",
+       "&circlearrowleft;",
+       "&circlearrowright;",
+       "&circledR;",
+       "&circledS;",
+       "&circledast;",
+       "&circledcirc;",
+       "&circleddash;",
+       "&cire;",
+       "&cirfnint;",
+       "&cirmid;",
+       "&cirscir;",
+       "&clubs;",
+       "&clubsuit;",
+       "&colon;",
+       "&colone;",
+       "&coloneq;",
+       "&comma;",
+       "&commat;",
+       "&comp;",
+       "&compfn;",
+       "&complement;",
+       "&complexes;",
+       "&cong;",
+       "&congdot;",
+       "&conint;",
+       "&copf;",
+       "&coprod;",
+       "&copy;",
+       "&copysr;",
+       "&crarr;",
+       "&cross;",
+       "&cscr;",
+       "&csub;",
+       "&csube;",
+       "&csup;",
+       "&csupe;",
+       "&ctdot;",
+       "&cudarrl;",
+       "&cudarrr;",
+       "&cuepr;",
+       "&cuesc;",
+       "&cularr;",
+       "&cularrp;",
+       "&cup;",
+       "&cupbrcap;",
+       "&cupcap;",
+       "&cupcup;",
+       "&cupdot;",
+       "&cupor;",
+       "&cups;",
+       "&curarr;",
+       "&curarrm;",
+       "&curlyeqprec;",
+       "&curlyeqsucc;",
+       "&curlyvee;",
+       "&curlywedge;",
+       "&curren;",
+       "&curvearrowleft;",
+       "&curvearrowright;",
+       "&cuvee;",
+       "&cuwed;",
+       "&cwconint;",
+       "&cwint;",
+       "&cylcty;",
+       "&dArr;",
+       "&dHar;",
+       "&dagger;",
+       "&daleth;",
+       "&darr;",
+       "&dash;",
+       "&dashv;",
+       "&dbkarow;",
+       "&dblac;",
+       "&dcaron;",
+       "&dcy;",
+       "&dd;",
+       "&ddagger;",
+       "&ddarr;",
+       "&ddotseq;",
+       "&deg;",
+       "&delta;",
+       "&demptyv;",
+       "&dfisht;",
+       "&dfr;",
+       "&dharl;",
+       "&dharr;",
+       "&diam;",
+       "&diamond;",
+       "&diamondsuit;",
+       "&diams;",
+       "&die;",
+       "&digamma;",
+       "&disin;",
+       "&div;",
+       "&divide;",
+       "&divideontimes;",
+       "&divonx;",
+       "&djcy;",
+       "&dlcorn;",
+       "&dlcrop;",
+       "&dollar;",
+       "&dopf;",
+       "&dot;",
+       "&doteq;",
+       "&doteqdot;",
+       "&dotminus;",
+       "&dotplus;",
+       "&dotsquare;",
+       "&doublebarwedge;",
+       "&downarrow;",
+       "&downdownarrows;",
+       "&downharpoonleft;",
+       "&downharpoonright;",
+       "&drbkarow;",
+       "&drcorn;",
+       "&drcrop;",
+       "&dscr;",
+       "&dscy;",
+       "&dsol;",
+       "&dstrok;",
+       "&dtdot;",
+       "&dtri;",
+       "&dtrif;",
+       "&duarr;",
+       "&duhar;",
+       "&dwangle;",
+       "&dzcy;",
+       "&dzigrarr;",
+       "&eDDot;",
+       "&eDot;",
+       "&eacute;",
+       "&easter;",
+       "&ecaron;",
+       "&ecir;",
+       "&ecirc;",
+       "&ecolon;",
+       "&ecy;",
+       "&edot;",
+       "&ee;",
+       "&efDot;",
+       "&efr;",
+       "&eg;",
+       "&egrave;",
+       "&egs;",
+       "&egsdot;",
+       "&el;",
+       "&elinters;",
+       "&ell;",
+       "&els;",
+       "&elsdot;",
+       "&emacr;",
+       "&empty;",
+       "&emptyset;",
+       "&emptyv;",
+       "&emsp;",
+       "&emsp13;",
+       "&emsp14;",
+       "&eng;",
+       "&ensp;",
+       "&eogon;",
+       "&eopf;",
+       "&epar;",
+       "&eparsl;",
+       "&eplus;",
+       "&epsi;",
+       "&epsilon;",
+       "&epsiv;",
+       "&eqcirc;",
+       "&eqcolon;",
+       "&eqsim;",
+       "&eqslantgtr;",
+       "&eqslantless;",
+       "&equals;",
+       "&equest;",
+       "&equiv;",
+       "&equivDD;",
+       "&eqvparsl;",
+       "&erDot;",
+       "&erarr;",
+       "&escr;",
+       "&esdot;",
+       "&esim;",
+       "&eta;",
+       "&eth;",
+       "&euml;",
+       "&euro;",
+       "&excl;",
+       "&exist;",
+       "&expectation;",
+       "&exponentiale;",
+       "&fallingdotseq;",
+       "&fcy;",
+       "&female;",
+       "&ffilig;",
+       "&fflig;",
+       "&ffllig;",
+       "&ffr;",
+       "&filig;",
+       "&fjlig;",
+       "&flat;",
+       "&fllig;",
+       "&fltns;",
+       "&fnof;",
+       "&fopf;",
+       "&forall;",
+       "&fork;",
+       "&forkv;",
+       "&fpartint;",
+       "&frac12;",
+       "&frac13;",
+       "&frac14;",
+       "&frac15;",
+       "&frac16;",
+       "&frac18;",
+       "&frac23;",
+       "&frac25;",
+       "&frac34;",
+       "&frac35;",
+       "&frac38;",
+       "&frac45;",
+       "&frac56;",
+       "&frac58;",
+       "&frac78;",
+       "&frasl;",
+       "&frown;",
+       "&fscr;",
+       "&gE;",
+       "&gEl;",
+       "&gacute;",
+       "&gamma;",
+       "&gammad;",
+       "&gap;",
+       "&gbreve;",
+       "&gcirc;",
+       "&gcy;",
+       "&gdot;",
+       "&ge;",
+       "&gel;",
+       "&geq;",
+       "&geqq;",
+       "&geqslant;",
+       "&ges;",
+       "&gescc;",
+       "&gesdot;",
+       "&gesdoto;",
+       "&gesdotol;",
+       "&gesl;",
+       "&gesles;",
+       "&gfr;",
+       "&gg;",
+       "&ggg;",
+       "&gimel;",
+       "&gjcy;",
+       "&gl;",
+       "&glE;",
+       "&gla;",
+       "&glj;",
+       "&gnE;",
+       "&gnap;",
+       "&gnapprox;",
+       "&gne;",
+       "&gneq;",
+       "&gneqq;",
+       "&gnsim;",
+       "&gopf;",
+       "&grave;",
+       "&gscr;",
+       "&gsim;",
+       "&gsime;",
+       "&gsiml;",
+       "&gt;",
+       "&gtcc;",
+       "&gtcir;",
+       "&gtdot;",
+       "&gtlPar;",
+       "&gtquest;",
+       "&gtrapprox;",
+       "&gtrarr;",
+       "&gtrdot;",
+       "&gtreqless;",
+       "&gtreqqless;",
+       "&gtrless;",
+       "&gtrsim;",
+       "&gvertneqq;",
+       "&gvnE;",
+       "&hArr;",
+       "&hairsp;",
+       "&half;",
+       "&hamilt;",
+       "&hardcy;",
+       "&harr;",
+       "&harrcir;",
+       "&harrw;",
+       "&hbar;",
+       "&hcirc;",
+       "&hearts;",
+       "&heartsuit;",
+       "&hellip;",
+       "&hercon;",
+       "&hfr;",
+       "&hksearow;",
+       "&hkswarow;",
+       "&hoarr;",
+       "&homtht;",
+       "&hookleftarrow;",
+       "&hookrightarrow;",
+       "&hopf;",
+       "&horbar;",
+       "&hscr;",
+       "&hslash;",
+       "&hstrok;",
+       "&hybull;",
+       "&hyphen;",
+       "&iacute;",
+       "&ic;",
+       "&icirc;",
+       "&icy;",
+       "&iecy;",
+       "&iexcl;",
+       "&iff;",
+       "&ifr;",
+       "&igrave;",
+       "&ii;",
+       "&iiiint;",
+       "&iiint;",
+       "&iinfin;",
+       "&iiota;",
+       "&ijlig;",
+       "&imacr;",
+       "&image;",
+       "&imagline;",
+       "&imagpart;",
+       "&imath;",
+       "&imof;",
+       "&imped;",
+       "&in;",
+       "&incare;",
+       "&infin;",
+       "&infintie;",
+       "&inodot;",
+       "&int;",
+       "&intcal;",
+       "&integers;",
+       "&intercal;",
+       "&intlarhk;",
+       "&intprod;",
+       "&iocy;",
+       "&iogon;",
+       "&iopf;",
+       "&iota;",
+       "&iprod;",
+       "&iquest;",
+       "&iscr;",
+       "&isin;",
+       "&isinE;",
+       "&isindot;",
+       "&isins;",
+       "&isinsv;",
+       "&isinv;",
+       "&it;",
+       "&itilde;",
+       "&iukcy;",
+       "&iuml;",
+       "&jcirc;",
+       "&jcy;",
+       "&jfr;",
+       "&jmath;",
+       "&jopf;",
+       "&jscr;",
+       "&jsercy;",
+       "&jukcy;",
+       "&kappa;",
+       "&kappav;",
+       "&kcedil;",
+       "&kcy;",
+       "&kfr;",
+       "&kgreen;",
+       "&khcy;",
+       "&kjcy;",
+       "&kopf;",
+       "&kscr;",
+       "&lAarr;",
+       "&lArr;",
+       "&lAtail;",
+       "&lBarr;",
+       "&lE;",
+       "&lEg;",
+       "&lHar;",
+       "&lacute;",
+       "&laemptyv;",
+       "&lagran;",
+       "&lambda;",
+       "&lang;",
+       "&langd;",
+       "&langle;",
+       "&lap;",
+       "&laquo;",
+       "&larr;",
+       "&larrb;",
+       "&larrbfs;",
+       "&larrfs;",
+       "&larrhk;",
+       "&larrlp;",
+       "&larrpl;",
+       "&larrsim;",
+       "&larrtl;",
+       "&lat;",
+       "&latail;",
+       "&late;",
+       "&lates;",
+       "&lbarr;",
+       "&lbbrk;",
+       "&lbrace;",
+       "&lbrack;",
+       "&lbrke;",
+       "&lbrksld;",
+       "&lbrkslu;",
+       "&lcaron;",
+       "&lcedil;",
+       "&lceil;",
+       "&lcub;",
+       "&lcy;",
+       "&ldca;",
+       "&ldquo;",
+       "&ldquor;",
+       "&ldrdhar;",
+       "&ldrushar;",
+       "&ldsh;",
+       "&le;",
+       "&leftarrow;",
+       "&leftarrowtail;",
+       "&leftharpoondown;",
+       "&leftharpoonup;",
+       "&leftleftarrows;",
+       "&leftrightarrow;",
+       "&leftrightarrows;",
+       "&leftrightharpoons;",
+       "&leftrightsquigarrow;",
+       "&leftthreetimes;",
+       "&leg;",
+       "&leq;",
+       "&leqq;",
+       "&leqslant;",
+       "&les;",
+       "&lescc;",
+       "&lesdot;",
+       "&lesdoto;",
+       "&lesdotor;",
+       "&lesg;",
+       "&lesges;",
+       "&lessapprox;",
+       "&lessdot;",
+       "&lesseqgtr;",
+       "&lesseqqgtr;",
+       "&lessgtr;",
+       "&lesssim;",
+       "&lfisht;",
+       "&lfloor;",
+       "&lfr;",
+       "&lg;",
+       "&lgE;",
+       "&lhard;",
+       "&lharu;",
+       "&lharul;",
+       "&lhblk;",
+       "&ljcy;",
+       "&ll;",
+       "&llarr;",
+       "&llcorner;",
+       "&llhard;",
+       "&lltri;",
+       "&lmidot;",
+       "&lmoust;",
+       "&lmoustache;",
+       "&lnE;",
+       "&lnap;",
+       "&lnapprox;",
+       "&lne;",
+       "&lneq;",
+       "&lneqq;",
+       "&lnsim;",
+       "&loang;",
+       "&loarr;",
+       "&lobrk;",
+       "&longleftarrow;",
+       "&longleftrightarrow;",
+       "&longmapsto;",
+       "&longrightarrow;",
+       "&looparrowleft;",
+       "&looparrowright;",
+       "&lopar;",
+       "&lopf;",
+       "&loplus;",
+       "&lotimes;",
+       "&lowast;",
+       "&lowbar;",
+       "&loz;",
+       "&lozenge;",
+       "&lozf;",
+       "&lpar;",
+       "&lparlt;",
+       "&lrarr;",
+       "&lrcorner;",
+       "&lrhar;",
+       "&lrhard;",
+       "&lrm;",
+       "&lrtri;",
+       "&lsaquo;",
+       "&lscr;",
+       "&lsh;",
+       "&lsim;",
+       "&lsime;",
+       "&lsimg;",
+       "&lsqb;",
+       "&lsquo;",
+       "&lsquor;",
+       "&lstrok;",
+       "&lt;",
+       "&ltcc;",
+       "&ltcir;",
+       "&ltdot;",
+       "&lthree;",
+       "&ltimes;",
+       "&ltlarr;",
+       "&ltquest;",
+       "&ltrPar;",
+       "&ltri;",
+       "&ltrie;",
+       "&ltrif;",
+       "&lurdshar;",
+       "&luruhar;",
+       "&lvertneqq;",
+       "&lvnE;",
+       "&mDDot;",
+       "&macr;",
+       "&male;",
+       "&malt;",
+       "&maltese;",
+       "&map;",
+       "&mapsto;",
+       "&mapstodown;",
+       "&mapstoleft;",
+       "&mapstoup;",
+       "&marker;",
+       "&mcomma;",
+       "&mcy;",
+       "&mdash;",
+       "&measuredangle;",
+       "&mfr;",
+       "&mho;",
+       "&micro;",
+       "&mid;",
+       "&midast;",
+       "&midcir;",
+       "&middot;",
+       "&minus;",
+       "&minusb;",
+       "&minusd;",
+       "&minusdu;",
+       "&mlcp;",
+       "&mldr;",
+       "&mnplus;",
+       "&models;",
+       "&mopf;",
+       "&mp;",
+       "&mscr;",
+       "&mstpos;",
+       "&mu;",
+       "&multimap;",
+       "&mumap;",
+       "&nGg;",
+       "&nGt;",
+       "&nGtv;",
+       "&nLeftarrow;",
+       "&nLeftrightarrow;",
+       "&nLl;",
+       "&nLt;",
+       "&nLtv;",
+       "&nRightarrow;",
+       "&nVDash;",
+       "&nVdash;",
+       "&nabla;",
+       "&nacute;",
+       "&nang;",
+       "&nap;",
+       "&napE;",
+       "&napid;",
+       "&napos;",
+       "&napprox;",
+       "&natur;",
+       "&natural;",
+       "&naturals;",
+       "&nbsp;",
+       "&nbump;",
+       "&nbumpe;",
+       "&ncap;",
+       "&ncaron;",
+       "&ncedil;",
+       "&ncong;",
+       "&ncongdot;",
+       "&ncup;",
+       "&ncy;",
+       "&ndash;",
+       "&ne;",
+       "&neArr;",
+       "&nearhk;",
+       "&nearr;",
+       "&nearrow;",
+       "&nedot;",
+       "&nequiv;",
+       "&nesear;",
+       "&nesim;",
+       "&nexist;",
+       "&nexists;",
+       "&nfr;",
+       "&ngE;",
+       "&nge;",
+       "&ngeq;",
+       "&ngeqq;",
+       "&ngeqslant;",
+       "&nges;",
+       "&ngsim;",
+       "&ngt;",
+       "&ngtr;",
+       "&nhArr;",
+       "&nharr;",
+       "&nhpar;",
+       "&ni;",
+       "&nis;",
+       "&nisd;",
+       "&niv;",
+       "&njcy;",
+       "&nlArr;",
+       "&nlE;",
+       "&nlarr;",
+       "&nldr;",
+       "&nle;",
+       "&nleftarrow;",
+       "&nleftrightarrow;",
+       "&nleq;",
+       "&nleqq;",
+       "&nleqslant;",
+       "&nles;",
+       "&nless;",
+       "&nlsim;",
+       "&nlt;",
+       "&nltri;",
+       "&nltrie;",
+       "&nmid;",
+       "&nopf;",
+       "&not;",
+       "&notin;",
+       "&notinE;",
+       "&notindot;",
+       "&notinva;",
+       "&notinvb;",
+       "&notinvc;",
+       "&notni;",
+       "&notniva;",
+       "&notnivb;",
+       "&notnivc;",
+       "&npar;",
+       "&nparallel;",
+       "&nparsl;",
+       "&npart;",
+       "&npolint;",
+       "&npr;",
+       "&nprcue;",
+       "&npre;",
+       "&nprec;",
+       "&npreceq;",
+       "&nrArr;",
+       "&nrarr;",
+       "&nrarrc;",
+       "&nrarrw;",
+       "&nrightarrow;",
+       "&nrtri;",
+       "&nrtrie;",
+       "&nsc;",
+       "&nsccue;",
+       "&nsce;",
+       "&nscr;",
+       "&nshortmid;",
+       "&nshortparallel;",
+       "&nsim;",
+       "&nsime;",
+       "&nsimeq;",
+       "&nsmid;",
+       "&nspar;",
+       "&nsqsube;",
+       "&nsqsupe;",
+       "&nsub;",
+       "&nsubE;",
+       "&nsube;",
+       "&nsubset;",
+       "&nsubseteq;",
+       "&nsubseteqq;",
+       "&nsucc;",
+       "&nsucceq;",
+       "&nsup;",
+       "&nsupE;",
+       "&nsupe;",
+       "&nsupset;",
+       "&nsupseteq;",
+       "&nsupseteqq;",
+       "&ntgl;",
+       "&ntilde;",
+       "&ntlg;",
+       "&ntriangleleft;",
+       "&ntrianglelefteq;",
+       "&ntriangleright;",
+       "&ntrianglerighteq;",
+       "&nu;",
+       "&num;",
+       "&numero;",
+       "&numsp;",
+       "&nvDash;",
+       "&nvHarr;",
+       "&nvap;",
+       "&nvdash;",
+       "&nvge;",
+       "&nvgt;",
+       "&nvinfin;",
+       "&nvlArr;",
+       "&nvle;",
+       "&nvlt;",
+       "&nvltrie;",
+       "&nvrArr;",
+       "&nvrtrie;",
+       "&nvsim;",
+       "&nwArr;",
+       "&nwarhk;",
+       "&nwarr;",
+       "&nwarrow;",
+       "&nwnear;",
+       "&oS;",
+       "&oacute;",
+       "&oast;",
+       "&ocir;",
+       "&ocirc;",
+       "&ocy;",
+       "&odash;",
+       "&odblac;",
+       "&odiv;",
+       "&odot;",
+       "&odsold;",
+       "&oelig;",
+       "&ofcir;",
+       "&ofr;",
+       "&ogon;",
+       "&ograve;",
+       "&ogt;",
+       "&ohbar;",
+       "&ohm;",
+       "&oint;",
+       "&olarr;",
+       "&olcir;",
+       "&olcross;",
+       "&oline;",
+       "&olt;",
+       "&omacr;",
+       "&omega;",
+       "&omicron;",
+       "&omid;",
+       "&ominus;",
+       "&oopf;",
+       "&opar;",
+       "&operp;",
+       "&oplus;",
+       "&or;",
+       "&orarr;",
+       "&ord;",
+       "&order;",
+       "&orderof;",
+       "&ordf;",
+       "&ordm;",
+       "&origof;",
+       "&oror;",
+       "&orslope;",
+       "&orv;",
+       "&oscr;",
+       "&oslash;",
+       "&osol;",
+       "&otilde;",
+       "&otimes;",
+       "&otimesas;",
+       "&ouml;",
+       "&ovbar;",
+       "&par;",
+       "&para;",
+       "&parallel;",
+       "&parsim;",
+       "&parsl;",
+       "&part;",
+       "&pcy;",
+       "&percnt;",
+       "&period;",
+       "&permil;",
+       "&perp;",
+       "&pertenk;",
+       "&pfr;",
+       "&phi;",
+       "&phiv;",
+       "&phmmat;",
+       "&phone;",
+       "&pi;",
+       "&pitchfork;",
+       "&piv;",
+       "&planck;",
+       "&planckh;",
+       "&plankv;",
+       "&plus;",
+       "&plusacir;",
+       "&plusb;",
+       "&pluscir;",
+       "&plusdo;",
+       "&plusdu;",
+       "&pluse;",
+       "&plusmn;",
+       "&plussim;",
+       "&plustwo;",
+       "&pm;",
+       "&pointint;",
+       "&popf;",
+       "&pound;",
+       "&pr;",
+       "&prE;",
+       "&prap;",
+       "&prcue;",
+       "&pre;",
+       "&prec;",
+       "&precapprox;",
+       "&preccurlyeq;",
+       "&preceq;",
+       "&precnapprox;",
+       "&precneqq;",
+       "&precnsim;",
+       "&precsim;",
+       "&prime;",
+       "&primes;",
+       "&prnE;",
+       "&prnap;",
+       "&prnsim;",
+       "&prod;",
+       "&profalar;",
+       "&profline;",
+       "&profsurf;",
+       "&prop;",
+       "&propto;",
+       "&prsim;",
+       "&prurel;",
+       "&pscr;",
+       "&psi;",
+       "&puncsp;",
+       "&qfr;",
+       "&qint;",
+       "&qopf;",
+       "&qprime;",
+       "&qscr;",
+       "&quaternions;",
+       "&quatint;",
+       "&quest;",
+       "&questeq;",
+       "&quot;",
+       "&rAarr;",
+       "&rArr;",
+       "&rAtail;",
+       "&rBarr;",
+       "&rHar;",
+       "&race;",
+       "&racute;",
+       "&radic;",
+       "&raemptyv;",
+       "&rang;",
+       "&rangd;",
+       "&range;",
+       "&rangle;",
+       "&raquo;",
+       "&rarr;",
+       "&rarrap;",
+       "&rarrb;",
+       "&rarrbfs;",
+       "&rarrc;",
+       "&rarrfs;",
+       "&rarrhk;",
+       "&rarrlp;",
+       "&rarrpl;",
+       "&rarrsim;",
+       "&rarrtl;",
+       "&rarrw;",
+       "&ratail;",
+       "&ratio;",
+       "&rationals;",
+       "&rbarr;",
+       "&rbbrk;",
+       "&rbrace;",
+       "&rbrack;",
+       "&rbrke;",
+       "&rbrksld;",
+       "&rbrkslu;",
+       "&rcaron;",
+       "&rcedil;",
+       "&rceil;",
+       "&rcub;",
+       "&rcy;",
+       "&rdca;",
+       "&rdldhar;",
+       "&rdquo;",
+       "&rdquor;",
+       "&rdsh;",
+       "&real;",
+       "&realine;",
+       "&realpart;",
+       "&reals;",
+       "&rect;",
+       "&reg;",
+       "&rfisht;",
+       "&rfloor;",
+       "&rfr;",
+       "&rhard;",
+       "&rharu;",
+       "&rharul;",
+       "&rho;",
+       "&rhov;",
+       "&rightarrow;",
+       "&rightarrowtail;",
+       "&rightharpoondown;",
+       "&rightharpoonup;",
+       "&rightleftarrows;",
+       "&rightleftharpoons;",
+       "&rightrightarrows;",
+       "&rightsquigarrow;",
+       "&rightthreetimes;",
+       "&ring;",
+       "&risingdotseq;",
+       "&rlarr;",
+       "&rlhar;",
+       "&rlm;",
+       "&rmoust;",
+       "&rmoustache;",
+       "&rnmid;",
+       "&roang;",
+       "&roarr;",
+       "&robrk;",
+       "&ropar;",
+       "&ropf;",
+       "&roplus;",
+       "&rotimes;",
+       "&rpar;",
+       "&rpargt;",
+       "&rppolint;",
+       "&rrarr;",
+       "&rsaquo;",
+       "&rscr;",
+       "&rsh;",
+       "&rsqb;",
+       "&rsquo;",
+       "&rsquor;",
+       "&rthree;",
+       "&rtimes;",
+       "&rtri;",
+       "&rtrie;",
+       "&rtrif;",
+       "&rtriltri;",
+       "&ruluhar;",
+       "&rx;",
+       "&sacute;",
+       "&sbquo;",
+       "&sc;",
+       "&scE;",
+       "&scap;",
+       "&scaron;",
+       "&sccue;",
+       "&sce;",
+       "&scedil;",
+       "&scirc;",
+       "&scnE;",
+       "&scnap;",
+       "&scnsim;",
+       "&scpolint;",
+       "&scsim;",
+       "&scy;",
+       "&sdot;",
+       "&sdotb;",
+       "&sdote;",
+       "&seArr;",
+       "&searhk;",
+       "&searr;",
+       "&searrow;",
+       "&sect;",
+       "&semi;",
+       "&seswar;",
+       "&setminus;",
+       "&setmn;",
+       "&sext;",
+       "&sfr;",
+       "&sfrown;",
+       "&sharp;",
+       "&shchcy;",
+       "&shcy;",
+       "&shortmid;",
+       "&shortparallel;",
+       "&shy;",
+       "&sigma;",
+       "&sigmaf;",
+       "&sigmav;",
+       "&sim;",
+       "&simdot;",
+       "&sime;",
+       "&simeq;",
+       "&simg;",
+       "&simgE;",
+       "&siml;",
+       "&simlE;",
+       "&simne;",
+       "&simplus;",
+       "&simrarr;",
+       "&slarr;",
+       "&smallsetminus;",
+       "&smashp;",
+       "&smeparsl;",
+       "&smid;",
+       "&smile;",
+       "&smt;",
+       "&smte;",
+       "&smtes;",
+       "&softcy;",
+       "&sol;",
+       "&solb;",
+       "&solbar;",
+       "&sopf;",
+       "&spades;",
+       "&spadesuit;",
+       "&spar;",
+       "&sqcap;",
+       "&sqcaps;",
+       "&sqcup;",
+       "&sqcups;",
+       "&sqsub;",
+       "&sqsube;",
+       "&sqsubset;",
+       "&sqsubseteq;",
+       "&sqsup;",
+       "&sqsupe;",
+       "&sqsupset;",
+       "&sqsupseteq;",
+       "&squ;",
+       "&square;",
+       "&squarf;",
+       "&squf;",
+       "&srarr;",
+       "&sscr;",
+       "&ssetmn;",
+       "&ssmile;",
+       "&sstarf;",
+       "&star;",
+       "&starf;",
+       "&straightepsilon;",
+       "&straightphi;",
+       "&strns;",
+       "&sub;",
+       "&subE;",
+       "&subdot;",
+       "&sube;",
+       "&subedot;",
+       "&submult;",
+       "&subnE;",
+       "&subne;",
+       "&subplus;",
+       "&subrarr;",
+       "&subset;",
+       "&subseteq;",
+       "&subseteqq;",
+       "&subsetneq;",
+       "&subsetneqq;",
+       "&subsim;",
+       "&subsub;",
+       "&subsup;",
+       "&succ;",
+       "&succapprox;",
+       "&succcurlyeq;",
+       "&succeq;",
+       "&succnapprox;",
+       "&succneqq;",
+       "&succnsim;",
+       "&succsim;",
+       "&sum;",
+       "&sung;",
+       "&sup;",
+       "&sup1;",
+       "&sup2;",
+       "&sup3;",
+       "&supE;",
+       "&supdot;",
+       "&supdsub;",
+       "&supe;",
+       "&supedot;",
+       "&suphsol;",
+       "&suphsub;",
+       "&suplarr;",
+       "&supmult;",
+       "&supnE;",
+       "&supne;",
+       "&supplus;",
+       "&supset;",
+       "&supseteq;",
+       "&supseteqq;",
+       "&supsetneq;",
+       "&supsetneqq;",
+       "&supsim;",
+       "&supsub;",
+       "&supsup;",
+       "&swArr;",
+       "&swarhk;",
+       "&swarr;",
+       "&swarrow;",
+       "&swnwar;",
+       "&szlig;",
+       "&target;",
+       "&tau;",
+       "&tbrk;",
+       "&tcaron;",
+       "&tcedil;",
+       "&tcy;",
+       "&tdot;",
+       "&telrec;",
+       "&tfr;",
+       "&there4;",
+       "&therefore;",
+       "&theta;",
+       "&thetasym;",
+       "&thetav;",
+       "&thickapprox;",
+       "&thicksim;",
+       "&thinsp;",
+       "&thkap;",
+       "&thksim;",
+       "&thorn;",
+       "&tilde;",
+       "&times;",
+       "&timesb;",
+       "&timesbar;",
+       "&timesd;",
+       "&tint;",
+       "&toea;",
+       "&top;",
+       "&topbot;",
+       "&topcir;",
+       "&topf;",
+       "&topfork;",
+       "&tosa;",
+       "&tprime;",
+       "&trade;",
+       "&triangle;",
+       "&triangledown;",
+       "&triangleleft;",
+       "&trianglelefteq;",
+       "&triangleq;",
+       "&triangleright;",
+       "&trianglerighteq;",
+       "&tridot;",
+       "&trie;",
+       "&triminus;",
+       "&triplus;",
+       "&trisb;",
+       "&tritime;",
+       "&trpezium;",
+       "&tscr;",
+       "&tscy;",
+       "&tshcy;",
+       "&tstrok;",
+       "&twixt;",
+       "&twoheadleftarrow;",
+       "&twoheadrightarrow;",
+       "&uArr;",
+       "&uHar;",
+       "&uacute;",
+       "&uarr;",
+       "&ubrcy;",
+       "&ubreve;",
+       "&ucirc;",
+       "&ucy;",
+       "&udarr;",
+       "&udblac;",
+       "&udhar;",
+       "&ufisht;",
+       "&ufr;",
+       "&ugrave;",
+       "&uharl;",
+       "&uharr;",
+       "&uhblk;",
+       "&ulcorn;",
+       "&ulcorner;",
+       "&ulcrop;",
+       "&ultri;",
+       "&umacr;",
+       "&uml;",
+       "&uogon;",
+       "&uopf;",
+       "&uparrow;",
+       "&updownarrow;",
+       "&upharpoonleft;",
+       "&upharpoonright;",
+       "&uplus;",
+       "&upsi;",
+       "&upsih;",
+       "&upsilon;",
+       "&upuparrows;",
+       "&urcorn;",
+       "&urcorner;",
+       "&urcrop;",
+       "&uring;",
+       "&urtri;",
+       "&uscr;",
+       "&utdot;",
+       "&utilde;",
+       "&utri;",
+       "&utrif;",
+       "&uuarr;",
+       "&uuml;",
+       "&uwangle;",
+       "&vArr;",
+       "&vBar;",
+       "&vBarv;",
+       "&vDash;",
+       "&vangrt;",
+       "&varepsilon;",
+       "&varkappa;",
+       "&varnothing;",
+       "&varphi;",
+       "&varpi;",
+       "&varpropto;",
+       "&varr;",
+       "&varrho;",
+       "&varsigma;",
+       "&varsubsetneq;",
+       "&varsubsetneqq;",
+       "&varsupsetneq;",
+       "&varsupsetneqq;",
+       "&vartheta;",
+       "&vartriangleleft;",
+       "&vartriangleright;",
+       "&vcy;",
+       "&vdash;",
+       "&vee;",
+       "&veebar;",
+       "&veeeq;",
+       "&vellip;",
+       "&verbar;",
+       "&vert;",
+       "&vfr;",
+       "&vltri;",
+       "&vnsub;",
+       "&vnsup;",
+       "&vopf;",
+       "&vprop;",
+       "&vrtri;",
+       "&vscr;",
+       "&vsubnE;",
+       "&vsubne;",
+       "&vsupnE;",
+       "&vsupne;",
+       "&vzigzag;",
+       "&wcirc;",
+       "&wedbar;",
+       "&wedge;",
+       "&wedgeq;",
+       "&weierp;",
+       "&wfr;",
+       "&wopf;",
+       "&wp;",
+       "&wr;",
+       "&wreath;",
+       "&wscr;",
+       "&xcap;",
+       "&xcirc;",
+       "&xcup;",
+       "&xdtri;",
+       "&xfr;",
+       "&xhArr;",
+       "&xharr;",
+       "&xi;",
+       "&xlArr;",
+       "&xlarr;",
+       "&xmap;",
+       "&xnis;",
+       "&xodot;",
+       "&xopf;",
+       "&xoplus;",
+       "&xotime;",
+       "&xrArr;",
+       "&xrarr;",
+       "&xscr;",
+       "&xsqcup;",
+       "&xuplus;",
+       "&xutri;",
+       "&xvee;",
+       "&xwedge;",
+       "&yacute;",
+       "&yacy;",
+       "&ycirc;",
+       "&ycy;",
+       "&yen;",
+       "&yfr;",
+       "&yicy;",
+       "&yopf;",
+       "&yscr;",
+       "&yucy;",
+       "&yuml;",
+       "&zacute;",
+       "&zcaron;",
+       "&zcy;",
+       "&zdot;",
+       "&zeetrf;",
+       "&zeta;",
+       "&zfr;",
+       "&zhcy;",
+       "&zigrarr;",
+       "&zopf;",
+       "&zscr;",
+       "&zwj;",
+       "&zwnj;",
+);
+
+foreach ($map as $str) {
+    $de = html_entity_decode($str, ENT_QUOTES | ENT_HTML5, "UTF-8");
+    echo "$str => $de ", bin2hex($de), "\n";
+}
+?>
+--EXPECT--
+&AElig; => Æ c386
+&AMP; => & 26
+&Aacute; => Á c381
+&Abreve; => Ă c482
+&Acirc; => Â c382
+&Acy; => А d090
+&Afr; => 𝔄 f09d9484
+&Agrave; => À c380
+&Alpha; => Α ce91
+&Amacr; => Ā c480
+&And; => ⩓ e2a993
+&Aogon; => Ą c484
+&Aopf; => 𝔸 f09d94b8
+&ApplyFunction; => ⁡ e281a1
+&Aring; => Å c385
+&Ascr; => 𝒜 f09d929c
+&Assign; => ≔ e28994
+&Atilde; => Ã c383
+&Auml; => Ä c384
+&Backslash; => ∖ e28896
+&Barv; => ⫧ e2aba7
+&Barwed; => ⌆ e28c86
+&Bcy; => Б d091
+&Because; => ∵ e288b5
+&Bernoullis; => ℬ e284ac
+&Beta; => Β ce92
+&Bfr; => 𝔅 f09d9485
+&Bopf; => 𝔹 f09d94b9
+&Breve; => ˘ cb98
+&Bscr; => ℬ e284ac
+&Bumpeq; => ≎ e2898e
+&CHcy; => Ч d0a7
+&COPY; => © c2a9
+&Cacute; => Ć c486
+&Cap; => ⋒ e28b92
+&CapitalDifferentialD; => ⅅ e28585
+&Cayleys; => ℭ e284ad
+&Ccaron; => Č c48c
+&Ccedil; => Ç c387
+&Ccirc; => Ĉ c488
+&Cconint; => ∰ e288b0
+&Cdot; => Ċ c48a
+&Cedilla; => ¸ c2b8
+&CenterDot; => · c2b7
+&Cfr; => ℭ e284ad
+&Chi; => Χ cea7
+&CircleDot; => ⊙ e28a99
+&CircleMinus; => ⊖ e28a96
+&CirclePlus; => ⊕ e28a95
+&CircleTimes; => ⊗ e28a97
+&ClockwiseContourIntegral; => ∲ e288b2
+&CloseCurlyDoubleQuote; => ” e2809d
+&CloseCurlyQuote; => ’ e28099
+&Colon; => ∷ e288b7
+&Colone; => ⩴ e2a9b4
+&Congruent; => ≡ e289a1
+&Conint; => ∯ e288af
+&ContourIntegral; => ∮ e288ae
+&Copf; => ℂ e28482
+&Coproduct; => ∐ e28890
+&CounterClockwiseContourIntegral; => ∳ e288b3
+&Cross; => ⨯ e2a8af
+&Cscr; => 𝒞 f09d929e
+&Cup; => ⋓ e28b93
+&CupCap; => ≍ e2898d
+&DD; => ⅅ e28585
+&DDotrahd; => ⤑ e2a491
+&DJcy; => Ђ d082
+&DScy; => Ѕ d085
+&DZcy; => Џ d08f
+&Dagger; => ‡ e280a1
+&Darr; => ↡ e286a1
+&Dashv; => ⫤ e2aba4
+&Dcaron; => Ď c48e
+&Dcy; => Д d094
+&Del; => ∇ e28887
+&Delta; => Δ ce94
+&Dfr; => 𝔇 f09d9487
+&DiacriticalAcute; => ´ c2b4
+&DiacriticalDot; => ˙ cb99
+&DiacriticalDoubleAcute; => ˝ cb9d
+&DiacriticalGrave; => ` 60
+&DiacriticalTilde; => ˜ cb9c
+&Diamond; => ⋄ e28b84
+&DifferentialD; => ⅆ e28586
+&Dopf; => 𝔻 f09d94bb
+&Dot; => ¨ c2a8
+&DotDot; => ⃜ e2839c
+&DotEqual; => ≐ e28990
+&DoubleContourIntegral; => ∯ e288af
+&DoubleDot; => ¨ c2a8
+&DoubleDownArrow; => ⇓ e28793
+&DoubleLeftArrow; => ⇐ e28790
+&DoubleLeftRightArrow; => ⇔ e28794
+&DoubleLeftTee; => ⫤ e2aba4
+&DoubleLongLeftArrow; => ⟸ e29fb8
+&DoubleLongLeftRightArrow; => ⟺ e29fba
+&DoubleLongRightArrow; => ⟹ e29fb9
+&DoubleRightArrow; => ⇒ e28792
+&DoubleRightTee; => ⊨ e28aa8
+&DoubleUpArrow; => ⇑ e28791
+&DoubleUpDownArrow; => ⇕ e28795
+&DoubleVerticalBar; => ∥ e288a5
+&DownArrow; => ↓ e28693
+&DownArrowBar; => ⤓ e2a493
+&DownArrowUpArrow; => ⇵ e287b5
+&DownBreve; => ̑ cc91
+&DownLeftRightVector; => ⥐ e2a590
+&DownLeftTeeVector; => ⥞ e2a59e
+&DownLeftVector; => ↽ e286bd
+&DownLeftVectorBar; => ⥖ e2a596
+&DownRightTeeVector; => ⥟ e2a59f
+&DownRightVector; => ⇁ e28781
+&DownRightVectorBar; => ⥗ e2a597
+&DownTee; => ⊤ e28aa4
+&DownTeeArrow; => ↧ e286a7
+&Downarrow; => ⇓ e28793
+&Dscr; => 𝒟 f09d929f
+&Dstrok; => Đ c490
+&ENG; => Ŋ c58a
+&ETH; => Ð c390
+&Eacute; => É c389
+&Ecaron; => Ě c49a
+&Ecirc; => Ê c38a
+&Ecy; => Э d0ad
+&Edot; => Ė c496
+&Efr; => 𝔈 f09d9488
+&Egrave; => È c388
+&Element; => ∈ e28888
+&Emacr; => Ē c492
+&EmptySmallSquare; => ◻ e297bb
+&EmptyVerySmallSquare; => ▫ e296ab
+&Eogon; => Ę c498
+&Eopf; => 𝔼 f09d94bc
+&Epsilon; => Ε ce95
+&Equal; => ⩵ e2a9b5
+&EqualTilde; => ≂ e28982
+&Equilibrium; => ⇌ e2878c
+&Escr; => ℰ e284b0
+&Esim; => ⩳ e2a9b3
+&Eta; => Η ce97
+&Euml; => Ë c38b
+&Exists; => ∃ e28883
+&ExponentialE; => ⅇ e28587
+&Fcy; => Ф d0a4
+&Ffr; => 𝔉 f09d9489
+&FilledSmallSquare; => ◼ e297bc
+&FilledVerySmallSquare; => ▪ e296aa
+&Fopf; => 𝔽 f09d94bd
+&ForAll; => ∀ e28880
+&Fouriertrf; => ℱ e284b1
+&Fscr; => ℱ e284b1
+&GJcy; => Ѓ d083
+&GT; => > 3e
+&Gamma; => Γ ce93
+&Gammad; => Ϝ cf9c
+&Gbreve; => Ğ c49e
+&Gcedil; => Ģ c4a2
+&Gcirc; => Ĝ c49c
+&Gcy; => Г d093
+&Gdot; => Ġ c4a0
+&Gfr; => 𝔊 f09d948a
+&Gg; => ⋙ e28b99
+&Gopf; => 𝔾 f09d94be
+&GreaterEqual; => ≥ e289a5
+&GreaterEqualLess; => ⋛ e28b9b
+&GreaterFullEqual; => ≧ e289a7
+&GreaterGreater; => ⪢ e2aaa2
+&GreaterLess; => ≷ e289b7
+&GreaterSlantEqual; => ⩾ e2a9be
+&GreaterTilde; => ≳ e289b3
+&Gscr; => 𝒢 f09d92a2
+&Gt; => ≫ e289ab
+&HARDcy; => Ъ d0aa
+&Hacek; => ˇ cb87
+&Hat; => ^ 5e
+&Hcirc; => Ĥ c4a4
+&Hfr; => ℌ e2848c
+&HilbertSpace; => ℋ e2848b
+&Hopf; => ℍ e2848d
+&HorizontalLine; => ─ e29480
+&Hscr; => ℋ e2848b
+&Hstrok; => Ħ c4a6
+&HumpDownHump; => ≎ e2898e
+&HumpEqual; => ≏ e2898f
+&IEcy; => Е d095
+&IJlig; => IJ c4b2
+&IOcy; => Ё d081
+&Iacute; => Í c38d
+&Icirc; => Î c38e
+&Icy; => И d098
+&Idot; => İ c4b0
+&Ifr; => ℑ e28491
+&Igrave; => Ì c38c
+&Im; => ℑ e28491
+&Imacr; => Ī c4aa
+&ImaginaryI; => ⅈ e28588
+&Implies; => ⇒ e28792
+&Int; => ∬ e288ac
+&Integral; => ∫ e288ab
+&Intersection; => ⋂ e28b82
+&InvisibleComma; => ⁣ e281a3
+&InvisibleTimes; => ⁢ e281a2
+&Iogon; => Į c4ae
+&Iopf; => 𝕀 f09d9580
+&Iota; => Ι ce99
+&Iscr; => ℐ e28490
+&Itilde; => Ĩ c4a8
+&Iukcy; => І d086
+&Iuml; => Ï c38f
+&Jcirc; => Ĵ c4b4
+&Jcy; => Й d099
+&Jfr; => 𝔍 f09d948d
+&Jopf; => 𝕁 f09d9581
+&Jscr; => 𝒥 f09d92a5
+&Jsercy; => Ј d088
+&Jukcy; => Є d084
+&KHcy; => Х d0a5
+&KJcy; => Ќ d08c
+&Kappa; => Κ ce9a
+&Kcedil; => Ķ c4b6
+&Kcy; => К d09a
+&Kfr; => 𝔎 f09d948e
+&Kopf; => 𝕂 f09d9582
+&Kscr; => 𝒦 f09d92a6
+&LJcy; => Љ d089
+&LT; => < 3c
+&Lacute; => Ĺ c4b9
+&Lambda; => Λ ce9b
+&Lang; => ⟪ e29faa
+&Laplacetrf; => ℒ e28492
+&Larr; => ↞ e2869e
+&Lcaron; => Ľ c4bd
+&Lcedil; => Ļ c4bb
+&Lcy; => Л d09b
+&LeftAngleBracket; => ⟨ e29fa8
+&LeftArrow; => ← e28690
+&LeftArrowBar; => ⇤ e287a4
+&LeftArrowRightArrow; => ⇆ e28786
+&LeftCeiling; => ⌈ e28c88
+&LeftDoubleBracket; => ⟦ e29fa6
+&LeftDownTeeVector; => ⥡ e2a5a1
+&LeftDownVector; => ⇃ e28783
+&LeftDownVectorBar; => ⥙ e2a599
+&LeftFloor; => ⌊ e28c8a
+&LeftRightArrow; => ↔ e28694
+&LeftRightVector; => ⥎ e2a58e
+&LeftTee; => ⊣ e28aa3
+&LeftTeeArrow; => ↤ e286a4
+&LeftTeeVector; => ⥚ e2a59a
+&LeftTriangle; => ⊲ e28ab2
+&LeftTriangleBar; => ⧏ e2a78f
+&LeftTriangleEqual; => ⊴ e28ab4
+&LeftUpDownVector; => ⥑ e2a591
+&LeftUpTeeVector; => ⥠ e2a5a0
+&LeftUpVector; => ↿ e286bf
+&LeftUpVectorBar; => ⥘ e2a598
+&LeftVector; => ↼ e286bc
+&LeftVectorBar; => ⥒ e2a592
+&Leftarrow; => ⇐ e28790
+&Leftrightarrow; => ⇔ e28794
+&LessEqualGreater; => ⋚ e28b9a
+&LessFullEqual; => ≦ e289a6
+&LessGreater; => ≶ e289b6
+&LessLess; => ⪡ e2aaa1
+&LessSlantEqual; => ⩽ e2a9bd
+&LessTilde; => ≲ e289b2
+&Lfr; => 𝔏 f09d948f
+&Ll; => ⋘ e28b98
+&Lleftarrow; => ⇚ e2879a
+&Lmidot; => Ŀ c4bf
+&LongLeftArrow; => ⟵ e29fb5
+&LongLeftRightArrow; => ⟷ e29fb7
+&LongRightArrow; => ⟶ e29fb6
+&Longleftarrow; => ⟸ e29fb8
+&Longleftrightarrow; => ⟺ e29fba
+&Longrightarrow; => ⟹ e29fb9
+&Lopf; => 𝕃 f09d9583
+&LowerLeftArrow; => ↙ e28699
+&LowerRightArrow; => ↘ e28698
+&Lscr; => ℒ e28492
+&Lsh; => ↰ e286b0
+&Lstrok; => Ł c581
+&Lt; => ≪ e289aa
+&Map; => ⤅ e2a485
+&Mcy; => М d09c
+&MediumSpace; =>   e2819f
+&Mellintrf; => ℳ e284b3
+&Mfr; => 𝔐 f09d9490
+&MinusPlus; => ∓ e28893
+&Mopf; => 𝕄 f09d9584
+&Mscr; => ℳ e284b3
+&Mu; => Μ ce9c
+&NJcy; => Њ d08a
+&Nacute; => Ń c583
+&Ncaron; => Ň c587
+&Ncedil; => Ņ c585
+&Ncy; => Н d09d
+&NegativeMediumSpace; => ​ e2808b
+&NegativeThickSpace; => ​ e2808b
+&NegativeThinSpace; => ​ e2808b
+&NegativeVeryThinSpace; => ​ e2808b
+&NestedGreaterGreater; => ≫ e289ab
+&NestedLessLess; => ≪ e289aa
+&NewLine; => 
+ 0a
+&Nfr; => 𝔑 f09d9491
+&NoBreak; => ⁠ e281a0
+&NonBreakingSpace; =>   c2a0
+&Nopf; => ℕ e28495
+&Not; => ⫬ e2abac
+&NotCongruent; => ≢ e289a2
+&NotCupCap; => ≭ e289ad
+&NotDoubleVerticalBar; => ∦ e288a6
+&NotElement; => ∉ e28889
+&NotEqual; => ≠ e289a0
+&NotEqualTilde; => ≂̸ e28982ccb8
+&NotExists; => ∄ e28884
+&NotGreater; => ≯ e289af
+&NotGreaterEqual; => ≱ e289b1
+&NotGreaterFullEqual; => ≧̸ e289a7ccb8
+&NotGreaterGreater; => ≫̸ e289abccb8
+&NotGreaterLess; => ≹ e289b9
+&NotGreaterSlantEqual; => ⩾̸ e2a9beccb8
+&NotGreaterTilde; => ≵ e289b5
+&NotHumpDownHump; => ≎̸ e2898eccb8
+&NotHumpEqual; => ≏̸ e2898fccb8
+&NotLeftTriangle; => ⋪ e28baa
+&NotLeftTriangleBar; => ⧏̸ e2a78fccb8
+&NotLeftTriangleEqual; => ⋬ e28bac
+&NotLess; => ≮ e289ae
+&NotLessEqual; => ≰ e289b0
+&NotLessGreater; => ≸ e289b8
+&NotLessLess; => ≪̸ e289aaccb8
+&NotLessSlantEqual; => ⩽̸ e2a9bdccb8
+&NotLessTilde; => ≴ e289b4
+&NotNestedGreaterGreater; => ⪢̸ e2aaa2ccb8
+&NotNestedLessLess; => ⪡̸ e2aaa1ccb8
+&NotPrecedes; => ⊀ e28a80
+&NotPrecedesEqual; => ⪯̸ e2aaafccb8
+&NotPrecedesSlantEqual; => ⋠ e28ba0
+&NotReverseElement; => ∌ e2888c
+&NotRightTriangle; => ⋫ e28bab
+&NotRightTriangleBar; => ⧐̸ e2a790ccb8
+&NotRightTriangleEqual; => ⋭ e28bad
+&NotSquareSubset; => ⊏̸ e28a8fccb8
+&NotSquareSubsetEqual; => ⋢ e28ba2
+&NotSquareSuperset; => ⊐̸ e28a90ccb8
+&NotSquareSupersetEqual; => ⋣ e28ba3
+&NotSubset; => ⊂⃒ e28a82e28392
+&NotSubsetEqual; => ⊈ e28a88
+&NotSucceeds; => ⊁ e28a81
+&NotSucceedsEqual; => ⪰̸ e2aab0ccb8
+&NotSucceedsSlantEqual; => ⋡ e28ba1
+&NotSucceedsTilde; => ≿̸ e289bfccb8
+&NotSuperset; => ⊃⃒ e28a83e28392
+&NotSupersetEqual; => ⊉ e28a89
+&NotTilde; => ≁ e28981
+&NotTildeEqual; => ≄ e28984
+&NotTildeFullEqual; => ≇ e28987
+&NotTildeTilde; => ≉ e28989
+&NotVerticalBar; => ∤ e288a4
+&Nscr; => 𝒩 f09d92a9
+&Ntilde; => Ñ c391
+&Nu; => Ν ce9d
+&OElig; => Œ c592
+&Oacute; => Ó c393
+&Ocirc; => Ô c394
+&Ocy; => О d09e
+&Odblac; => Ő c590
+&Ofr; => 𝔒 f09d9492
+&Ograve; => Ò c392
+&Omacr; => Ō c58c
+&Omega; => Ω cea9
+&Omicron; => Ο ce9f
+&Oopf; => 𝕆 f09d9586
+&OpenCurlyDoubleQuote; => “ e2809c
+&OpenCurlyQuote; => ‘ e28098
+&Or; => ⩔ e2a994
+&Oscr; => 𝒪 f09d92aa
+&Oslash; => Ø c398
+&Otilde; => Õ c395
+&Otimes; => ⨷ e2a8b7
+&Ouml; => Ö c396
+&OverBar; => ‾ e280be
+&OverBrace; => ⏞ e28f9e
+&OverBracket; => ⎴ e28eb4
+&OverParenthesis; => ⏜ e28f9c
+&PartialD; => ∂ e28882
+&Pcy; => П d09f
+&Pfr; => 𝔓 f09d9493
+&Phi; => Φ cea6
+&Pi; => Π cea0
+&PlusMinus; => ± c2b1
+&Poincareplane; => ℌ e2848c
+&Popf; => ℙ e28499
+&Pr; => ⪻ e2aabb
+&Precedes; => ≺ e289ba
+&PrecedesEqual; => ⪯ e2aaaf
+&PrecedesSlantEqual; => ≼ e289bc
+&PrecedesTilde; => ≾ e289be
+&Prime; => ″ e280b3
+&Product; => ∏ e2888f
+&Proportion; => ∷ e288b7
+&Proportional; => ∝ e2889d
+&Pscr; => 𝒫 f09d92ab
+&Psi; => Ψ cea8
+&QUOT; => " 22
+&Qfr; => 𝔔 f09d9494
+&Qopf; => ℚ e2849a
+&Qscr; => 𝒬 f09d92ac
+&RBarr; => ⤐ e2a490
+&REG; => ® c2ae
+&Racute; => Ŕ c594
+&Rang; => ⟫ e29fab
+&Rarr; => ↠ e286a0
+&Rarrtl; => ⤖ e2a496
+&Rcaron; => Ř c598
+&Rcedil; => Ŗ c596
+&Rcy; => Р d0a0
+&Re; => ℜ e2849c
+&ReverseElement; => ∋ e2888b
+&ReverseEquilibrium; => ⇋ e2878b
+&ReverseUpEquilibrium; => ⥯ e2a5af
+&Rfr; => ℜ e2849c
+&Rho; => Ρ cea1
+&RightAngleBracket; => ⟩ e29fa9
+&RightArrow; => → e28692
+&RightArrowBar; => ⇥ e287a5
+&RightArrowLeftArrow; => ⇄ e28784
+&RightCeiling; => ⌉ e28c89
+&RightDoubleBracket; => ⟧ e29fa7
+&RightDownTeeVector; => ⥝ e2a59d
+&RightDownVector; => ⇂ e28782
+&RightDownVectorBar; => ⥕ e2a595
+&RightFloor; => ⌋ e28c8b
+&RightTee; => ⊢ e28aa2
+&RightTeeArrow; => ↦ e286a6
+&RightTeeVector; => ⥛ e2a59b
+&RightTriangle; => ⊳ e28ab3
+&RightTriangleBar; => ⧐ e2a790
+&RightTriangleEqual; => ⊵ e28ab5
+&RightUpDownVector; => ⥏ e2a58f
+&RightUpTeeVector; => ⥜ e2a59c
+&RightUpVector; => ↾ e286be
+&RightUpVectorBar; => ⥔ e2a594
+&RightVector; => ⇀ e28780
+&RightVectorBar; => ⥓ e2a593
+&Rightarrow; => ⇒ e28792
+&Ropf; => ℝ e2849d
+&RoundImplies; => ⥰ e2a5b0
+&Rrightarrow; => ⇛ e2879b
+&Rscr; => ℛ e2849b
+&Rsh; => ↱ e286b1
+&RuleDelayed; => ⧴ e2a7b4
+&SHCHcy; => Щ d0a9
+&SHcy; => Ш d0a8
+&SOFTcy; => Ь d0ac
+&Sacute; => Ś c59a
+&Sc; => ⪼ e2aabc
+&Scaron; => Š c5a0
+&Scedil; => Ş c59e
+&Scirc; => Ŝ c59c
+&Scy; => С d0a1
+&Sfr; => 𝔖 f09d9496
+&ShortDownArrow; => ↓ e28693
+&ShortLeftArrow; => ← e28690
+&ShortRightArrow; => → e28692
+&ShortUpArrow; => ↑ e28691
+&Sigma; => Σ cea3
+&SmallCircle; => ∘ e28898
+&Sopf; => 𝕊 f09d958a
+&Sqrt; => √ e2889a
+&Square; => □ e296a1
+&SquareIntersection; => ⊓ e28a93
+&SquareSubset; => ⊏ e28a8f
+&SquareSubsetEqual; => ⊑ e28a91
+&SquareSuperset; => ⊐ e28a90
+&SquareSupersetEqual; => ⊒ e28a92
+&SquareUnion; => ⊔ e28a94
+&Sscr; => 𝒮 f09d92ae
+&Star; => ⋆ e28b86
+&Sub; => ⋐ e28b90
+&Subset; => ⋐ e28b90
+&SubsetEqual; => ⊆ e28a86
+&Succeeds; => ≻ e289bb
+&SucceedsEqual; => ⪰ e2aab0
+&SucceedsSlantEqual; => ≽ e289bd
+&SucceedsTilde; => ≿ e289bf
+&SuchThat; => ∋ e2888b
+&Sum; => ∑ e28891
+&Sup; => ⋑ e28b91
+&Superset; => ⊃ e28a83
+&SupersetEqual; => ⊇ e28a87
+&Supset; => ⋑ e28b91
+&THORN; => Þ c39e
+&TRADE; => ™ e284a2
+&TSHcy; => Ћ d08b
+&TScy; => Ц d0a6
+&Tab; =>        09
+&Tau; => Τ cea4
+&Tcaron; => Ť c5a4
+&Tcedil; => Ţ c5a2
+&Tcy; => Т d0a2
+&Tfr; => 𝔗 f09d9497
+&Therefore; => ∴ e288b4
+&Theta; => Θ ce98
+&ThickSpace; =>    e2819fe2808a
+&ThinSpace; =>   e28089
+&Tilde; => ∼ e288bc
+&TildeEqual; => ≃ e28983
+&TildeFullEqual; => ≅ e28985
+&TildeTilde; => ≈ e28988
+&Topf; => 𝕋 f09d958b
+&TripleDot; => ⃛ e2839b
+&Tscr; => 𝒯 f09d92af
+&Tstrok; => Ŧ c5a6
+&Uacute; => Ú c39a
+&Uarr; => ↟ e2869f
+&Uarrocir; => ⥉ e2a589
+&Ubrcy; => Ў d08e
+&Ubreve; => Ŭ c5ac
+&Ucirc; => Û c39b
+&Ucy; => У d0a3
+&Udblac; => Ű c5b0
+&Ufr; => 𝔘 f09d9498
+&Ugrave; => Ù c399
+&Umacr; => Ū c5aa
+&UnderBar; => _ 5f
+&UnderBrace; => ⏟ e28f9f
+&UnderBracket; => ⎵ e28eb5
+&UnderParenthesis; => ⏝ e28f9d
+&Union; => ⋃ e28b83
+&UnionPlus; => ⊎ e28a8e
+&Uogon; => Ų c5b2
+&Uopf; => 𝕌 f09d958c
+&UpArrow; => ↑ e28691
+&UpArrowBar; => ⤒ e2a492
+&UpArrowDownArrow; => ⇅ e28785
+&UpDownArrow; => ↕ e28695
+&UpEquilibrium; => ⥮ e2a5ae
+&UpTee; => ⊥ e28aa5
+&UpTeeArrow; => ↥ e286a5
+&Uparrow; => ⇑ e28791
+&Updownarrow; => ⇕ e28795
+&UpperLeftArrow; => ↖ e28696
+&UpperRightArrow; => ↗ e28697
+&Upsi; => ϒ cf92
+&Upsilon; => Υ cea5
+&Uring; => Ů c5ae
+&Uscr; => 𝒰 f09d92b0
+&Utilde; => Ũ c5a8
+&Uuml; => Ü c39c
+&VDash; => ⊫ e28aab
+&Vbar; => ⫫ e2abab
+&Vcy; => В d092
+&Vdash; => ⊩ e28aa9
+&Vdashl; => ⫦ e2aba6
+&Vee; => ⋁ e28b81
+&Verbar; => ‖ e28096
+&Vert; => ‖ e28096
+&VerticalBar; => ∣ e288a3
+&VerticalLine; => | 7c
+&VerticalSeparator; => ❘ e29d98
+&VerticalTilde; => ≀ e28980
+&VeryThinSpace; =>   e2808a
+&Vfr; => 𝔙 f09d9499
+&Vopf; => 𝕍 f09d958d
+&Vscr; => 𝒱 f09d92b1
+&Vvdash; => ⊪ e28aaa
+&Wcirc; => Ŵ c5b4
+&Wedge; => ⋀ e28b80
+&Wfr; => 𝔚 f09d949a
+&Wopf; => 𝕎 f09d958e
+&Wscr; => 𝒲 f09d92b2
+&Xfr; => 𝔛 f09d949b
+&Xi; => Ξ ce9e
+&Xopf; => 𝕏 f09d958f
+&Xscr; => 𝒳 f09d92b3
+&YAcy; => Я d0af
+&YIcy; => Ї d087
+&YUcy; => Ю d0ae
+&Yacute; => Ý c39d
+&Ycirc; => Ŷ c5b6
+&Ycy; => Ы d0ab
+&Yfr; => 𝔜 f09d949c
+&Yopf; => 𝕐 f09d9590
+&Yscr; => 𝒴 f09d92b4
+&Yuml; => Ÿ c5b8
+&ZHcy; => Ж d096
+&Zacute; => Ź c5b9
+&Zcaron; => Ž c5bd
+&Zcy; => З d097
+&Zdot; => Ż c5bb
+&ZeroWidthSpace; => ​ e2808b
+&Zeta; => Ζ ce96
+&Zfr; => ℨ e284a8
+&Zopf; => ℤ e284a4
+&Zscr; => 𝒵 f09d92b5
+&aacute; => á c3a1
+&abreve; => ă c483
+&ac; => ∾ e288be
+&acE; => ∾̳ e288beccb3
+&acd; => ∿ e288bf
+&acirc; => â c3a2
+&acute; => ´ c2b4
+&acy; => а d0b0
+&aelig; => æ c3a6
+&af; => ⁡ e281a1
+&afr; => 𝔞 f09d949e
+&agrave; => à c3a0
+&alefsym; => ℵ e284b5
+&aleph; => ℵ e284b5
+&alpha; => α ceb1
+&amacr; => ā c481
+&amalg; => ⨿ e2a8bf
+&amp; => & 26
+&and; => ∧ e288a7
+&andand; => ⩕ e2a995
+&andd; => ⩜ e2a99c
+&andslope; => ⩘ e2a998
+&andv; => ⩚ e2a99a
+&ang; => ∠ e288a0
+&ange; => ⦤ e2a6a4
+&angle; => ∠ e288a0
+&angmsd; => ∡ e288a1
+&angmsdaa; => ⦨ e2a6a8
+&angmsdab; => ⦩ e2a6a9
+&angmsdac; => ⦪ e2a6aa
+&angmsdad; => ⦫ e2a6ab
+&angmsdae; => ⦬ e2a6ac
+&angmsdaf; => ⦭ e2a6ad
+&angmsdag; => ⦮ e2a6ae
+&angmsdah; => ⦯ e2a6af
+&angrt; => ∟ e2889f
+&angrtvb; => ⊾ e28abe
+&angrtvbd; => ⦝ e2a69d
+&angsph; => ∢ e288a2
+&angst; => Å c385
+&angzarr; => ⍼ e28dbc
+&aogon; => ą c485
+&aopf; => 𝕒 f09d9592
+&ap; => ≈ e28988
+&apE; => ⩰ e2a9b0
+&apacir; => ⩯ e2a9af
+&ape; => ≊ e2898a
+&apid; => ≋ e2898b
+&apos; => ' 27
+&approx; => ≈ e28988
+&approxeq; => ≊ e2898a
+&aring; => å c3a5
+&ascr; => 𝒶 f09d92b6
+&ast; => * 2a
+&asymp; => ≈ e28988
+&asympeq; => ≍ e2898d
+&atilde; => ã c3a3
+&auml; => ä c3a4
+&awconint; => ∳ e288b3
+&awint; => ⨑ e2a891
+&bNot; => ⫭ e2abad
+&backcong; => ≌ e2898c
+&backepsilon; => ϶ cfb6
+&backprime; => ‵ e280b5
+&backsim; => ∽ e288bd
+&backsimeq; => ⋍ e28b8d
+&barvee; => ⊽ e28abd
+&barwed; => ⌅ e28c85
+&barwedge; => ⌅ e28c85
+&bbrk; => ⎵ e28eb5
+&bbrktbrk; => ⎶ e28eb6
+&bcong; => ≌ e2898c
+&bcy; => б d0b1
+&bdquo; => „ e2809e
+&becaus; => ∵ e288b5
+&because; => ∵ e288b5
+&bemptyv; => ⦰ e2a6b0
+&bepsi; => ϶ cfb6
+&bernou; => ℬ e284ac
+&beta; => β ceb2
+&beth; => ℶ e284b6
+&between; => ≬ e289ac
+&bfr; => 𝔟 f09d949f
+&bigcap; => ⋂ e28b82
+&bigcirc; => ◯ e297af
+&bigcup; => ⋃ e28b83
+&bigodot; => ⨀ e2a880
+&bigoplus; => ⨁ e2a881
+&bigotimes; => ⨂ e2a882
+&bigsqcup; => ⨆ e2a886
+&bigstar; => ★ e29885
+&bigtriangledown; => ▽ e296bd
+&bigtriangleup; => △ e296b3
+&biguplus; => ⨄ e2a884
+&bigvee; => ⋁ e28b81
+&bigwedge; => ⋀ e28b80
+&bkarow; => ⤍ e2a48d
+&blacklozenge; => ⧫ e2a7ab
+&blacksquare; => ▪ e296aa
+&blacktriangle; => ▴ e296b4
+&blacktriangledown; => ▾ e296be
+&blacktriangleleft; => ◂ e29782
+&blacktriangleright; => ▸ e296b8
+&blank; => ␣ e290a3
+&blk12; => ▒ e29692
+&blk14; => ░ e29691
+&blk34; => ▓ e29693
+&block; => █ e29688
+&bne; => =⃥ 3de283a5
+&bnequiv; => ≡⃥ e289a1e283a5
+&bnot; => ⌐ e28c90
+&bopf; => 𝕓 f09d9593
+&bot; => ⊥ e28aa5
+&bottom; => ⊥ e28aa5
+&bowtie; => ⋈ e28b88
+&boxDL; => ╗ e29597
+&boxDR; => ╔ e29594
+&boxDl; => ╖ e29596
+&boxDr; => ╓ e29593
+&boxH; => ═ e29590
+&boxHD; => ╦ e295a6
+&boxHU; => ╩ e295a9
+&boxHd; => ╤ e295a4
+&boxHu; => ╧ e295a7
+&boxUL; => ╝ e2959d
+&boxUR; => ╚ e2959a
+&boxUl; => ╜ e2959c
+&boxUr; => ╙ e29599
+&boxV; => ║ e29591
+&boxVH; => ╬ e295ac
+&boxVL; => ╣ e295a3
+&boxVR; => ╠ e295a0
+&boxVh; => ╫ e295ab
+&boxVl; => ╢ e295a2
+&boxVr; => ╟ e2959f
+&boxbox; => ⧉ e2a789
+&boxdL; => ╕ e29595
+&boxdR; => ╒ e29592
+&boxdl; => ┐ e29490
+&boxdr; => ┌ e2948c
+&boxh; => ─ e29480
+&boxhD; => ╥ e295a5
+&boxhU; => ╨ e295a8
+&boxhd; => ┬ e294ac
+&boxhu; => ┴ e294b4
+&boxminus; => ⊟ e28a9f
+&boxplus; => ⊞ e28a9e
+&boxtimes; => ⊠ e28aa0
+&boxuL; => ╛ e2959b
+&boxuR; => ╘ e29598
+&boxul; => ┘ e29498
+&boxur; => └ e29494
+&boxv; => │ e29482
+&boxvH; => ╪ e295aa
+&boxvL; => ╡ e295a1
+&boxvR; => ╞ e2959e
+&boxvh; => ┼ e294bc
+&boxvl; => ┤ e294a4
+&boxvr; => ├ e2949c
+&bprime; => ‵ e280b5
+&breve; => ˘ cb98
+&brvbar; => ¦ c2a6
+&bscr; => 𝒷 f09d92b7
+&bsemi; => ⁏ e2818f
+&bsim; => ∽ e288bd
+&bsime; => ⋍ e28b8d
+&bsol; => \ 5c
+&bsolb; => ⧅ e2a785
+&bsolhsub; => ⟈ e29f88
+&bull; => • e280a2
+&bullet; => • e280a2
+&bump; => ≎ e2898e
+&bumpE; => ⪮ e2aaae
+&bumpe; => ≏ e2898f
+&bumpeq; => ≏ e2898f
+&cacute; => ć c487
+&cap; => ∩ e288a9
+&capand; => ⩄ e2a984
+&capbrcup; => ⩉ e2a989
+&capcap; => ⩋ e2a98b
+&capcup; => ⩇ e2a987
+&capdot; => ⩀ e2a980
+&caps; => ∩︀ e288a9efb880
+&caret; => ⁁ e28181
+&caron; => ˇ cb87
+&ccaps; => ⩍ e2a98d
+&ccaron; => č c48d
+&ccedil; => ç c3a7
+&ccirc; => ĉ c489
+&ccups; => ⩌ e2a98c
+&ccupssm; => ⩐ e2a990
+&cdot; => ċ c48b
+&cedil; => ¸ c2b8
+&cemptyv; => ⦲ e2a6b2
+&cent; => ¢ c2a2
+&centerdot; => · c2b7
+&cfr; => 𝔠 f09d94a0
+&chcy; => ч d187
+&check; => ✓ e29c93
+&checkmark; => ✓ e29c93
+&chi; => χ cf87
+&cir; => ○ e2978b
+&cirE; => ⧃ e2a783
+&circ; => ˆ cb86
+&circeq; => ≗ e28997
+&circlearrowleft; => ↺ e286ba
+&circlearrowright; => ↻ e286bb
+&circledR; => ® c2ae
+&circledS; => Ⓢ e29388
+&circledast; => ⊛ e28a9b
+&circledcirc; => ⊚ e28a9a
+&circleddash; => ⊝ e28a9d
+&cire; => ≗ e28997
+&cirfnint; => ⨐ e2a890
+&cirmid; => ⫯ e2abaf
+&cirscir; => ⧂ e2a782
+&clubs; => ♣ e299a3
+&clubsuit; => ♣ e299a3
+&colon; => : 3a
+&colone; => ≔ e28994
+&coloneq; => ≔ e28994
+&comma; => , 2c
+&commat; => @ 40
+&comp; => ∁ e28881
+&compfn; => ∘ e28898
+&complement; => ∁ e28881
+&complexes; => ℂ e28482
+&cong; => ≅ e28985
+&congdot; => ⩭ e2a9ad
+&conint; => ∮ e288ae
+&copf; => 𝕔 f09d9594
+&coprod; => ∐ e28890
+&copy; => © c2a9
+&copysr; => ℗ e28497
+&crarr; => ↵ e286b5
+&cross; => ✗ e29c97
+&cscr; => 𝒸 f09d92b8
+&csub; => ⫏ e2ab8f
+&csube; => ⫑ e2ab91
+&csup; => ⫐ e2ab90
+&csupe; => ⫒ e2ab92
+&ctdot; => ⋯ e28baf
+&cudarrl; => ⤸ e2a4b8
+&cudarrr; => ⤵ e2a4b5
+&cuepr; => ⋞ e28b9e
+&cuesc; => ⋟ e28b9f
+&cularr; => ↶ e286b6
+&cularrp; => ⤽ e2a4bd
+&cup; => ∪ e288aa
+&cupbrcap; => ⩈ e2a988
+&cupcap; => ⩆ e2a986
+&cupcup; => ⩊ e2a98a
+&cupdot; => ⊍ e28a8d
+&cupor; => ⩅ e2a985
+&cups; => ∪︀ e288aaefb880
+&curarr; => ↷ e286b7
+&curarrm; => ⤼ e2a4bc
+&curlyeqprec; => ⋞ e28b9e
+&curlyeqsucc; => ⋟ e28b9f
+&curlyvee; => ⋎ e28b8e
+&curlywedge; => ⋏ e28b8f
+&curren; => ¤ c2a4
+&curvearrowleft; => ↶ e286b6
+&curvearrowright; => ↷ e286b7
+&cuvee; => ⋎ e28b8e
+&cuwed; => ⋏ e28b8f
+&cwconint; => ∲ e288b2
+&cwint; => ∱ e288b1
+&cylcty; => ⌭ e28cad
+&dArr; => ⇓ e28793
+&dHar; => ⥥ e2a5a5
+&dagger; => † e280a0
+&daleth; => ℸ e284b8
+&darr; => ↓ e28693
+&dash; => ‐ e28090
+&dashv; => ⊣ e28aa3
+&dbkarow; => ⤏ e2a48f
+&dblac; => ˝ cb9d
+&dcaron; => ď c48f
+&dcy; => д d0b4
+&dd; => ⅆ e28586
+&ddagger; => ‡ e280a1
+&ddarr; => ⇊ e2878a
+&ddotseq; => ⩷ e2a9b7
+&deg; => ° c2b0
+&delta; => δ ceb4
+&demptyv; => ⦱ e2a6b1
+&dfisht; => ⥿ e2a5bf
+&dfr; => 𝔡 f09d94a1
+&dharl; => ⇃ e28783
+&dharr; => ⇂ e28782
+&diam; => ⋄ e28b84
+&diamond; => ⋄ e28b84
+&diamondsuit; => ♦ e299a6
+&diams; => ♦ e299a6
+&die; => ¨ c2a8
+&digamma; => ϝ cf9d
+&disin; => ⋲ e28bb2
+&div; => ÷ c3b7
+&divide; => ÷ c3b7
+&divideontimes; => ⋇ e28b87
+&divonx; => ⋇ e28b87
+&djcy; => ђ d192
+&dlcorn; => ⌞ e28c9e
+&dlcrop; => ⌍ e28c8d
+&dollar; => $ 24
+&dopf; => 𝕕 f09d9595
+&dot; => ˙ cb99
+&doteq; => ≐ e28990
+&doteqdot; => ≑ e28991
+&dotminus; => ∸ e288b8
+&dotplus; => ∔ e28894
+&dotsquare; => ⊡ e28aa1
+&doublebarwedge; => ⌆ e28c86
+&downarrow; => ↓ e28693
+&downdownarrows; => ⇊ e2878a
+&downharpoonleft; => ⇃ e28783
+&downharpoonright; => ⇂ e28782
+&drbkarow; => ⤐ e2a490
+&drcorn; => ⌟ e28c9f
+&drcrop; => ⌌ e28c8c
+&dscr; => 𝒹 f09d92b9
+&dscy; => ѕ d195
+&dsol; => ⧶ e2a7b6
+&dstrok; => đ c491
+&dtdot; => ⋱ e28bb1
+&dtri; => ▿ e296bf
+&dtrif; => ▾ e296be
+&duarr; => ⇵ e287b5
+&duhar; => ⥯ e2a5af
+&dwangle; => ⦦ e2a6a6
+&dzcy; => џ d19f
+&dzigrarr; => ⟿ e29fbf
+&eDDot; => ⩷ e2a9b7
+&eDot; => ≑ e28991
+&eacute; => é c3a9
+&easter; => ⩮ e2a9ae
+&ecaron; => ě c49b
+&ecir; => ≖ e28996
+&ecirc; => ê c3aa
+&ecolon; => ≕ e28995
+&ecy; => э d18d
+&edot; => ė c497
+&ee; => ⅇ e28587
+&efDot; => ≒ e28992
+&efr; => 𝔢 f09d94a2
+&eg; => ⪚ e2aa9a
+&egrave; => è c3a8
+&egs; => ⪖ e2aa96
+&egsdot; => ⪘ e2aa98
+&el; => ⪙ e2aa99
+&elinters; => ⏧ e28fa7
+&ell; => ℓ e28493
+&els; => ⪕ e2aa95
+&elsdot; => ⪗ e2aa97
+&emacr; => ē c493
+&empty; => ∅ e28885
+&emptyset; => ∅ e28885
+&emptyv; => ∅ e28885
+&emsp; =>   e28083
+&emsp13; =>   e28084
+&emsp14; =>   e28085
+&eng; => ŋ c58b
+&ensp; =>   e28082
+&eogon; => ę c499
+&eopf; => 𝕖 f09d9596
+&epar; => ⋕ e28b95
+&eparsl; => ⧣ e2a7a3
+&eplus; => ⩱ e2a9b1
+&epsi; => ε ceb5
+&epsilon; => ε ceb5
+&epsiv; => ϵ cfb5
+&eqcirc; => ≖ e28996
+&eqcolon; => ≕ e28995
+&eqsim; => ≂ e28982
+&eqslantgtr; => ⪖ e2aa96
+&eqslantless; => ⪕ e2aa95
+&equals; => = 3d
+&equest; => ≟ e2899f
+&equiv; => ≡ e289a1
+&equivDD; => ⩸ e2a9b8
+&eqvparsl; => ⧥ e2a7a5
+&erDot; => ≓ e28993
+&erarr; => ⥱ e2a5b1
+&escr; => ℯ e284af
+&esdot; => ≐ e28990
+&esim; => ≂ e28982
+&eta; => η ceb7
+&eth; => ð c3b0
+&euml; => ë c3ab
+&euro; => € e282ac
+&excl; => ! 21
+&exist; => ∃ e28883
+&expectation; => ℰ e284b0
+&exponentiale; => ⅇ e28587
+&fallingdotseq; => ≒ e28992
+&fcy; => ф d184
+&female; => ♀ e29980
+&ffilig; => ffi efac83
+&fflig; => ff efac80
+&ffllig; => ffl efac84
+&ffr; => 𝔣 f09d94a3
+&filig; => fi efac81
+&fjlig; => fj 666a
+&flat; => ♭ e299ad
+&fllig; => fl efac82
+&fltns; => ▱ e296b1
+&fnof; => ƒ c692
+&fopf; => 𝕗 f09d9597
+&forall; => ∀ e28880
+&fork; => ⋔ e28b94
+&forkv; => ⫙ e2ab99
+&fpartint; => ⨍ e2a88d
+&frac12; => ½ c2bd
+&frac13; => ⅓ e28593
+&frac14; => ¼ c2bc
+&frac15; => ⅕ e28595
+&frac16; => ⅙ e28599
+&frac18; => ⅛ e2859b
+&frac23; => ⅔ e28594
+&frac25; => ⅖ e28596
+&frac34; => ¾ c2be
+&frac35; => ⅗ e28597
+&frac38; => ⅜ e2859c
+&frac45; => ⅘ e28598
+&frac56; => ⅚ e2859a
+&frac58; => ⅝ e2859d
+&frac78; => ⅞ e2859e
+&frasl; => ⁄ e28184
+&frown; => ⌢ e28ca2
+&fscr; => 𝒻 f09d92bb
+&gE; => ≧ e289a7
+&gEl; => ⪌ e2aa8c
+&gacute; => ǵ c7b5
+&gamma; => γ ceb3
+&gammad; => ϝ cf9d
+&gap; => ⪆ e2aa86
+&gbreve; => ğ c49f
+&gcirc; => ĝ c49d
+&gcy; => г d0b3
+&gdot; => ġ c4a1
+&ge; => ≥ e289a5
+&gel; => ⋛ e28b9b
+&geq; => ≥ e289a5
+&geqq; => ≧ e289a7
+&geqslant; => ⩾ e2a9be
+&ges; => ⩾ e2a9be
+&gescc; => ⪩ e2aaa9
+&gesdot; => ⪀ e2aa80
+&gesdoto; => ⪂ e2aa82
+&gesdotol; => ⪄ e2aa84
+&gesl; => ⋛︀ e28b9befb880
+&gesles; => ⪔ e2aa94
+&gfr; => 𝔤 f09d94a4
+&gg; => ≫ e289ab
+&ggg; => ⋙ e28b99
+&gimel; => ℷ e284b7
+&gjcy; => ѓ d193
+&gl; => ≷ e289b7
+&glE; => ⪒ e2aa92
+&gla; => ⪥ e2aaa5
+&glj; => ⪤ e2aaa4
+&gnE; => ≩ e289a9
+&gnap; => ⪊ e2aa8a
+&gnapprox; => ⪊ e2aa8a
+&gne; => ⪈ e2aa88
+&gneq; => ⪈ e2aa88
+&gneqq; => ≩ e289a9
+&gnsim; => ⋧ e28ba7
+&gopf; => 𝕘 f09d9598
+&grave; => ` 60
+&gscr; => ℊ e2848a
+&gsim; => ≳ e289b3
+&gsime; => ⪎ e2aa8e
+&gsiml; => ⪐ e2aa90
+&gt; => > 3e
+&gtcc; => ⪧ e2aaa7
+&gtcir; => ⩺ e2a9ba
+&gtdot; => ⋗ e28b97
+&gtlPar; => ⦕ e2a695
+&gtquest; => ⩼ e2a9bc
+&gtrapprox; => ⪆ e2aa86
+&gtrarr; => ⥸ e2a5b8
+&gtrdot; => ⋗ e28b97
+&gtreqless; => ⋛ e28b9b
+&gtreqqless; => ⪌ e2aa8c
+&gtrless; => ≷ e289b7
+&gtrsim; => ≳ e289b3
+&gvertneqq; => ≩︀ e289a9efb880
+&gvnE; => ≩︀ e289a9efb880
+&hArr; => ⇔ e28794
+&hairsp; =>   e2808a
+&half; => ½ c2bd
+&hamilt; => ℋ e2848b
+&hardcy; => ъ d18a
+&harr; => ↔ e28694
+&harrcir; => ⥈ e2a588
+&harrw; => ↭ e286ad
+&hbar; => ℏ e2848f
+&hcirc; => ĥ c4a5
+&hearts; => ♥ e299a5
+&heartsuit; => ♥ e299a5
+&hellip; => … e280a6
+&hercon; => ⊹ e28ab9
+&hfr; => 𝔥 f09d94a5
+&hksearow; => ⤥ e2a4a5
+&hkswarow; => ⤦ e2a4a6
+&hoarr; => ⇿ e287bf
+&homtht; => ∻ e288bb
+&hookleftarrow; => ↩ e286a9
+&hookrightarrow; => ↪ e286aa
+&hopf; => 𝕙 f09d9599
+&horbar; => ― e28095
+&hscr; => 𝒽 f09d92bd
+&hslash; => ℏ e2848f
+&hstrok; => ħ c4a7
+&hybull; => ⁃ e28183
+&hyphen; => ‐ e28090
+&iacute; => í c3ad
+&ic; => ⁣ e281a3
+&icirc; => î c3ae
+&icy; => и d0b8
+&iecy; => е d0b5
+&iexcl; => ¡ c2a1
+&iff; => ⇔ e28794
+&ifr; => 𝔦 f09d94a6
+&igrave; => ì c3ac
+&ii; => ⅈ e28588
+&iiiint; => ⨌ e2a88c
+&iiint; => ∭ e288ad
+&iinfin; => ⧜ e2a79c
+&iiota; => ℩ e284a9
+&ijlig; => ij c4b3
+&imacr; => ī c4ab
+&image; => ℑ e28491
+&imagline; => ℐ e28490
+&imagpart; => ℑ e28491
+&imath; => ı c4b1
+&imof; => ⊷ e28ab7
+&imped; => Ƶ c6b5
+&in; => ∈ e28888
+&incare; => ℅ e28485
+&infin; => ∞ e2889e
+&infintie; => ⧝ e2a79d
+&inodot; => ı c4b1
+&int; => ∫ e288ab
+&intcal; => ⊺ e28aba
+&integers; => ℤ e284a4
+&intercal; => ⊺ e28aba
+&intlarhk; => ⨗ e2a897
+&intprod; => ⨼ e2a8bc
+&iocy; => ё d191
+&iogon; => į c4af
+&iopf; => 𝕚 f09d959a
+&iota; => ι ceb9
+&iprod; => ⨼ e2a8bc
+&iquest; => ¿ c2bf
+&iscr; => 𝒾 f09d92be
+&isin; => ∈ e28888
+&isinE; => ⋹ e28bb9
+&isindot; => ⋵ e28bb5
+&isins; => ⋴ e28bb4
+&isinsv; => ⋳ e28bb3
+&isinv; => ∈ e28888
+&it; => ⁢ e281a2
+&itilde; => ĩ c4a9
+&iukcy; => і d196
+&iuml; => ï c3af
+&jcirc; => ĵ c4b5
+&jcy; => й d0b9
+&jfr; => 𝔧 f09d94a7
+&jmath; => ȷ c8b7
+&jopf; => 𝕛 f09d959b
+&jscr; => 𝒿 f09d92bf
+&jsercy; => ј d198
+&jukcy; => є d194
+&kappa; => κ ceba
+&kappav; => ϰ cfb0
+&kcedil; => ķ c4b7
+&kcy; => к d0ba
+&kfr; => 𝔨 f09d94a8
+&kgreen; => ĸ c4b8
+&khcy; => х d185
+&kjcy; => ќ d19c
+&kopf; => 𝕜 f09d959c
+&kscr; => 𝓀 f09d9380
+&lAarr; => ⇚ e2879a
+&lArr; => ⇐ e28790
+&lAtail; => ⤛ e2a49b
+&lBarr; => ⤎ e2a48e
+&lE; => ≦ e289a6
+&lEg; => ⪋ e2aa8b
+&lHar; => ⥢ e2a5a2
+&lacute; => ĺ c4ba
+&laemptyv; => ⦴ e2a6b4
+&lagran; => ℒ e28492
+&lambda; => λ cebb
+&lang; => ⟨ e29fa8
+&langd; => ⦑ e2a691
+&langle; => ⟨ e29fa8
+&lap; => ⪅ e2aa85
+&laquo; => « c2ab
+&larr; => ← e28690
+&larrb; => ⇤ e287a4
+&larrbfs; => ⤟ e2a49f
+&larrfs; => ⤝ e2a49d
+&larrhk; => ↩ e286a9
+&larrlp; => ↫ e286ab
+&larrpl; => ⤹ e2a4b9
+&larrsim; => ⥳ e2a5b3
+&larrtl; => ↢ e286a2
+&lat; => ⪫ e2aaab
+&latail; => ⤙ e2a499
+&late; => ⪭ e2aaad
+&lates; => ⪭︀ e2aaadefb880
+&lbarr; => ⤌ e2a48c
+&lbbrk; => ❲ e29db2
+&lbrace; => { 7b
+&lbrack; => [ 5b
+&lbrke; => ⦋ e2a68b
+&lbrksld; => ⦏ e2a68f
+&lbrkslu; => ⦍ e2a68d
+&lcaron; => ľ c4be
+&lcedil; => ļ c4bc
+&lceil; => ⌈ e28c88
+&lcub; => { 7b
+&lcy; => л d0bb
+&ldca; => ⤶ e2a4b6
+&ldquo; => “ e2809c
+&ldquor; => „ e2809e
+&ldrdhar; => ⥧ e2a5a7
+&ldrushar; => ⥋ e2a58b
+&ldsh; => ↲ e286b2
+&le; => ≤ e289a4
+&leftarrow; => ← e28690
+&leftarrowtail; => ↢ e286a2
+&leftharpoondown; => ↽ e286bd
+&leftharpoonup; => ↼ e286bc
+&leftleftarrows; => ⇇ e28787
+&leftrightarrow; => ↔ e28694
+&leftrightarrows; => ⇆ e28786
+&leftrightharpoons; => ⇋ e2878b
+&leftrightsquigarrow; => ↭ e286ad
+&leftthreetimes; => ⋋ e28b8b
+&leg; => ⋚ e28b9a
+&leq; => ≤ e289a4
+&leqq; => ≦ e289a6
+&leqslant; => ⩽ e2a9bd
+&les; => ⩽ e2a9bd
+&lescc; => ⪨ e2aaa8
+&lesdot; => ⩿ e2a9bf
+&lesdoto; => ⪁ e2aa81
+&lesdotor; => ⪃ e2aa83
+&lesg; => ⋚︀ e28b9aefb880
+&lesges; => ⪓ e2aa93
+&lessapprox; => ⪅ e2aa85
+&lessdot; => ⋖ e28b96
+&lesseqgtr; => ⋚ e28b9a
+&lesseqqgtr; => ⪋ e2aa8b
+&lessgtr; => ≶ e289b6
+&lesssim; => ≲ e289b2
+&lfisht; => ⥼ e2a5bc
+&lfloor; => ⌊ e28c8a
+&lfr; => 𝔩 f09d94a9
+&lg; => ≶ e289b6
+&lgE; => ⪑ e2aa91
+&lhard; => ↽ e286bd
+&lharu; => ↼ e286bc
+&lharul; => ⥪ e2a5aa
+&lhblk; => ▄ e29684
+&ljcy; => љ d199
+&ll; => ≪ e289aa
+&llarr; => ⇇ e28787
+&llcorner; => ⌞ e28c9e
+&llhard; => ⥫ e2a5ab
+&lltri; => ◺ e297ba
+&lmidot; => ŀ c580
+&lmoust; => ⎰ e28eb0
+&lmoustache; => ⎰ e28eb0
+&lnE; => ≨ e289a8
+&lnap; => ⪉ e2aa89
+&lnapprox; => ⪉ e2aa89
+&lne; => ⪇ e2aa87
+&lneq; => ⪇ e2aa87
+&lneqq; => ≨ e289a8
+&lnsim; => ⋦ e28ba6
+&loang; => ⟬ e29fac
+&loarr; => ⇽ e287bd
+&lobrk; => ⟦ e29fa6
+&longleftarrow; => ⟵ e29fb5
+&longleftrightarrow; => ⟷ e29fb7
+&longmapsto; => ⟼ e29fbc
+&longrightarrow; => ⟶ e29fb6
+&looparrowleft; => ↫ e286ab
+&looparrowright; => ↬ e286ac
+&lopar; => ⦅ e2a685
+&lopf; => 𝕝 f09d959d
+&loplus; => ⨭ e2a8ad
+&lotimes; => ⨴ e2a8b4
+&lowast; => ∗ e28897
+&lowbar; => _ 5f
+&loz; => ◊ e2978a
+&lozenge; => ◊ e2978a
+&lozf; => ⧫ e2a7ab
+&lpar; => ( 28
+&lparlt; => ⦓ e2a693
+&lrarr; => ⇆ e28786
+&lrcorner; => ⌟ e28c9f
+&lrhar; => ⇋ e2878b
+&lrhard; => ⥭ e2a5ad
+&lrm; => ‎ e2808e
+&lrtri; => ⊿ e28abf
+&lsaquo; => ‹ e280b9
+&lscr; => 𝓁 f09d9381
+&lsh; => ↰ e286b0
+&lsim; => ≲ e289b2
+&lsime; => ⪍ e2aa8d
+&lsimg; => ⪏ e2aa8f
+&lsqb; => [ 5b
+&lsquo; => ‘ e28098
+&lsquor; => ‚ e2809a
+&lstrok; => ł c582
+&lt; => < 3c
+&ltcc; => ⪦ e2aaa6
+&ltcir; => ⩹ e2a9b9
+&ltdot; => ⋖ e28b96
+&lthree; => ⋋ e28b8b
+&ltimes; => ⋉ e28b89
+&ltlarr; => ⥶ e2a5b6
+&ltquest; => ⩻ e2a9bb
+&ltrPar; => ⦖ e2a696
+&ltri; => ◃ e29783
+&ltrie; => ⊴ e28ab4
+&ltrif; => ◂ e29782
+&lurdshar; => ⥊ e2a58a
+&luruhar; => ⥦ e2a5a6
+&lvertneqq; => ≨︀ e289a8efb880
+&lvnE; => ≨︀ e289a8efb880
+&mDDot; => ∺ e288ba
+&macr; => ¯ c2af
+&male; => ♂ e29982
+&malt; => ✠ e29ca0
+&maltese; => ✠ e29ca0
+&map; => ↦ e286a6
+&mapsto; => ↦ e286a6
+&mapstodown; => ↧ e286a7
+&mapstoleft; => ↤ e286a4
+&mapstoup; => ↥ e286a5
+&marker; => ▮ e296ae
+&mcomma; => ⨩ e2a8a9
+&mcy; => м d0bc
+&mdash; => — e28094
+&measuredangle; => ∡ e288a1
+&mfr; => 𝔪 f09d94aa
+&mho; => ℧ e284a7
+&micro; => µ c2b5
+&mid; => ∣ e288a3
+&midast; => * 2a
+&midcir; => ⫰ e2abb0
+&middot; => · c2b7
+&minus; => − e28892
+&minusb; => ⊟ e28a9f
+&minusd; => ∸ e288b8
+&minusdu; => ⨪ e2a8aa
+&mlcp; => ⫛ e2ab9b
+&mldr; => … e280a6
+&mnplus; => ∓ e28893
+&models; => ⊧ e28aa7
+&mopf; => 𝕞 f09d959e
+&mp; => ∓ e28893
+&mscr; => 𝓂 f09d9382
+&mstpos; => ∾ e288be
+&mu; => μ cebc
+&multimap; => ⊸ e28ab8
+&mumap; => ⊸ e28ab8
+&nGg; => ⋙̸ e28b99ccb8
+&nGt; => ≫⃒ e289abe28392
+&nGtv; => ≫̸ e289abccb8
+&nLeftarrow; => ⇍ e2878d
+&nLeftrightarrow; => ⇎ e2878e
+&nLl; => ⋘̸ e28b98ccb8
+&nLt; => ≪⃒ e289aae28392
+&nLtv; => ≪̸ e289aaccb8
+&nRightarrow; => ⇏ e2878f
+&nVDash; => ⊯ e28aaf
+&nVdash; => ⊮ e28aae
+&nabla; => ∇ e28887
+&nacute; => ń c584
+&nang; => ∠⃒ e288a0e28392
+&nap; => ≉ e28989
+&napE; => ⩰̸ e2a9b0ccb8
+&napid; => ≋̸ e2898bccb8
+&napos; => ʼn c589
+&napprox; => ≉ e28989
+&natur; => ♮ e299ae
+&natural; => ♮ e299ae
+&naturals; => ℕ e28495
+&nbsp; =>   c2a0
+&nbump; => ≎̸ e2898eccb8
+&nbumpe; => ≏̸ e2898fccb8
+&ncap; => ⩃ e2a983
+&ncaron; => ň c588
+&ncedil; => ņ c586
+&ncong; => ≇ e28987
+&ncongdot; => ⩭̸ e2a9adccb8
+&ncup; => ⩂ e2a982
+&ncy; => н d0bd
+&ndash; => – e28093
+&ne; => ≠ e289a0
+&neArr; => ⇗ e28797
+&nearhk; => ⤤ e2a4a4
+&nearr; => ↗ e28697
+&nearrow; => ↗ e28697
+&nedot; => ≐̸ e28990ccb8
+&nequiv; => ≢ e289a2
+&nesear; => ⤨ e2a4a8
+&nesim; => ≂̸ e28982ccb8
+&nexist; => ∄ e28884
+&nexists; => ∄ e28884
+&nfr; => 𝔫 f09d94ab
+&ngE; => ≧̸ e289a7ccb8
+&nge; => ≱ e289b1
+&ngeq; => ≱ e289b1
+&ngeqq; => ≧̸ e289a7ccb8
+&ngeqslant; => ⩾̸ e2a9beccb8
+&nges; => ⩾̸ e2a9beccb8
+&ngsim; => ≵ e289b5
+&ngt; => ≯ e289af
+&ngtr; => ≯ e289af
+&nhArr; => ⇎ e2878e
+&nharr; => ↮ e286ae
+&nhpar; => ⫲ e2abb2
+&ni; => ∋ e2888b
+&nis; => ⋼ e28bbc
+&nisd; => ⋺ e28bba
+&niv; => ∋ e2888b
+&njcy; => њ d19a
+&nlArr; => ⇍ e2878d
+&nlE; => ≦̸ e289a6ccb8
+&nlarr; => ↚ e2869a
+&nldr; => ‥ e280a5
+&nle; => ≰ e289b0
+&nleftarrow; => ↚ e2869a
+&nleftrightarrow; => ↮ e286ae
+&nleq; => ≰ e289b0
+&nleqq; => ≦̸ e289a6ccb8
+&nleqslant; => ⩽̸ e2a9bdccb8
+&nles; => ⩽̸ e2a9bdccb8
+&nless; => ≮ e289ae
+&nlsim; => ≴ e289b4
+&nlt; => ≮ e289ae
+&nltri; => ⋪ e28baa
+&nltrie; => ⋬ e28bac
+&nmid; => ∤ e288a4
+&nopf; => 𝕟 f09d959f
+&not; => ¬ c2ac
+&notin; => ∉ e28889
+&notinE; => ⋹̸ e28bb9ccb8
+&notindot; => ⋵̸ e28bb5ccb8
+&notinva; => ∉ e28889
+&notinvb; => ⋷ e28bb7
+&notinvc; => ⋶ e28bb6
+&notni; => ∌ e2888c
+&notniva; => ∌ e2888c
+&notnivb; => ⋾ e28bbe
+&notnivc; => ⋽ e28bbd
+&npar; => ∦ e288a6
+&nparallel; => ∦ e288a6
+&nparsl; => ⫽⃥ e2abbde283a5
+&npart; => ∂̸ e28882ccb8
+&npolint; => ⨔ e2a894
+&npr; => ⊀ e28a80
+&nprcue; => ⋠ e28ba0
+&npre; => ⪯̸ e2aaafccb8
+&nprec; => ⊀ e28a80
+&npreceq; => ⪯̸ e2aaafccb8
+&nrArr; => ⇏ e2878f
+&nrarr; => ↛ e2869b
+&nrarrc; => ⤳̸ e2a4b3ccb8
+&nrarrw; => ↝̸ e2869dccb8
+&nrightarrow; => ↛ e2869b
+&nrtri; => ⋫ e28bab
+&nrtrie; => ⋭ e28bad
+&nsc; => ⊁ e28a81
+&nsccue; => ⋡ e28ba1
+&nsce; => ⪰̸ e2aab0ccb8
+&nscr; => 𝓃 f09d9383
+&nshortmid; => ∤ e288a4
+&nshortparallel; => ∦ e288a6
+&nsim; => ≁ e28981
+&nsime; => ≄ e28984
+&nsimeq; => ≄ e28984
+&nsmid; => ∤ e288a4
+&nspar; => ∦ e288a6
+&nsqsube; => ⋢ e28ba2
+&nsqsupe; => ⋣ e28ba3
+&nsub; => ⊄ e28a84
+&nsubE; => ⫅̸ e2ab85ccb8
+&nsube; => ⊈ e28a88
+&nsubset; => ⊂⃒ e28a82e28392
+&nsubseteq; => ⊈ e28a88
+&nsubseteqq; => ⫅̸ e2ab85ccb8
+&nsucc; => ⊁ e28a81
+&nsucceq; => ⪰̸ e2aab0ccb8
+&nsup; => ⊅ e28a85
+&nsupE; => ⫆̸ e2ab86ccb8
+&nsupe; => ⊉ e28a89
+&nsupset; => ⊃⃒ e28a83e28392
+&nsupseteq; => ⊉ e28a89
+&nsupseteqq; => ⫆̸ e2ab86ccb8
+&ntgl; => ≹ e289b9
+&ntilde; => ñ c3b1
+&ntlg; => ≸ e289b8
+&ntriangleleft; => ⋪ e28baa
+&ntrianglelefteq; => ⋬ e28bac
+&ntriangleright; => ⋫ e28bab
+&ntrianglerighteq; => ⋭ e28bad
+&nu; => ν cebd
+&num; => # 23
+&numero; => № e28496
+&numsp; =>   e28087
+&nvDash; => ⊭ e28aad
+&nvHarr; => ⤄ e2a484
+&nvap; => ≍⃒ e2898de28392
+&nvdash; => ⊬ e28aac
+&nvge; => ≥⃒ e289a5e28392
+&nvgt; => >⃒ 3ee28392
+&nvinfin; => ⧞ e2a79e
+&nvlArr; => ⤂ e2a482
+&nvle; => ≤⃒ e289a4e28392
+&nvlt; => <⃒ 3ce28392
+&nvltrie; => ⊴⃒ e28ab4e28392
+&nvrArr; => ⤃ e2a483
+&nvrtrie; => ⊵⃒ e28ab5e28392
+&nvsim; => ∼⃒ e288bce28392
+&nwArr; => ⇖ e28796
+&nwarhk; => ⤣ e2a4a3
+&nwarr; => ↖ e28696
+&nwarrow; => ↖ e28696
+&nwnear; => ⤧ e2a4a7
+&oS; => Ⓢ e29388
+&oacute; => ó c3b3
+&oast; => ⊛ e28a9b
+&ocir; => ⊚ e28a9a
+&ocirc; => ô c3b4
+&ocy; => о d0be
+&odash; => ⊝ e28a9d
+&odblac; => ő c591
+&odiv; => ⨸ e2a8b8
+&odot; => ⊙ e28a99
+&odsold; => ⦼ e2a6bc
+&oelig; => œ c593
+&ofcir; => ⦿ e2a6bf
+&ofr; => 𝔬 f09d94ac
+&ogon; => ˛ cb9b
+&ograve; => ò c3b2
+&ogt; => ⧁ e2a781
+&ohbar; => ⦵ e2a6b5
+&ohm; => Ω cea9
+&oint; => ∮ e288ae
+&olarr; => ↺ e286ba
+&olcir; => ⦾ e2a6be
+&olcross; => ⦻ e2a6bb
+&oline; => ‾ e280be
+&olt; => ⧀ e2a780
+&omacr; => ō c58d
+&omega; => ω cf89
+&omicron; => ο cebf
+&omid; => ⦶ e2a6b6
+&ominus; => ⊖ e28a96
+&oopf; => 𝕠 f09d95a0
+&opar; => ⦷ e2a6b7
+&operp; => ⦹ e2a6b9
+&oplus; => ⊕ e28a95
+&or; => ∨ e288a8
+&orarr; => ↻ e286bb
+&ord; => ⩝ e2a99d
+&order; => ℴ e284b4
+&orderof; => ℴ e284b4
+&ordf; => ª c2aa
+&ordm; => º c2ba
+&origof; => ⊶ e28ab6
+&oror; => ⩖ e2a996
+&orslope; => ⩗ e2a997
+&orv; => ⩛ e2a99b
+&oscr; => ℴ e284b4
+&oslash; => ø c3b8
+&osol; => ⊘ e28a98
+&otilde; => õ c3b5
+&otimes; => ⊗ e28a97
+&otimesas; => ⨶ e2a8b6
+&ouml; => ö c3b6
+&ovbar; => ⌽ e28cbd
+&par; => ∥ e288a5
+&para; => ¶ c2b6
+&parallel; => ∥ e288a5
+&parsim; => ⫳ e2abb3
+&parsl; => ⫽ e2abbd
+&part; => ∂ e28882
+&pcy; => п d0bf
+&percnt; => % 25
+&period; => . 2e
+&permil; => ‰ e280b0
+&perp; => ⊥ e28aa5
+&pertenk; => ‱ e280b1
+&pfr; => 𝔭 f09d94ad
+&phi; => φ cf86
+&phiv; => ϕ cf95
+&phmmat; => ℳ e284b3
+&phone; => ☎ e2988e
+&pi; => π cf80
+&pitchfork; => ⋔ e28b94
+&piv; => ϖ cf96
+&planck; => ℏ e2848f
+&planckh; => ℎ e2848e
+&plankv; => ℏ e2848f
+&plus; => + 2b
+&plusacir; => ⨣ e2a8a3
+&plusb; => ⊞ e28a9e
+&pluscir; => ⨢ e2a8a2
+&plusdo; => ∔ e28894
+&plusdu; => ⨥ e2a8a5
+&pluse; => ⩲ e2a9b2
+&plusmn; => ± c2b1
+&plussim; => ⨦ e2a8a6
+&plustwo; => ⨧ e2a8a7
+&pm; => ± c2b1
+&pointint; => ⨕ e2a895
+&popf; => 𝕡 f09d95a1
+&pound; => £ c2a3
+&pr; => ≺ e289ba
+&prE; => ⪳ e2aab3
+&prap; => ⪷ e2aab7
+&prcue; => ≼ e289bc
+&pre; => ⪯ e2aaaf
+&prec; => ≺ e289ba
+&precapprox; => ⪷ e2aab7
+&preccurlyeq; => ≼ e289bc
+&preceq; => ⪯ e2aaaf
+&precnapprox; => ⪹ e2aab9
+&precneqq; => ⪵ e2aab5
+&precnsim; => ⋨ e28ba8
+&precsim; => ≾ e289be
+&prime; => ′ e280b2
+&primes; => ℙ e28499
+&prnE; => ⪵ e2aab5
+&prnap; => ⪹ e2aab9
+&prnsim; => ⋨ e28ba8
+&prod; => ∏ e2888f
+&profalar; => ⌮ e28cae
+&profline; => ⌒ e28c92
+&profsurf; => ⌓ e28c93
+&prop; => ∝ e2889d
+&propto; => ∝ e2889d
+&prsim; => ≾ e289be
+&prurel; => ⊰ e28ab0
+&pscr; => 𝓅 f09d9385
+&psi; => ψ cf88
+&puncsp; =>   e28088
+&qfr; => 𝔮 f09d94ae
+&qint; => ⨌ e2a88c
+&qopf; => 𝕢 f09d95a2
+&qprime; => ⁗ e28197
+&qscr; => 𝓆 f09d9386
+&quaternions; => ℍ e2848d
+&quatint; => ⨖ e2a896
+&quest; => ? 3f
+&questeq; => ≟ e2899f
+&quot; => " 22
+&rAarr; => ⇛ e2879b
+&rArr; => ⇒ e28792
+&rAtail; => ⤜ e2a49c
+&rBarr; => ⤏ e2a48f
+&rHar; => ⥤ e2a5a4
+&race; => ∽̱ e288bdccb1
+&racute; => ŕ c595
+&radic; => √ e2889a
+&raemptyv; => ⦳ e2a6b3
+&rang; => ⟩ e29fa9
+&rangd; => ⦒ e2a692
+&range; => ⦥ e2a6a5
+&rangle; => ⟩ e29fa9
+&raquo; => » c2bb
+&rarr; => → e28692
+&rarrap; => ⥵ e2a5b5
+&rarrb; => ⇥ e287a5
+&rarrbfs; => ⤠ e2a4a0
+&rarrc; => ⤳ e2a4b3
+&rarrfs; => ⤞ e2a49e
+&rarrhk; => ↪ e286aa
+&rarrlp; => ↬ e286ac
+&rarrpl; => ⥅ e2a585
+&rarrsim; => ⥴ e2a5b4
+&rarrtl; => ↣ e286a3
+&rarrw; => ↝ e2869d
+&ratail; => ⤚ e2a49a
+&ratio; => ∶ e288b6
+&rationals; => ℚ e2849a
+&rbarr; => ⤍ e2a48d
+&rbbrk; => ❳ e29db3
+&rbrace; => } 7d
+&rbrack; => ] 5d
+&rbrke; => ⦌ e2a68c
+&rbrksld; => ⦎ e2a68e
+&rbrkslu; => ⦐ e2a690
+&rcaron; => ř c599
+&rcedil; => ŗ c597
+&rceil; => ⌉ e28c89
+&rcub; => } 7d
+&rcy; => р d180
+&rdca; => ⤷ e2a4b7
+&rdldhar; => ⥩ e2a5a9
+&rdquo; => ” e2809d
+&rdquor; => ” e2809d
+&rdsh; => ↳ e286b3
+&real; => ℜ e2849c
+&realine; => ℛ e2849b
+&realpart; => ℜ e2849c
+&reals; => ℝ e2849d
+&rect; => ▭ e296ad
+&reg; => ® c2ae
+&rfisht; => ⥽ e2a5bd
+&rfloor; => ⌋ e28c8b
+&rfr; => 𝔯 f09d94af
+&rhard; => ⇁ e28781
+&rharu; => ⇀ e28780
+&rharul; => ⥬ e2a5ac
+&rho; => ρ cf81
+&rhov; => ϱ cfb1
+&rightarrow; => → e28692
+&rightarrowtail; => ↣ e286a3
+&rightharpoondown; => ⇁ e28781
+&rightharpoonup; => ⇀ e28780
+&rightleftarrows; => ⇄ e28784
+&rightleftharpoons; => ⇌ e2878c
+&rightrightarrows; => ⇉ e28789
+&rightsquigarrow; => ↝ e2869d
+&rightthreetimes; => ⋌ e28b8c
+&ring; => ˚ cb9a
+&risingdotseq; => ≓ e28993
+&rlarr; => ⇄ e28784
+&rlhar; => ⇌ e2878c
+&rlm; => ‏ e2808f
+&rmoust; => ⎱ e28eb1
+&rmoustache; => ⎱ e28eb1
+&rnmid; => ⫮ e2abae
+&roang; => ⟭ e29fad
+&roarr; => ⇾ e287be
+&robrk; => ⟧ e29fa7
+&ropar; => ⦆ e2a686
+&ropf; => 𝕣 f09d95a3
+&roplus; => ⨮ e2a8ae
+&rotimes; => ⨵ e2a8b5
+&rpar; => ) 29
+&rpargt; => ⦔ e2a694
+&rppolint; => ⨒ e2a892
+&rrarr; => ⇉ e28789
+&rsaquo; => › e280ba
+&rscr; => 𝓇 f09d9387
+&rsh; => ↱ e286b1
+&rsqb; => ] 5d
+&rsquo; => ’ e28099
+&rsquor; => ’ e28099
+&rthree; => ⋌ e28b8c
+&rtimes; => ⋊ e28b8a
+&rtri; => ▹ e296b9
+&rtrie; => ⊵ e28ab5
+&rtrif; => ▸ e296b8
+&rtriltri; => ⧎ e2a78e
+&ruluhar; => ⥨ e2a5a8
+&rx; => ℞ e2849e
+&sacute; => ś c59b
+&sbquo; => ‚ e2809a
+&sc; => ≻ e289bb
+&scE; => ⪴ e2aab4
+&scap; => ⪸ e2aab8
+&scaron; => š c5a1
+&sccue; => ≽ e289bd
+&sce; => ⪰ e2aab0
+&scedil; => ş c59f
+&scirc; => ŝ c59d
+&scnE; => ⪶ e2aab6
+&scnap; => ⪺ e2aaba
+&scnsim; => ⋩ e28ba9
+&scpolint; => ⨓ e2a893
+&scsim; => ≿ e289bf
+&scy; => с d181
+&sdot; => ⋅ e28b85
+&sdotb; => ⊡ e28aa1
+&sdote; => ⩦ e2a9a6
+&seArr; => ⇘ e28798
+&searhk; => ⤥ e2a4a5
+&searr; => ↘ e28698
+&searrow; => ↘ e28698
+&sect; => § c2a7
+&semi; => ; 3b
+&seswar; => ⤩ e2a4a9
+&setminus; => ∖ e28896
+&setmn; => ∖ e28896
+&sext; => ✶ e29cb6
+&sfr; => 𝔰 f09d94b0
+&sfrown; => ⌢ e28ca2
+&sharp; => ♯ e299af
+&shchcy; => щ d189
+&shcy; => ш d188
+&shortmid; => ∣ e288a3
+&shortparallel; => ∥ e288a5
+&shy; => ­ c2ad
+&sigma; => σ cf83
+&sigmaf; => ς cf82
+&sigmav; => ς cf82
+&sim; => ∼ e288bc
+&simdot; => ⩪ e2a9aa
+&sime; => ≃ e28983
+&simeq; => ≃ e28983
+&simg; => ⪞ e2aa9e
+&simgE; => ⪠ e2aaa0
+&siml; => ⪝ e2aa9d
+&simlE; => ⪟ e2aa9f
+&simne; => ≆ e28986
+&simplus; => ⨤ e2a8a4
+&simrarr; => ⥲ e2a5b2
+&slarr; => ← e28690
+&smallsetminus; => ∖ e28896
+&smashp; => ⨳ e2a8b3
+&smeparsl; => ⧤ e2a7a4
+&smid; => ∣ e288a3
+&smile; => ⌣ e28ca3
+&smt; => ⪪ e2aaaa
+&smte; => ⪬ e2aaac
+&smtes; => ⪬︀ e2aaacefb880
+&softcy; => ь d18c
+&sol; => / 2f
+&solb; => ⧄ e2a784
+&solbar; => ⌿ e28cbf
+&sopf; => 𝕤 f09d95a4
+&spades; => ♠ e299a0
+&spadesuit; => ♠ e299a0
+&spar; => ∥ e288a5
+&sqcap; => ⊓ e28a93
+&sqcaps; => ⊓︀ e28a93efb880
+&sqcup; => ⊔ e28a94
+&sqcups; => ⊔︀ e28a94efb880
+&sqsub; => ⊏ e28a8f
+&sqsube; => ⊑ e28a91
+&sqsubset; => ⊏ e28a8f
+&sqsubseteq; => ⊑ e28a91
+&sqsup; => ⊐ e28a90
+&sqsupe; => ⊒ e28a92
+&sqsupset; => ⊐ e28a90
+&sqsupseteq; => ⊒ e28a92
+&squ; => □ e296a1
+&square; => □ e296a1
+&squarf; => ▪ e296aa
+&squf; => ▪ e296aa
+&srarr; => → e28692
+&sscr; => 𝓈 f09d9388
+&ssetmn; => ∖ e28896
+&ssmile; => ⌣ e28ca3
+&sstarf; => ⋆ e28b86
+&star; => ☆ e29886
+&starf; => ★ e29885
+&straightepsilon; => ϵ cfb5
+&straightphi; => ϕ cf95
+&strns; => ¯ c2af
+&sub; => ⊂ e28a82
+&subE; => ⫅ e2ab85
+&subdot; => ⪽ e2aabd
+&sube; => ⊆ e28a86
+&subedot; => ⫃ e2ab83
+&submult; => ⫁ e2ab81
+&subnE; => ⫋ e2ab8b
+&subne; => ⊊ e28a8a
+&subplus; => ⪿ e2aabf
+&subrarr; => ⥹ e2a5b9
+&subset; => ⊂ e28a82
+&subseteq; => ⊆ e28a86
+&subseteqq; => ⫅ e2ab85
+&subsetneq; => ⊊ e28a8a
+&subsetneqq; => ⫋ e2ab8b
+&subsim; => ⫇ e2ab87
+&subsub; => ⫕ e2ab95
+&subsup; => ⫓ e2ab93
+&succ; => ≻ e289bb
+&succapprox; => ⪸ e2aab8
+&succcurlyeq; => ≽ e289bd
+&succeq; => ⪰ e2aab0
+&succnapprox; => ⪺ e2aaba
+&succneqq; => ⪶ e2aab6
+&succnsim; => ⋩ e28ba9
+&succsim; => ≿ e289bf
+&sum; => ∑ e28891
+&sung; => ♪ e299aa
+&sup; => ⊃ e28a83
+&sup1; => ¹ c2b9
+&sup2; => ² c2b2
+&sup3; => ³ c2b3
+&supE; => ⫆ e2ab86
+&supdot; => ⪾ e2aabe
+&supdsub; => ⫘ e2ab98
+&supe; => ⊇ e28a87
+&supedot; => ⫄ e2ab84
+&suphsol; => ⟉ e29f89
+&suphsub; => ⫗ e2ab97
+&suplarr; => ⥻ e2a5bb
+&supmult; => ⫂ e2ab82
+&supnE; => ⫌ e2ab8c
+&supne; => ⊋ e28a8b
+&supplus; => ⫀ e2ab80
+&supset; => ⊃ e28a83
+&supseteq; => ⊇ e28a87
+&supseteqq; => ⫆ e2ab86
+&supsetneq; => ⊋ e28a8b
+&supsetneqq; => ⫌ e2ab8c
+&supsim; => ⫈ e2ab88
+&supsub; => ⫔ e2ab94
+&supsup; => ⫖ e2ab96
+&swArr; => ⇙ e28799
+&swarhk; => ⤦ e2a4a6
+&swarr; => ↙ e28699
+&swarrow; => ↙ e28699
+&swnwar; => ⤪ e2a4aa
+&szlig; => ß c39f
+&target; => ⌖ e28c96
+&tau; => τ cf84
+&tbrk; => ⎴ e28eb4
+&tcaron; => ť c5a5
+&tcedil; => ţ c5a3
+&tcy; => т d182
+&tdot; => ⃛ e2839b
+&telrec; => ⌕ e28c95
+&tfr; => 𝔱 f09d94b1
+&there4; => ∴ e288b4
+&therefore; => ∴ e288b4
+&theta; => θ ceb8
+&thetasym; => ϑ cf91
+&thetav; => ϑ cf91
+&thickapprox; => ≈ e28988
+&thicksim; => ∼ e288bc
+&thinsp; =>   e28089
+&thkap; => ≈ e28988
+&thksim; => ∼ e288bc
+&thorn; => þ c3be
+&tilde; => ˜ cb9c
+&times; => × c397
+&timesb; => ⊠ e28aa0
+&timesbar; => ⨱ e2a8b1
+&timesd; => ⨰ e2a8b0
+&tint; => ∭ e288ad
+&toea; => ⤨ e2a4a8
+&top; => ⊤ e28aa4
+&topbot; => ⌶ e28cb6
+&topcir; => ⫱ e2abb1
+&topf; => 𝕥 f09d95a5
+&topfork; => ⫚ e2ab9a
+&tosa; => ⤩ e2a4a9
+&tprime; => ‴ e280b4
+&trade; => ™ e284a2
+&triangle; => ▵ e296b5
+&triangledown; => ▿ e296bf
+&triangleleft; => ◃ e29783
+&trianglelefteq; => ⊴ e28ab4
+&triangleq; => ≜ e2899c
+&triangleright; => ▹ e296b9
+&trianglerighteq; => ⊵ e28ab5
+&tridot; => ◬ e297ac
+&trie; => ≜ e2899c
+&triminus; => ⨺ e2a8ba
+&triplus; => ⨹ e2a8b9
+&trisb; => ⧍ e2a78d
+&tritime; => ⨻ e2a8bb
+&trpezium; => ⏢ e28fa2
+&tscr; => 𝓉 f09d9389
+&tscy; => ц d186
+&tshcy; => ћ d19b
+&tstrok; => ŧ c5a7
+&twixt; => ≬ e289ac
+&twoheadleftarrow; => ↞ e2869e
+&twoheadrightarrow; => ↠ e286a0
+&uArr; => ⇑ e28791
+&uHar; => ⥣ e2a5a3
+&uacute; => ú c3ba
+&uarr; => ↑ e28691
+&ubrcy; => ў d19e
+&ubreve; => ŭ c5ad
+&ucirc; => û c3bb
+&ucy; => у d183
+&udarr; => ⇅ e28785
+&udblac; => ű c5b1
+&udhar; => ⥮ e2a5ae
+&ufisht; => ⥾ e2a5be
+&ufr; => 𝔲 f09d94b2
+&ugrave; => ù c3b9
+&uharl; => ↿ e286bf
+&uharr; => ↾ e286be
+&uhblk; => ▀ e29680
+&ulcorn; => ⌜ e28c9c
+&ulcorner; => ⌜ e28c9c
+&ulcrop; => ⌏ e28c8f
+&ultri; => ◸ e297b8
+&umacr; => ū c5ab
+&uml; => ¨ c2a8
+&uogon; => ų c5b3
+&uopf; => 𝕦 f09d95a6
+&uparrow; => ↑ e28691
+&updownarrow; => ↕ e28695
+&upharpoonleft; => ↿ e286bf
+&upharpoonright; => ↾ e286be
+&uplus; => ⊎ e28a8e
+&upsi; => υ cf85
+&upsih; => ϒ cf92
+&upsilon; => υ cf85
+&upuparrows; => ⇈ e28788
+&urcorn; => ⌝ e28c9d
+&urcorner; => ⌝ e28c9d
+&urcrop; => ⌎ e28c8e
+&uring; => ů c5af
+&urtri; => ◹ e297b9
+&uscr; => 𝓊 f09d938a
+&utdot; => ⋰ e28bb0
+&utilde; => ũ c5a9
+&utri; => ▵ e296b5
+&utrif; => ▴ e296b4
+&uuarr; => ⇈ e28788
+&uuml; => ü c3bc
+&uwangle; => ⦧ e2a6a7
+&vArr; => ⇕ e28795
+&vBar; => ⫨ e2aba8
+&vBarv; => ⫩ e2aba9
+&vDash; => ⊨ e28aa8
+&vangrt; => ⦜ e2a69c
+&varepsilon; => ϵ cfb5
+&varkappa; => ϰ cfb0
+&varnothing; => ∅ e28885
+&varphi; => ϕ cf95
+&varpi; => ϖ cf96
+&varpropto; => ∝ e2889d
+&varr; => ↕ e28695
+&varrho; => ϱ cfb1
+&varsigma; => ς cf82
+&varsubsetneq; => ⊊︀ e28a8aefb880
+&varsubsetneqq; => ⫋︀ e2ab8befb880
+&varsupsetneq; => ⊋︀ e28a8befb880
+&varsupsetneqq; => ⫌︀ e2ab8cefb880
+&vartheta; => ϑ cf91
+&vartriangleleft; => ⊲ e28ab2
+&vartriangleright; => ⊳ e28ab3
+&vcy; => в d0b2
+&vdash; => ⊢ e28aa2
+&vee; => ∨ e288a8
+&veebar; => ⊻ e28abb
+&veeeq; => ≚ e2899a
+&vellip; => ⋮ e28bae
+&verbar; => | 7c
+&vert; => | 7c
+&vfr; => 𝔳 f09d94b3
+&vltri; => ⊲ e28ab2
+&vnsub; => ⊂⃒ e28a82e28392
+&vnsup; => ⊃⃒ e28a83e28392
+&vopf; => 𝕧 f09d95a7
+&vprop; => ∝ e2889d
+&vrtri; => ⊳ e28ab3
+&vscr; => 𝓋 f09d938b
+&vsubnE; => ⫋︀ e2ab8befb880
+&vsubne; => ⊊︀ e28a8aefb880
+&vsupnE; => ⫌︀ e2ab8cefb880
+&vsupne; => ⊋︀ e28a8befb880
+&vzigzag; => ⦚ e2a69a
+&wcirc; => ŵ c5b5
+&wedbar; => ⩟ e2a99f
+&wedge; => ∧ e288a7
+&wedgeq; => ≙ e28999
+&weierp; => ℘ e28498
+&wfr; => 𝔴 f09d94b4
+&wopf; => 𝕨 f09d95a8
+&wp; => ℘ e28498
+&wr; => ≀ e28980
+&wreath; => ≀ e28980
+&wscr; => 𝓌 f09d938c
+&xcap; => ⋂ e28b82
+&xcirc; => ◯ e297af
+&xcup; => ⋃ e28b83
+&xdtri; => ▽ e296bd
+&xfr; => 𝔵 f09d94b5
+&xhArr; => ⟺ e29fba
+&xharr; => ⟷ e29fb7
+&xi; => ξ cebe
+&xlArr; => ⟸ e29fb8
+&xlarr; => ⟵ e29fb5
+&xmap; => ⟼ e29fbc
+&xnis; => ⋻ e28bbb
+&xodot; => ⨀ e2a880
+&xopf; => 𝕩 f09d95a9
+&xoplus; => ⨁ e2a881
+&xotime; => ⨂ e2a882
+&xrArr; => ⟹ e29fb9
+&xrarr; => ⟶ e29fb6
+&xscr; => 𝓍 f09d938d
+&xsqcup; => ⨆ e2a886
+&xuplus; => ⨄ e2a884
+&xutri; => △ e296b3
+&xvee; => ⋁ e28b81
+&xwedge; => ⋀ e28b80
+&yacute; => ý c3bd
+&yacy; => я d18f
+&ycirc; => ŷ c5b7
+&ycy; => ы d18b
+&yen; => ¥ c2a5
+&yfr; => 𝔶 f09d94b6
+&yicy; => ї d197
+&yopf; => 𝕪 f09d95aa
+&yscr; => 𝓎 f09d938e
+&yucy; => ю d18e
+&yuml; => ÿ c3bf
+&zacute; => ź c5ba
+&zcaron; => ž c5be
+&zcy; => з d0b7
+&zdot; => ż c5bc
+&zeetrf; => ℨ e284a8
+&zeta; => ζ ceb6
+&zfr; => 𝔷 f09d94b7
+&zhcy; => ж d0b6
+&zigrarr; => ⇝ e2879d
+&zopf; => 𝕫 f09d95ab
+&zscr; => 𝓏 f09d938f
+&zwj; => ‍ e2808d
+&zwnj; => ‌ e2808c
index 2c559916e9a76c8f2a8c35c7ddd7373aae25e986..73b630f60c7c38811509115dd09c5b42eb4d3915 100644 (file)
@@ -9,6 +9,8 @@ default_charset=EUC-JP
        print ini_get('default_charset')."\n";
        var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
 ?>
---EXPECT--
+--EXPECTF--
 EUC-JP
+
+Strict Standards: htmlentities(): Only basic entities substitution is supported for multi-byte encodings other than UTF-8; functionality is equivalent to htmlspecialchars in %s on line %d
 string(6) "¡¢¡£¡¤"
index 9190d26515f19b84fadb07b7ecae70b39718e789..a97cac536df2fecc9815561fd3b1625d0dafee08 100644 (file)
@@ -9,6 +9,8 @@ default_charset=Shift_JIS
        print ini_get('default_charset')."\n";
        var_dump(htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, ''));
 ?>
---EXPECT--
+--EXPECTF--
 Shift_JIS
+
+Strict Standards: htmlentities(): Only basic entities substitution is supported for multi-byte encodings other than UTF-8; functionality is equivalent to htmlspecialchars in %s on line %d
 string(6) "\81A\81B\81C"
index 438b0e490b16324b38e1c396729a6a93fd89e362..c49584e90fdddacc255d5adb3597acc1cab8ca1f 100644 (file)
@@ -14,10 +14,12 @@ output_handler=
 <?php
 mb_internal_encoding('cp1251');
 $str = "\x88\xa9\xf0\xee\xf1\xea\xee\xf8\xed\xfb\xe9";
-var_dump(bin2hex($str), htmlentities($str, ENT_QUOTES, ''));
+var_dump(bin2hex($str), bin2hex(htmlentities($str, ENT_QUOTES, '')));
+var_dump(htmlentities($str, ENT_QUOTES | ENT_HTML5, ''));
 ?>
 ===DONE===
 --EXPECT--
 string(22) "88a9f0eef1eaeef8edfbe9"
-string(75) "&euro;&copy;&#1088;&#1086;&#1089;&#1082;&#1086;&#1096;&#1085;&#1099;&#1081;"
+string(42) "266575726f3b26636f70793bf0eef1eaeef8edfbe9"
+string(58) "&euro;&copy;&rcy;&ocy;&scy;&kcy;&ocy;&shcy;&ncy;&ycy;&jcy;"
 ===DONE===
index 8970be8a083ab2939f43fe90f0d3b81132c967f5..d7bd2302c1657e729c7aadd35b728a2fcc1256c5 100644 (file)
@@ -29,8 +29,8 @@ string(33) "test&#043;s &amp; some more &#68;"
 string(33) "test&#043;s &amp; some more &#68;"
 string(34) "test&#x2b;s &amp; some more &#X44;"
 string(34) "test&#x2b;s &amp; some more &#X44;"
-string(35) "&; &amp;amp &amp;#a; &9; &amp;#xyz;"
-string(35) "&; &amp;amp &amp;#a; &9; &amp;#xyz;"
+string(43) "&amp;; &amp;amp &amp;#a; &amp;9; &amp;#xyz;"
+string(43) "&amp;; &amp;amp &amp;#a; &amp;9; &amp;#xyz;"
 string(32) "&amp;kffjadfdhsjfhjasdhffasdfas;"
 string(32) "&amp;kffjadfdhsjfhjasdhffasdfas;"
 string(16) "&amp;#8787978789"
diff --git a/ext/standard/tests/strings/htmlentities19.phpt b/ext/standard/tests/strings/htmlentities19.phpt
new file mode 100644 (file)
index 0000000..a90358c
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+htmlentities() / htmlspecialchars() ENT_SUBSTITUTE
+--FILE--
+<?php
+$tests = array(
+       "\x41\xC2\x3E\x42", // Unicode TR #36, 3.1.1; do not consume valid successor bytes
+       "\xE3\x80\x22",    // Unicode TR #36, 3.6.1; use strategy #2
+    "\x41\x98\xBA\x42\xE2\x98\x43\xE2\x98\xBA\xE2\x98", // example from HTML5, section 2.4
+);
+
+foreach ($tests as $test) {
+    $a = htmlentities($test, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
+       var_dump($a, bin2hex($a));
+    $a = htmlspecialchars($test, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
+       var_dump($a, bin2hex($a));
+}
+?>
+--EXPECT--
+string(9) "A�&gt;B"
+string(18) "41efbfbd2667743b42"
+string(9) "A�&gt;B"
+string(18) "41efbfbd2667743b42"
+string(9) "�&quot;"
+string(18) "efbfbd2671756f743b"
+string(9) "�&quot;"
+string(18) "efbfbd2671756f743b"
+string(18) "A��B�C☺�"
+string(36) "41efbfbdefbfbd42efbfbd43e298baefbfbd"
+string(18) "A��B�C☺�"
+string(36) "41efbfbdefbfbd42efbfbd43e298baefbfbd"
diff --git a/ext/standard/tests/strings/htmlentities20.phpt b/ext/standard/tests/strings/htmlentities20.phpt
new file mode 100644 (file)
index 0000000..92c996b
--- /dev/null
@@ -0,0 +1,199 @@
+--TEST--
+htmlentities() / htmlspecialchars() ENT_DISALLOWED
+--FILE--
+<?php
+function codepoint_to_utf8($k) {
+       if ($k < 0x80) {
+               $retval = pack('C', $k);
+       } else if ($k < 0x800) {
+               $retval = pack('C2', 
+            0xc0 | ($k >> 6),
+            0x80 | ($k & 0x3f));
+       } else if ($k < 0x10000) {
+        $retval = pack('C3',
+            0xe0 | ($k >> 12),
+            0x80 | (($k >> 6) & 0x3f),
+            0x80 | ($k & 0x3f));
+       } else {
+        $retval = pack('C4',
+            0xf0 | ($k >> 18),
+            0x80 | (($k >> 12) & 0x3f),
+            0x80 | (($k >> 6) & 0x3f),
+            0x80 | ($k & 0x3f));
+       }
+       return $retval;
+}
+
+$tests = array(
+    0x00, //C0
+    0x01,
+    0x09,
+    0x0A,
+    0x0B,
+    0x0C,
+    0x0D,
+    0x0E,
+    0x1F,
+    0x20, //allowed always
+    0x7F, //DEL
+    0x80, //C1
+    0x9F,
+    0xA0, //allowed always
+    0xD7FF, //surrogates
+    0xD800,
+    0xDFFF,
+    0xE000, //allowed always
+    0xFFFE, //nonchar
+    0xFFFF,
+    0xFDCF, //allowed always
+    0xFDD0, //nonchar
+    0xFDEF,
+    0xFDF0, //allowed always
+    0x2FFFE, //nonchar
+    0x2FFFF,
+);
+$tests2 = array_map('codepoint_to_utf8', $tests);
+
+$subchr = codepoint_to_utf8(0xFFFD);
+
+function test($flag) {
+    global $tests, $tests2;
+    $i = -1;
+    foreach ($tests2 as $test) {
+        $i++;
+        $a = htmlentities($test, $flag | ENT_DISALLOWED, "UTF-8");
+        $b = htmlspecialchars($test, $flag | ENT_DISALLOWED, "UTF-8");
+        if ($a == "" && $b == "") { echo sprintf("%05X", $tests[$i]), ": INVALID SEQUENCE\n"; continue; }
+        echo sprintf("%05X", $tests[$i]), ": ", bin2hex($a), " ", bin2hex($b), "\n";
+    }
+}
+
+echo "*** Testing HTML 4.01 ***\n";
+
+test(ENT_HTML401);
+
+echo "\n*** Testing XHTML 1.0 ***\n";
+
+test(ENT_XHTML);
+
+echo "\n*** Testing HTML 5 ***\n";
+
+test(ENT_HTML5);
+
+echo "\n*** Testing XML 1.0 ***\n";
+
+test(ENT_XML1);
+
+?>
+--EXPECT--
+*** Testing HTML 4.01 ***
+00000: efbfbd efbfbd
+00001: efbfbd efbfbd
+00009: 09 09
+0000A: 0a 0a
+0000B: efbfbd efbfbd
+0000C: efbfbd efbfbd
+0000D: 0d 0d
+0000E: efbfbd efbfbd
+0001F: efbfbd efbfbd
+00020: 20 20
+0007F: efbfbd efbfbd
+00080: efbfbd efbfbd
+0009F: efbfbd efbfbd
+000A0: 266e6273703b c2a0
+0D7FF: ed9fbf ed9fbf
+0D800: INVALID SEQUENCE
+0DFFF: INVALID SEQUENCE
+0E000: ee8080 ee8080
+0FFFE: efbfbe efbfbe
+0FFFF: efbfbf efbfbf
+0FDCF: efb78f efb78f
+0FDD0: efb790 efb790
+0FDEF: efb7af efb7af
+0FDF0: efb7b0 efb7b0
+2FFFE: f0afbfbe f0afbfbe
+2FFFF: f0afbfbf f0afbfbf
+
+*** Testing XHTML 1.0 ***
+00000: efbfbd efbfbd
+00001: efbfbd efbfbd
+00009: 09 09
+0000A: 0a 0a
+0000B: efbfbd efbfbd
+0000C: efbfbd efbfbd
+0000D: 0d 0d
+0000E: efbfbd efbfbd
+0001F: efbfbd efbfbd
+00020: 20 20
+0007F: 7f 7f
+00080: c280 c280
+0009F: c29f c29f
+000A0: 266e6273703b c2a0
+0D7FF: ed9fbf ed9fbf
+0D800: INVALID SEQUENCE
+0DFFF: INVALID SEQUENCE
+0E000: ee8080 ee8080
+0FFFE: efbfbd efbfbd
+0FFFF: efbfbd efbfbd
+0FDCF: efb78f efb78f
+0FDD0: efb790 efb790
+0FDEF: efb7af efb7af
+0FDF0: efb7b0 efb7b0
+2FFFE: f0afbfbe f0afbfbe
+2FFFF: f0afbfbf f0afbfbf
+
+*** Testing HTML 5 ***
+00000: efbfbd efbfbd
+00001: efbfbd efbfbd
+00009: 265461623b 09
+0000A: 264e65774c696e653b 0a
+0000B: efbfbd efbfbd
+0000C: 0c 0c
+0000D: 0d 0d
+0000E: efbfbd efbfbd
+0001F: efbfbd efbfbd
+00020: 20 20
+0007F: efbfbd efbfbd
+00080: efbfbd efbfbd
+0009F: efbfbd efbfbd
+000A0: 266e6273703b c2a0
+0D7FF: ed9fbf ed9fbf
+0D800: INVALID SEQUENCE
+0DFFF: INVALID SEQUENCE
+0E000: ee8080 ee8080
+0FFFE: efbfbd efbfbd
+0FFFF: efbfbd efbfbd
+0FDCF: efb78f efb78f
+0FDD0: efbfbd efbfbd
+0FDEF: efbfbd efbfbd
+0FDF0: efb7b0 efb7b0
+2FFFE: efbfbd efbfbd
+2FFFF: efbfbd efbfbd
+
+*** Testing XML 1.0 ***
+00000: efbfbd efbfbd
+00001: efbfbd efbfbd
+00009: 09 09
+0000A: 0a 0a
+0000B: efbfbd efbfbd
+0000C: efbfbd efbfbd
+0000D: 0d 0d
+0000E: efbfbd efbfbd
+0001F: efbfbd efbfbd
+00020: 20 20
+0007F: 7f 7f
+00080: c280 c280
+0009F: c29f c29f
+000A0: c2a0 c2a0
+0D7FF: ed9fbf ed9fbf
+0D800: INVALID SEQUENCE
+0DFFF: INVALID SEQUENCE
+0E000: ee8080 ee8080
+0FFFE: efbfbd efbfbd
+0FFFF: efbfbd efbfbd
+0FDCF: efb78f efb78f
+0FDD0: efb790 efb790
+0FDEF: efb7af efb7af
+0FDF0: efb7b0 efb7b0
+2FFFE: f0afbfbe f0afbfbe
+2FFFF: f0afbfbf f0afbfbf
diff --git a/ext/standard/tests/strings/htmlentities21.phpt b/ext/standard/tests/strings/htmlentities21.phpt
new file mode 100644 (file)
index 0000000..f34ff26
--- /dev/null
@@ -0,0 +1,198 @@
+--TEST--
+htmlentities() / htmlspecialchars() ENT_DISALLOWED charset variation
+--FILE--
+<?php
+$tests = array(
+    0x00, //C0
+    0x01,
+    0x09,
+    0x0A,
+    0x0B,
+    0x0C,
+    0x0D,
+    0x0E,
+    0x1F,
+    0x20, //allowed always
+    0x7F, //DEL
+    0x80, //C1
+    0x9F,
+    0xA0, //allowed always
+);
+
+function test($flag, $charset) {
+    global $tests;
+    $i = -1;
+    error_reporting(-1 & ~E_STRICT);
+    foreach ($tests as $test) {
+        $test = chr($test);
+        $i++;
+        $a = htmlentities($test, $flag | ENT_DISALLOWED, $charset);
+        $b = htmlspecialchars($test, $flag | ENT_DISALLOWED, $charset);
+        if ($a == "" && $b == "") { echo sprintf("%05X", $tests[$i]), ": INVALID SEQUENCE\n"; continue; }
+        echo sprintf("%05X", $tests[$i]), ": ", bin2hex($a), " ", bin2hex($b), "\n";
+    }
+    error_reporting(-1);
+}
+
+echo "*** Testing HTML 4.01/Windows-1251 ***\n";
+
+test(ENT_HTML401, "Windows-1251");
+
+echo "\n*** Testing XHTML 1.0/Windows-1251 ***\n";
+
+test(ENT_XHTML, "Windows-1251");
+
+echo "\n*** Testing HTML 5/Windows-1251 ***\n";
+
+test(ENT_HTML5, "Windows-1251");
+
+echo "\n*** Testing XML 1.0/Windows-1251 ***\n";
+
+test(ENT_XML1, "Windows-1251");
+
+echo "\n*** Testing HTML 4.01/SJIS ***\n";
+
+test(ENT_HTML401, "SJIS");
+
+echo "\n*** Testing XHTML 1.0/SJIS ***\n";
+
+test(ENT_XHTML, "SJIS");
+
+echo "\n*** Testing HTML 5/SJIS ***\n";
+
+test(ENT_HTML5, "SJIS");
+
+echo "\n*** Testing XML 1.0/SJIS ***\n";
+
+test(ENT_XML1, "SJIS");
+
+
+?>
+--EXPECT--
+*** Testing HTML 4.01/Windows-1251 ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 262378464646443b 7f
+00080: 80 80
+0009F: 9f 9f
+000A0: 266e6273703b a0
+
+*** Testing XHTML 1.0/Windows-1251 ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: 80 80
+0009F: 9f 9f
+000A0: 266e6273703b a0
+
+*** Testing HTML 5/Windows-1251 ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 265461623b 09
+0000A: 264e65774c696e653b 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 0c 0c
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 262378464646443b 7f
+00080: 26444a63793b 80
+0009F: 26647a63793b 9f
+000A0: 266e6273703b a0
+
+*** Testing XML 1.0/Windows-1251 ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: 80 80
+0009F: 9f 9f
+000A0: a0 a0
+
+*** Testing HTML 4.01/SJIS ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: INVALID SEQUENCE
+0009F: INVALID SEQUENCE
+000A0: INVALID SEQUENCE
+
+*** Testing XHTML 1.0/SJIS ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: INVALID SEQUENCE
+0009F: INVALID SEQUENCE
+000A0: INVALID SEQUENCE
+
+*** Testing HTML 5/SJIS ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 0c 0c
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: INVALID SEQUENCE
+0009F: INVALID SEQUENCE
+000A0: INVALID SEQUENCE
+
+*** Testing XML 1.0/SJIS ***
+00000: 262378464646443b 262378464646443b
+00001: 262378464646443b 262378464646443b
+00009: 09 09
+0000A: 0a 0a
+0000B: 262378464646443b 262378464646443b
+0000C: 262378464646443b 262378464646443b
+0000D: 0d 0d
+0000E: 262378464646443b 262378464646443b
+0001F: 262378464646443b 262378464646443b
+00020: 20 20
+0007F: 7f 7f
+00080: INVALID SEQUENCE
+0009F: INVALID SEQUENCE
+000A0: INVALID SEQUENCE
diff --git a/ext/standard/tests/strings/htmlentities22.phpt b/ext/standard/tests/strings/htmlentities22.phpt
new file mode 100644 (file)
index 0000000..f119820
--- /dev/null
@@ -0,0 +1,283 @@
+--TEST--
+htmlentities() / htmlspecialchars() ENT_DISALLOWED with entities and no double encode
+--FILE--
+<?php
+$tests = array(
+    "&#0;", //C0
+    "&#1;",
+    "&#x09;",
+    "&#x0A;",
+    "&#x0B;",
+    "&#x0C;",
+    "&#x0D;", //note that HTML5 is unique in that it forbids this entity, but allows a literal U+0D
+    "&#x0E;",
+    "&#x1F;",
+    "&#x20;", //allowed always
+    "&#x7F;", //DEL
+    "&#x80;", //C1
+    "&#x9F;",
+    "&#xA0;", //allowed always
+    "&#xD7FF;", //surrogates
+    "&#xD800;",
+    "&#xDFFF;",
+    "&#xE000;", //allowed always
+    "&#xFFFE;", //nonchar
+    "&#xFFFF;",
+    "&#xFDCF;", //allowed always
+    "&#xFDD0;", //nonchar
+    "&#xFDEF;",
+    "&#xFDF0;", //allowed always
+    "&#x2FFFE;", //nonchar
+    "&#x2FFFF;",
+    "&#x110000;", //bad reference
+);
+
+function test($flag, $flag2=ENT_DISALLOWED, $charset="UTF-8") {
+    global $tests;
+    $i = -1;
+    error_reporting(-1 & ~E_STRICT);
+    foreach ($tests as $test) {
+        $i++;
+        $a = htmlentities($test, $flag | $flag2, $charset, FALSE);
+        $b = htmlspecialchars($test, $flag | $flag2, $charset, FALSE);
+        
+        if ($a == $b)
+            echo sprintf("%s\t%s", $test, $a==$test?"NOT CHANGED":"CHANGED"), "\n";
+        else
+            echo sprintf("%s\tCHANGED (%s, %s)", $test, $a, $b), "\n";
+    }
+    error_reporting(-1);
+}
+
+echo "*** Testing HTML 4.01 ***\n";
+
+test(ENT_HTML401);
+
+echo "\n*** Testing XHTML 1.0 ***\n";
+
+test(ENT_XHTML);
+
+echo "\n*** Testing HTML 5 ***\n";
+
+test(ENT_HTML5);
+
+echo "\n*** Testing XML 1.0 ***\n";
+
+test(ENT_XML1);
+
+echo "\n*** Testing 5 without the flag ***\n";
+
+test(ENT_HTML5, 0);
+
+echo "\n*** Testing HTML 5 with another single-byte encoding ***\n";
+
+test(ENT_HTML5, ENT_DISALLOWED, "Windows-1251");
+
+echo "\n*** Testing HTML 5 with another multibyte-byte encoding ***\n";
+
+test(ENT_HTML5, ENT_DISALLOWED, "SJIS");
+
+?>
+--EXPECT--
+*** Testing HTML 4.01 ***
+&#0;   NOT CHANGED
+&#1;   NOT CHANGED
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; NOT CHANGED
+&#x0C; NOT CHANGED
+&#x0D; NOT CHANGED
+&#x0E; NOT CHANGED
+&#x1F; NOT CHANGED
+&#x20; NOT CHANGED
+&#x7F; NOT CHANGED
+&#x80; NOT CHANGED
+&#x9F; NOT CHANGED
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       NOT CHANGED
+&#xDFFF;       NOT CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       NOT CHANGED
+&#xFFFF;       NOT CHANGED
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       NOT CHANGED
+&#xFDEF;       NOT CHANGED
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      NOT CHANGED
+&#x2FFFF;      NOT CHANGED
+&#x110000;     CHANGED
+
+*** Testing XHTML 1.0 ***
+&#0;   CHANGED
+&#1;   CHANGED
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; CHANGED
+&#x0C; CHANGED
+&#x0D; NOT CHANGED
+&#x0E; CHANGED
+&#x1F; CHANGED
+&#x20; NOT CHANGED
+&#x7F; NOT CHANGED
+&#x80; NOT CHANGED
+&#x9F; NOT CHANGED
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       CHANGED
+&#xDFFF;       CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       CHANGED
+&#xFFFF;       CHANGED
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       NOT CHANGED
+&#xFDEF;       NOT CHANGED
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      NOT CHANGED
+&#x2FFFF;      NOT CHANGED
+&#x110000;     CHANGED
+
+*** Testing HTML 5 ***
+&#0;   CHANGED (&amp;&num;0&semi;, &amp;#0;)
+&#1;   CHANGED (&amp;&num;1&semi;, &amp;#1;)
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; CHANGED (&amp;&num;x0B&semi;, &amp;#x0B;)
+&#x0C; NOT CHANGED
+&#x0D; CHANGED (&amp;&num;x0D&semi;, &amp;#x0D;)
+&#x0E; CHANGED (&amp;&num;x0E&semi;, &amp;#x0E;)
+&#x1F; CHANGED (&amp;&num;x1F&semi;, &amp;#x1F;)
+&#x20; NOT CHANGED
+&#x7F; CHANGED (&amp;&num;x7F&semi;, &amp;#x7F;)
+&#x80; CHANGED (&amp;&num;x80&semi;, &amp;#x80;)
+&#x9F; CHANGED (&amp;&num;x9F&semi;, &amp;#x9F;)
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       NOT CHANGED
+&#xDFFF;       NOT CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       CHANGED (&amp;&num;xFFFE&semi;, &amp;#xFFFE;)
+&#xFFFF;       CHANGED (&amp;&num;xFFFF&semi;, &amp;#xFFFF;)
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       CHANGED (&amp;&num;xFDD0&semi;, &amp;#xFDD0;)
+&#xFDEF;       CHANGED (&amp;&num;xFDEF&semi;, &amp;#xFDEF;)
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      CHANGED (&amp;&num;x2FFFE&semi;, &amp;#x2FFFE;)
+&#x2FFFF;      CHANGED (&amp;&num;x2FFFF&semi;, &amp;#x2FFFF;)
+&#x110000;     CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
+
+*** Testing XML 1.0 ***
+&#0;   CHANGED
+&#1;   CHANGED
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; CHANGED
+&#x0C; CHANGED
+&#x0D; NOT CHANGED
+&#x0E; CHANGED
+&#x1F; CHANGED
+&#x20; NOT CHANGED
+&#x7F; NOT CHANGED
+&#x80; NOT CHANGED
+&#x9F; NOT CHANGED
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       CHANGED
+&#xDFFF;       CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       CHANGED
+&#xFFFF;       CHANGED
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       NOT CHANGED
+&#xFDEF;       NOT CHANGED
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      NOT CHANGED
+&#x2FFFF;      NOT CHANGED
+&#x110000;     CHANGED
+
+*** Testing 5 without the flag ***
+&#0;   NOT CHANGED
+&#1;   NOT CHANGED
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; NOT CHANGED
+&#x0C; NOT CHANGED
+&#x0D; NOT CHANGED
+&#x0E; NOT CHANGED
+&#x1F; NOT CHANGED
+&#x20; NOT CHANGED
+&#x7F; NOT CHANGED
+&#x80; NOT CHANGED
+&#x9F; NOT CHANGED
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       NOT CHANGED
+&#xDFFF;       NOT CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       NOT CHANGED
+&#xFFFF;       NOT CHANGED
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       NOT CHANGED
+&#xFDEF;       NOT CHANGED
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      NOT CHANGED
+&#x2FFFF;      NOT CHANGED
+&#x110000;     CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
+
+*** Testing HTML 5 with another single-byte encoding ***
+&#0;   CHANGED (&amp;&num;0&semi;, &amp;#0;)
+&#1;   CHANGED (&amp;&num;1&semi;, &amp;#1;)
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; CHANGED (&amp;&num;x0B&semi;, &amp;#x0B;)
+&#x0C; NOT CHANGED
+&#x0D; CHANGED (&amp;&num;x0D&semi;, &amp;#x0D;)
+&#x0E; CHANGED (&amp;&num;x0E&semi;, &amp;#x0E;)
+&#x1F; CHANGED (&amp;&num;x1F&semi;, &amp;#x1F;)
+&#x20; NOT CHANGED
+&#x7F; CHANGED (&amp;&num;x7F&semi;, &amp;#x7F;)
+&#x80; CHANGED (&amp;&num;x80&semi;, &amp;#x80;)
+&#x9F; CHANGED (&amp;&num;x9F&semi;, &amp;#x9F;)
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       NOT CHANGED
+&#xDFFF;       NOT CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       CHANGED (&amp;&num;xFFFE&semi;, &amp;#xFFFE;)
+&#xFFFF;       CHANGED (&amp;&num;xFFFF&semi;, &amp;#xFFFF;)
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       CHANGED (&amp;&num;xFDD0&semi;, &amp;#xFDD0;)
+&#xFDEF;       CHANGED (&amp;&num;xFDEF&semi;, &amp;#xFDEF;)
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      CHANGED (&amp;&num;x2FFFE&semi;, &amp;#x2FFFE;)
+&#x2FFFF;      CHANGED (&amp;&num;x2FFFF&semi;, &amp;#x2FFFF;)
+&#x110000;     CHANGED (&amp;&num;x110000&semi;, &amp;#x110000;)
+
+*** Testing HTML 5 with another multibyte-byte encoding ***
+&#0;   CHANGED
+&#1;   CHANGED
+&#x09; NOT CHANGED
+&#x0A; NOT CHANGED
+&#x0B; CHANGED
+&#x0C; NOT CHANGED
+&#x0D; CHANGED
+&#x0E; CHANGED
+&#x1F; CHANGED
+&#x20; NOT CHANGED
+&#x7F; CHANGED
+&#x80; CHANGED
+&#x9F; CHANGED
+&#xA0; NOT CHANGED
+&#xD7FF;       NOT CHANGED
+&#xD800;       NOT CHANGED
+&#xDFFF;       NOT CHANGED
+&#xE000;       NOT CHANGED
+&#xFFFE;       CHANGED
+&#xFFFF;       CHANGED
+&#xFDCF;       NOT CHANGED
+&#xFDD0;       CHANGED
+&#xFDEF;       CHANGED
+&#xFDF0;       NOT CHANGED
+&#x2FFFE;      CHANGED
+&#x2FFFF;      CHANGED
+&#x110000;     CHANGED
diff --git a/ext/standard/tests/strings/htmlentities23.phpt b/ext/standard/tests/strings/htmlentities23.phpt
new file mode 100644 (file)
index 0000000..bcfcd8d
--- /dev/null
@@ -0,0 +1,95 @@
+--TEST--
+htmlentities() / htmlspecialchars() ENT_SUBSTITUTE EUC-JP
+--FILE--
+<?php
+$tests = array(
+    "\x8F\xA1\xFF", //2 sub as 2nd is potentially valid as lead
+    "\x8F\xA1", //2 sub, as 2nd is potentially valid as lead
+    "\x8F", //1 sub
+    "\x8F\xA0", //1 sub, A0 is not valid as sole/first byte
+    "\x8F\xA1\x21", //2 sub, no consume last
+    "\x8F\x21", //1 sub, no consume last
+    "\x8E\xAE", //valid
+    "\x8E", //1 sub
+    "\x8E\x21", //1 sub, no consume last
+    "\xB2\xFF", //1 sub
+    "\xB2", //1 sub
+    "\xB2\x21", //1 sub, no consume last
+    "\xA0", //1 sub
+);
+
+foreach ($tests as $test) {
+    error_reporting(~E_STRICT);
+    $a = htmlentities($test, ENT_QUOTES | ENT_SUBSTITUTE, "EUC-JP");
+    error_reporting(-1);
+       var_dump($a, bin2hex($a));
+    $a = htmlspecialchars($test, ENT_QUOTES | ENT_SUBSTITUTE, "EUC-JP");
+       var_dump($a, bin2hex($a));
+    echo "\n";
+}
+?>
+--EXPECT--
+string(16) "&#xFFFD;&#xFFFD;"
+string(32) "262378464646443b262378464646443b"
+string(16) "&#xFFFD;&#xFFFD;"
+string(32) "262378464646443b262378464646443b"
+
+string(16) "&#xFFFD;&#xFFFD;"
+string(32) "262378464646443b262378464646443b"
+string(16) "&#xFFFD;&#xFFFD;"
+string(32) "262378464646443b262378464646443b"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+
+string(17) "&#xFFFD;&#xFFFD;!"
+string(34) "262378464646443b262378464646443b21"
+string(17) "&#xFFFD;&#xFFFD;!"
+string(34) "262378464646443b262378464646443b21"
+
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+
+string(2) "\8e®"
+string(4) "8eae"
+string(2) "\8e®"
+string(4) "8eae"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+string(9) "&#xFFFD;!"
+string(18) "262378464646443b21"
+
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
+string(8) "&#xFFFD;"
+string(16) "262378464646443b"
diff --git a/ext/standard/tests/strings/htmlentities_html5.phpt b/ext/standard/tests/strings/htmlentities_html5.phpt
new file mode 100644 (file)
index 0000000..1f34097
--- /dev/null
@@ -0,0 +1,1623 @@
+--TEST--
+htmlentities() conformance check (HTML 5)
+--FILE--
+<?php
+function utf32_utf8($k) {
+       if ($k < 0x80) {
+               $retval = pack('C', $k);
+       } else if ($k < 0x800) {
+               $retval = pack('C2', 
+            0xc0 | ($k >> 6),
+            0x80 | ($k & 0x3f));
+       } else if ($k < 0x10000) {
+        $retval = pack('C3',
+            0xe0 | ($k >> 12),
+            0x80 | (($k >> 6) & 0x3f),
+            0x80 | ($k & 0x3f));
+       } else {
+        $retval = pack('C4',
+            0xf0 | ($k >> 18),
+            0x80 | (($k >> 12) & 0x3f),
+            0x80 | (($k >> 6) & 0x3f),
+            0x80 | ($k & 0x3f));
+       }
+       return $retval;
+}
+
+for ($i = 0; $i < 0x1DFFF; $i++) {
+    if ($i >= 0xd800 && $i < 0xe000) //surrogates
+        continue;
+    $str = utf32_utf8($i);
+    $result = htmlentities($str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
+    if ($str != $result) {
+        printf("%s\tU+%05X\n", $result, $i);
+    }
+}
+
+/* multicodepoint entities */
+$mpcent = array(
+array(0x0003C, 0x20D2),
+array(0x0003D, 0x20E5),
+array(0x0003E, 0x20D2),
+array(0x00066, 0x6A),
+array(0x0205F, 0x200A),
+array(0x0219D, 0x338),
+array(0x02202, 0x338),
+array(0x02220, 0x20D2),
+array(0x02229, 0xFE00),
+array(0x0222A, 0xFE00),
+array(0x0223C, 0x020D2),
+array(0x0223D, 0x00331),
+array(0x0223E, 0x00333),
+array(0x02242, 0x338),
+array(0x0224B, 0x338),
+array(0x0224D, 0x020D2),
+array(0x0224E, 0x338),
+array(0x0224F, 0x338),
+array(0x02250, 0x338),
+array(0x02261, 0x020E5),
+array(0x02264, 0x20D2),
+array(0x02265, 0x020D2),
+array(0x02266, 0x338),
+array(0x02267, 0x00338),
+array(0x02268, 0xFE00),
+array(0x02269, 0xFE00),
+array(0x0226A, 0x338),
+array(0x0226A, 0x20D2),
+array(0x0226B, 0x338),
+array(0x0226B, 0x20D2),
+array(0x0227F, 0x338),
+array(0x02282, 0x20D2),
+array(0x02283, 0x20D2),
+array(0x0228A, 0xFE00),
+array(0x0228B, 0xFE00),
+array(0x0228F, 0x338),
+array(0x02290, 0x338),
+array(0x02293, 0xFE00),
+array(0x02294, 0xFE00),
+array(0x022B4, 0x20D2),
+array(0x022B5, 0x20D2),
+array(0x022D8, 0x338),
+array(0x022D9, 0x338),
+array(0x022DA, 0xFE00),
+array(0x022DB, 0xFE00),
+array(0x022F5, 0x338),
+array(0x022F9, 0x338),
+array(0x02933, 0x338),
+array(0x029CF, 0x338),
+array(0x029D0, 0x338),
+array(0x02A6D, 0x338),
+array(0x02A70, 0x338),
+array(0x02A7D, 0x338),
+array(0x02A7E, 0x338),
+array(0x02AA1, 0x338),
+array(0x02AA2, 0x338),
+array(0x02AAC, 0xFE00),
+array(0x02AAD, 0xFE00),
+array(0x02AAF, 0x338),
+array(0x02AB0, 0x338),
+array(0x02AC5, 0x338),
+array(0x02AC6, 0x338),
+array(0x02ACB, 0xFE00),
+array(0x02ACC, 0xFE00),
+array(0x02AFD, 0xFE00),
+);
+
+foreach ($mpcent as $i) {
+    $str = utf32_utf8($i[0]);
+    $str .= utf32_utf8($i[1]);
+    $result = htmlentities($str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
+    printf("%s\tU+%05X U+%05X\n", $result, $i[0], $i[1]);
+}
+?>
+--EXPECT--
+&Tab;  U+00009
+&NewLine;      U+0000A
+&excl; U+00021
+&quot; U+00022
+&num;  U+00023
+&dollar;       U+00024
+&percnt;       U+00025
+&amp;  U+00026
+&apos; U+00027
+&lpar; U+00028
+&rpar; U+00029
+&ast;  U+0002A
+&plus; U+0002B
+&comma;        U+0002C
+&period;       U+0002E
+&sol;  U+0002F
+&colon;        U+0003A
+&semi; U+0003B
+&lt;   U+0003C
+&equals;       U+0003D
+&gt;   U+0003E
+&quest;        U+0003F
+&commat;       U+00040
+&lbrack;       U+0005B
+&bsol; U+0005C
+&rsqb; U+0005D
+&Hat;  U+0005E
+&lowbar;       U+0005F
+&grave;        U+00060
+&lbrace;       U+0007B
+&vert; U+0007C
+&rcub; U+0007D
+&nbsp; U+000A0
+&iexcl;        U+000A1
+&cent; U+000A2
+&pound;        U+000A3
+&curren;       U+000A4
+&yen;  U+000A5
+&brvbar;       U+000A6
+&sect; U+000A7
+&DoubleDot;    U+000A8
+&copy; U+000A9
+&ordf; U+000AA
+&laquo;        U+000AB
+&not;  U+000AC
+&shy;  U+000AD
+&reg;  U+000AE
+&macr; U+000AF
+&deg;  U+000B0
+&plusmn;       U+000B1
+&sup2; U+000B2
+&sup3; U+000B3
+&DiacriticalAcute;     U+000B4
+&micro;        U+000B5
+&para; U+000B6
+&CenterDot;    U+000B7
+&Cedilla;      U+000B8
+&sup1; U+000B9
+&ordm; U+000BA
+&raquo;        U+000BB
+&frac14;       U+000BC
+&half; U+000BD
+&frac34;       U+000BE
+&iquest;       U+000BF
+&Agrave;       U+000C0
+&Aacute;       U+000C1
+&Acirc;        U+000C2
+&Atilde;       U+000C3
+&Auml; U+000C4
+&Aring;        U+000C5
+&AElig;        U+000C6
+&Ccedil;       U+000C7
+&Egrave;       U+000C8
+&Eacute;       U+000C9
+&Ecirc;        U+000CA
+&Euml; U+000CB
+&Igrave;       U+000CC
+&Iacute;       U+000CD
+&Icirc;        U+000CE
+&Iuml; U+000CF
+&ETH;  U+000D0
+&Ntilde;       U+000D1
+&Ograve;       U+000D2
+&Oacute;       U+000D3
+&Ocirc;        U+000D4
+&Otilde;       U+000D5
+&Ouml; U+000D6
+&times;        U+000D7
+&Oslash;       U+000D8
+&Ugrave;       U+000D9
+&Uacute;       U+000DA
+&Ucirc;        U+000DB
+&Uuml; U+000DC
+&Yacute;       U+000DD
+&THORN;        U+000DE
+&szlig;        U+000DF
+&agrave;       U+000E0
+&aacute;       U+000E1
+&acirc;        U+000E2
+&atilde;       U+000E3
+&auml; U+000E4
+&aring;        U+000E5
+&aelig;        U+000E6
+&ccedil;       U+000E7
+&egrave;       U+000E8
+&eacute;       U+000E9
+&ecirc;        U+000EA
+&euml; U+000EB
+&igrave;       U+000EC
+&iacute;       U+000ED
+&icirc;        U+000EE
+&iuml; U+000EF
+&eth;  U+000F0
+&ntilde;       U+000F1
+&ograve;       U+000F2
+&oacute;       U+000F3
+&ocirc;        U+000F4
+&otilde;       U+000F5
+&ouml; U+000F6
+&divide;       U+000F7
+&oslash;       U+000F8
+&ugrave;       U+000F9
+&uacute;       U+000FA
+&ucirc;        U+000FB
+&uuml; U+000FC
+&yacute;       U+000FD
+&thorn;        U+000FE
+&yuml; U+000FF
+&Amacr;        U+00100
+&amacr;        U+00101
+&Abreve;       U+00102
+&abreve;       U+00103
+&Aogon;        U+00104
+&aogon;        U+00105
+&Cacute;       U+00106
+&cacute;       U+00107
+&Ccirc;        U+00108
+&ccirc;        U+00109
+&Cdot; U+0010A
+&cdot; U+0010B
+&Ccaron;       U+0010C
+&ccaron;       U+0010D
+&Dcaron;       U+0010E
+&dcaron;       U+0010F
+&Dstrok;       U+00110
+&dstrok;       U+00111
+&Emacr;        U+00112
+&emacr;        U+00113
+&Edot; U+00116
+&edot; U+00117
+&Eogon;        U+00118
+&eogon;        U+00119
+&Ecaron;       U+0011A
+&ecaron;       U+0011B
+&Gcirc;        U+0011C
+&gcirc;        U+0011D
+&Gbreve;       U+0011E
+&gbreve;       U+0011F
+&Gdot; U+00120
+&gdot; U+00121
+&Gcedil;       U+00122
+&Hcirc;        U+00124
+&hcirc;        U+00125
+&Hstrok;       U+00126
+&hstrok;       U+00127
+&Itilde;       U+00128
+&itilde;       U+00129
+&Imacr;        U+0012A
+&imacr;        U+0012B
+&Iogon;        U+0012E
+&iogon;        U+0012F
+&Idot; U+00130
+&inodot;       U+00131
+&IJlig;        U+00132
+&ijlig;        U+00133
+&Jcirc;        U+00134
+&jcirc;        U+00135
+&Kcedil;       U+00136
+&kcedil;       U+00137
+&kgreen;       U+00138
+&Lacute;       U+00139
+&lacute;       U+0013A
+&Lcedil;       U+0013B
+&lcedil;       U+0013C
+&Lcaron;       U+0013D
+&lcaron;       U+0013E
+&Lmidot;       U+0013F
+&lmidot;       U+00140
+&Lstrok;       U+00141
+&lstrok;       U+00142
+&Nacute;       U+00143
+&nacute;       U+00144
+&Ncedil;       U+00145
+&ncedil;       U+00146
+&Ncaron;       U+00147
+&ncaron;       U+00148
+&napos;        U+00149
+&ENG;  U+0014A
+&eng;  U+0014B
+&Omacr;        U+0014C
+&omacr;        U+0014D
+&Odblac;       U+00150
+&odblac;       U+00151
+&OElig;        U+00152
+&oelig;        U+00153
+&Racute;       U+00154
+&racute;       U+00155
+&Rcedil;       U+00156
+&rcedil;       U+00157
+&Rcaron;       U+00158
+&rcaron;       U+00159
+&Sacute;       U+0015A
+&sacute;       U+0015B
+&Scirc;        U+0015C
+&scirc;        U+0015D
+&Scedil;       U+0015E
+&scedil;       U+0015F
+&Scaron;       U+00160
+&scaron;       U+00161
+&Tcedil;       U+00162
+&tcedil;       U+00163
+&Tcaron;       U+00164
+&tcaron;       U+00165
+&Tstrok;       U+00166
+&tstrok;       U+00167
+&Utilde;       U+00168
+&utilde;       U+00169
+&Umacr;        U+0016A
+&umacr;        U+0016B
+&Ubreve;       U+0016C
+&ubreve;       U+0016D
+&Uring;        U+0016E
+&uring;        U+0016F
+&Udblac;       U+00170
+&udblac;       U+00171
+&Uogon;        U+00172
+&uogon;        U+00173
+&Wcirc;        U+00174
+&wcirc;        U+00175
+&Ycirc;        U+00176
+&ycirc;        U+00177
+&Yuml; U+00178
+&Zacute;       U+00179
+&zacute;       U+0017A
+&Zdot; U+0017B
+&zdot; U+0017C
+&Zcaron;       U+0017D
+&zcaron;       U+0017E
+&fnof; U+00192
+&imped;        U+001B5
+&gacute;       U+001F5
+&jmath;        U+00237
+&circ; U+002C6
+&Hacek;        U+002C7
+&Breve;        U+002D8
+&dot;  U+002D9
+&ring; U+002DA
+&ogon; U+002DB
+&DiacriticalTilde;     U+002DC
+&DiacriticalDoubleAcute;       U+002DD
+&DownBreve;    U+00311
+&Alpha;        U+00391
+&Beta; U+00392
+&Gamma;        U+00393
+&Delta;        U+00394
+&Epsilon;      U+00395
+&Zeta; U+00396
+&Eta;  U+00397
+&Theta;        U+00398
+&Iota; U+00399
+&Kappa;        U+0039A
+&Lambda;       U+0039B
+&Mu;   U+0039C
+&Nu;   U+0039D
+&Xi;   U+0039E
+&Omicron;      U+0039F
+&Pi;   U+003A0
+&Rho;  U+003A1
+&Sigma;        U+003A3
+&Tau;  U+003A4
+&Upsilon;      U+003A5
+&Phi;  U+003A6
+&Chi;  U+003A7
+&Psi;  U+003A8
+&Omega;        U+003A9
+&alpha;        U+003B1
+&beta; U+003B2
+&gamma;        U+003B3
+&delta;        U+003B4
+&epsi; U+003B5
+&zeta; U+003B6
+&eta;  U+003B7
+&theta;        U+003B8
+&iota; U+003B9
+&kappa;        U+003BA
+&lambda;       U+003BB
+&mu;   U+003BC
+&nu;   U+003BD
+&xi;   U+003BE
+&omicron;      U+003BF
+&pi;   U+003C0
+&rho;  U+003C1
+&sigmav;       U+003C2
+&sigma;        U+003C3
+&tau;  U+003C4
+&upsi; U+003C5
+&phi;  U+003C6
+&chi;  U+003C7
+&psi;  U+003C8
+&omega;        U+003C9
+&thetasym;     U+003D1
+&upsih;        U+003D2
+&straightphi;  U+003D5
+&piv;  U+003D6
+&Gammad;       U+003DC
+&gammad;       U+003DD
+&varkappa;     U+003F0
+&rhov; U+003F1
+&straightepsilon;      U+003F5
+&backepsilon;  U+003F6
+&IOcy; U+00401
+&DJcy; U+00402
+&GJcy; U+00403
+&Jukcy;        U+00404
+&DScy; U+00405
+&Iukcy;        U+00406
+&YIcy; U+00407
+&Jsercy;       U+00408
+&LJcy; U+00409
+&NJcy; U+0040A
+&TSHcy;        U+0040B
+&KJcy; U+0040C
+&Ubrcy;        U+0040E
+&DZcy; U+0040F
+&Acy;  U+00410
+&Bcy;  U+00411
+&Vcy;  U+00412
+&Gcy;  U+00413
+&Dcy;  U+00414
+&IEcy; U+00415
+&ZHcy; U+00416
+&Zcy;  U+00417
+&Icy;  U+00418
+&Jcy;  U+00419
+&Kcy;  U+0041A
+&Lcy;  U+0041B
+&Mcy;  U+0041C
+&Ncy;  U+0041D
+&Ocy;  U+0041E
+&Pcy;  U+0041F
+&Rcy;  U+00420
+&Scy;  U+00421
+&Tcy;  U+00422
+&Ucy;  U+00423
+&Fcy;  U+00424
+&KHcy; U+00425
+&TScy; U+00426
+&CHcy; U+00427
+&SHcy; U+00428
+&SHCHcy;       U+00429
+&HARDcy;       U+0042A
+&Ycy;  U+0042B
+&SOFTcy;       U+0042C
+&Ecy;  U+0042D
+&YUcy; U+0042E
+&YAcy; U+0042F
+&acy;  U+00430
+&bcy;  U+00431
+&vcy;  U+00432
+&gcy;  U+00433
+&dcy;  U+00434
+&iecy; U+00435
+&zhcy; U+00436
+&zcy;  U+00437
+&icy;  U+00438
+&jcy;  U+00439
+&kcy;  U+0043A
+&lcy;  U+0043B
+&mcy;  U+0043C
+&ncy;  U+0043D
+&ocy;  U+0043E
+&pcy;  U+0043F
+&rcy;  U+00440
+&scy;  U+00441
+&tcy;  U+00442
+&ucy;  U+00443
+&fcy;  U+00444
+&khcy; U+00445
+&tscy; U+00446
+&chcy; U+00447
+&shcy; U+00448
+&shchcy;       U+00449
+&hardcy;       U+0044A
+&ycy;  U+0044B
+&softcy;       U+0044C
+&ecy;  U+0044D
+&yucy; U+0044E
+&yacy; U+0044F
+&iocy; U+00451
+&djcy; U+00452
+&gjcy; U+00453
+&jukcy;        U+00454
+&dscy; U+00455
+&iukcy;        U+00456
+&yicy; U+00457
+&jsercy;       U+00458
+&ljcy; U+00459
+&njcy; U+0045A
+&tshcy;        U+0045B
+&kjcy; U+0045C
+&ubrcy;        U+0045E
+&dzcy; U+0045F
+&ensp; U+02002
+&emsp; U+02003
+&emsp13;       U+02004
+&emsp14;       U+02005
+&numsp;        U+02007
+&puncsp;       U+02008
+&ThinSpace;    U+02009
+&hairsp;       U+0200A
+&ZeroWidthSpace;       U+0200B
+&zwnj; U+0200C
+&zwj;  U+0200D
+&lrm;  U+0200E
+&rlm;  U+0200F
+&hyphen;       U+02010
+&ndash;        U+02013
+&mdash;        U+02014
+&horbar;       U+02015
+&Verbar;       U+02016
+&OpenCurlyQuote;       U+02018
+&rsquo;        U+02019
+&sbquo;        U+0201A
+&OpenCurlyDoubleQuote; U+0201C
+&rdquo;        U+0201D
+&bdquo;        U+0201E
+&dagger;       U+02020
+&Dagger;       U+02021
+&bull; U+02022
+&nldr; U+02025
+&hellip;       U+02026
+&permil;       U+02030
+&pertenk;      U+02031
+&prime;        U+02032
+&Prime;        U+02033
+&tprime;       U+02034
+&backprime;    U+02035
+&lsaquo;       U+02039
+&rsaquo;       U+0203A
+&oline;        U+0203E
+&caret;        U+02041
+&hybull;       U+02043
+&frasl;        U+02044
+&bsemi;        U+0204F
+&qprime;       U+02057
+&MediumSpace;  U+0205F
+&NoBreak;      U+02060
+&af;   U+02061
+&InvisibleTimes;       U+02062
+&ic;   U+02063
+&euro; U+020AC
+&TripleDot;    U+020DB
+&DotDot;       U+020DC
+&complexes;    U+02102
+&incare;       U+02105
+&gscr; U+0210A
+&HilbertSpace; U+0210B
+&Hfr;  U+0210C
+&Hopf; U+0210D
+&planckh;      U+0210E
+&planck;       U+0210F
+&imagline;     U+02110
+&Ifr;  U+02111
+&lagran;       U+02112
+&ell;  U+02113
+&naturals;     U+02115
+&numero;       U+02116
+&copysr;       U+02117
+&wp;   U+02118
+&primes;       U+02119
+&rationals;    U+0211A
+&realine;      U+0211B
+&Rfr;  U+0211C
+&Ropf; U+0211D
+&rx;   U+0211E
+&trade;        U+02122
+&Zopf; U+02124
+&mho;  U+02127
+&Zfr;  U+02128
+&iiota;        U+02129
+&Bscr; U+0212C
+&Cfr;  U+0212D
+&escr; U+0212F
+&expectation;  U+02130
+&Fouriertrf;   U+02131
+&Mellintrf;    U+02133
+&orderof;      U+02134
+&aleph;        U+02135
+&beth; U+02136
+&gimel;        U+02137
+&daleth;       U+02138
+&CapitalDifferentialD; U+02145
+&DifferentialD;        U+02146
+&exponentiale; U+02147
+&ImaginaryI;   U+02148
+&frac13;       U+02153
+&frac23;       U+02154
+&frac15;       U+02155
+&frac25;       U+02156
+&frac35;       U+02157
+&frac45;       U+02158
+&frac16;       U+02159
+&frac56;       U+0215A
+&frac18;       U+0215B
+&frac38;       U+0215C
+&frac58;       U+0215D
+&frac78;       U+0215E
+&larr; U+02190
+&uarr; U+02191
+&srarr;        U+02192
+&darr; U+02193
+&harr; U+02194
+&UpDownArrow;  U+02195
+&nwarrow;      U+02196
+&UpperRightArrow;      U+02197
+&LowerRightArrow;      U+02198
+&swarr;        U+02199
+&nleftarrow;   U+0219A
+&nrarr;        U+0219B
+&rarrw;        U+0219D
+&Larr; U+0219E
+&Uarr; U+0219F
+&twoheadrightarrow;    U+021A0
+&Darr; U+021A1
+&larrtl;       U+021A2
+&rarrtl;       U+021A3
+&LeftTeeArrow; U+021A4
+&UpTeeArrow;   U+021A5
+&map;  U+021A6
+&DownTeeArrow; U+021A7
+&larrhk;       U+021A9
+&rarrhk;       U+021AA
+&larrlp;       U+021AB
+&looparrowright;       U+021AC
+&harrw;        U+021AD
+&nleftrightarrow;      U+021AE
+&Lsh;  U+021B0
+&rsh;  U+021B1
+&ldsh; U+021B2
+&rdsh; U+021B3
+&crarr;        U+021B5
+&curvearrowleft;       U+021B6
+&curarr;       U+021B7
+&olarr;        U+021BA
+&orarr;        U+021BB
+&leftharpoonup;        U+021BC
+&leftharpoondown;      U+021BD
+&RightUpVector;        U+021BE
+&uharl;        U+021BF
+&rharu;        U+021C0
+&rhard;        U+021C1
+&RightDownVector;      U+021C2
+&dharl;        U+021C3
+&rightleftarrows;      U+021C4
+&udarr;        U+021C5
+&lrarr;        U+021C6
+&llarr;        U+021C7
+&upuparrows;   U+021C8
+&rrarr;        U+021C9
+&downdownarrows;       U+021CA
+&leftrightharpoons;    U+021CB
+&rightleftharpoons;    U+021CC
+&nLeftarrow;   U+021CD
+&nhArr;        U+021CE
+&nrArr;        U+021CF
+&DoubleLeftArrow;      U+021D0
+&DoubleUpArrow;        U+021D1
+&Implies;      U+021D2
+&Downarrow;    U+021D3
+&hArr; U+021D4
+&Updownarrow;  U+021D5
+&nwArr;        U+021D6
+&neArr;        U+021D7
+&seArr;        U+021D8
+&swArr;        U+021D9
+&lAarr;        U+021DA
+&rAarr;        U+021DB
+&zigrarr;      U+021DD
+&LeftArrowBar; U+021E4
+&RightArrowBar;        U+021E5
+&DownArrowUpArrow;     U+021F5
+&loarr;        U+021FD
+&roarr;        U+021FE
+&hoarr;        U+021FF
+&forall;       U+02200
+&comp; U+02201
+&part; U+02202
+&Exists;       U+02203
+&nexist;       U+02204
+&empty;        U+02205
+&nabla;        U+02207
+&isinv;        U+02208
+&notin;        U+02209
+&ReverseElement;       U+0220B
+&notniva;      U+0220C
+&prod; U+0220F
+&Coproduct;    U+02210
+&sum;  U+02211
+&minus;        U+02212
+&MinusPlus;    U+02213
+&plusdo;       U+02214
+&ssetmn;       U+02216
+&lowast;       U+02217
+&compfn;       U+02218
+&Sqrt; U+0221A
+&prop; U+0221D
+&infin;        U+0221E
+&angrt;        U+0221F
+&angle;        U+02220
+&angmsd;       U+02221
+&angsph;       U+02222
+&mid;  U+02223
+&nshortmid;    U+02224
+&shortparallel;        U+02225
+&nparallel;    U+02226
+&and;  U+02227
+&or;   U+02228
+&cap;  U+02229
+&cup;  U+0222A
+&Integral;     U+0222B
+&Int;  U+0222C
+&tint; U+0222D
+&ContourIntegral;      U+0222E
+&DoubleContourIntegral;        U+0222F
+&Cconint;      U+02230
+&cwint;        U+02231
+&cwconint;     U+02232
+&awconint;     U+02233
+&there4;       U+02234
+&Because;      U+02235
+&ratio;        U+02236
+&Colon;        U+02237
+&minusd;       U+02238
+&mDDot;        U+0223A
+&homtht;       U+0223B
+&sim;  U+0223C
+&bsim; U+0223D
+&ac;   U+0223E
+&acd;  U+0223F
+&wr;   U+02240
+&NotTilde;     U+02241
+&esim; U+02242
+&simeq;        U+02243
+&nsime;        U+02244
+&TildeFullEqual;       U+02245
+&simne;        U+02246
+&ncong;        U+02247
+&approx;       U+02248
+&napprox;      U+02249
+&ape;  U+0224A
+&apid; U+0224B
+&bcong;        U+0224C
+&CupCap;       U+0224D
+&bump; U+0224E
+&HumpEqual;    U+0224F
+&esdot;        U+02250
+&doteqdot;     U+02251
+&fallingdotseq;        U+02252
+&risingdotseq; U+02253
+&coloneq;      U+02254
+&eqcolon;      U+02255
+&ecir; U+02256
+&circeq;       U+02257
+&wedgeq;       U+02259
+&veeeq;        U+0225A
+&triangleq;    U+0225C
+&equest;       U+0225F
+&NotEqual;     U+02260
+&Congruent;    U+02261
+&NotCongruent; U+02262
+&leq;  U+02264
+&ge;   U+02265
+&lE;   U+02266
+&geqq; U+02267
+&lneqq;        U+02268
+&gneqq;        U+02269
+&ll;   U+0226A
+&gg;   U+0226B
+&between;      U+0226C
+&NotCupCap;    U+0226D
+&NotLess;      U+0226E
+&ngtr; U+0226F
+&NotLessEqual; U+02270
+&ngeq; U+02271
+&LessTilde;    U+02272
+&GreaterTilde; U+02273
+&nlsim;        U+02274
+&ngsim;        U+02275
+&lessgtr;      U+02276
+&gl;   U+02277
+&ntlg; U+02278
+&NotGreaterLess;       U+02279
+&prec; U+0227A
+&succ; U+0227B
+&PrecedesSlantEqual;   U+0227C
+&succcurlyeq;  U+0227D
+&precsim;      U+0227E
+&SucceedsTilde;        U+0227F
+&npr;  U+02280
+&NotSucceeds;  U+02281
+&sub;  U+02282
+&sup;  U+02283
+&nsub; U+02284
+&nsup; U+02285
+&SubsetEqual;  U+02286
+&supe; U+02287
+&NotSubsetEqual;       U+02288
+&NotSupersetEqual;     U+02289
+&subsetneq;    U+0228A
+&supsetneq;    U+0228B
+&cupdot;       U+0228D
+&UnionPlus;    U+0228E
+&sqsub;        U+0228F
+&sqsupset;     U+02290
+&SquareSubsetEqual;    U+02291
+&SquareSupersetEqual;  U+02292
+&sqcap;        U+02293
+&sqcup;        U+02294
+&CirclePlus;   U+02295
+&ominus;       U+02296
+&CircleTimes;  U+02297
+&osol; U+02298
+&CircleDot;    U+02299
+&ocir; U+0229A
+&oast; U+0229B
+&odash;        U+0229D
+&boxplus;      U+0229E
+&boxminus;     U+0229F
+&timesb;       U+022A0
+&sdotb;        U+022A1
+&vdash;        U+022A2
+&dashv;        U+022A3
+&DownTee;      U+022A4
+&perp; U+022A5
+&models;       U+022A7
+&DoubleRightTee;       U+022A8
+&Vdash;        U+022A9
+&Vvdash;       U+022AA
+&VDash;        U+022AB
+&nvdash;       U+022AC
+&nvDash;       U+022AD
+&nVdash;       U+022AE
+&nVDash;       U+022AF
+&prurel;       U+022B0
+&vartriangleleft;      U+022B2
+&vrtri;        U+022B3
+&LeftTriangleEqual;    U+022B4
+&RightTriangleEqual;   U+022B5
+&origof;       U+022B6
+&imof; U+022B7
+&mumap;        U+022B8
+&hercon;       U+022B9
+&intcal;       U+022BA
+&veebar;       U+022BB
+&barvee;       U+022BD
+&angrtvb;      U+022BE
+&lrtri;        U+022BF
+&xwedge;       U+022C0
+&xvee; U+022C1
+&bigcap;       U+022C2
+&bigcup;       U+022C3
+&diamond;      U+022C4
+&sdot; U+022C5
+&Star; U+022C6
+&divonx;       U+022C7
+&bowtie;       U+022C8
+&ltimes;       U+022C9
+&rtimes;       U+022CA
+&lthree;       U+022CB
+&rthree;       U+022CC
+&backsimeq;    U+022CD
+&curlyvee;     U+022CE
+&curlywedge;   U+022CF
+&Sub;  U+022D0
+&Supset;       U+022D1
+&Cap;  U+022D2
+&Cup;  U+022D3
+&pitchfork;    U+022D4
+&epar; U+022D5
+&lessdot;      U+022D6
+&gtrdot;       U+022D7
+&Ll;   U+022D8
+&Gg;   U+022D9
+&lesseqgtr;    U+022DA
+&gtreqless;    U+022DB
+&curlyeqprec;  U+022DE
+&cuesc;        U+022DF
+&NotPrecedesSlantEqual;        U+022E0
+&NotSucceedsSlantEqual;        U+022E1
+&NotSquareSubsetEqual; U+022E2
+&NotSquareSupersetEqual;       U+022E3
+&lnsim;        U+022E6
+&gnsim;        U+022E7
+&precnsim;     U+022E8
+&scnsim;       U+022E9
+&nltri;        U+022EA
+&ntriangleright;       U+022EB
+&nltrie;       U+022EC
+&NotRightTriangleEqual;        U+022ED
+&vellip;       U+022EE
+&ctdot;        U+022EF
+&utdot;        U+022F0
+&dtdot;        U+022F1
+&disin;        U+022F2
+&isinsv;       U+022F3
+&isins;        U+022F4
+&isindot;      U+022F5
+&notinvc;      U+022F6
+&notinvb;      U+022F7
+&isinE;        U+022F9
+&nisd; U+022FA
+&xnis; U+022FB
+&nis;  U+022FC
+&notnivc;      U+022FD
+&notnivb;      U+022FE
+&barwed;       U+02305
+&doublebarwedge;       U+02306
+&lceil;        U+02308
+&RightCeiling; U+02309
+&LeftFloor;    U+0230A
+&RightFloor;   U+0230B
+&drcrop;       U+0230C
+&dlcrop;       U+0230D
+&urcrop;       U+0230E
+&ulcrop;       U+0230F
+&bnot; U+02310
+&profline;     U+02312
+&profsurf;     U+02313
+&telrec;       U+02315
+&target;       U+02316
+&ulcorner;     U+0231C
+&urcorner;     U+0231D
+&llcorner;     U+0231E
+&drcorn;       U+0231F
+&frown;        U+02322
+&smile;        U+02323
+&cylcty;       U+0232D
+&profalar;     U+0232E
+&topbot;       U+02336
+&ovbar;        U+0233D
+&solbar;       U+0233F
+&angzarr;      U+0237C
+&lmoust;       U+023B0
+&rmoust;       U+023B1
+&OverBracket;  U+023B4
+&bbrk; U+023B5
+&bbrktbrk;     U+023B6
+&OverParenthesis;      U+023DC
+&UnderParenthesis;     U+023DD
+&OverBrace;    U+023DE
+&UnderBrace;   U+023DF
+&trpezium;     U+023E2
+&elinters;     U+023E7
+&blank;        U+02423
+&oS;   U+024C8
+&HorizontalLine;       U+02500
+&boxv; U+02502
+&boxdr;        U+0250C
+&boxdl;        U+02510
+&boxur;        U+02514
+&boxul;        U+02518
+&boxvr;        U+0251C
+&boxvl;        U+02524
+&boxhd;        U+0252C
+&boxhu;        U+02534
+&boxvh;        U+0253C
+&boxH; U+02550
+&boxV; U+02551
+&boxdR;        U+02552
+&boxDr;        U+02553
+&boxDR;        U+02554
+&boxdL;        U+02555
+&boxDl;        U+02556
+&boxDL;        U+02557
+&boxuR;        U+02558
+&boxUr;        U+02559
+&boxUR;        U+0255A
+&boxuL;        U+0255B
+&boxUl;        U+0255C
+&boxUL;        U+0255D
+&boxvR;        U+0255E
+&boxVr;        U+0255F
+&boxVR;        U+02560
+&boxvL;        U+02561
+&boxVl;        U+02562
+&boxVL;        U+02563
+&boxHd;        U+02564
+&boxhD;        U+02565
+&boxHD;        U+02566
+&boxHu;        U+02567
+&boxhU;        U+02568
+&boxHU;        U+02569
+&boxvH;        U+0256A
+&boxVh;        U+0256B
+&boxVH;        U+0256C
+&uhblk;        U+02580
+&lhblk;        U+02584
+&block;        U+02588
+&blk14;        U+02591
+&blk12;        U+02592
+&blk34;        U+02593
+&Square;       U+025A1
+&squarf;       U+025AA
+&EmptyVerySmallSquare; U+025AB
+&rect; U+025AD
+&marker;       U+025AE
+&fltns;        U+025B1
+&bigtriangleup;        U+025B3
+&blacktriangle;        U+025B4
+&triangle;     U+025B5
+&blacktriangleright;   U+025B8
+&rtri; U+025B9
+&bigtriangledown;      U+025BD
+&blacktriangledown;    U+025BE
+&triangledown; U+025BF
+&blacktriangleleft;    U+025C2
+&ltri; U+025C3
+&lozenge;      U+025CA
+&cir;  U+025CB
+&tridot;       U+025EC
+&bigcirc;      U+025EF
+&ultri;        U+025F8
+&urtri;        U+025F9
+&lltri;        U+025FA
+&EmptySmallSquare;     U+025FB
+&FilledSmallSquare;    U+025FC
+&starf;        U+02605
+&star; U+02606
+&phone;        U+0260E
+&female;       U+02640
+&male; U+02642
+&spadesuit;    U+02660
+&clubs;        U+02663
+&hearts;       U+02665
+&diamondsuit;  U+02666
+&sung; U+0266A
+&flat; U+0266D
+&natur;        U+0266E
+&sharp;        U+0266F
+&check;        U+02713
+&cross;        U+02717
+&maltese;      U+02720
+&sext; U+02736
+&VerticalSeparator;    U+02758
+&lbbrk;        U+02772
+&rbbrk;        U+02773
+&bsolhsub;     U+027C8
+&suphsol;      U+027C9
+&LeftDoubleBracket;    U+027E6
+&RightDoubleBracket;   U+027E7
+&langle;       U+027E8
+&RightAngleBracket;    U+027E9
+&Lang; U+027EA
+&Rang; U+027EB
+&loang;        U+027EC
+&roang;        U+027ED
+&longleftarrow;        U+027F5
+&LongRightArrow;       U+027F6
+&LongLeftRightArrow;   U+027F7
+&xlArr;        U+027F8
+&DoubleLongRightArrow; U+027F9
+&xhArr;        U+027FA
+&xmap; U+027FC
+&dzigrarr;     U+027FF
+&nvlArr;       U+02902
+&nvrArr;       U+02903
+&nvHarr;       U+02904
+&Map;  U+02905
+&lbarr;        U+0290C
+&bkarow;       U+0290D
+&lBarr;        U+0290E
+&dbkarow;      U+0290F
+&drbkarow;     U+02910
+&DDotrahd;     U+02911
+&UpArrowBar;   U+02912
+&DownArrowBar; U+02913
+&Rarrtl;       U+02916
+&latail;       U+02919
+&ratail;       U+0291A
+&lAtail;       U+0291B
+&rAtail;       U+0291C
+&larrfs;       U+0291D
+&rarrfs;       U+0291E
+&larrbfs;      U+0291F
+&rarrbfs;      U+02920
+&nwarhk;       U+02923
+&nearhk;       U+02924
+&searhk;       U+02925
+&swarhk;       U+02926
+&nwnear;       U+02927
+&toea; U+02928
+&seswar;       U+02929
+&swnwar;       U+0292A
+&rarrc;        U+02933
+&cudarrr;      U+02935
+&ldca; U+02936
+&rdca; U+02937
+&cudarrl;      U+02938
+&larrpl;       U+02939
+&curarrm;      U+0293C
+&cularrp;      U+0293D
+&rarrpl;       U+02945
+&harrcir;      U+02948
+&Uarrocir;     U+02949
+&lurdshar;     U+0294A
+&ldrushar;     U+0294B
+&LeftRightVector;      U+0294E
+&RightUpDownVector;    U+0294F
+&DownLeftRightVector;  U+02950
+&LeftUpDownVector;     U+02951
+&LeftVectorBar;        U+02952
+&RightVectorBar;       U+02953
+&RightUpVectorBar;     U+02954
+&RightDownVectorBar;   U+02955
+&DownLeftVectorBar;    U+02956
+&DownRightVectorBar;   U+02957
+&LeftUpVectorBar;      U+02958
+&LeftDownVectorBar;    U+02959
+&LeftTeeVector;        U+0295A
+&RightTeeVector;       U+0295B
+&RightUpTeeVector;     U+0295C
+&RightDownTeeVector;   U+0295D
+&DownLeftTeeVector;    U+0295E
+&DownRightTeeVector;   U+0295F
+&LeftUpTeeVector;      U+02960
+&LeftDownTeeVector;    U+02961
+&lHar; U+02962
+&uHar; U+02963
+&rHar; U+02964
+&dHar; U+02965
+&luruhar;      U+02966
+&ldrdhar;      U+02967
+&ruluhar;      U+02968
+&rdldhar;      U+02969
+&lharul;       U+0296A
+&llhard;       U+0296B
+&rharul;       U+0296C
+&lrhard;       U+0296D
+&udhar;        U+0296E
+&ReverseUpEquilibrium; U+0296F
+&RoundImplies; U+02970
+&erarr;        U+02971
+&simrarr;      U+02972
+&larrsim;      U+02973
+&rarrsim;      U+02974
+&rarrap;       U+02975
+&ltlarr;       U+02976
+&gtrarr;       U+02978
+&subrarr;      U+02979
+&suplarr;      U+0297B
+&lfisht;       U+0297C
+&rfisht;       U+0297D
+&ufisht;       U+0297E
+&dfisht;       U+0297F
+&lopar;        U+02985
+&ropar;        U+02986
+&lbrke;        U+0298B
+&rbrke;        U+0298C
+&lbrkslu;      U+0298D
+&rbrksld;      U+0298E
+&lbrksld;      U+0298F
+&rbrkslu;      U+02990
+&langd;        U+02991
+&rangd;        U+02992
+&lparlt;       U+02993
+&rpargt;       U+02994
+&gtlPar;       U+02995
+&ltrPar;       U+02996
+&vzigzag;      U+0299A
+&vangrt;       U+0299C
+&angrtvbd;     U+0299D
+&ange; U+029A4
+&range;        U+029A5
+&dwangle;      U+029A6
+&uwangle;      U+029A7
+&angmsdaa;     U+029A8
+&angmsdab;     U+029A9
+&angmsdac;     U+029AA
+&angmsdad;     U+029AB
+&angmsdae;     U+029AC
+&angmsdaf;     U+029AD
+&angmsdag;     U+029AE
+&angmsdah;     U+029AF
+&bemptyv;      U+029B0
+&demptyv;      U+029B1
+&cemptyv;      U+029B2
+&raemptyv;     U+029B3
+&laemptyv;     U+029B4
+&ohbar;        U+029B5
+&omid; U+029B6
+&opar; U+029B7
+&operp;        U+029B9
+&olcross;      U+029BB
+&odsold;       U+029BC
+&olcir;        U+029BE
+&ofcir;        U+029BF
+&olt;  U+029C0
+&ogt;  U+029C1
+&cirscir;      U+029C2
+&cirE; U+029C3
+&solb; U+029C4
+&bsolb;        U+029C5
+&boxbox;       U+029C9
+&trisb;        U+029CD
+&rtriltri;     U+029CE
+&LeftTriangleBar;      U+029CF
+&RightTriangleBar;     U+029D0
+&iinfin;       U+029DC
+&infintie;     U+029DD
+&nvinfin;      U+029DE
+&eparsl;       U+029E3
+&smeparsl;     U+029E4
+&eqvparsl;     U+029E5
+&lozf; U+029EB
+&RuleDelayed;  U+029F4
+&dsol; U+029F6
+&xodot;        U+02A00
+&bigoplus;     U+02A01
+&bigotimes;    U+02A02
+&biguplus;     U+02A04
+&bigsqcup;     U+02A06
+&iiiint;       U+02A0C
+&fpartint;     U+02A0D
+&cirfnint;     U+02A10
+&awint;        U+02A11
+&rppolint;     U+02A12
+&scpolint;     U+02A13
+&npolint;      U+02A14
+&pointint;     U+02A15
+&quatint;      U+02A16
+&intlarhk;     U+02A17
+&pluscir;      U+02A22
+&plusacir;     U+02A23
+&simplus;      U+02A24
+&plusdu;       U+02A25
+&plussim;      U+02A26
+&plustwo;      U+02A27
+&mcomma;       U+02A29
+&minusdu;      U+02A2A
+&loplus;       U+02A2D
+&roplus;       U+02A2E
+&Cross;        U+02A2F
+&timesd;       U+02A30
+&timesbar;     U+02A31
+&smashp;       U+02A33
+&lotimes;      U+02A34
+&rotimes;      U+02A35
+&otimesas;     U+02A36
+&Otimes;       U+02A37
+&odiv; U+02A38
+&triplus;      U+02A39
+&triminus;     U+02A3A
+&tritime;      U+02A3B
+&iprod;        U+02A3C
+&amalg;        U+02A3F
+&capdot;       U+02A40
+&ncup; U+02A42
+&ncap; U+02A43
+&capand;       U+02A44
+&cupor;        U+02A45
+&cupcap;       U+02A46
+&capcup;       U+02A47
+&cupbrcap;     U+02A48
+&capbrcup;     U+02A49
+&cupcup;       U+02A4A
+&capcap;       U+02A4B
+&ccups;        U+02A4C
+&ccaps;        U+02A4D
+&ccupssm;      U+02A50
+&And;  U+02A53
+&Or;   U+02A54
+&andand;       U+02A55
+&oror; U+02A56
+&orslope;      U+02A57
+&andslope;     U+02A58
+&andv; U+02A5A
+&orv;  U+02A5B
+&andd; U+02A5C
+&ord;  U+02A5D
+&wedbar;       U+02A5F
+&sdote;        U+02A66
+&simdot;       U+02A6A
+&congdot;      U+02A6D
+&easter;       U+02A6E
+&apacir;       U+02A6F
+&apE;  U+02A70
+&eplus;        U+02A71
+&pluse;        U+02A72
+&Esim; U+02A73
+&Colone;       U+02A74
+&Equal;        U+02A75
+&ddotseq;      U+02A77
+&equivDD;      U+02A78
+&ltcir;        U+02A79
+&gtcir;        U+02A7A
+&ltquest;      U+02A7B
+&gtquest;      U+02A7C
+&les;  U+02A7D
+&ges;  U+02A7E
+&lesdot;       U+02A7F
+&gesdot;       U+02A80
+&lesdoto;      U+02A81
+&gesdoto;      U+02A82
+&lesdotor;     U+02A83
+&gesdotol;     U+02A84
+&lap;  U+02A85
+&gap;  U+02A86
+&lne;  U+02A87
+&gne;  U+02A88
+&lnap; U+02A89
+&gnap; U+02A8A
+&lesseqqgtr;   U+02A8B
+&gEl;  U+02A8C
+&lsime;        U+02A8D
+&gsime;        U+02A8E
+&lsimg;        U+02A8F
+&gsiml;        U+02A90
+&lgE;  U+02A91
+&glE;  U+02A92
+&lesges;       U+02A93
+&gesles;       U+02A94
+&els;  U+02A95
+&egs;  U+02A96
+&elsdot;       U+02A97
+&egsdot;       U+02A98
+&el;   U+02A99
+&eg;   U+02A9A
+&siml; U+02A9D
+&simg; U+02A9E
+&simlE;        U+02A9F
+&simgE;        U+02AA0
+&LessLess;     U+02AA1
+&GreaterGreater;       U+02AA2
+&glj;  U+02AA4
+&gla;  U+02AA5
+&ltcc; U+02AA6
+&gtcc; U+02AA7
+&lescc;        U+02AA8
+&gescc;        U+02AA9
+&smt;  U+02AAA
+&lat;  U+02AAB
+&smte; U+02AAC
+&late; U+02AAD
+&bumpE;        U+02AAE
+&preceq;       U+02AAF
+&SucceedsEqual;        U+02AB0
+&prE;  U+02AB3
+&scE;  U+02AB4
+&precneqq;     U+02AB5
+&scnE; U+02AB6
+&precapprox;   U+02AB7
+&succapprox;   U+02AB8
+&precnapprox;  U+02AB9
+&succnapprox;  U+02ABA
+&Pr;   U+02ABB
+&Sc;   U+02ABC
+&subdot;       U+02ABD
+&supdot;       U+02ABE
+&subplus;      U+02ABF
+&supplus;      U+02AC0
+&submult;      U+02AC1
+&supmult;      U+02AC2
+&subedot;      U+02AC3
+&supedot;      U+02AC4
+&subE; U+02AC5
+&supseteqq;    U+02AC6
+&subsim;       U+02AC7
+&supsim;       U+02AC8
+&subsetneqq;   U+02ACB
+&supnE;        U+02ACC
+&csub; U+02ACF
+&csup; U+02AD0
+&csube;        U+02AD1
+&csupe;        U+02AD2
+&subsup;       U+02AD3
+&supsub;       U+02AD4
+&subsub;       U+02AD5
+&supsup;       U+02AD6
+&suphsub;      U+02AD7
+&supdsub;      U+02AD8
+&forkv;        U+02AD9
+&topfork;      U+02ADA
+&mlcp; U+02ADB
+&Dashv;        U+02AE4
+&Vdashl;       U+02AE6
+&Barv; U+02AE7
+&vBar; U+02AE8
+&vBarv;        U+02AE9
+&Vbar; U+02AEB
+&Not;  U+02AEC
+&bNot; U+02AED
+&rnmid;        U+02AEE
+&cirmid;       U+02AEF
+&midcir;       U+02AF0
+&topcir;       U+02AF1
+&nhpar;        U+02AF2
+&parsim;       U+02AF3
+&fflig;        U+0FB00
+&filig;        U+0FB01
+&fllig;        U+0FB02
+&ffilig;       U+0FB03
+&ffllig;       U+0FB04
+&Ascr; U+1D49C
+&Cscr; U+1D49E
+&Dscr; U+1D49F
+&Gscr; U+1D4A2
+&Jscr; U+1D4A5
+&Kscr; U+1D4A6
+&Nscr; U+1D4A9
+&Oscr; U+1D4AA
+&Pscr; U+1D4AB
+&Qscr; U+1D4AC
+&Sscr; U+1D4AE
+&Tscr; U+1D4AF
+&Uscr; U+1D4B0
+&Vscr; U+1D4B1
+&Wscr; U+1D4B2
+&Xscr; U+1D4B3
+&Yscr; U+1D4B4
+&Zscr; U+1D4B5
+&ascr; U+1D4B6
+&bscr; U+1D4B7
+&cscr; U+1D4B8
+&dscr; U+1D4B9
+&fscr; U+1D4BB
+&hscr; U+1D4BD
+&iscr; U+1D4BE
+&jscr; U+1D4BF
+&kscr; U+1D4C0
+&lscr; U+1D4C1
+&mscr; U+1D4C2
+&nscr; U+1D4C3
+&pscr; U+1D4C5
+&qscr; U+1D4C6
+&rscr; U+1D4C7
+&sscr; U+1D4C8
+&tscr; U+1D4C9
+&uscr; U+1D4CA
+&vscr; U+1D4CB
+&wscr; U+1D4CC
+&xscr; U+1D4CD
+&yscr; U+1D4CE
+&zscr; U+1D4CF
+&Afr;  U+1D504
+&Bfr;  U+1D505
+&Dfr;  U+1D507
+&Efr;  U+1D508
+&Ffr;  U+1D509
+&Gfr;  U+1D50A
+&Jfr;  U+1D50D
+&Kfr;  U+1D50E
+&Lfr;  U+1D50F
+&Mfr;  U+1D510
+&Nfr;  U+1D511
+&Ofr;  U+1D512
+&Pfr;  U+1D513
+&Qfr;  U+1D514
+&Sfr;  U+1D516
+&Tfr;  U+1D517
+&Ufr;  U+1D518
+&Vfr;  U+1D519
+&Wfr;  U+1D51A
+&Xfr;  U+1D51B
+&Yfr;  U+1D51C
+&afr;  U+1D51E
+&bfr;  U+1D51F
+&cfr;  U+1D520
+&dfr;  U+1D521
+&efr;  U+1D522
+&ffr;  U+1D523
+&gfr;  U+1D524
+&hfr;  U+1D525
+&ifr;  U+1D526
+&jfr;  U+1D527
+&kfr;  U+1D528
+&lfr;  U+1D529
+&mfr;  U+1D52A
+&nfr;  U+1D52B
+&ofr;  U+1D52C
+&pfr;  U+1D52D
+&qfr;  U+1D52E
+&rfr;  U+1D52F
+&sfr;  U+1D530
+&tfr;  U+1D531
+&ufr;  U+1D532
+&vfr;  U+1D533
+&wfr;  U+1D534
+&xfr;  U+1D535
+&yfr;  U+1D536
+&zfr;  U+1D537
+&Aopf; U+1D538
+&Bopf; U+1D539
+&Dopf; U+1D53B
+&Eopf; U+1D53C
+&Fopf; U+1D53D
+&Gopf; U+1D53E
+&Iopf; U+1D540
+&Jopf; U+1D541
+&Kopf; U+1D542
+&Lopf; U+1D543
+&Mopf; U+1D544
+&Oopf; U+1D546
+&Sopf; U+1D54A
+&Topf; U+1D54B
+&Uopf; U+1D54C
+&Vopf; U+1D54D
+&Wopf; U+1D54E
+&Xopf; U+1D54F
+&Yopf; U+1D550
+&aopf; U+1D552
+&bopf; U+1D553
+&copf; U+1D554
+&dopf; U+1D555
+&eopf; U+1D556
+&fopf; U+1D557
+&gopf; U+1D558
+&hopf; U+1D559
+&iopf; U+1D55A
+&jopf; U+1D55B
+&kopf; U+1D55C
+&lopf; U+1D55D
+&mopf; U+1D55E
+&nopf; U+1D55F
+&oopf; U+1D560
+&popf; U+1D561
+&qopf; U+1D562
+&ropf; U+1D563
+&sopf; U+1D564
+&topf; U+1D565
+&uopf; U+1D566
+&vopf; U+1D567
+&wopf; U+1D568
+&xopf; U+1D569
+&yopf; U+1D56A
+&zopf; U+1D56B
+&nvlt; U+0003C U+020D2
+&bne;  U+0003D U+020E5
+&nvgt; U+0003E U+020D2
+&fjlig;        U+00066 U+0006A
+&ThickSpace;   U+0205F U+0200A
+&nrarrw;       U+0219D U+00338
+&npart;        U+02202 U+00338
+&nang; U+02220 U+020D2
+&caps; U+02229 U+0FE00
+&cups; U+0222A U+0FE00
+&nvsim;        U+0223C U+020D2
+&race; U+0223D U+00331
+&acE;  U+0223E U+00333
+&nesim;        U+02242 U+00338
+&napid;        U+0224B U+00338
+&nvap; U+0224D U+020D2
+&nbump;        U+0224E U+00338
+&nbumpe;       U+0224F U+00338
+&nedot;        U+02250 U+00338
+&bnequiv;      U+02261 U+020E5
+&nvle; U+02264 U+020D2
+&nvge; U+02265 U+020D2
+&nlE;  U+02266 U+00338
+&NotGreaterFullEqual;  U+02267 U+00338
+&lvertneqq;    U+02268 U+0FE00
+&gvertneqq;    U+02269 U+0FE00
+&nLtv; U+0226A U+00338
+&nLt;  U+0226A U+020D2
+&NotGreaterGreater;    U+0226B U+00338
+&nGt;  U+0226B U+020D2
+&NotSucceedsTilde;     U+0227F U+00338
+&vnsub;        U+02282 U+020D2
+&nsupset;      U+02283 U+020D2
+&vsubne;       U+0228A U+0FE00
+&vsupne;       U+0228B U+0FE00
+&NotSquareSubset;      U+0228F U+00338
+&NotSquareSuperset;    U+02290 U+00338
+&sqcaps;       U+02293 U+0FE00
+&sqcups;       U+02294 U+0FE00
+&nvltrie;      U+022B4 U+020D2
+&nvrtrie;      U+022B5 U+020D2
+&nLl;  U+022D8 U+00338
+&nGg;  U+022D9 U+00338
+&lesg; U+022DA U+0FE00
+&gesl; U+022DB U+0FE00
+&notindot;     U+022F5 U+00338
+&notinE;       U+022F9 U+00338
+&nrarrc;       U+02933 U+00338
+&NotLeftTriangleBar;   U+029CF U+00338
+&NotRightTriangleBar;  U+029D0 U+00338
+&ncongdot;     U+02A6D U+00338
+&napE; U+02A70 U+00338
+&nles; U+02A7D U+00338
+&nges; U+02A7E U+00338
+&NotNestedLessLess;    U+02AA1 U+00338
+&NotNestedGreaterGreater;      U+02AA2 U+00338
+&smtes;        U+02AAC U+0FE00
+&lates;        U+02AAD U+0FE00
+&NotPrecedesEqual;     U+02AAF U+00338
+&NotSucceedsEqual;     U+02AB0 U+00338
+&nsubE;        U+02AC5 U+00338
+&nsupseteqq;   U+02AC6 U+00338
+&vsubnE;       U+02ACB U+0FE00
+&varsupsetneqq;        U+02ACC U+0FE00
+&varsupsetneqq;        U+02AFD U+0FE00
diff --git a/ext/standard/tests/strings/htmlspecialchars_decode_variation7.phpt b/ext/standard/tests/strings/htmlspecialchars_decode_variation7.phpt
new file mode 100644 (file)
index 0000000..20669b3
--- /dev/null
@@ -0,0 +1,192 @@
+--TEST--
+Test htmlspecialchars_decode() function : usage variations - numerical entities for basic characters
+--FILE--
+<?php
+$tests = array(
+    "&quot;", "&#x22;", "&#34;",
+    "&apos;", "&#39;", "&#x27;",
+    "&amp;", "&#x26;", "&lt;",
+    "&gt;", "&#x3C;", "&#60;",
+    "&lt;", "&#x3E;", "&#62;",
+    "&#63;"
+);
+
+echo "*** HTML 4.01/ENT_QUOTES  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_QUOTES | ENT_HTML401);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** XHTML 1.0/ENT_QUOTES  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_QUOTES | ENT_XHTML);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** HTML5/ENT_QUOTES  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_QUOTES | ENT_HTML5);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** XML 1.0/ENT_QUOTES  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_QUOTES | ENT_XML1);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** HTML5/ENT_NOQUOTES  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_NOQUOTES | ENT_HTML5);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+echo "\n*** HTML5/ENT_COMPAT  ***\n";
+
+foreach ($tests as $t) {
+    $dec = htmlspecialchars_decode($t, ENT_COMPAT | ENT_HTML5);
+    if ($t == $dec) {
+        echo "$t\tNOT DECODED\n";
+    } else {
+        echo "$t\tDECODED\n";
+    }
+}
+
+
+echo "\nDone.\n";
+?>
+--EXPECT--
+*** HTML 4.01/ENT_QUOTES  ***
+&quot; DECODED
+&#x22; DECODED
+&#34;  DECODED
+&apos; NOT DECODED
+&#39;  DECODED
+&#x27; DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+*** XHTML 1.0/ENT_QUOTES  ***
+&quot; DECODED
+&#x22; DECODED
+&#34;  DECODED
+&apos; DECODED
+&#39;  DECODED
+&#x27; DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+*** HTML5/ENT_QUOTES  ***
+&quot; DECODED
+&#x22; DECODED
+&#34;  DECODED
+&apos; DECODED
+&#39;  DECODED
+&#x27; DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+*** XML 1.0/ENT_QUOTES  ***
+&quot; DECODED
+&#x22; DECODED
+&#34;  DECODED
+&apos; DECODED
+&#39;  DECODED
+&#x27; DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+*** HTML5/ENT_NOQUOTES  ***
+&quot; NOT DECODED
+&#x22; NOT DECODED
+&#34;  NOT DECODED
+&apos; NOT DECODED
+&#39;  NOT DECODED
+&#x27; NOT DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+*** HTML5/ENT_COMPAT  ***
+&quot; DECODED
+&#x22; DECODED
+&#34;  DECODED
+&apos; NOT DECODED
+&#39;  NOT DECODED
+&#x27; NOT DECODED
+&amp;  DECODED
+&#x26; DECODED
+&lt;   DECODED
+&gt;   DECODED
+&#x3C; DECODED
+&#60;  DECODED
+&lt;   DECODED
+&#x3E; DECODED
+&#62;  DECODED
+&#63;  NOT DECODED
+
+Done.