diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,23 +1,10 @@
-0.0.5.1
-
-* fix compilation on ghc 7.4, 7.6 and 7.8
-
-0.0.5.0
-
-* add support for multiple bfrange and bfchars sections in CMap
-* support spaces inside hex numbers in CMap
-
-0.0.4.0
-
-* switch to errors-2.0
-* workaround for parse error on inline image in content stream
-
-0.0.3.3
-
-* support ghc-7.10.1
+unreleased
 
-0.0.3.2
+0.1.1
 
+* rework API
+* support ghc from 8.0 to 8.10 and drop older versions
+* lots of improvements to text extraction
 * support array ranges in unicode cmap (#15)
 * support Op\_apostrophe content operator (#16)
 
diff --git a/compat/Prelude.hs b/compat/Prelude.hs
--- a/compat/Prelude.hs
+++ b/compat/Prelude.hs
@@ -5,24 +5,16 @@
 (
   module P,
 
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,11,0)
 #else
-  (<$>),
-  Monoid(..),
-  Applicative(..),
+  Semigroup(..),
 #endif
 )
 where
 
-#if MIN_VERSION_base(4,6,0)
 import "base" Prelude as P
-#else
-import "base" Prelude as P hiding (catch)
-#endif
 
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,11,0)
 #else
-import Data.Functor ((<$>))
-import Data.Monoid(Monoid(..))
-import Control.Applicative (Applicative(..))
+import Data.Semigroup(Semigroup(..))
 #endif
diff --git a/lib/Pdf/Content.hs b/lib/Pdf/Content.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content.hs
@@ -0,0 +1,21 @@
+
+-- | Low level tools for processing PDF page content stream.
+
+module Pdf.Content
+( module Pdf.Content.Ops
+, module Pdf.Content.Parser
+, module Pdf.Content.UnicodeCMap
+, module Pdf.Content.Processor
+, module Pdf.Content.Transform
+, module Pdf.Content.FontInfo
+, module Pdf.Content.FontDescriptor
+)
+where
+
+import Pdf.Content.Ops
+import Pdf.Content.Parser
+import Pdf.Content.UnicodeCMap
+import Pdf.Content.Processor
+import Pdf.Content.Transform
+import Pdf.Content.FontInfo
+import Pdf.Content.FontDescriptor
diff --git a/lib/Pdf/Content/Encoding/MacRoman.hs b/lib/Pdf/Content/Encoding/MacRoman.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Encoding/MacRoman.hs
@@ -0,0 +1,437 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Pdf.Content.Encoding.MacRoman
+(
+  encoding
+)
+where
+
+import Data.Word
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Text (Text)
+
+encoding :: Map Word8 Text
+encoding = Map.fromList $ zip codes chars
+
+chars :: [Text]
+chars = [
+  "A",
+  "Æ",
+  "Á",
+  "Â",
+  "Ä",
+  "À",
+  "Å",
+  "Ã",
+  "B",
+  "C",
+  "Ç",
+  "D",
+  "E",
+  "É",
+  "Ê",
+  "Ë",
+  "È",
+  "F",
+  "G",
+  "H",
+  "I",
+  "Í",
+  "Î",
+  "Ï",
+  "Ì",
+  "J",
+  "K",
+  "L",
+  "M",
+  "N",
+  "Ñ",
+  "O",
+  "Œ",
+  "Ó",
+  "Ô",
+  "Ö",
+  "Ò",
+  "Ø",
+  "Õ",
+  "P",
+  "Q",
+  "R",
+  "S",
+  "T",
+  "U",
+  "Ú",
+  "Û",
+  "Ü",
+  "Ù",
+  "V",
+  "W",
+  "X",
+  "Y",
+  "Ÿ",
+  "Z",
+  "a",
+  "á",
+  "â",
+  "´",
+  "ä",
+  "æ",
+  "à",
+  "&",
+  "å",
+  "^",
+  "~",
+  "*",
+  "@",
+  "ã",
+  "b",
+  "\\",
+  "|",
+  "{",
+  "}",
+  "[",
+  "]",
+  "˘",
+  "•",
+  "c",
+  "ˇ",
+  "ç",
+  " ̧",
+  "¢",
+  "ˆ",
+  ":",
+  ",",
+  "©",
+  "¤",
+  "d",
+  "†",
+  "‡",
+  "°",
+  "¨",
+  "÷",
+  "$",
+  "˙",
+  "ı",
+  "e",
+  "é",
+  "ê",
+  "ë",
+  "è",
+  "8",
+  "…",
+  "—",
+  "–",
+  "=",
+  "!",
+  "¡",
+  "f",
+  "ﬁ",
+  "5",
+  "ﬂ",
+  "ƒ",
+  "4",
+  "⁄",
+  "g",
+  "ß",
+  "`",
+  ">",
+  "«",
+  "»",
+  "‹",
+  "›",
+  "h",
+  "˝",
+  "-",
+  "i",
+  "í",
+  "î",
+  "ï",
+  "ì",
+  "j",
+  "k",
+  "l",
+  "<",
+  "¬",
+  "m",
+  " ̄",
+  "μ",
+  "n",
+  "9",
+  "ñ",
+  "#",
+  "o",
+  "ó",
+  "ô",
+  "ö",
+  "œ",
+  "˛",
+  "ò",
+  "1",
+  "ª",
+  "º",
+  "ø",
+  "õ",
+  "p",
+  "¶",
+  "(",
+  ")",
+  "%",
+  ".",
+  "·",
+  "‰",
+  "+",
+  "±",
+  "q",
+  "?",
+  "¿",
+  "\"",
+  "„",
+  "“",
+  "”",
+  "‘",
+  "’",
+  "‚",
+  "'",
+  "r",
+  "®",
+  "∘",
+  "s",
+  "§",
+  ";",
+  "7",
+  "6",
+  "/",
+  " ",
+  "£",
+  "t",
+  "3",
+  "~",
+  "™",
+  "2",
+  "u",
+  "ú",
+  "û",
+  "ü",
+  "ù",
+  "_",
+  "v",
+  "w",
+  "x",
+  "y",
+  "ÿ",
+  "¥",
+  "z",
+  "0"
+  ]
+
+codes :: [Word8]
+codes = [
+  0o101,
+  0o256,
+  0o347,
+  0o345,
+  0o200,
+  0o313,
+  0o201,
+  0o314,
+  0o102,
+  0o103,
+  0o202,
+  0o104,
+  0o105,
+  0o203,
+  0o346,
+  0o350,
+  0o351,
+  0o106,
+  0o107,
+  0o110,
+  0o111,
+  0o352,
+  0o353,
+  0o354,
+  0o355,
+  0o112,
+  0o113,
+  0o114,
+  0o115,
+  0o116,
+  0o204,
+  0o117,
+  0o316,
+  0o356,
+  0o357,
+  0o205,
+  0o361,
+  0o257,
+  0o315,
+  0o120,
+  0o121,
+  0o122,
+  0o123,
+  0o124,
+  0o125,
+  0o362,
+  0o363,
+  0o206,
+  0o364,
+  0o126,
+  0o127,
+  0o130,
+  0o131,
+  0o331,
+  0o132,
+  0o141,
+  0o207,
+  0o211,
+  0o253,
+  0o212,
+  0o276,
+  0o210,
+  0o046,
+  0o214,
+  0o136,
+  0o176,
+  0o052,
+  0o100,
+  0o213,
+  0o142,
+  0o134,
+  0o174,
+  0o173,
+  0o175,
+  0o133,
+  0o135,
+  0o371,
+  0o245,
+  0o143,
+  0o377,
+  0o215,
+  0o374,
+  0o242,
+  0o366,
+  0o072,
+  0o054,
+  0o251,
+  0o333,
+  0o144,
+  0o240,
+  0o340,
+  0o241,
+  0o254,
+  0o326,
+  0o044,
+  0o372,
+  0o365,
+  0o145,
+  0o216,
+  0o220,
+  0o221,
+  0o217,
+  0o070,
+  0o311,
+  0o321,
+  0o320,
+  0o075,
+  0o041,
+  0o301,
+  0o146,
+  0o336,
+  0o065,
+  0o337,
+  0o304,
+  0o064,
+  0o332,
+  0o147,
+  0o247,
+  0o140,
+  0o076,
+  0o307,
+  0o310,
+  0o334,
+  0o335,
+  0o150,
+  0o375,
+  0o055,
+  0o151,
+  0o222,
+  0o224,
+  0o225,
+  0o223,
+  0o152,
+  0o153,
+  0o154,
+  0o074,
+  0o302,
+  0o155,
+  0o370,
+  0o265,
+  0o156,
+  0o071,
+  0o226,
+  0o043,
+  0o157,
+  0o227,
+  0o231,
+  0o232,
+  0o317,
+  0o376,
+  0o230,
+  0o061,
+  0o273,
+  0o274,
+  0o277,
+  0o233,
+  0o160,
+  0o246,
+  0o050,
+  0o051,
+  0o045,
+  0o056,
+  0o341,
+  0o344,
+  0o053,
+  0o261,
+  0o161,
+  0o077,
+  0o300,
+  0o042,
+  0o343,
+  0o322,
+  0o323,
+  0o324,
+  0o325,
+  0o342,
+  0o047,
+  0o162,
+  0o250,
+  0o373,
+  0o163,
+  0o244,
+  0o073,
+  0o067,
+  0o066,
+  0o057,
+  0o040,
+  0o243,
+  0o164,
+  0o063,
+  0o367,
+  0o252,
+  0o062,
+  0o165,
+  0o234,
+  0o236,
+  0o237,
+  0o235,
+  0o137,
+  0o166,
+  0o167,
+  0o170,
+  0o171,
+  0o330,
+  0o264,
+  0o172,
+  0o060
+  ]
diff --git a/lib/Pdf/Content/Encoding/PdfDoc.hs b/lib/Pdf/Content/Encoding/PdfDoc.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Encoding/PdfDoc.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Pdf.Content.Encoding.PdfDoc
+( encoding
+)
+where
+
+import Data.Word
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Text (Text)
+
+encoding :: Map Word8 Text
+encoding = Map.fromList
+  [ (0, "\x0000")
+  , (1, "\x0001")
+  , (2, "\x0002")
+  , (3, "\x0003")
+  , (4, "\x0004")
+  , (5, "\x0005")
+  , (6, "\x0006")
+  , (7, "\x0007")
+  , (8, "\x0008")
+  , (9, "\x0009")
+  , (10, "\x000A")
+  , (11, "\x000B")
+  , (12, "\x000C")
+  , (13, "\x000D")
+  , (14, "\x000E")
+  , (15, "\x000F")
+  , (16, "\x0010")
+  , (17, "\x0011")
+  , (18, "\x0012")
+  , (19, "\x0013")
+  , (20, "\x0014")
+  , (21, "\x0015")
+  , (22, "\x0017")
+  , (23, "\x0017")
+  , (24, "\x02D8")
+  , (25, "\x02C7")
+  , (26, "\x02C6")
+  , (27, "\x02D9")
+  , (28, "\x02DD")
+  , (29, "\x02DB")
+  , (30, "\x02DA")
+  , (31, "\x02DC")
+  , (32, "\x0020")
+  , (33, "\x0021")
+  , (34, "\x0022")
+  , (35, "\x0023")
+  , (36, "\x0024")
+  , (37, "\x0025")
+  , (38, "\x0026")
+  , (39, "\x0027")
+  , (40, "\x0028")
+  , (41, "\x0029")
+  , (42, "\x002A")
+  , (43, "\x002B")
+  , (44, "\x002C")
+  , (45, "\x002D")
+  , (46, "\x002E")
+  , (47, "\x002F")
+  , (48, "\x0030")
+  , (49, "\x0031")
+  , (50, "\x0032")
+  , (51, "\x0033")
+  , (52, "\x0034")
+  , (53, "\x0035")
+  , (54, "\x0036")
+  , (55, "\x0037")
+  , (56, "\x0038")
+  , (57, "\x0039")
+  , (58, "\x003A")
+  , (59, "\x003B")
+  , (60, "\x003C")
+  , (61, "\x003D")
+  , (62, "\x003E")
+  , (63, "\x003F")
+  , (64, "\x0040")
+  , (65, "\x0041")
+  , (66, "\x0042")
+  , (67, "\x0043")
+  , (68, "\x0044")
+  , (69, "\x0045")
+  , (70, "\x0046")
+  , (71, "\x0047")
+  , (72, "\x0048")
+  , (73, "\x0049")
+  , (74, "\x004A")
+  , (75, "\x004B")
+  , (76, "\x004C")
+  , (77, "\x004D")
+  , (78, "\x004E")
+  , (79, "\x004F")
+  , (80, "\x0050")
+  , (81, "\x0051")
+  , (82, "\x0052")
+  , (83, "\x0053")
+  , (84, "\x0054")
+  , (85, "\x0055")
+  , (86, "\x0056")
+  , (87, "\x0057")
+  , (88, "\x0058")
+  , (89, "\x0059")
+  , (90, "\x005A")
+  , (91, "\x005B")
+  , (92, "\x005C")
+  , (93, "\x005D")
+  , (94, "\x005E")
+  , (95, "\x005F")
+  , (96, "\x0060")
+  , (97, "\x0061")
+  , (98, "\x0062")
+  , (99, "\x0063")
+  , (100, "\x0064")
+  , (101, "\x0065")
+  , (102, "\x0066")
+  , (103, "\x0067")
+  , (104, "\x0068")
+  , (105, "\x0069")
+  , (106, "\x006A")
+  , (107, "\x006B")
+  , (108, "\x006C")
+  , (109, "\x006D")
+  , (110, "\x006E")
+  , (111, "\x006F")
+  , (112, "\x0070")
+  , (113, "\x0071")
+  , (114, "\x0072")
+  , (115, "\x0073")
+  , (116, "\x0074")
+  , (117, "\x0075")
+  , (118, "\x0076")
+  , (119, "\x0077")
+  , (120, "\x0078")
+  , (121, "\x0079")
+  , (122, "\x007A")
+  , (123, "\x007B")
+  , (124, "\x007C")
+  , (125, "\x007D")
+  , (126, "\x007E")
+  -- there is no 127
+  , (128, "\x2022")
+  , (129, "\x2020")
+  , (130, "\x2021")
+  , (131, "\x2026")
+  , (132, "\x2014")
+  , (133, "\x2013")
+  , (134, "\x0192")
+  , (135, "\x2044")
+  , (136, "\x2039")
+  , (137, "\x203A")
+  , (138, "\x2212")
+  , (139, "\x2030")
+  , (140, "\x201E")
+  , (141, "\x201C")
+  , (142, "\x201D")
+  , (143, "\x2018")
+  , (144, "\x2019")
+  , (145, "\x201A")
+  , (146, "\x2122")
+  , (147, "\xFB01")
+  , (148, "\xFB02")
+  , (149, "\x0141")
+  , (150, "\x0152")
+  , (151, "\x0160")
+  , (152, "\x0178")
+  , (153, "\x017D")
+  , (154, "\x0131")
+  , (155, "\x0142")
+  , (156, "\x0153")
+  , (157, "\x0161")
+  , (158, "\x017E")
+  -- there is no 159
+  , (160, "\x20AC")
+  , (161, "\x00A1")
+  , (162, "\x00A2")
+  , (163, "\x00A3")
+  , (164, "\x00A4")
+  , (165, "\x00A5")
+  , (166, "\x00A6")
+  , (167, "\x00A7")
+  , (168, "\x00A8")
+  , (169, "\x00A9")
+  , (170, "\x00AA")
+  , (171, "\x00AB")
+  , (172, "\x00AC")
+  -- there is no 173
+  , (174, "\x00AE")
+  , (175, "\x00AF")
+  , (176, "\x00B0")
+  , (177, "\x00B1")
+  , (178, "\x00B2")
+  , (179, "\x00B3")
+  , (180, "\x00B4")
+  , (181, "\x00B5")
+  , (182, "\x00B6")
+  , (183, "\x00B7")
+  , (184, "\x00B8")
+  , (185, "\x00B9")
+  , (186, "\x00BA")
+  , (187, "\x00BB")
+  , (188, "\x00BC")
+  , (189, "\x00BD")
+  , (190, "\x00BE")
+  , (191, "\x00BF")
+  , (192, "\x00C0")
+  , (193, "\x00C1")
+  , (194, "\x00C2")
+  , (195, "\x00C3")
+  , (196, "\x00C4")
+  , (197, "\x00C5")
+  , (198, "\x00C6")
+  , (199, "\x00C7")
+  , (200, "\x00C8")
+  , (201, "\x00C9")
+  , (202, "\x00CA")
+  , (203, "\x00CB")
+  , (204, "\x00CC")
+  , (205, "\x00CD")
+  , (206, "\x00CE")
+  , (207, "\x00CF")
+  , (208, "\x00D0")
+  , (209, "\x00D1")
+  , (210, "\x00D2")
+  , (211, "\x00D3")
+  , (212, "\x00D4")
+  , (213, "\x00D5")
+  , (214, "\x00D6")
+  , (215, "\x00D7")
+  , (216, "\x00D8")
+  , (217, "\x00D9")
+  , (218, "\x00DA")
+  , (219, "\x00DB")
+  , (220, "\x00DC")
+  , (221, "\x00DD")
+  , (222, "\x00DE")
+  , (223, "\x00DF")
+  , (224, "\x00E0")
+  , (225, "\x00E1")
+  , (226, "\x00E2")
+  , (227, "\x00E3")
+  , (228, "\x00E4")
+  , (229, "\x00E5")
+  , (230, "\x00E6")
+  , (231, "\x00E7")
+  , (232, "\x00E8")
+  , (233, "\x00E9")
+  , (234, "\x00EA")
+  , (235, "\x00EB")
+  , (236, "\x00EC")
+  , (237, "\x00ED")
+  , (238, "\x00EE")
+  , (239, "\x00EF")
+  , (240, "\x00F0")
+  , (241, "\x00F1")
+  , (242, "\x00F2")
+  , (243, "\x00F3")
+  , (244, "\x00F4")
+  , (245, "\x00F5")
+  , (246, "\x00F6")
+  , (247, "\x00F7")
+  , (248, "\x00F8")
+  , (249, "\x00F9")
+  , (250, "\x00FA")
+  , (251, "\x00FB")
+  , (252, "\x00FC")
+  , (253, "\x00FD")
+  , (254, "\x00FE")
+  , (255, "\x00FF")
+  ]
diff --git a/lib/Pdf/Content/Encoding/WinAnsi.hs b/lib/Pdf/Content/Encoding/WinAnsi.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Encoding/WinAnsi.hs
@@ -0,0 +1,455 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Pdf.Content.Encoding.WinAnsi
+(
+  encoding
+)
+where
+
+import Data.Word
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Text (Text)
+
+encoding :: Map Word8 Text
+encoding = Map.fromList $ zip codes chars
+
+chars :: [Text]
+chars = [
+  "A",
+  "Æ",
+  "Á",
+  "Â",
+  "Ä",
+  "À",
+  "Å",
+  "Ã",
+  "B",
+  "C",
+  "Ç",
+  "D",
+  "E",
+  "É",
+  "Ê",
+  "Ë",
+  "È",
+  "Ð",
+  "€",
+  "F",
+  "G",
+  "H",
+  "I",
+  "Í",
+  "Î",
+  "Ï",
+  "Ì",
+  "J",
+  "K",
+  "L",
+  "M",
+  "N",
+  "Ñ",
+  "O",
+  "Œ",
+  "Ó",
+  "Ô",
+  "Ö",
+  "Ò",
+  "Ø",
+  "Õ",
+  "P",
+  "Q",
+  "R",
+  "S",
+  "Š",
+  "T",
+  "Þ",
+  "U",
+  "Ú",
+  "Û",
+  "Ü",
+  "Ù",
+  "V",
+  "W",
+  "X",
+  "Y",
+  "Ý",
+  "Ÿ",
+  "Z",
+  "Ž",
+  "a",
+  "á",
+  "â",
+  "´",
+  "ä",
+  "æ",
+  "à",
+  "&",
+  "å",
+  "^",
+  "~",
+  "*",
+  "@",
+  "ã",
+  "b",
+  "\\",
+  "|",
+  "{",
+  "}",
+  "[",
+  "]",
+  "¦",
+  "•",
+  "c",
+  "ç",
+  " ̧",
+  "¢",
+  "ˆ",
+  ":",
+  ",",
+  "©",
+  "¤",
+  "d",
+  "†",
+  "‡",
+  "°",
+  "¨",
+  "÷",
+  "$",
+  "e",
+  "é",
+  "ê",
+  "ë",
+  "è",
+  "8",
+  "…",
+  "—",
+  "–",
+  "=",
+  "ð",
+  "!",
+  "¡",
+  "f",
+  "5",
+  "ƒ",
+  "4",
+  "g",
+  "ß",
+  "`",
+  ">",
+  "«",
+  "»",
+  "‹",
+  "›",
+  "h",
+  "-",
+  "i",
+  "í",
+  "î",
+  "ï",
+  "ì",
+  "j",
+  "k",
+  "l",
+  "<",
+  "¬",
+  "m",
+  " ̄",
+  "μ",
+  "×",
+  "n",
+  "9",
+  "ñ",
+  "#",
+  "o",
+  "ó",
+  "ô",
+  "ö",
+  "œ",
+  "ò",
+  "1",
+  "½",
+  "¼",
+  "¹",
+  "ª",
+  "º",
+  "ø",
+  "õ",
+  "p",
+  "¶",
+  "(",
+  ")",
+  "%",
+  ".",
+  "·",
+  "‰",
+  "+",
+  "±",
+  "q",
+  "?",
+  "¿",
+  "\"",
+  "„",
+  "“",
+  "”",
+  "‘",
+  "’",
+  "‚",
+  "'",
+  "r",
+  "®",
+  "s",
+  "š",
+  "§",
+  ";",
+  "7",
+  "6",
+  "/",
+  " ",
+  "£",
+  "t",
+  "þ",
+  "3",
+  "¾",
+  "³",
+  "~",
+  "™",
+  "2",
+  "²",
+  "u",
+  "ú",
+  "û",
+  "ü",
+  "ù",
+  "_",
+  "v",
+  "w",
+  "x",
+  "y",
+  "ý",
+  "ÿ",
+  "¥",
+  "z",
+  "ž",
+  "0"
+  ]
+
+codes :: [Word8]
+codes = [
+  0o101,
+  0o306,
+  0o301,
+  0o302,
+  0o304,
+  0o300,
+  0o305,
+  0o303,
+  0o102,
+  0o103,
+  0o307,
+  0o104,
+  0o105,
+  0o311,
+  0o312,
+  0o313,
+  0o310,
+  0o320,
+  0o200,
+  0o106,
+  0o107,
+  0o110,
+  0o111,
+  0o315,
+  0o316,
+  0o317,
+  0o314,
+  0o112,
+  0o113,
+  0o114,
+  0o115,
+  0o116,
+  0o321,
+  0o117,
+  0o214,
+  0o323,
+  0o324,
+  0o326,
+  0o322,
+  0o330,
+  0o325,
+  0o120,
+  0o121,
+  0o122,
+  0o123,
+  0o212,
+  0o124,
+  0o336,
+  0o125,
+  0o332,
+  0o333,
+  0o334,
+  0o331,
+  0o126,
+  0o127,
+  0o130,
+  0o131,
+  0o335,
+  0o237,
+  0o132,
+  0o216,
+  0o141,
+  0o341,
+  0o342,
+  0o264,
+  0o344,
+  0o346,
+  0o340,
+  0o046,
+  0o345,
+  0o136,
+  0o176,
+  0o052,
+  0o100,
+  0o343,
+  0o142,
+  0o134,
+  0o174,
+  0o173,
+  0o175,
+  0o133,
+  0o135,
+  0o246,
+  0o225,
+  0o143,
+  0o347,
+  0o270,
+  0o242,
+  0o210,
+  0o072,
+  0o054,
+  0o251,
+  0o244,
+  0o144,
+  0o206,
+  0o207,
+  0o260,
+  0o250,
+  0o367,
+  0o044,
+  0o145,
+  0o351,
+  0o352,
+  0o353,
+  0o350,
+  0o070,
+  0o205,
+  0o227,
+  0o226,
+  0o075,
+  0o360,
+  0o041,
+  0o241,
+  0o146,
+  0o065,
+  0o203,
+  0o064,
+  0o147,
+  0o337,
+  0o140,
+  0o076,
+  0o253,
+  0o273,
+  0o213,
+  0o233,
+  0o150,
+  0o055,
+  0o151,
+  0o355,
+  0o356,
+  0o357,
+  0o354,
+  0o152,
+  0o153,
+  0o154,
+  0o074,
+  0o254,
+  0o155,
+  0o257,
+  0o265,
+  0o327,
+  0o156,
+  0o071,
+  0o361,
+  0o043,
+  0o157,
+  0o363,
+  0o364,
+  0o366,
+  0o234,
+  0o362,
+  0o061,
+  0o275,
+  0o274,
+  0o271,
+  0o252,
+  0o272,
+  0o370,
+  0o365,
+  0o160,
+  0o266,
+  0o050,
+  0o051,
+  0o045,
+  0o056,
+  0o267,
+  0o211,
+  0o053,
+  0o261,
+  0o161,
+  0o077,
+  0o277,
+  0o042,
+  0o204,
+  0o223,
+  0o224,
+  0o221,
+  0o222,
+  0o202,
+  0o047,
+  0o162,
+  0o256,
+  0o163,
+  0o232,
+  0o247,
+  0o073,
+  0o067,
+  0o066,
+  0o057,
+  0o040,
+  0o243,
+  0o164,
+  0o376,
+  0o063,
+  0o276,
+  0o263,
+  0o230,
+  0o231,
+  0o062,
+  0o262,
+  0o165,
+  0o372,
+  0o373,
+  0o374,
+  0o371,
+  0o137,
+  0o166,
+  0o167,
+  0o170,
+  0o171,
+  0o375,
+  0o377,
+  0o245,
+  0o172,
+  0o236,
+  0o060
+  ]
diff --git a/lib/Pdf/Content/FontDescriptor.hs b/lib/Pdf/Content/FontDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/FontDescriptor.hs
@@ -0,0 +1,60 @@
+
+-- | The FontDescriptor describes a font's other metrics than it's
+-- widths, see chap. 9.8 of PDF32000:2008
+
+module Pdf.Content.FontDescriptor
+  ( FontDescriptor(..)
+  , FontDescriptorFlag(..)
+  , flagSet
+  )
+where
+
+import Pdf.Core.Types
+
+import Data.Int
+import Data.ByteString (ByteString)
+
+data FontDescriptor = FontDescriptor {
+  fdFontName :: ByteString,
+  fdFontFamily :: Maybe ByteString,
+  fdFontStretch :: Maybe ByteString,
+  fdFontWeight :: Maybe Int,
+  fdFlags :: Int64, -- must hold at least 32 bit unsigned integers
+  fdFontBBox :: Maybe (Rectangle Double),
+  fdItalicAngle :: Double,
+  fdAscent :: Maybe Double,
+  fdDescent :: Maybe Double,
+  fdLeading :: Maybe Double,
+  fdCapHeight :: Maybe Double,
+  fdXHeight :: Maybe Double,
+  fdStemV :: Maybe Double,
+  fdStemH :: Maybe Double,
+  fdAvgWidth :: Maybe Double,
+  fdMaxWidth :: Maybe Double,
+  fdMissingWidth :: Maybe Double,
+  -- FIXME: add FontFile*
+  fdCharSet :: Maybe ByteString
+  -- FIXME: add special fields for CIDFonts
+  } deriving (Show)
+
+
+data FontDescriptorFlag =
+  FixedPitch | Serif | Symbolic | Script | NonSymbolic | Italic | AllCap | SmallCap | ForceBold
+
+
+flagSet :: FontDescriptor -> FontDescriptorFlag -> Bool
+flagSet fd FixedPitch = flagSet' 1 (fdFlags fd) 0
+flagSet fd Serif = flagSet' 2 (fdFlags fd) 0
+flagSet fd Symbolic = flagSet' 3 (fdFlags fd) 0
+flagSet fd Script = flagSet' 4 (fdFlags fd) 0
+flagSet fd NonSymbolic = flagSet' 6 (fdFlags fd) 0
+flagSet fd Italic = flagSet' 7 (fdFlags fd) 0
+flagSet fd AllCap = flagSet' 17 (fdFlags fd) 0
+flagSet fd SmallCap = flagSet' 18 (fdFlags fd) 0
+flagSet fd ForceBold = flagSet' 19 (fdFlags fd) 0
+
+flagSet' :: Int -> Int64 -> Int -> Bool
+flagSet' pos val expnt
+  | expnt == pos - 1 = val `mod` 2 == 1
+  | val == 0 = False
+  | otherwise = flagSet' pos (val `div` 2) (expnt+1)
diff --git a/lib/Pdf/Content/FontInfo.hs b/lib/Pdf/Content/FontInfo.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/FontInfo.hs
@@ -0,0 +1,277 @@
+
+-- | Font info contains information, extracted from font,
+-- that may be needed when processing content stream
+
+module Pdf.Content.FontInfo
+(
+  FontInfo(..),
+  FISimple(..),
+  FontBaseEncoding(..),
+  SimpleFontEncoding(..),
+  FIComposite(..),
+  CIDFontWidths(..),
+  makeCIDFontWidths,
+  cidFontGetWidth,
+  fontInfoDecodeGlyphs
+)
+where
+
+import Pdf.Core
+import Pdf.Core.Util
+import Pdf.Core.Object.Util
+import Pdf.Core.Types
+
+import Pdf.Content.UnicodeCMap
+import Pdf.Content.Transform
+import Pdf.Content.Processor (Glyph(..))
+import Pdf.Content.GlyphList
+import Pdf.Content.TexGlyphList
+import Pdf.Content.FontDescriptor
+import qualified Pdf.Content.Encoding.WinAnsi as WinAnsi
+import qualified Pdf.Content.Encoding.MacRoman as MacRoman
+
+import Data.List
+import Data.Maybe
+import Data.Word
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as BS
+import Data.Text (Text)
+import qualified Data.Text as Text
+import qualified Data.Text.Encoding as Text
+import qualified Data.Vector as Vector
+import Control.Monad
+
+-- | Font info
+data FontInfo
+  = FontInfoSimple FISimple
+  | FontInfoComposite FIComposite
+  deriving (Show)
+
+-- | Font info for simple fonts
+data FISimple = FISimple {
+  fiSimpleUnicodeCMap :: Maybe UnicodeCMap,
+  fiSimpleEncoding :: Maybe SimpleFontEncoding,
+  fiSimpleWidths :: Maybe (Int, Int, [Double]),
+  -- ^ FirstChar, LastChar, list of widths
+  fiSimpleFontMatrix :: Transform Double,
+  -- FIXME: no Maybe as soon as this library provides metrics for the
+  -- 14 standard fonts
+  fiSimpleFontDescriptor :: Maybe FontDescriptor
+  }
+  deriving (Show)
+
+-- | Standard encoding, other encodings are based on them
+data FontBaseEncoding
+  = FontBaseEncodingWinAnsi
+  | FontBaseEncodingMacRoman
+  deriving (Show)
+
+-- | Encoding fo simple font
+data SimpleFontEncoding = SimpleFontEncoding {
+  simpleFontBaseEncoding :: FontBaseEncoding,
+  -- | Mapping from glyph code to glyph name for cases when it is different
+  -- from base encoding
+  simpleFontDifferences :: [(Word8, ByteString)]
+  }
+  deriving (Show)
+
+-- | Font info for Type0 font
+data FIComposite = FIComposite {
+  fiCompositeUnicodeCMap :: Maybe UnicodeCMap,
+  fiCompositeWidths :: CIDFontWidths,
+  fiCompositeDefaultWidth :: Double,
+  -- FontDescriptor is present in CIDFonts, but according to specs
+  -- shall not be used with Type0 fonts
+  fiCompositeFontDescriptor :: Maybe FontDescriptor
+  }
+  deriving (Show)
+
+-- | Glyph widths for CID fonts
+data CIDFontWidths = CIDFontWidths {
+  cidFontWidthsChars :: Map Int Double,
+  cidFontWidthsRanges :: [(Int, Int, Double)]
+  }
+  deriving (Show)
+
+instance Monoid CIDFontWidths where
+  mempty = CIDFontWidths {
+    cidFontWidthsChars = mempty,
+    cidFontWidthsRanges = mempty
+    }
+  w1 `mappend` w2 = CIDFontWidths {
+    cidFontWidthsChars = cidFontWidthsChars w1
+        `mappend` cidFontWidthsChars w2,
+    cidFontWidthsRanges = cidFontWidthsRanges w1
+        `mappend` cidFontWidthsRanges w2
+    }
+
+instance Semigroup CIDFontWidths where
+  (<>) = mappend
+
+-- | Returns the Y coordinates for a bbox of a glyph of a font, in
+-- text space units. Defaults to (0,1) if no FontDescriptor is
+-- present.
+--
+-- Maybe for vertical scripts, there are individual heights for the
+-- glyphs, so this takes a glyph code as second argument.
+getGlyphYCoordinates :: FontInfo -> Int -> (Double, Double)
+getGlyphYCoordinates (FontInfoComposite fi) =
+  const $ fromMaybe (0,1) $ join $ fmap (fdYCoordinates 1000) $ fiCompositeFontDescriptor fi
+getGlyphYCoordinates (FontInfoSimple fi) =
+  const $ fromMaybe (0,1) $ join $ fmap (fdYCoordinates 1000) $ fiSimpleFontDescriptor fi
+
+fdYCoordinates :: Double -> FontDescriptor -> Maybe (Double, Double)
+fdYCoordinates scaling fd =
+  maybe cap Just $          -- third: try CapHeight
+  maybe descAsc Just $      -- second: try Descent and Ascent
+  fmap bbox $ fdFontBBox fd -- first: try FontBBox
+  where
+    bbox (Rectangle _ b _ t) = (b / scaling, t / scaling)
+    descAsc = (,) <$> (fmap (/scaling) $ fdDescent fd) <*> (fmap (/scaling) $ fdAscent fd)
+    cap = (,) <$> (Just 0.0) <*> (fmap (/scaling) $ fdCapHeight fd)
+
+simpleFontEncodingDecode :: SimpleFontEncoding -> Word8 -> Maybe Text
+simpleFontEncodingDecode enc code =
+  case lookup code (simpleFontDifferences enc) of
+    Nothing ->
+      case simpleFontBaseEncoding enc of
+        FontBaseEncodingWinAnsi -> Map.lookup code WinAnsi.encoding
+        FontBaseEncodingMacRoman -> Map.lookup code MacRoman.encoding
+    Just glyphName ->
+      case Map.lookup glyphName adobeGlyphList of
+        Just c -> Just $ Text.pack [c]
+        Nothing ->
+          case Map.lookup glyphName texGlyphList of
+            Nothing-> Nothing
+            Just c -> Just $ Text.pack [c]
+
+-- | Make `CIDFontWidths` from value of \"W\" key in descendant font
+makeCIDFontWidths :: Array -> Either String CIDFontWidths
+makeCIDFontWidths vals = go mempty (Vector.toList vals)
+  `notice` ("Can't parse CIDFont width " ++ show vals)
+  where
+  go res [] = return res
+  go res (x1@Number{} : x2@Number{} : x3@Number{} : xs) = do
+    n1 <- intValue x1
+    n2 <- intValue x2
+    n3 <- realValue x3
+    go res {cidFontWidthsRanges = (n1, n2, n3) : cidFontWidthsRanges res} xs
+  go res (x : Array arr : xs) = do
+    n <- intValue x
+    ws <- forM (Vector.toList arr) realValue
+    go res {cidFontWidthsChars = Map.fromList (zip [n ..] ws)
+        `mappend` cidFontWidthsChars res} xs
+  go _ _ = Nothing
+
+-- | Get glyph width by glyph code
+cidFontGetWidth :: CIDFontWidths -> Int -> Maybe Double
+cidFontGetWidth w code =
+  case Map.lookup code (cidFontWidthsChars w) of
+    Just width -> Just width
+    Nothing -> case find (\(start, end, _) -> code >= start && code <= end)
+                         (cidFontWidthsRanges w) of
+                 Just (_, _, width) -> Just width
+                 _ -> Nothing
+
+-- | Decode string into list of glyphs and their widths
+fontInfoDecodeGlyphs :: FontInfo -> ByteString -> [(Glyph, Double)]
+fontInfoDecodeGlyphs fInfo@(FontInfoSimple fi) = \bs ->
+  flip map (BS.unpack bs) $ \c ->
+    let code = fromIntegral c
+        txt =
+          case fiSimpleUnicodeCMap fi of
+            Nothing ->
+              case fiSimpleEncoding fi of
+                Nothing ->
+                  case Text.decodeUtf8' (BS.pack [c]) of
+                    Right t -> Just t
+                    _ -> Nothing
+                Just enc ->
+                  case simpleFontEncodingDecode enc c of
+                    Just t -> Just t
+                    Nothing ->
+                      case Text.decodeUtf8' (BS.pack [c]) of
+                        Right t -> Just t
+                        _ -> Nothing
+            Just toUnicode ->
+              case unicodeCMapDecodeGlyph toUnicode code of
+                Just t -> Just t
+                Nothing ->
+                  case fiSimpleEncoding fi of
+                    Nothing -> Nothing
+                    Just enc ->
+                      case simpleFontEncodingDecode enc c of
+                        Just t -> Just t
+                        Nothing ->
+                          case Text.decodeUtf8' (BS.pack [c]) of
+                            Right t -> Just t
+                            _ -> Nothing
+        width =
+          case fiSimpleWidths fi of
+            Nothing -> 0
+            Just (firstChar, lastChar, widths) ->
+              if code >= firstChar && code <= lastChar
+                  && (code - firstChar) < length widths
+                 then let Vector w _ = transform (fiSimpleFontMatrix fi) $
+                            Vector (widths !! (code - firstChar)) 0
+                      in w
+                 else 0
+        (yBottom, yTop) = getGlyphYCoordinates fInfo code
+    in (Glyph {
+      glyphCode = code,
+      glyphTopLeft = Vector 0 yBottom,
+      glyphBottomRight = Vector width yTop,
+      glyphText = txt
+      }, width)
+fontInfoDecodeGlyphs fInfo@(FontInfoComposite fi) = \bs ->
+  case fiCompositeUnicodeCMap fi of
+    Nothing ->  -- XXX: use encoding here
+      tryDecode2byte $ BS.unpack bs
+    Just toUnicode ->
+      let getWidth = fromMaybe (fiCompositeDefaultWidth fi)
+                   . cidFontGetWidth (fiCompositeWidths fi)
+      in cmapDecodeString getWidth toUnicode fInfo bs
+  where
+  -- Most of the time composite fonts have 2-byte encoding,
+  -- so lets try that for now.
+  tryDecode2byte (b1:b2:rest) =
+    let code = fromIntegral b1 * 255 + fromIntegral b2
+        width = (/ 1000) $ fromMaybe (fiCompositeDefaultWidth fi)
+                         $ cidFontGetWidth (fiCompositeWidths fi) code
+        txt =
+          case Text.decodeUtf8' (BS.pack [b1, b2]) of
+            Right t -> Just t
+            _ -> Nothing
+        (yBottom, yTop) = getGlyphYCoordinates fInfo code
+        g = Glyph {
+          glyphCode = code,
+          glyphTopLeft = Vector 0 yBottom,
+          glyphBottomRight = Vector width yTop,
+          glyphText = txt
+          }
+    in (g, width) : tryDecode2byte rest
+  tryDecode2byte _ = []
+
+cmapDecodeString
+  :: (Int -> Double)
+  -> UnicodeCMap
+  -> FontInfo
+  -> ByteString
+  -> [(Glyph, Double)]
+cmapDecodeString getWidth cmap fInfo str = go str
+  where
+  go s =
+    case unicodeCMapNextGlyph cmap s of
+      Nothing -> []
+      Just (g, rest) ->
+        let width = getWidth g / 1000
+            (yBottom, yTop) = getGlyphYCoordinates fInfo g
+            glyph = Glyph {
+          glyphCode = g,
+          glyphTopLeft = Vector 0 yBottom,
+          glyphBottomRight = Vector width yTop,
+          glyphText = unicodeCMapDecodeGlyph cmap g
+          }
+        in (glyph, width) : go rest
diff --git a/lib/Pdf/Content/GlyphList.hs b/lib/Pdf/Content/GlyphList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/GlyphList.hs
@@ -0,0 +1,4299 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Mapping from glyph names to unicode characters
+
+module Pdf.Content.GlyphList
+(
+    adobeGlyphList
+)
+where
+
+import Data.ByteString (ByteString)
+import Data.Map (Map)
+import qualified Data.Map as Map
+
+-- | Glyph list
+adobeGlyphList :: Map ByteString Char
+adobeGlyphList = Map.fromList
+  [("A", '\x0041')
+  ,("AE", '\x00C6')
+  ,("AEacute", '\x01FC')
+  ,("AEmacron", '\x01E2')
+  ,("AEsmall", '\xF7E6')
+  ,("Aacute", '\x00C1')
+  ,("Aacutesmall", '\xF7E1')
+  ,("Abreve", '\x0102')
+  ,("Abreveacute", '\x1EAE')
+  ,("Abrevecyrillic", '\x04D0')
+  ,("Abrevedotbelow", '\x1EB6')
+  ,("Abrevegrave", '\x1EB0')
+  ,("Abrevehookabove", '\x1EB2')
+  ,("Abrevetilde", '\x1EB4')
+  ,("Acaron", '\x01CD')
+  ,("Acircle", '\x24B6')
+  ,("Acircumflex", '\x00C2')
+  ,("Acircumflexacute", '\x1EA4')
+  ,("Acircumflexdotbelow", '\x1EAC')
+  ,("Acircumflexgrave", '\x1EA6')
+  ,("Acircumflexhookabove", '\x1EA8')
+  ,("Acircumflexsmall", '\xF7E2')
+  ,("Acircumflextilde", '\x1EAA')
+  ,("Acute", '\xF6C9')
+  ,("Acutesmall", '\xF7B4')
+  ,("Acyrillic", '\x0410')
+  ,("Adblgrave", '\x0200')
+  ,("Adieresis", '\x00C4')
+  ,("Adieresiscyrillic", '\x04D2')
+  ,("Adieresismacron", '\x01DE')
+  ,("Adieresissmall", '\xF7E4')
+  ,("Adotbelow", '\x1EA0')
+  ,("Adotmacron", '\x01E0')
+  ,("Agrave", '\x00C0')
+  ,("Agravesmall", '\xF7E0')
+  ,("Ahookabove", '\x1EA2')
+  ,("Aiecyrillic", '\x04D4')
+  ,("Ainvertedbreve", '\x0202')
+  ,("Alpha", '\x0391')
+  ,("Alphatonos", '\x0386')
+  ,("Amacron", '\x0100')
+  ,("Amonospace", '\xFF21')
+  ,("Aogonek", '\x0104')
+  ,("Aring", '\x00C5')
+  ,("Aringacute", '\x01FA')
+  ,("Aringbelow", '\x1E00')
+  ,("Aringsmall", '\xF7E5')
+  ,("Asmall", '\xF761')
+  ,("Atilde", '\x00C3')
+  ,("Atildesmall", '\xF7E3')
+  ,("Aybarmenian", '\x0531')
+  ,("B", '\x0042')
+  ,("Bcircle", '\x24B7')
+  ,("Bdotaccent", '\x1E02')
+  ,("Bdotbelow", '\x1E04')
+  ,("Becyrillic", '\x0411')
+  ,("Benarmenian", '\x0532')
+  ,("Beta", '\x0392')
+  ,("Bhook", '\x0181')
+  ,("Blinebelow", '\x1E06')
+  ,("Bmonospace", '\xFF22')
+  ,("Brevesmall", '\xF6F4')
+  ,("Bsmall", '\xF762')
+  ,("Btopbar", '\x0182')
+  ,("C", '\x0043')
+  ,("Caarmenian", '\x053E')
+  ,("Cacute", '\x0106')
+  ,("Caron", '\xF6CA')
+  ,("Caronsmall", '\xF6F5')
+  ,("Ccaron", '\x010C')
+  ,("Ccedilla", '\x00C7')
+  ,("Ccedillaacute", '\x1E08')
+  ,("Ccedillasmall", '\xF7E7')
+  ,("Ccircle", '\x24B8')
+  ,("Ccircumflex", '\x0108')
+  ,("Cdot", '\x010A')
+  ,("Cdotaccent", '\x010A')
+  ,("Cedillasmall", '\xF7B8')
+  ,("Chaarmenian", '\x0549')
+  ,("Cheabkhasiancyrillic", '\x04BC')
+  ,("Checyrillic", '\x0427')
+  ,("Chedescenderabkhasiancyrillic", '\x04BE')
+  ,("Chedescendercyrillic", '\x04B6')
+  ,("Chedieresiscyrillic", '\x04F4')
+  ,("Cheharmenian", '\x0543')
+  ,("Chekhakassiancyrillic", '\x04CB')
+  ,("Cheverticalstrokecyrillic", '\x04B8')
+  ,("Chi", '\x03A7')
+  ,("Chook", '\x0187')
+  ,("Circumflexsmall", '\xF6F6')
+  ,("Cmonospace", '\xFF23')
+  ,("Coarmenian", '\x0551')
+  ,("Csmall", '\xF763')
+  ,("D", '\x0044')
+  ,("DZ", '\x01F1')
+  ,("DZcaron", '\x01C4')
+  ,("Daarmenian", '\x0534')
+  ,("Dafrican", '\x0189')
+  ,("Dcaron", '\x010E')
+  ,("Dcedilla", '\x1E10')
+  ,("Dcircle", '\x24B9')
+  ,("Dcircumflexbelow", '\x1E12')
+  ,("Dcroat", '\x0110')
+  ,("Ddotaccent", '\x1E0A')
+  ,("Ddotbelow", '\x1E0C')
+  ,("Decyrillic", '\x0414')
+  ,("Deicoptic", '\x03EE')
+  ,("Delta", '\x2206')
+  ,("Deltagreek", '\x0394')
+  ,("Dhook", '\x018A')
+  ,("Dieresis", '\xF6CB')
+  ,("DieresisAcute", '\xF6CC')
+  ,("DieresisGrave", '\xF6CD')
+  ,("Dieresissmall", '\xF7A8')
+  ,("Digammagreek", '\x03DC')
+  ,("Djecyrillic", '\x0402')
+  ,("Dlinebelow", '\x1E0E')
+  ,("Dmonospace", '\xFF24')
+  ,("Dotaccentsmall", '\xF6F7')
+  ,("Dslash", '\x0110')
+  ,("Dsmall", '\xF764')
+  ,("Dtopbar", '\x018B')
+  ,("Dz", '\x01F2')
+  ,("Dzcaron", '\x01C5')
+  ,("Dzeabkhasiancyrillic", '\x04E0')
+  ,("Dzecyrillic", '\x0405')
+  ,("Dzhecyrillic", '\x040F')
+  ,("E", '\x0045')
+  ,("Eacute", '\x00C9')
+  ,("Eacutesmall", '\xF7E9')
+  ,("Ebreve", '\x0114')
+  ,("Ecaron", '\x011A')
+  ,("Ecedillabreve", '\x1E1C')
+  ,("Echarmenian", '\x0535')
+  ,("Ecircle", '\x24BA')
+  ,("Ecircumflex", '\x00CA')
+  ,("Ecircumflexacute", '\x1EBE')
+  ,("Ecircumflexbelow", '\x1E18')
+  ,("Ecircumflexdotbelow", '\x1EC6')
+  ,("Ecircumflexgrave", '\x1EC0')
+  ,("Ecircumflexhookabove", '\x1EC2')
+  ,("Ecircumflexsmall", '\xF7EA')
+  ,("Ecircumflextilde", '\x1EC4')
+  ,("Ecyrillic", '\x0404')
+  ,("Edblgrave", '\x0204')
+  ,("Edieresis", '\x00CB')
+  ,("Edieresissmall", '\xF7EB')
+  ,("Edot", '\x0116')
+  ,("Edotaccent", '\x0116')
+  ,("Edotbelow", '\x1EB8')
+  ,("Efcyrillic", '\x0424')
+  ,("Egrave", '\x00C8')
+  ,("Egravesmall", '\xF7E8')
+  ,("Eharmenian", '\x0537')
+  ,("Ehookabove", '\x1EBA')
+  ,("Eightroman", '\x2167')
+  ,("Einvertedbreve", '\x0206')
+  ,("Eiotifiedcyrillic", '\x0464')
+  ,("Elcyrillic", '\x041B')
+  ,("Elevenroman", '\x216A')
+  ,("Emacron", '\x0112')
+  ,("Emacronacute", '\x1E16')
+  ,("Emacrongrave", '\x1E14')
+  ,("Emcyrillic", '\x041C')
+  ,("Emonospace", '\xFF25')
+  ,("Encyrillic", '\x041D')
+  ,("Endescendercyrillic", '\x04A2')
+  ,("Eng", '\x014A')
+  ,("Enghecyrillic", '\x04A4')
+  ,("Enhookcyrillic", '\x04C7')
+  ,("Eogonek", '\x0118')
+  ,("Eopen", '\x0190')
+  ,("Epsilon", '\x0395')
+  ,("Epsilontonos", '\x0388')
+  ,("Ercyrillic", '\x0420')
+  ,("Ereversed", '\x018E')
+  ,("Ereversedcyrillic", '\x042D')
+  ,("Escyrillic", '\x0421')
+  ,("Esdescendercyrillic", '\x04AA')
+  ,("Esh", '\x01A9')
+  ,("Esmall", '\xF765')
+  ,("Eta", '\x0397')
+  ,("Etarmenian", '\x0538')
+  ,("Etatonos", '\x0389')
+  ,("Eth", '\x00D0')
+  ,("Ethsmall", '\xF7F0')
+  ,("Etilde", '\x1EBC')
+  ,("Etildebelow", '\x1E1A')
+  ,("Euro", '\x20AC')
+  ,("Ezh", '\x01B7')
+  ,("Ezhcaron", '\x01EE')
+  ,("Ezhreversed", '\x01B8')
+  ,("F", '\x0046')
+  ,("Fcircle", '\x24BB')
+  ,("Fdotaccent", '\x1E1E')
+  ,("Feharmenian", '\x0556')
+  ,("Feicoptic", '\x03E4')
+  ,("Fhook", '\x0191')
+  ,("Fitacyrillic", '\x0472')
+  ,("Fiveroman", '\x2164')
+  ,("Fmonospace", '\xFF26')
+  ,("Fourroman", '\x2163')
+  ,("Fsmall", '\xF766')
+  ,("G", '\x0047')
+  ,("GBsquare", '\x3387')
+  ,("Gacute", '\x01F4')
+  ,("Gamma", '\x0393')
+  ,("Gammaafrican", '\x0194')
+  ,("Gangiacoptic", '\x03EA')
+  ,("Gbreve", '\x011E')
+  ,("Gcaron", '\x01E6')
+  ,("Gcedilla", '\x0122')
+  ,("Gcircle", '\x24BC')
+  ,("Gcircumflex", '\x011C')
+  ,("Gcommaaccent", '\x0122')
+  ,("Gdot", '\x0120')
+  ,("Gdotaccent", '\x0120')
+  ,("Gecyrillic", '\x0413')
+  ,("Ghadarmenian", '\x0542')
+  ,("Ghemiddlehookcyrillic", '\x0494')
+  ,("Ghestrokecyrillic", '\x0492')
+  ,("Gheupturncyrillic", '\x0490')
+  ,("Ghook", '\x0193')
+  ,("Gimarmenian", '\x0533')
+  ,("Gjecyrillic", '\x0403')
+  ,("Gmacron", '\x1E20')
+  ,("Gmonospace", '\xFF27')
+  ,("Grave", '\xF6CE')
+  ,("Gravesmall", '\xF760')
+  ,("Gsmall", '\xF767')
+  ,("Gsmallhook", '\x029B')
+  ,("Gstroke", '\x01E4')
+  ,("H", '\x0048')
+  ,("H18533", '\x25CF')
+  ,("H18543", '\x25AA')
+  ,("H18551", '\x25AB')
+  ,("H22073", '\x25A1')
+  ,("HPsquare", '\x33CB')
+  ,("Haabkhasiancyrillic", '\x04A8')
+  ,("Hadescendercyrillic", '\x04B2')
+  ,("Hardsigncyrillic", '\x042A')
+  ,("Hbar", '\x0126')
+  ,("Hbrevebelow", '\x1E2A')
+  ,("Hcedilla", '\x1E28')
+  ,("Hcircle", '\x24BD')
+  ,("Hcircumflex", '\x0124')
+  ,("Hdieresis", '\x1E26')
+  ,("Hdotaccent", '\x1E22')
+  ,("Hdotbelow", '\x1E24')
+  ,("Hmonospace", '\xFF28')
+  ,("Hoarmenian", '\x0540')
+  ,("Horicoptic", '\x03E8')
+  ,("Hsmall", '\xF768')
+  ,("Hungarumlaut", '\xF6CF')
+  ,("Hungarumlautsmall", '\xF6F8')
+  ,("Hzsquare", '\x3390')
+  ,("I", '\x0049')
+  ,("IAcyrillic", '\x042F')
+  ,("IJ", '\x0132')
+  ,("IUcyrillic", '\x042E')
+  ,("Iacute", '\x00CD')
+  ,("Iacutesmall", '\xF7ED')
+  ,("Ibreve", '\x012C')
+  ,("Icaron", '\x01CF')
+  ,("Icircle", '\x24BE')
+  ,("Icircumflex", '\x00CE')
+  ,("Icircumflexsmall", '\xF7EE')
+  ,("Icyrillic", '\x0406')
+  ,("Idblgrave", '\x0208')
+  ,("Idieresis", '\x00CF')
+  ,("Idieresisacute", '\x1E2E')
+  ,("Idieresiscyrillic", '\x04E4')
+  ,("Idieresissmall", '\xF7EF')
+  ,("Idot", '\x0130')
+  ,("Idotaccent", '\x0130')
+  ,("Idotbelow", '\x1ECA')
+  ,("Iebrevecyrillic", '\x04D6')
+  ,("Iecyrillic", '\x0415')
+  ,("Ifraktur", '\x2111')
+  ,("Igrave", '\x00CC')
+  ,("Igravesmall", '\xF7EC')
+  ,("Ihookabove", '\x1EC8')
+  ,("Iicyrillic", '\x0418')
+  ,("Iinvertedbreve", '\x020A')
+  ,("Iishortcyrillic", '\x0419')
+  ,("Imacron", '\x012A')
+  ,("Imacroncyrillic", '\x04E2')
+  ,("Imonospace", '\xFF29')
+  ,("Iniarmenian", '\x053B')
+  ,("Iocyrillic", '\x0401')
+  ,("Iogonek", '\x012E')
+  ,("Iota", '\x0399')
+  ,("Iotaafrican", '\x0196')
+  ,("Iotadieresis", '\x03AA')
+  ,("Iotatonos", '\x038A')
+  ,("Ismall", '\xF769')
+  ,("Istroke", '\x0197')
+  ,("Itilde", '\x0128')
+  ,("Itildebelow", '\x1E2C')
+  ,("Izhitsacyrillic", '\x0474')
+  ,("Izhitsadblgravecyrillic", '\x0476')
+  ,("J", '\x004A')
+  ,("Jaarmenian", '\x0541')
+  ,("Jcircle", '\x24BF')
+  ,("Jcircumflex", '\x0134')
+  ,("Jecyrillic", '\x0408')
+  ,("Jheharmenian", '\x054B')
+  ,("Jmonospace", '\xFF2A')
+  ,("Jsmall", '\xF76A')
+  ,("K", '\x004B')
+  ,("KBsquare", '\x3385')
+  ,("KKsquare", '\x33CD')
+  ,("Kabashkircyrillic", '\x04A0')
+  ,("Kacute", '\x1E30')
+  ,("Kacyrillic", '\x041A')
+  ,("Kadescendercyrillic", '\x049A')
+  ,("Kahookcyrillic", '\x04C3')
+  ,("Kappa", '\x039A')
+  ,("Kastrokecyrillic", '\x049E')
+  ,("Kaverticalstrokecyrillic", '\x049C')
+  ,("Kcaron", '\x01E8')
+  ,("Kcedilla", '\x0136')
+  ,("Kcircle", '\x24C0')
+  ,("Kcommaaccent", '\x0136')
+  ,("Kdotbelow", '\x1E32')
+  ,("Keharmenian", '\x0554')
+  ,("Kenarmenian", '\x053F')
+  ,("Khacyrillic", '\x0425')
+  ,("Kheicoptic", '\x03E6')
+  ,("Khook", '\x0198')
+  ,("Kjecyrillic", '\x040C')
+  ,("Klinebelow", '\x1E34')
+  ,("Kmonospace", '\xFF2B')
+  ,("Koppacyrillic", '\x0480')
+  ,("Koppagreek", '\x03DE')
+  ,("Ksicyrillic", '\x046E')
+  ,("Ksmall", '\xF76B')
+  ,("L", '\x004C')
+  ,("LJ", '\x01C7')
+  ,("LL", '\xF6BF')
+  ,("Lacute", '\x0139')
+  ,("Lambda", '\x039B')
+  ,("Lcaron", '\x013D')
+  ,("Lcedilla", '\x013B')
+  ,("Lcircle", '\x24C1')
+  ,("Lcircumflexbelow", '\x1E3C')
+  ,("Lcommaaccent", '\x013B')
+  ,("Ldot", '\x013F')
+  ,("Ldotaccent", '\x013F')
+  ,("Ldotbelow", '\x1E36')
+  ,("Ldotbelowmacron", '\x1E38')
+  ,("Liwnarmenian", '\x053C')
+  ,("Lj", '\x01C8')
+  ,("Ljecyrillic", '\x0409')
+  ,("Llinebelow", '\x1E3A')
+  ,("Lmonospace", '\xFF2C')
+  ,("Lslash", '\x0141')
+  ,("Lslashsmall", '\xF6F9')
+  ,("Lsmall", '\xF76C')
+  ,("M", '\x004D')
+  ,("MBsquare", '\x3386')
+  ,("Macron", '\xF6D0')
+  ,("Macronsmall", '\xF7AF')
+  ,("Macute", '\x1E3E')
+  ,("Mcircle", '\x24C2')
+  ,("Mdotaccent", '\x1E40')
+  ,("Mdotbelow", '\x1E42')
+  ,("Menarmenian", '\x0544')
+  ,("Mmonospace", '\xFF2D')
+  ,("Msmall", '\xF76D')
+  ,("Mturned", '\x019C')
+  ,("Mu", '\x039C')
+  ,("N", '\x004E')
+  ,("NJ", '\x01CA')
+  ,("Nacute", '\x0143')
+  ,("Ncaron", '\x0147')
+  ,("Ncedilla", '\x0145')
+  ,("Ncircle", '\x24C3')
+  ,("Ncircumflexbelow", '\x1E4A')
+  ,("Ncommaaccent", '\x0145')
+  ,("Ndotaccent", '\x1E44')
+  ,("Ndotbelow", '\x1E46')
+  ,("Nhookleft", '\x019D')
+  ,("Nineroman", '\x2168')
+  ,("Nj", '\x01CB')
+  ,("Njecyrillic", '\x040A')
+  ,("Nlinebelow", '\x1E48')
+  ,("Nmonospace", '\xFF2E')
+  ,("Nowarmenian", '\x0546')
+  ,("Nsmall", '\xF76E')
+  ,("Ntilde", '\x00D1')
+  ,("Ntildesmall", '\xF7F1')
+  ,("Nu", '\x039D')
+  ,("O", '\x004F')
+  ,("OE", '\x0152')
+  ,("OEsmall", '\xF6FA')
+  ,("Oacute", '\x00D3')
+  ,("Oacutesmall", '\xF7F3')
+  ,("Obarredcyrillic", '\x04E8')
+  ,("Obarreddieresiscyrillic", '\x04EA')
+  ,("Obreve", '\x014E')
+  ,("Ocaron", '\x01D1')
+  ,("Ocenteredtilde", '\x019F')
+  ,("Ocircle", '\x24C4')
+  ,("Ocircumflex", '\x00D4')
+  ,("Ocircumflexacute", '\x1ED0')
+  ,("Ocircumflexdotbelow", '\x1ED8')
+  ,("Ocircumflexgrave", '\x1ED2')
+  ,("Ocircumflexhookabove", '\x1ED4')
+  ,("Ocircumflexsmall", '\xF7F4')
+  ,("Ocircumflextilde", '\x1ED6')
+  ,("Ocyrillic", '\x041E')
+  ,("Odblacute", '\x0150')
+  ,("Odblgrave", '\x020C')
+  ,("Odieresis", '\x00D6')
+  ,("Odieresiscyrillic", '\x04E6')
+  ,("Odieresissmall", '\xF7F6')
+  ,("Odotbelow", '\x1ECC')
+  ,("Ogoneksmall", '\xF6FB')
+  ,("Ograve", '\x00D2')
+  ,("Ogravesmall", '\xF7F2')
+  ,("Oharmenian", '\x0555')
+  ,("Ohm", '\x2126')
+  ,("Ohookabove", '\x1ECE')
+  ,("Ohorn", '\x01A0')
+  ,("Ohornacute", '\x1EDA')
+  ,("Ohorndotbelow", '\x1EE2')
+  ,("Ohorngrave", '\x1EDC')
+  ,("Ohornhookabove", '\x1EDE')
+  ,("Ohorntilde", '\x1EE0')
+  ,("Ohungarumlaut", '\x0150')
+  ,("Oi", '\x01A2')
+  ,("Oinvertedbreve", '\x020E')
+  ,("Omacron", '\x014C')
+  ,("Omacronacute", '\x1E52')
+  ,("Omacrongrave", '\x1E50')
+  ,("Omega", '\x2126')
+  ,("Omegacyrillic", '\x0460')
+  ,("Omegagreek", '\x03A9')
+  ,("Omegaroundcyrillic", '\x047A')
+  ,("Omegatitlocyrillic", '\x047C')
+  ,("Omegatonos", '\x038F')
+  ,("Omicron", '\x039F')
+  ,("Omicrontonos", '\x038C')
+  ,("Omonospace", '\xFF2F')
+  ,("Oneroman", '\x2160')
+  ,("Oogonek", '\x01EA')
+  ,("Oogonekmacron", '\x01EC')
+  ,("Oopen", '\x0186')
+  ,("Oslash", '\x00D8')
+  ,("Oslashacute", '\x01FE')
+  ,("Oslashsmall", '\xF7F8')
+  ,("Osmall", '\xF76F')
+  ,("Ostrokeacute", '\x01FE')
+  ,("Otcyrillic", '\x047E')
+  ,("Otilde", '\x00D5')
+  ,("Otildeacute", '\x1E4C')
+  ,("Otildedieresis", '\x1E4E')
+  ,("Otildesmall", '\xF7F5')
+  ,("P", '\x0050')
+  ,("Pacute", '\x1E54')
+  ,("Pcircle", '\x24C5')
+  ,("Pdotaccent", '\x1E56')
+  ,("Pecyrillic", '\x041F')
+  ,("Peharmenian", '\x054A')
+  ,("Pemiddlehookcyrillic", '\x04A6')
+  ,("Phi", '\x03A6')
+  ,("Phook", '\x01A4')
+  ,("Pi", '\x03A0')
+  ,("Piwrarmenian", '\x0553')
+  ,("Pmonospace", '\xFF30')
+  ,("Psi", '\x03A8')
+  ,("Psicyrillic", '\x0470')
+  ,("Psmall", '\xF770')
+  ,("Q", '\x0051')
+  ,("Qcircle", '\x24C6')
+  ,("Qmonospace", '\xFF31')
+  ,("Qsmall", '\xF771')
+  ,("R", '\x0052')
+  ,("Raarmenian", '\x054C')
+  ,("Racute", '\x0154')
+  ,("Rcaron", '\x0158')
+  ,("Rcedilla", '\x0156')
+  ,("Rcircle", '\x24C7')
+  ,("Rcommaaccent", '\x0156')
+  ,("Rdblgrave", '\x0210')
+  ,("Rdotaccent", '\x1E58')
+  ,("Rdotbelow", '\x1E5A')
+  ,("Rdotbelowmacron", '\x1E5C')
+  ,("Reharmenian", '\x0550')
+  ,("Rfraktur", '\x211C')
+  ,("Rho", '\x03A1')
+  ,("Ringsmall", '\xF6FC')
+  ,("Rinvertedbreve", '\x0212')
+  ,("Rlinebelow", '\x1E5E')
+  ,("Rmonospace", '\xFF32')
+  ,("Rsmall", '\xF772')
+  ,("Rsmallinverted", '\x0281')
+  ,("Rsmallinvertedsuperior", '\x02B6')
+  ,("S", '\x0053')
+  ,("SF010000", '\x250C')
+  ,("SF020000", '\x2514')
+  ,("SF030000", '\x2510')
+  ,("SF040000", '\x2518')
+  ,("SF050000", '\x253C')
+  ,("SF060000", '\x252C')
+  ,("SF070000", '\x2534')
+  ,("SF080000", '\x251C')
+  ,("SF090000", '\x2524')
+  ,("SF100000", '\x2500')
+  ,("SF110000", '\x2502')
+  ,("SF190000", '\x2561')
+  ,("SF200000", '\x2562')
+  ,("SF210000", '\x2556')
+  ,("SF220000", '\x2555')
+  ,("SF230000", '\x2563')
+  ,("SF240000", '\x2551')
+  ,("SF250000", '\x2557')
+  ,("SF260000", '\x255D')
+  ,("SF270000", '\x255C')
+  ,("SF280000", '\x255B')
+  ,("SF360000", '\x255E')
+  ,("SF370000", '\x255F')
+  ,("SF380000", '\x255A')
+  ,("SF390000", '\x2554')
+  ,("SF400000", '\x2569')
+  ,("SF410000", '\x2566')
+  ,("SF420000", '\x2560')
+  ,("SF430000", '\x2550')
+  ,("SF440000", '\x256C')
+  ,("SF450000", '\x2567')
+  ,("SF460000", '\x2568')
+  ,("SF470000", '\x2564')
+  ,("SF480000", '\x2565')
+  ,("SF490000", '\x2559')
+  ,("SF500000", '\x2558')
+  ,("SF510000", '\x2552')
+  ,("SF520000", '\x2553')
+  ,("SF530000", '\x256B')
+  ,("SF540000", '\x256A')
+  ,("Sacute", '\x015A')
+  ,("Sacutedotaccent", '\x1E64')
+  ,("Sampigreek", '\x03E0')
+  ,("Scaron", '\x0160')
+  ,("Scarondotaccent", '\x1E66')
+  ,("Scaronsmall", '\xF6FD')
+  ,("Scedilla", '\x015E')
+  ,("Schwa", '\x018F')
+  ,("Schwacyrillic", '\x04D8')
+  ,("Schwadieresiscyrillic", '\x04DA')
+  ,("Scircle", '\x24C8')
+  ,("Scircumflex", '\x015C')
+  ,("Scommaaccent", '\x0218')
+  ,("Sdotaccent", '\x1E60')
+  ,("Sdotbelow", '\x1E62')
+  ,("Sdotbelowdotaccent", '\x1E68')
+  ,("Seharmenian", '\x054D')
+  ,("Sevenroman", '\x2166')
+  ,("Shaarmenian", '\x0547')
+  ,("Shacyrillic", '\x0428')
+  ,("Shchacyrillic", '\x0429')
+  ,("Sheicoptic", '\x03E2')
+  ,("Shhacyrillic", '\x04BA')
+  ,("Shimacoptic", '\x03EC')
+  ,("Sigma", '\x03A3')
+  ,("Sixroman", '\x2165')
+  ,("Smonospace", '\xFF33')
+  ,("Softsigncyrillic", '\x042C')
+  ,("Ssmall", '\xF773')
+  ,("Stigmagreek", '\x03DA')
+  ,("T", '\x0054')
+  ,("Tau", '\x03A4')
+  ,("Tbar", '\x0166')
+  ,("Tcaron", '\x0164')
+  ,("Tcedilla", '\x0162')
+  ,("Tcircle", '\x24C9')
+  ,("Tcircumflexbelow", '\x1E70')
+  ,("Tcommaaccent", '\x0162')
+  ,("Tdotaccent", '\x1E6A')
+  ,("Tdotbelow", '\x1E6C')
+  ,("Tecyrillic", '\x0422')
+  ,("Tedescendercyrillic", '\x04AC')
+  ,("Tenroman", '\x2169')
+  ,("Tetsecyrillic", '\x04B4')
+  ,("Theta", '\x0398')
+  ,("Thook", '\x01AC')
+  ,("Thorn", '\x00DE')
+  ,("Thornsmall", '\xF7FE')
+  ,("Threeroman", '\x2162')
+  ,("Tildesmall", '\xF6FE')
+  ,("Tiwnarmenian", '\x054F')
+  ,("Tlinebelow", '\x1E6E')
+  ,("Tmonospace", '\xFF34')
+  ,("Toarmenian", '\x0539')
+  ,("Tonefive", '\x01BC')
+  ,("Tonesix", '\x0184')
+  ,("Tonetwo", '\x01A7')
+  ,("Tretroflexhook", '\x01AE')
+  ,("Tsecyrillic", '\x0426')
+  ,("Tshecyrillic", '\x040B')
+  ,("Tsmall", '\xF774')
+  ,("Twelveroman", '\x216B')
+  ,("Tworoman", '\x2161')
+  ,("U", '\x0055')
+  ,("Uacute", '\x00DA')
+  ,("Uacutesmall", '\xF7FA')
+  ,("Ubreve", '\x016C')
+  ,("Ucaron", '\x01D3')
+  ,("Ucircle", '\x24CA')
+  ,("Ucircumflex", '\x00DB')
+  ,("Ucircumflexbelow", '\x1E76')
+  ,("Ucircumflexsmall", '\xF7FB')
+  ,("Ucyrillic", '\x0423')
+  ,("Udblacute", '\x0170')
+  ,("Udblgrave", '\x0214')
+  ,("Udieresis", '\x00DC')
+  ,("Udieresisacute", '\x01D7')
+  ,("Udieresisbelow", '\x1E72')
+  ,("Udieresiscaron", '\x01D9')
+  ,("Udieresiscyrillic", '\x04F0')
+  ,("Udieresisgrave", '\x01DB')
+  ,("Udieresismacron", '\x01D5')
+  ,("Udieresissmall", '\xF7FC')
+  ,("Udotbelow", '\x1EE4')
+  ,("Ugrave", '\x00D9')
+  ,("Ugravesmall", '\xF7F9')
+  ,("Uhookabove", '\x1EE6')
+  ,("Uhorn", '\x01AF')
+  ,("Uhornacute", '\x1EE8')
+  ,("Uhorndotbelow", '\x1EF0')
+  ,("Uhorngrave", '\x1EEA')
+  ,("Uhornhookabove", '\x1EEC')
+  ,("Uhorntilde", '\x1EEE')
+  ,("Uhungarumlaut", '\x0170')
+  ,("Uhungarumlautcyrillic", '\x04F2')
+  ,("Uinvertedbreve", '\x0216')
+  ,("Ukcyrillic", '\x0478')
+  ,("Umacron", '\x016A')
+  ,("Umacroncyrillic", '\x04EE')
+  ,("Umacrondieresis", '\x1E7A')
+  ,("Umonospace", '\xFF35')
+  ,("Uogonek", '\x0172')
+  ,("Upsilon", '\x03A5')
+  ,("Upsilon1", '\x03D2')
+  ,("Upsilonacutehooksymbolgreek", '\x03D3')
+  ,("Upsilonafrican", '\x01B1')
+  ,("Upsilondieresis", '\x03AB')
+  ,("Upsilondieresishooksymbolgreek", '\x03D4')
+  ,("Upsilonhooksymbol", '\x03D2')
+  ,("Upsilontonos", '\x038E')
+  ,("Uring", '\x016E')
+  ,("Ushortcyrillic", '\x040E')
+  ,("Usmall", '\xF775')
+  ,("Ustraightcyrillic", '\x04AE')
+  ,("Ustraightstrokecyrillic", '\x04B0')
+  ,("Utilde", '\x0168')
+  ,("Utildeacute", '\x1E78')
+  ,("Utildebelow", '\x1E74')
+  ,("V", '\x0056')
+  ,("Vcircle", '\x24CB')
+  ,("Vdotbelow", '\x1E7E')
+  ,("Vecyrillic", '\x0412')
+  ,("Vewarmenian", '\x054E')
+  ,("Vhook", '\x01B2')
+  ,("Vmonospace", '\xFF36')
+  ,("Voarmenian", '\x0548')
+  ,("Vsmall", '\xF776')
+  ,("Vtilde", '\x1E7C')
+  ,("W", '\x0057')
+  ,("Wacute", '\x1E82')
+  ,("Wcircle", '\x24CC')
+  ,("Wcircumflex", '\x0174')
+  ,("Wdieresis", '\x1E84')
+  ,("Wdotaccent", '\x1E86')
+  ,("Wdotbelow", '\x1E88')
+  ,("Wgrave", '\x1E80')
+  ,("Wmonospace", '\xFF37')
+  ,("Wsmall", '\xF777')
+  ,("X", '\x0058')
+  ,("Xcircle", '\x24CD')
+  ,("Xdieresis", '\x1E8C')
+  ,("Xdotaccent", '\x1E8A')
+  ,("Xeharmenian", '\x053D')
+  ,("Xi", '\x039E')
+  ,("Xmonospace", '\xFF38')
+  ,("Xsmall", '\xF778')
+  ,("Y", '\x0059')
+  ,("Yacute", '\x00DD')
+  ,("Yacutesmall", '\xF7FD')
+  ,("Yatcyrillic", '\x0462')
+  ,("Ycircle", '\x24CE')
+  ,("Ycircumflex", '\x0176')
+  ,("Ydieresis", '\x0178')
+  ,("Ydieresissmall", '\xF7FF')
+  ,("Ydotaccent", '\x1E8E')
+  ,("Ydotbelow", '\x1EF4')
+  ,("Yericyrillic", '\x042B')
+  ,("Yerudieresiscyrillic", '\x04F8')
+  ,("Ygrave", '\x1EF2')
+  ,("Yhook", '\x01B3')
+  ,("Yhookabove", '\x1EF6')
+  ,("Yiarmenian", '\x0545')
+  ,("Yicyrillic", '\x0407')
+  ,("Yiwnarmenian", '\x0552')
+  ,("Ymonospace", '\xFF39')
+  ,("Ysmall", '\xF779')
+  ,("Ytilde", '\x1EF8')
+  ,("Yusbigcyrillic", '\x046A')
+  ,("Yusbigiotifiedcyrillic", '\x046C')
+  ,("Yuslittlecyrillic", '\x0466')
+  ,("Yuslittleiotifiedcyrillic", '\x0468')
+  ,("Z", '\x005A')
+  ,("Zaarmenian", '\x0536')
+  ,("Zacute", '\x0179')
+  ,("Zcaron", '\x017D')
+  ,("Zcaronsmall", '\xF6FF')
+  ,("Zcircle", '\x24CF')
+  ,("Zcircumflex", '\x1E90')
+  ,("Zdot", '\x017B')
+  ,("Zdotaccent", '\x017B')
+  ,("Zdotbelow", '\x1E92')
+  ,("Zecyrillic", '\x0417')
+  ,("Zedescendercyrillic", '\x0498')
+  ,("Zedieresiscyrillic", '\x04DE')
+  ,("Zeta", '\x0396')
+  ,("Zhearmenian", '\x053A')
+  ,("Zhebrevecyrillic", '\x04C1')
+  ,("Zhecyrillic", '\x0416')
+  ,("Zhedescendercyrillic", '\x0496')
+  ,("Zhedieresiscyrillic", '\x04DC')
+  ,("Zlinebelow", '\x1E94')
+  ,("Zmonospace", '\xFF3A')
+  ,("Zsmall", '\xF77A')
+  ,("Zstroke", '\x01B5')
+  ,("a", '\x0061')
+  ,("aabengali", '\x0986')
+  ,("aacute", '\x00E1')
+  ,("aadeva", '\x0906')
+  ,("aagujarati", '\x0A86')
+  ,("aagurmukhi", '\x0A06')
+  ,("aamatragurmukhi", '\x0A3E')
+  ,("aarusquare", '\x3303')
+  ,("aavowelsignbengali", '\x09BE')
+  ,("aavowelsigndeva", '\x093E')
+  ,("aavowelsigngujarati", '\x0ABE')
+  ,("abbreviationmarkarmenian", '\x055F')
+  ,("abbreviationsigndeva", '\x0970')
+  ,("abengali", '\x0985')
+  ,("abopomofo", '\x311A')
+  ,("abreve", '\x0103')
+  ,("abreveacute", '\x1EAF')
+  ,("abrevecyrillic", '\x04D1')
+  ,("abrevedotbelow", '\x1EB7')
+  ,("abrevegrave", '\x1EB1')
+  ,("abrevehookabove", '\x1EB3')
+  ,("abrevetilde", '\x1EB5')
+  ,("acaron", '\x01CE')
+  ,("acircle", '\x24D0')
+  ,("acircumflex", '\x00E2')
+  ,("acircumflexacute", '\x1EA5')
+  ,("acircumflexdotbelow", '\x1EAD')
+  ,("acircumflexgrave", '\x1EA7')
+  ,("acircumflexhookabove", '\x1EA9')
+  ,("acircumflextilde", '\x1EAB')
+  ,("acute", '\x00B4')
+  ,("acutebelowcmb", '\x0317')
+  ,("acutecmb", '\x0301')
+  ,("acutecomb", '\x0301')
+  ,("acutedeva", '\x0954')
+  ,("acutelowmod", '\x02CF')
+  ,("acutetonecmb", '\x0341')
+  ,("acyrillic", '\x0430')
+  ,("adblgrave", '\x0201')
+  ,("addakgurmukhi", '\x0A71')
+  ,("adeva", '\x0905')
+  ,("adieresis", '\x00E4')
+  ,("adieresiscyrillic", '\x04D3')
+  ,("adieresismacron", '\x01DF')
+  ,("adotbelow", '\x1EA1')
+  ,("adotmacron", '\x01E1')
+  ,("ae", '\x00E6')
+  ,("aeacute", '\x01FD')
+  ,("aekorean", '\x3150')
+  ,("aemacron", '\x01E3')
+  ,("afii00208", '\x2015')
+  ,("afii08941", '\x20A4')
+  ,("afii10017", '\x0410')
+  ,("afii10018", '\x0411')
+  ,("afii10019", '\x0412')
+  ,("afii10020", '\x0413')
+  ,("afii10021", '\x0414')
+  ,("afii10022", '\x0415')
+  ,("afii10023", '\x0401')
+  ,("afii10024", '\x0416')
+  ,("afii10025", '\x0417')
+  ,("afii10026", '\x0418')
+  ,("afii10027", '\x0419')
+  ,("afii10028", '\x041A')
+  ,("afii10029", '\x041B')
+  ,("afii10030", '\x041C')
+  ,("afii10031", '\x041D')
+  ,("afii10032", '\x041E')
+  ,("afii10033", '\x041F')
+  ,("afii10034", '\x0420')
+  ,("afii10035", '\x0421')
+  ,("afii10036", '\x0422')
+  ,("afii10037", '\x0423')
+  ,("afii10038", '\x0424')
+  ,("afii10039", '\x0425')
+  ,("afii10040", '\x0426')
+  ,("afii10041", '\x0427')
+  ,("afii10042", '\x0428')
+  ,("afii10043", '\x0429')
+  ,("afii10044", '\x042A')
+  ,("afii10045", '\x042B')
+  ,("afii10046", '\x042C')
+  ,("afii10047", '\x042D')
+  ,("afii10048", '\x042E')
+  ,("afii10049", '\x042F')
+  ,("afii10050", '\x0490')
+  ,("afii10051", '\x0402')
+  ,("afii10052", '\x0403')
+  ,("afii10053", '\x0404')
+  ,("afii10054", '\x0405')
+  ,("afii10055", '\x0406')
+  ,("afii10056", '\x0407')
+  ,("afii10057", '\x0408')
+  ,("afii10058", '\x0409')
+  ,("afii10059", '\x040A')
+  ,("afii10060", '\x040B')
+  ,("afii10061", '\x040C')
+  ,("afii10062", '\x040E')
+  ,("afii10063", '\xF6C4')
+  ,("afii10064", '\xF6C5')
+  ,("afii10065", '\x0430')
+  ,("afii10066", '\x0431')
+  ,("afii10067", '\x0432')
+  ,("afii10068", '\x0433')
+  ,("afii10069", '\x0434')
+  ,("afii10070", '\x0435')
+  ,("afii10071", '\x0451')
+  ,("afii10072", '\x0436')
+  ,("afii10073", '\x0437')
+  ,("afii10074", '\x0438')
+  ,("afii10075", '\x0439')
+  ,("afii10076", '\x043A')
+  ,("afii10077", '\x043B')
+  ,("afii10078", '\x043C')
+  ,("afii10079", '\x043D')
+  ,("afii10080", '\x043E')
+  ,("afii10081", '\x043F')
+  ,("afii10082", '\x0440')
+  ,("afii10083", '\x0441')
+  ,("afii10084", '\x0442')
+  ,("afii10085", '\x0443')
+  ,("afii10086", '\x0444')
+  ,("afii10087", '\x0445')
+  ,("afii10088", '\x0446')
+  ,("afii10089", '\x0447')
+  ,("afii10090", '\x0448')
+  ,("afii10091", '\x0449')
+  ,("afii10092", '\x044A')
+  ,("afii10093", '\x044B')
+  ,("afii10094", '\x044C')
+  ,("afii10095", '\x044D')
+  ,("afii10096", '\x044E')
+  ,("afii10097", '\x044F')
+  ,("afii10098", '\x0491')
+  ,("afii10099", '\x0452')
+  ,("afii10100", '\x0453')
+  ,("afii10101", '\x0454')
+  ,("afii10102", '\x0455')
+  ,("afii10103", '\x0456')
+  ,("afii10104", '\x0457')
+  ,("afii10105", '\x0458')
+  ,("afii10106", '\x0459')
+  ,("afii10107", '\x045A')
+  ,("afii10108", '\x045B')
+  ,("afii10109", '\x045C')
+  ,("afii10110", '\x045E')
+  ,("afii10145", '\x040F')
+  ,("afii10146", '\x0462')
+  ,("afii10147", '\x0472')
+  ,("afii10148", '\x0474')
+  ,("afii10192", '\xF6C6')
+  ,("afii10193", '\x045F')
+  ,("afii10194", '\x0463')
+  ,("afii10195", '\x0473')
+  ,("afii10196", '\x0475')
+  ,("afii10831", '\xF6C7')
+  ,("afii10832", '\xF6C8')
+  ,("afii10846", '\x04D9')
+  ,("afii299", '\x200E')
+  ,("afii300", '\x200F')
+  ,("afii301", '\x200D')
+  ,("afii57381", '\x066A')
+  ,("afii57388", '\x060C')
+  ,("afii57392", '\x0660')
+  ,("afii57393", '\x0661')
+  ,("afii57394", '\x0662')
+  ,("afii57395", '\x0663')
+  ,("afii57396", '\x0664')
+  ,("afii57397", '\x0665')
+  ,("afii57398", '\x0666')
+  ,("afii57399", '\x0667')
+  ,("afii57400", '\x0668')
+  ,("afii57401", '\x0669')
+  ,("afii57403", '\x061B')
+  ,("afii57407", '\x061F')
+  ,("afii57409", '\x0621')
+  ,("afii57410", '\x0622')
+  ,("afii57411", '\x0623')
+  ,("afii57412", '\x0624')
+  ,("afii57413", '\x0625')
+  ,("afii57414", '\x0626')
+  ,("afii57415", '\x0627')
+  ,("afii57416", '\x0628')
+  ,("afii57417", '\x0629')
+  ,("afii57418", '\x062A')
+  ,("afii57419", '\x062B')
+  ,("afii57420", '\x062C')
+  ,("afii57421", '\x062D')
+  ,("afii57422", '\x062E')
+  ,("afii57423", '\x062F')
+  ,("afii57424", '\x0630')
+  ,("afii57425", '\x0631')
+  ,("afii57426", '\x0632')
+  ,("afii57427", '\x0633')
+  ,("afii57428", '\x0634')
+  ,("afii57429", '\x0635')
+  ,("afii57430", '\x0636')
+  ,("afii57431", '\x0637')
+  ,("afii57432", '\x0638')
+  ,("afii57433", '\x0639')
+  ,("afii57434", '\x063A')
+  ,("afii57440", '\x0640')
+  ,("afii57441", '\x0641')
+  ,("afii57442", '\x0642')
+  ,("afii57443", '\x0643')
+  ,("afii57444", '\x0644')
+  ,("afii57445", '\x0645')
+  ,("afii57446", '\x0646')
+  ,("afii57448", '\x0648')
+  ,("afii57449", '\x0649')
+  ,("afii57450", '\x064A')
+  ,("afii57451", '\x064B')
+  ,("afii57452", '\x064C')
+  ,("afii57453", '\x064D')
+  ,("afii57454", '\x064E')
+  ,("afii57455", '\x064F')
+  ,("afii57456", '\x0650')
+  ,("afii57457", '\x0651')
+  ,("afii57458", '\x0652')
+  ,("afii57470", '\x0647')
+  ,("afii57505", '\x06A4')
+  ,("afii57506", '\x067E')
+  ,("afii57507", '\x0686')
+  ,("afii57508", '\x0698')
+  ,("afii57509", '\x06AF')
+  ,("afii57511", '\x0679')
+  ,("afii57512", '\x0688')
+  ,("afii57513", '\x0691')
+  ,("afii57514", '\x06BA')
+  ,("afii57519", '\x06D2')
+  ,("afii57534", '\x06D5')
+  ,("afii57636", '\x20AA')
+  ,("afii57645", '\x05BE')
+  ,("afii57658", '\x05C3')
+  ,("afii57664", '\x05D0')
+  ,("afii57665", '\x05D1')
+  ,("afii57666", '\x05D2')
+  ,("afii57667", '\x05D3')
+  ,("afii57668", '\x05D4')
+  ,("afii57669", '\x05D5')
+  ,("afii57670", '\x05D6')
+  ,("afii57671", '\x05D7')
+  ,("afii57672", '\x05D8')
+  ,("afii57673", '\x05D9')
+  ,("afii57674", '\x05DA')
+  ,("afii57675", '\x05DB')
+  ,("afii57676", '\x05DC')
+  ,("afii57677", '\x05DD')
+  ,("afii57678", '\x05DE')
+  ,("afii57679", '\x05DF')
+  ,("afii57680", '\x05E0')
+  ,("afii57681", '\x05E1')
+  ,("afii57682", '\x05E2')
+  ,("afii57683", '\x05E3')
+  ,("afii57684", '\x05E4')
+  ,("afii57685", '\x05E5')
+  ,("afii57686", '\x05E6')
+  ,("afii57687", '\x05E7')
+  ,("afii57688", '\x05E8')
+  ,("afii57689", '\x05E9')
+  ,("afii57690", '\x05EA')
+  ,("afii57694", '\xFB2A')
+  ,("afii57695", '\xFB2B')
+  ,("afii57700", '\xFB4B')
+  ,("afii57705", '\xFB1F')
+  ,("afii57716", '\x05F0')
+  ,("afii57717", '\x05F1')
+  ,("afii57718", '\x05F2')
+  ,("afii57723", '\xFB35')
+  ,("afii57793", '\x05B4')
+  ,("afii57794", '\x05B5')
+  ,("afii57795", '\x05B6')
+  ,("afii57796", '\x05BB')
+  ,("afii57797", '\x05B8')
+  ,("afii57798", '\x05B7')
+  ,("afii57799", '\x05B0')
+  ,("afii57800", '\x05B2')
+  ,("afii57801", '\x05B1')
+  ,("afii57802", '\x05B3')
+  ,("afii57803", '\x05C2')
+  ,("afii57804", '\x05C1')
+  ,("afii57806", '\x05B9')
+  ,("afii57807", '\x05BC')
+  ,("afii57839", '\x05BD')
+  ,("afii57841", '\x05BF')
+  ,("afii57842", '\x05C0')
+  ,("afii57929", '\x02BC')
+  ,("afii61248", '\x2105')
+  ,("afii61289", '\x2113')
+  ,("afii61352", '\x2116')
+  ,("afii61573", '\x202C')
+  ,("afii61574", '\x202D')
+  ,("afii61575", '\x202E')
+  ,("afii61664", '\x200C')
+  ,("afii63167", '\x066D')
+  ,("afii64937", '\x02BD')
+  ,("agrave", '\x00E0')
+  ,("agujarati", '\x0A85')
+  ,("agurmukhi", '\x0A05')
+  ,("ahiragana", '\x3042')
+  ,("ahookabove", '\x1EA3')
+  ,("aibengali", '\x0990')
+  ,("aibopomofo", '\x311E')
+  ,("aideva", '\x0910')
+  ,("aiecyrillic", '\x04D5')
+  ,("aigujarati", '\x0A90')
+  ,("aigurmukhi", '\x0A10')
+  ,("aimatragurmukhi", '\x0A48')
+  ,("ainarabic", '\x0639')
+  ,("ainfinalarabic", '\xFECA')
+  ,("aininitialarabic", '\xFECB')
+  ,("ainmedialarabic", '\xFECC')
+  ,("ainvertedbreve", '\x0203')
+  ,("aivowelsignbengali", '\x09C8')
+  ,("aivowelsigndeva", '\x0948')
+  ,("aivowelsigngujarati", '\x0AC8')
+  ,("akatakana", '\x30A2')
+  ,("akatakanahalfwidth", '\xFF71')
+  ,("akorean", '\x314F')
+  ,("alef", '\x05D0')
+  ,("alefarabic", '\x0627')
+  ,("alefdageshhebrew", '\xFB30')
+  ,("aleffinalarabic", '\xFE8E')
+  ,("alefhamzaabovearabic", '\x0623')
+  ,("alefhamzaabovefinalarabic", '\xFE84')
+  ,("alefhamzabelowarabic", '\x0625')
+  ,("alefhamzabelowfinalarabic", '\xFE88')
+  ,("alefhebrew", '\x05D0')
+  ,("aleflamedhebrew", '\xFB4F')
+  ,("alefmaddaabovearabic", '\x0622')
+  ,("alefmaddaabovefinalarabic", '\xFE82')
+  ,("alefmaksuraarabic", '\x0649')
+  ,("alefmaksurafinalarabic", '\xFEF0')
+  ,("alefmaksurainitialarabic", '\xFEF3')
+  ,("alefmaksuramedialarabic", '\xFEF4')
+  ,("alefpatahhebrew", '\xFB2E')
+  ,("alefqamatshebrew", '\xFB2F')
+  ,("aleph", '\x2135')
+  ,("allequal", '\x224C')
+  ,("alpha", '\x03B1')
+  ,("alphatonos", '\x03AC')
+  ,("amacron", '\x0101')
+  ,("amonospace", '\xFF41')
+  ,("ampersand", '\x0026')
+  ,("ampersandmonospace", '\xFF06')
+  ,("ampersandsmall", '\xF726')
+  ,("amsquare", '\x33C2')
+  ,("anbopomofo", '\x3122')
+  ,("angbopomofo", '\x3124')
+  ,("angkhankhuthai", '\x0E5A')
+  ,("angle", '\x2220')
+  ,("anglebracketleft", '\x3008')
+  ,("anglebracketleftvertical", '\xFE3F')
+  ,("anglebracketright", '\x3009')
+  ,("anglebracketrightvertical", '\xFE40')
+  ,("angleleft", '\x2329')
+  ,("angleright", '\x232A')
+  ,("angstrom", '\x212B')
+  ,("anoteleia", '\x0387')
+  ,("anudattadeva", '\x0952')
+  ,("anusvarabengali", '\x0982')
+  ,("anusvaradeva", '\x0902')
+  ,("anusvaragujarati", '\x0A82')
+  ,("aogonek", '\x0105')
+  ,("apaatosquare", '\x3300')
+  ,("aparen", '\x249C')
+  ,("apostrophearmenian", '\x055A')
+  ,("apostrophemod", '\x02BC')
+  ,("apple", '\xF8FF')
+  ,("approaches", '\x2250')
+  ,("approxequal", '\x2248')
+  ,("approxequalorimage", '\x2252')
+  ,("approximatelyequal", '\x2245')
+  ,("araeaekorean", '\x318E')
+  ,("araeakorean", '\x318D')
+  ,("arc", '\x2312')
+  ,("arighthalfring", '\x1E9A')
+  ,("aring", '\x00E5')
+  ,("aringacute", '\x01FB')
+  ,("aringbelow", '\x1E01')
+  ,("arrowboth", '\x2194')
+  ,("arrowdashdown", '\x21E3')
+  ,("arrowdashleft", '\x21E0')
+  ,("arrowdashright", '\x21E2')
+  ,("arrowdashup", '\x21E1')
+  ,("arrowdblboth", '\x21D4')
+  ,("arrowdbldown", '\x21D3')
+  ,("arrowdblleft", '\x21D0')
+  ,("arrowdblright", '\x21D2')
+  ,("arrowdblup", '\x21D1')
+  ,("arrowdown", '\x2193')
+  ,("arrowdownleft", '\x2199')
+  ,("arrowdownright", '\x2198')
+  ,("arrowdownwhite", '\x21E9')
+  ,("arrowheaddownmod", '\x02C5')
+  ,("arrowheadleftmod", '\x02C2')
+  ,("arrowheadrightmod", '\x02C3')
+  ,("arrowheadupmod", '\x02C4')
+  ,("arrowhorizex", '\xF8E7')
+  ,("arrowleft", '\x2190')
+  ,("arrowleftdbl", '\x21D0')
+  ,("arrowleftdblstroke", '\x21CD')
+  ,("arrowleftoverright", '\x21C6')
+  ,("arrowleftwhite", '\x21E6')
+  ,("arrowright", '\x2192')
+  ,("arrowrightdblstroke", '\x21CF')
+  ,("arrowrightheavy", '\x279E')
+  ,("arrowrightoverleft", '\x21C4')
+  ,("arrowrightwhite", '\x21E8')
+  ,("arrowtableft", '\x21E4')
+  ,("arrowtabright", '\x21E5')
+  ,("arrowup", '\x2191')
+  ,("arrowupdn", '\x2195')
+  ,("arrowupdnbse", '\x21A8')
+  ,("arrowupdownbase", '\x21A8')
+  ,("arrowupleft", '\x2196')
+  ,("arrowupleftofdown", '\x21C5')
+  ,("arrowupright", '\x2197')
+  ,("arrowupwhite", '\x21E7')
+  ,("arrowvertex", '\xF8E6')
+  ,("asciicircum", '\x005E')
+  ,("asciicircummonospace", '\xFF3E')
+  ,("asciitilde", '\x007E')
+  ,("asciitildemonospace", '\xFF5E')
+  ,("ascript", '\x0251')
+  ,("ascriptturned", '\x0252')
+  ,("asmallhiragana", '\x3041')
+  ,("asmallkatakana", '\x30A1')
+  ,("asmallkatakanahalfwidth", '\xFF67')
+  ,("asterisk", '\x002A')
+  ,("asteriskaltonearabic", '\x066D')
+  ,("asteriskarabic", '\x066D')
+  ,("asteriskmath", '\x2217')
+  ,("asteriskmonospace", '\xFF0A')
+  ,("asterisksmall", '\xFE61')
+  ,("asterism", '\x2042')
+  ,("asuperior", '\xF6E9')
+  ,("asymptoticallyequal", '\x2243')
+  ,("at", '\x0040')
+  ,("atilde", '\x00E3')
+  ,("atmonospace", '\xFF20')
+  ,("atsmall", '\xFE6B')
+  ,("aturned", '\x0250')
+  ,("aubengali", '\x0994')
+  ,("aubopomofo", '\x3120')
+  ,("audeva", '\x0914')
+  ,("augujarati", '\x0A94')
+  ,("augurmukhi", '\x0A14')
+  ,("aulengthmarkbengali", '\x09D7')
+  ,("aumatragurmukhi", '\x0A4C')
+  ,("auvowelsignbengali", '\x09CC')
+  ,("auvowelsigndeva", '\x094C')
+  ,("auvowelsigngujarati", '\x0ACC')
+  ,("avagrahadeva", '\x093D')
+  ,("aybarmenian", '\x0561')
+  ,("ayin", '\x05E2')
+  ,("ayinaltonehebrew", '\xFB20')
+  ,("ayinhebrew", '\x05E2')
+  ,("b", '\x0062')
+  ,("babengali", '\x09AC')
+  ,("backslash", '\x005C')
+  ,("backslashmonospace", '\xFF3C')
+  ,("badeva", '\x092C')
+  ,("bagujarati", '\x0AAC')
+  ,("bagurmukhi", '\x0A2C')
+  ,("bahiragana", '\x3070')
+  ,("bahtthai", '\x0E3F')
+  ,("bakatakana", '\x30D0')
+  ,("bar", '\x007C')
+  ,("barmonospace", '\xFF5C')
+  ,("bbopomofo", '\x3105')
+  ,("bcircle", '\x24D1')
+  ,("bdotaccent", '\x1E03')
+  ,("bdotbelow", '\x1E05')
+  ,("beamedsixteenthnotes", '\x266C')
+  ,("because", '\x2235')
+  ,("becyrillic", '\x0431')
+  ,("beharabic", '\x0628')
+  ,("behfinalarabic", '\xFE90')
+  ,("behinitialarabic", '\xFE91')
+  ,("behiragana", '\x3079')
+  ,("behmedialarabic", '\xFE92')
+  ,("behmeeminitialarabic", '\xFC9F')
+  ,("behmeemisolatedarabic", '\xFC08')
+  ,("behnoonfinalarabic", '\xFC6D')
+  ,("bekatakana", '\x30D9')
+  ,("benarmenian", '\x0562')
+  ,("bet", '\x05D1')
+  ,("beta", '\x03B2')
+  ,("betasymbolgreek", '\x03D0')
+  ,("betdagesh", '\xFB31')
+  ,("betdageshhebrew", '\xFB31')
+  ,("bethebrew", '\x05D1')
+  ,("betrafehebrew", '\xFB4C')
+  ,("bhabengali", '\x09AD')
+  ,("bhadeva", '\x092D')
+  ,("bhagujarati", '\x0AAD')
+  ,("bhagurmukhi", '\x0A2D')
+  ,("bhook", '\x0253')
+  ,("bihiragana", '\x3073')
+  ,("bikatakana", '\x30D3')
+  ,("bilabialclick", '\x0298')
+  ,("bindigurmukhi", '\x0A02')
+  ,("birusquare", '\x3331')
+  ,("blackcircle", '\x25CF')
+  ,("blackdiamond", '\x25C6')
+  ,("blackdownpointingtriangle", '\x25BC')
+  ,("blackleftpointingpointer", '\x25C4')
+  ,("blackleftpointingtriangle", '\x25C0')
+  ,("blacklenticularbracketleft", '\x3010')
+  ,("blacklenticularbracketleftvertical", '\xFE3B')
+  ,("blacklenticularbracketright", '\x3011')
+  ,("blacklenticularbracketrightvertical", '\xFE3C')
+  ,("blacklowerlefttriangle", '\x25E3')
+  ,("blacklowerrighttriangle", '\x25E2')
+  ,("blackrectangle", '\x25AC')
+  ,("blackrightpointingpointer", '\x25BA')
+  ,("blackrightpointingtriangle", '\x25B6')
+  ,("blacksmallsquare", '\x25AA')
+  ,("blacksmilingface", '\x263B')
+  ,("blacksquare", '\x25A0')
+  ,("blackstar", '\x2605')
+  ,("blackupperlefttriangle", '\x25E4')
+  ,("blackupperrighttriangle", '\x25E5')
+  ,("blackuppointingsmalltriangle", '\x25B4')
+  ,("blackuppointingtriangle", '\x25B2')
+  ,("blank", '\x2423')
+  ,("blinebelow", '\x1E07')
+  ,("block", '\x2588')
+  ,("bmonospace", '\xFF42')
+  ,("bobaimaithai", '\x0E1A')
+  ,("bohiragana", '\x307C')
+  ,("bokatakana", '\x30DC')
+  ,("bparen", '\x249D')
+  ,("bqsquare", '\x33C3')
+  ,("braceex", '\xF8F4')
+  ,("braceleft", '\x007B')
+  ,("braceleftbt", '\xF8F3')
+  ,("braceleftmid", '\xF8F2')
+  ,("braceleftmonospace", '\xFF5B')
+  ,("braceleftsmall", '\xFE5B')
+  ,("bracelefttp", '\xF8F1')
+  ,("braceleftvertical", '\xFE37')
+  ,("braceright", '\x007D')
+  ,("bracerightbt", '\xF8FE')
+  ,("bracerightmid", '\xF8FD')
+  ,("bracerightmonospace", '\xFF5D')
+  ,("bracerightsmall", '\xFE5C')
+  ,("bracerighttp", '\xF8FC')
+  ,("bracerightvertical", '\xFE38')
+  ,("bracketleft", '\x005B')
+  ,("bracketleftbt", '\xF8F0')
+  ,("bracketleftex", '\xF8EF')
+  ,("bracketleftmonospace", '\xFF3B')
+  ,("bracketlefttp", '\xF8EE')
+  ,("bracketright", '\x005D')
+  ,("bracketrightbt", '\xF8FB')
+  ,("bracketrightex", '\xF8FA')
+  ,("bracketrightmonospace", '\xFF3D')
+  ,("bracketrighttp", '\xF8F9')
+  ,("breve", '\x02D8')
+  ,("brevebelowcmb", '\x032E')
+  ,("brevecmb", '\x0306')
+  ,("breveinvertedbelowcmb", '\x032F')
+  ,("breveinvertedcmb", '\x0311')
+  ,("breveinverteddoublecmb", '\x0361')
+  ,("bridgebelowcmb", '\x032A')
+  ,("bridgeinvertedbelowcmb", '\x033A')
+  ,("brokenbar", '\x00A6')
+  ,("bstroke", '\x0180')
+  ,("bsuperior", '\xF6EA')
+  ,("btopbar", '\x0183')
+  ,("buhiragana", '\x3076')
+  ,("bukatakana", '\x30D6')
+  ,("bullet", '\x2022')
+  ,("bulletinverse", '\x25D8')
+  ,("bulletoperator", '\x2219')
+  ,("bullseye", '\x25CE')
+  ,("c", '\x0063')
+  ,("caarmenian", '\x056E')
+  ,("cabengali", '\x099A')
+  ,("cacute", '\x0107')
+  ,("cadeva", '\x091A')
+  ,("cagujarati", '\x0A9A')
+  ,("cagurmukhi", '\x0A1A')
+  ,("calsquare", '\x3388')
+  ,("candrabindubengali", '\x0981')
+  ,("candrabinducmb", '\x0310')
+  ,("candrabindudeva", '\x0901')
+  ,("candrabindugujarati", '\x0A81')
+  ,("capslock", '\x21EA')
+  ,("careof", '\x2105')
+  ,("caron", '\x02C7')
+  ,("caronbelowcmb", '\x032C')
+  ,("caroncmb", '\x030C')
+  ,("carriagereturn", '\x21B5')
+  ,("cbopomofo", '\x3118')
+  ,("ccaron", '\x010D')
+  ,("ccedilla", '\x00E7')
+  ,("ccedillaacute", '\x1E09')
+  ,("ccircle", '\x24D2')
+  ,("ccircumflex", '\x0109')
+  ,("ccurl", '\x0255')
+  ,("cdot", '\x010B')
+  ,("cdotaccent", '\x010B')
+  ,("cdsquare", '\x33C5')
+  ,("cedilla", '\x00B8')
+  ,("cedillacmb", '\x0327')
+  ,("cent", '\x00A2')
+  ,("centigrade", '\x2103')
+  ,("centinferior", '\xF6DF')
+  ,("centmonospace", '\xFFE0')
+  ,("centoldstyle", '\xF7A2')
+  ,("centsuperior", '\xF6E0')
+  ,("chaarmenian", '\x0579')
+  ,("chabengali", '\x099B')
+  ,("chadeva", '\x091B')
+  ,("chagujarati", '\x0A9B')
+  ,("chagurmukhi", '\x0A1B')
+  ,("chbopomofo", '\x3114')
+  ,("cheabkhasiancyrillic", '\x04BD')
+  ,("checkmark", '\x2713')
+  ,("checyrillic", '\x0447')
+  ,("chedescenderabkhasiancyrillic", '\x04BF')
+  ,("chedescendercyrillic", '\x04B7')
+  ,("chedieresiscyrillic", '\x04F5')
+  ,("cheharmenian", '\x0573')
+  ,("chekhakassiancyrillic", '\x04CC')
+  ,("cheverticalstrokecyrillic", '\x04B9')
+  ,("chi", '\x03C7')
+  ,("chieuchacirclekorean", '\x3277')
+  ,("chieuchaparenkorean", '\x3217')
+  ,("chieuchcirclekorean", '\x3269')
+  ,("chieuchkorean", '\x314A')
+  ,("chieuchparenkorean", '\x3209')
+  ,("chochangthai", '\x0E0A')
+  ,("chochanthai", '\x0E08')
+  ,("chochingthai", '\x0E09')
+  ,("chochoethai", '\x0E0C')
+  ,("chook", '\x0188')
+  ,("cieucacirclekorean", '\x3276')
+  ,("cieucaparenkorean", '\x3216')
+  ,("cieuccirclekorean", '\x3268')
+  ,("cieuckorean", '\x3148')
+  ,("cieucparenkorean", '\x3208')
+  ,("cieucuparenkorean", '\x321C')
+  ,("circle", '\x25CB')
+  ,("circlemultiply", '\x2297')
+  ,("circleot", '\x2299')
+  ,("circleplus", '\x2295')
+  ,("circlepostalmark", '\x3036')
+  ,("circlewithlefthalfblack", '\x25D0')
+  ,("circlewithrighthalfblack", '\x25D1')
+  ,("circumflex", '\x02C6')
+  ,("circumflexbelowcmb", '\x032D')
+  ,("circumflexcmb", '\x0302')
+  ,("clear", '\x2327')
+  ,("clickalveolar", '\x01C2')
+  ,("clickdental", '\x01C0')
+  ,("clicklateral", '\x01C1')
+  ,("clickretroflex", '\x01C3')
+  ,("club", '\x2663')
+  ,("clubsuitblack", '\x2663')
+  ,("clubsuitwhite", '\x2667')
+  ,("cmcubedsquare", '\x33A4')
+  ,("cmonospace", '\xFF43')
+  ,("cmsquaredsquare", '\x33A0')
+  ,("coarmenian", '\x0581')
+  ,("colon", '\x003A')
+  ,("colonmonetary", '\x20A1')
+  ,("colonmonospace", '\xFF1A')
+  ,("colonsign", '\x20A1')
+  ,("colonsmall", '\xFE55')
+  ,("colontriangularhalfmod", '\x02D1')
+  ,("colontriangularmod", '\x02D0')
+  ,("comma", '\x002C')
+  ,("commaabovecmb", '\x0313')
+  ,("commaaboverightcmb", '\x0315')
+  ,("commaaccent", '\xF6C3')
+  ,("commaarabic", '\x060C')
+  ,("commaarmenian", '\x055D')
+  ,("commainferior", '\xF6E1')
+  ,("commamonospace", '\xFF0C')
+  ,("commareversedabovecmb", '\x0314')
+  ,("commareversedmod", '\x02BD')
+  ,("commasmall", '\xFE50')
+  ,("commasuperior", '\xF6E2')
+  ,("commaturnedabovecmb", '\x0312')
+  ,("commaturnedmod", '\x02BB')
+  ,("compass", '\x263C')
+  ,("congruent", '\x2245')
+  ,("contourintegral", '\x222E')
+  ,("control", '\x2303')
+  ,("controlACK", '\x0006')
+  ,("controlBEL", '\x0007')
+  ,("controlBS", '\x0008')
+  ,("controlCAN", '\x0018')
+  ,("controlCR", '\x000D')
+  ,("controlDC1", '\x0011')
+  ,("controlDC2", '\x0012')
+  ,("controlDC3", '\x0013')
+  ,("controlDC4", '\x0014')
+  ,("controlDEL", '\x007F')
+  ,("controlDLE", '\x0010')
+  ,("controlEM", '\x0019')
+  ,("controlENQ", '\x0005')
+  ,("controlEOT", '\x0004')
+  ,("controlESC", '\x001B')
+  ,("controlETB", '\x0017')
+  ,("controlETX", '\x0003')
+  ,("controlFF", '\x000C')
+  ,("controlFS", '\x001C')
+  ,("controlGS", '\x001D')
+  ,("controlHT", '\x0009')
+  ,("controlLF", '\x000A')
+  ,("controlNAK", '\x0015')
+  ,("controlRS", '\x001E')
+  ,("controlSI", '\x000F')
+  ,("controlSO", '\x000E')
+  ,("controlSOT", '\x0002')
+  ,("controlSTX", '\x0001')
+  ,("controlSUB", '\x001A')
+  ,("controlSYN", '\x0016')
+  ,("controlUS", '\x001F')
+  ,("controlVT", '\x000B')
+  ,("copyright", '\x00A9')
+  ,("copyrightsans", '\xF8E9')
+  ,("copyrightserif", '\xF6D9')
+  ,("cornerbracketleft", '\x300C')
+  ,("cornerbracketlefthalfwidth", '\xFF62')
+  ,("cornerbracketleftvertical", '\xFE41')
+  ,("cornerbracketright", '\x300D')
+  ,("cornerbracketrighthalfwidth", '\xFF63')
+  ,("cornerbracketrightvertical", '\xFE42')
+  ,("corporationsquare", '\x337F')
+  ,("cosquare", '\x33C7')
+  ,("coverkgsquare", '\x33C6')
+  ,("cparen", '\x249E')
+  ,("cruzeiro", '\x20A2')
+  ,("cstretched", '\x0297')
+  ,("curlyand", '\x22CF')
+  ,("curlyor", '\x22CE')
+  ,("currency", '\x00A4')
+  ,("cyrBreve", '\xF6D1')
+  ,("cyrFlex", '\xF6D2')
+  ,("cyrbreve", '\xF6D4')
+  ,("cyrflex", '\xF6D5')
+  ,("d", '\x0064')
+  ,("daarmenian", '\x0564')
+  ,("dabengali", '\x09A6')
+  ,("dadarabic", '\x0636')
+  ,("dadeva", '\x0926')
+  ,("dadfinalarabic", '\xFEBE')
+  ,("dadinitialarabic", '\xFEBF')
+  ,("dadmedialarabic", '\xFEC0')
+  ,("dagesh", '\x05BC')
+  ,("dageshhebrew", '\x05BC')
+  ,("dagger", '\x2020')
+  ,("daggerdbl", '\x2021')
+  ,("dagujarati", '\x0AA6')
+  ,("dagurmukhi", '\x0A26')
+  ,("dahiragana", '\x3060')
+  ,("dakatakana", '\x30C0')
+  ,("dalarabic", '\x062F')
+  ,("dalet", '\x05D3')
+  ,("daletdagesh", '\xFB33')
+  ,("daletdageshhebrew", '\xFB33')
+  ,("dalethatafpatah", '\x05D3')
+  ,("dalethatafpatahhebrew", '\x05D3')
+  ,("dalethatafsegol", '\x05D3')
+  ,("dalethatafsegolhebrew", '\x05D3')
+  ,("dalethebrew", '\x05D3')
+  ,("dalethiriq", '\x05D3')
+  ,("dalethiriqhebrew", '\x05D3')
+  ,("daletholam", '\x05D3')
+  ,("daletholamhebrew", '\x05D3')
+  ,("daletpatah", '\x05D3')
+  ,("daletpatahhebrew", '\x05D3')
+  ,("daletqamats", '\x05D3')
+  ,("daletqamatshebrew", '\x05D3')
+  ,("daletqubuts", '\x05D3')
+  ,("daletqubutshebrew", '\x05D3')
+  ,("daletsegol", '\x05D3')
+  ,("daletsegolhebrew", '\x05D3')
+  ,("daletsheva", '\x05D3')
+  ,("daletshevahebrew", '\x05D3')
+  ,("dalettsere", '\x05D3')
+  ,("dalettserehebrew", '\x05D3')
+  ,("dalfinalarabic", '\xFEAA')
+  ,("dammaarabic", '\x064F')
+  ,("dammalowarabic", '\x064F')
+  ,("dammatanaltonearabic", '\x064C')
+  ,("dammatanarabic", '\x064C')
+  ,("danda", '\x0964')
+  ,("dargahebrew", '\x05A7')
+  ,("dargalefthebrew", '\x05A7')
+  ,("dasiapneumatacyrilliccmb", '\x0485')
+  ,("dblGrave", '\xF6D3')
+  ,("dblanglebracketleft", '\x300A')
+  ,("dblanglebracketleftvertical", '\xFE3D')
+  ,("dblanglebracketright", '\x300B')
+  ,("dblanglebracketrightvertical", '\xFE3E')
+  ,("dblarchinvertedbelowcmb", '\x032B')
+  ,("dblarrowleft", '\x21D4')
+  ,("dblarrowright", '\x21D2')
+  ,("dbldanda", '\x0965')
+  ,("dblgrave", '\xF6D6')
+  ,("dblgravecmb", '\x030F')
+  ,("dblintegral", '\x222C')
+  ,("dbllowline", '\x2017')
+  ,("dbllowlinecmb", '\x0333')
+  ,("dbloverlinecmb", '\x033F')
+  ,("dblprimemod", '\x02BA')
+  ,("dblverticalbar", '\x2016')
+  ,("dblverticallineabovecmb", '\x030E')
+  ,("dbopomofo", '\x3109')
+  ,("dbsquare", '\x33C8')
+  ,("dcaron", '\x010F')
+  ,("dcedilla", '\x1E11')
+  ,("dcircle", '\x24D3')
+  ,("dcircumflexbelow", '\x1E13')
+  ,("dcroat", '\x0111')
+  ,("ddabengali", '\x09A1')
+  ,("ddadeva", '\x0921')
+  ,("ddagujarati", '\x0AA1')
+  ,("ddagurmukhi", '\x0A21')
+  ,("ddalarabic", '\x0688')
+  ,("ddalfinalarabic", '\xFB89')
+  ,("dddhadeva", '\x095C')
+  ,("ddhabengali", '\x09A2')
+  ,("ddhadeva", '\x0922')
+  ,("ddhagujarati", '\x0AA2')
+  ,("ddhagurmukhi", '\x0A22')
+  ,("ddotaccent", '\x1E0B')
+  ,("ddotbelow", '\x1E0D')
+  ,("decimalseparatorarabic", '\x066B')
+  ,("decimalseparatorpersian", '\x066B')
+  ,("decyrillic", '\x0434')
+  ,("degree", '\x00B0')
+  ,("dehihebrew", '\x05AD')
+  ,("dehiragana", '\x3067')
+  ,("deicoptic", '\x03EF')
+  ,("dekatakana", '\x30C7')
+  ,("deleteleft", '\x232B')
+  ,("deleteright", '\x2326')
+  ,("delta", '\x03B4')
+  ,("deltaturned", '\x018D')
+  ,("denominatorminusonenumeratorbengali", '\x09F8')
+  ,("dezh", '\x02A4')
+  ,("dhabengali", '\x09A7')
+  ,("dhadeva", '\x0927')
+  ,("dhagujarati", '\x0AA7')
+  ,("dhagurmukhi", '\x0A27')
+  ,("dhook", '\x0257')
+  ,("dialytikatonos", '\x0385')
+  ,("dialytikatonoscmb", '\x0344')
+  ,("diamond", '\x2666')
+  ,("diamondsuitwhite", '\x2662')
+  ,("dieresis", '\x00A8')
+  ,("dieresisacute", '\xF6D7')
+  ,("dieresisbelowcmb", '\x0324')
+  ,("dieresiscmb", '\x0308')
+  ,("dieresisgrave", '\xF6D8')
+  ,("dieresistonos", '\x0385')
+  ,("dihiragana", '\x3062')
+  ,("dikatakana", '\x30C2')
+  ,("dittomark", '\x3003')
+  ,("divide", '\x00F7')
+  ,("divides", '\x2223')
+  ,("divisionslash", '\x2215')
+  ,("djecyrillic", '\x0452')
+  ,("dkshade", '\x2593')
+  ,("dlinebelow", '\x1E0F')
+  ,("dlsquare", '\x3397')
+  ,("dmacron", '\x0111')
+  ,("dmonospace", '\xFF44')
+  ,("dnblock", '\x2584')
+  ,("dochadathai", '\x0E0E')
+  ,("dodekthai", '\x0E14')
+  ,("dohiragana", '\x3069')
+  ,("dokatakana", '\x30C9')
+  ,("dollar", '\x0024')
+  ,("dollarinferior", '\xF6E3')
+  ,("dollarmonospace", '\xFF04')
+  ,("dollaroldstyle", '\xF724')
+  ,("dollarsmall", '\xFE69')
+  ,("dollarsuperior", '\xF6E4')
+  ,("dong", '\x20AB')
+  ,("dorusquare", '\x3326')
+  ,("dotaccent", '\x02D9')
+  ,("dotaccentcmb", '\x0307')
+  ,("dotbelowcmb", '\x0323')
+  ,("dotbelowcomb", '\x0323')
+  ,("dotkatakana", '\x30FB')
+  ,("dotlessi", '\x0131')
+  ,("dotlessj", '\xF6BE')
+  ,("dotlessjstrokehook", '\x0284')
+  ,("dotmath", '\x22C5')
+  ,("dottedcircle", '\x25CC')
+  ,("doubleyodpatah", '\xFB1F')
+  ,("doubleyodpatahhebrew", '\xFB1F')
+  ,("downtackbelowcmb", '\x031E')
+  ,("downtackmod", '\x02D5')
+  ,("dparen", '\x249F')
+  ,("dsuperior", '\xF6EB')
+  ,("dtail", '\x0256')
+  ,("dtopbar", '\x018C')
+  ,("duhiragana", '\x3065')
+  ,("dukatakana", '\x30C5')
+  ,("dz", '\x01F3')
+  ,("dzaltone", '\x02A3')
+  ,("dzcaron", '\x01C6')
+  ,("dzcurl", '\x02A5')
+  ,("dzeabkhasiancyrillic", '\x04E1')
+  ,("dzecyrillic", '\x0455')
+  ,("dzhecyrillic", '\x045F')
+  ,("e", '\x0065')
+  ,("eacute", '\x00E9')
+  ,("earth", '\x2641')
+  ,("ebengali", '\x098F')
+  ,("ebopomofo", '\x311C')
+  ,("ebreve", '\x0115')
+  ,("ecandradeva", '\x090D')
+  ,("ecandragujarati", '\x0A8D')
+  ,("ecandravowelsigndeva", '\x0945')
+  ,("ecandravowelsigngujarati", '\x0AC5')
+  ,("ecaron", '\x011B')
+  ,("ecedillabreve", '\x1E1D')
+  ,("echarmenian", '\x0565')
+  ,("echyiwnarmenian", '\x0587')
+  ,("ecircle", '\x24D4')
+  ,("ecircumflex", '\x00EA')
+  ,("ecircumflexacute", '\x1EBF')
+  ,("ecircumflexbelow", '\x1E19')
+  ,("ecircumflexdotbelow", '\x1EC7')
+  ,("ecircumflexgrave", '\x1EC1')
+  ,("ecircumflexhookabove", '\x1EC3')
+  ,("ecircumflextilde", '\x1EC5')
+  ,("ecyrillic", '\x0454')
+  ,("edblgrave", '\x0205')
+  ,("edeva", '\x090F')
+  ,("edieresis", '\x00EB')
+  ,("edot", '\x0117')
+  ,("edotaccent", '\x0117')
+  ,("edotbelow", '\x1EB9')
+  ,("eegurmukhi", '\x0A0F')
+  ,("eematragurmukhi", '\x0A47')
+  ,("efcyrillic", '\x0444')
+  ,("egrave", '\x00E8')
+  ,("egujarati", '\x0A8F')
+  ,("eharmenian", '\x0567')
+  ,("ehbopomofo", '\x311D')
+  ,("ehiragana", '\x3048')
+  ,("ehookabove", '\x1EBB')
+  ,("eibopomofo", '\x311F')
+  ,("eight", '\x0038')
+  ,("eightarabic", '\x0668')
+  ,("eightbengali", '\x09EE')
+  ,("eightcircle", '\x2467')
+  ,("eightcircleinversesansserif", '\x2791')
+  ,("eightdeva", '\x096E')
+  ,("eighteencircle", '\x2471')
+  ,("eighteenparen", '\x2485')
+  ,("eighteenperiod", '\x2499')
+  ,("eightgujarati", '\x0AEE')
+  ,("eightgurmukhi", '\x0A6E')
+  ,("eighthackarabic", '\x0668')
+  ,("eighthangzhou", '\x3028')
+  ,("eighthnotebeamed", '\x266B')
+  ,("eightideographicparen", '\x3227')
+  ,("eightinferior", '\x2088')
+  ,("eightmonospace", '\xFF18')
+  ,("eightoldstyle", '\xF738')
+  ,("eightparen", '\x247B')
+  ,("eightperiod", '\x248F')
+  ,("eightpersian", '\x06F8')
+  ,("eightroman", '\x2177')
+  ,("eightsuperior", '\x2078')
+  ,("eightthai", '\x0E58')
+  ,("einvertedbreve", '\x0207')
+  ,("eiotifiedcyrillic", '\x0465')
+  ,("ekatakana", '\x30A8')
+  ,("ekatakanahalfwidth", '\xFF74')
+  ,("ekonkargurmukhi", '\x0A74')
+  ,("ekorean", '\x3154')
+  ,("elcyrillic", '\x043B')
+  ,("element", '\x2208')
+  ,("elevencircle", '\x246A')
+  ,("elevenparen", '\x247E')
+  ,("elevenperiod", '\x2492')
+  ,("elevenroman", '\x217A')
+  ,("ellipsis", '\x2026')
+  ,("ellipsisvertical", '\x22EE')
+  ,("emacron", '\x0113')
+  ,("emacronacute", '\x1E17')
+  ,("emacrongrave", '\x1E15')
+  ,("emcyrillic", '\x043C')
+  ,("emdash", '\x2014')
+  ,("emdashvertical", '\xFE31')
+  ,("emonospace", '\xFF45')
+  ,("emphasismarkarmenian", '\x055B')
+  ,("emptyset", '\x2205')
+  ,("enbopomofo", '\x3123')
+  ,("encyrillic", '\x043D')
+  ,("endash", '\x2013')
+  ,("endashvertical", '\xFE32')
+  ,("endescendercyrillic", '\x04A3')
+  ,("eng", '\x014B')
+  ,("engbopomofo", '\x3125')
+  ,("enghecyrillic", '\x04A5')
+  ,("enhookcyrillic", '\x04C8')
+  ,("enspace", '\x2002')
+  ,("eogonek", '\x0119')
+  ,("eokorean", '\x3153')
+  ,("eopen", '\x025B')
+  ,("eopenclosed", '\x029A')
+  ,("eopenreversed", '\x025C')
+  ,("eopenreversedclosed", '\x025E')
+  ,("eopenreversedhook", '\x025D')
+  ,("eparen", '\x24A0')
+  ,("epsilon", '\x03B5')
+  ,("epsilontonos", '\x03AD')
+  ,("equal", '\x003D')
+  ,("equalmonospace", '\xFF1D')
+  ,("equalsmall", '\xFE66')
+  ,("equalsuperior", '\x207C')
+  ,("equivalence", '\x2261')
+  ,("erbopomofo", '\x3126')
+  ,("ercyrillic", '\x0440')
+  ,("ereversed", '\x0258')
+  ,("ereversedcyrillic", '\x044D')
+  ,("escyrillic", '\x0441')
+  ,("esdescendercyrillic", '\x04AB')
+  ,("esh", '\x0283')
+  ,("eshcurl", '\x0286')
+  ,("eshortdeva", '\x090E')
+  ,("eshortvowelsigndeva", '\x0946')
+  ,("eshreversedloop", '\x01AA')
+  ,("eshsquatreversed", '\x0285')
+  ,("esmallhiragana", '\x3047')
+  ,("esmallkatakana", '\x30A7')
+  ,("esmallkatakanahalfwidth", '\xFF6A')
+  ,("estimated", '\x212E')
+  ,("esuperior", '\xF6EC')
+  ,("eta", '\x03B7')
+  ,("etarmenian", '\x0568')
+  ,("etatonos", '\x03AE')
+  ,("eth", '\x00F0')
+  ,("etilde", '\x1EBD')
+  ,("etildebelow", '\x1E1B')
+  ,("etnahtafoukhhebrew", '\x0591')
+  ,("etnahtafoukhlefthebrew", '\x0591')
+  ,("etnahtahebrew", '\x0591')
+  ,("etnahtalefthebrew", '\x0591')
+  ,("eturned", '\x01DD')
+  ,("eukorean", '\x3161')
+  ,("euro", '\x20AC')
+  ,("evowelsignbengali", '\x09C7')
+  ,("evowelsigndeva", '\x0947')
+  ,("evowelsigngujarati", '\x0AC7')
+  ,("exclam", '\x0021')
+  ,("exclamarmenian", '\x055C')
+  ,("exclamdbl", '\x203C')
+  ,("exclamdown", '\x00A1')
+  ,("exclamdownsmall", '\xF7A1')
+  ,("exclammonospace", '\xFF01')
+  ,("exclamsmall", '\xF721')
+  ,("existential", '\x2203')
+  ,("ezh", '\x0292')
+  ,("ezhcaron", '\x01EF')
+  ,("ezhcurl", '\x0293')
+  ,("ezhreversed", '\x01B9')
+  ,("ezhtail", '\x01BA')
+  ,("f", '\x0066')
+  ,("fadeva", '\x095E')
+  ,("fagurmukhi", '\x0A5E')
+  ,("fahrenheit", '\x2109')
+  ,("fathaarabic", '\x064E')
+  ,("fathalowarabic", '\x064E')
+  ,("fathatanarabic", '\x064B')
+  ,("fbopomofo", '\x3108')
+  ,("fcircle", '\x24D5')
+  ,("fdotaccent", '\x1E1F')
+  ,("feharabic", '\x0641')
+  ,("feharmenian", '\x0586')
+  ,("fehfinalarabic", '\xFED2')
+  ,("fehinitialarabic", '\xFED3')
+  ,("fehmedialarabic", '\xFED4')
+  ,("feicoptic", '\x03E5')
+  ,("female", '\x2640')
+  ,("ff", '\xFB00')
+  ,("ffi", '\xFB03')
+  ,("ffl", '\xFB04')
+  ,("fi", '\xFB01')
+  ,("fifteencircle", '\x246E')
+  ,("fifteenparen", '\x2482')
+  ,("fifteenperiod", '\x2496')
+  ,("figuredash", '\x2012')
+  ,("filledbox", '\x25A0')
+  ,("filledrect", '\x25AC')
+  ,("finalkaf", '\x05DA')
+  ,("finalkafdagesh", '\xFB3A')
+  ,("finalkafdageshhebrew", '\xFB3A')
+  ,("finalkafhebrew", '\x05DA')
+  ,("finalkafqamats", '\x05DA')
+  ,("finalkafqamatshebrew", '\x05DA')
+  ,("finalkafsheva", '\x05DA')
+  ,("finalkafshevahebrew", '\x05DA')
+  ,("finalmem", '\x05DD')
+  ,("finalmemhebrew", '\x05DD')
+  ,("finalnun", '\x05DF')
+  ,("finalnunhebrew", '\x05DF')
+  ,("finalpe", '\x05E3')
+  ,("finalpehebrew", '\x05E3')
+  ,("finaltsadi", '\x05E5')
+  ,("finaltsadihebrew", '\x05E5')
+  ,("firsttonechinese", '\x02C9')
+  ,("fisheye", '\x25C9')
+  ,("fitacyrillic", '\x0473')
+  ,("five", '\x0035')
+  ,("fivearabic", '\x0665')
+  ,("fivebengali", '\x09EB')
+  ,("fivecircle", '\x2464')
+  ,("fivecircleinversesansserif", '\x278E')
+  ,("fivedeva", '\x096B')
+  ,("fiveeighths", '\x215D')
+  ,("fivegujarati", '\x0AEB')
+  ,("fivegurmukhi", '\x0A6B')
+  ,("fivehackarabic", '\x0665')
+  ,("fivehangzhou", '\x3025')
+  ,("fiveideographicparen", '\x3224')
+  ,("fiveinferior", '\x2085')
+  ,("fivemonospace", '\xFF15')
+  ,("fiveoldstyle", '\xF735')
+  ,("fiveparen", '\x2478')
+  ,("fiveperiod", '\x248C')
+  ,("fivepersian", '\x06F5')
+  ,("fiveroman", '\x2174')
+  ,("fivesuperior", '\x2075')
+  ,("fivethai", '\x0E55')
+  ,("fl", '\xFB02')
+  ,("florin", '\x0192')
+  ,("fmonospace", '\xFF46')
+  ,("fmsquare", '\x3399')
+  ,("fofanthai", '\x0E1F')
+  ,("fofathai", '\x0E1D')
+  ,("fongmanthai", '\x0E4F')
+  ,("forall", '\x2200')
+  ,("four", '\x0034')
+  ,("fourarabic", '\x0664')
+  ,("fourbengali", '\x09EA')
+  ,("fourcircle", '\x2463')
+  ,("fourcircleinversesansserif", '\x278D')
+  ,("fourdeva", '\x096A')
+  ,("fourgujarati", '\x0AEA')
+  ,("fourgurmukhi", '\x0A6A')
+  ,("fourhackarabic", '\x0664')
+  ,("fourhangzhou", '\x3024')
+  ,("fourideographicparen", '\x3223')
+  ,("fourinferior", '\x2084')
+  ,("fourmonospace", '\xFF14')
+  ,("fournumeratorbengali", '\x09F7')
+  ,("fouroldstyle", '\xF734')
+  ,("fourparen", '\x2477')
+  ,("fourperiod", '\x248B')
+  ,("fourpersian", '\x06F4')
+  ,("fourroman", '\x2173')
+  ,("foursuperior", '\x2074')
+  ,("fourteencircle", '\x246D')
+  ,("fourteenparen", '\x2481')
+  ,("fourteenperiod", '\x2495')
+  ,("fourthai", '\x0E54')
+  ,("fourthtonechinese", '\x02CB')
+  ,("fparen", '\x24A1')
+  ,("fraction", '\x2044')
+  ,("franc", '\x20A3')
+  ,("g", '\x0067')
+  ,("gabengali", '\x0997')
+  ,("gacute", '\x01F5')
+  ,("gadeva", '\x0917')
+  ,("gafarabic", '\x06AF')
+  ,("gaffinalarabic", '\xFB93')
+  ,("gafinitialarabic", '\xFB94')
+  ,("gafmedialarabic", '\xFB95')
+  ,("gagujarati", '\x0A97')
+  ,("gagurmukhi", '\x0A17')
+  ,("gahiragana", '\x304C')
+  ,("gakatakana", '\x30AC')
+  ,("gamma", '\x03B3')
+  ,("gammalatinsmall", '\x0263')
+  ,("gammasuperior", '\x02E0')
+  ,("gangiacoptic", '\x03EB')
+  ,("gbopomofo", '\x310D')
+  ,("gbreve", '\x011F')
+  ,("gcaron", '\x01E7')
+  ,("gcedilla", '\x0123')
+  ,("gcircle", '\x24D6')
+  ,("gcircumflex", '\x011D')
+  ,("gcommaaccent", '\x0123')
+  ,("gdot", '\x0121')
+  ,("gdotaccent", '\x0121')
+  ,("gecyrillic", '\x0433')
+  ,("gehiragana", '\x3052')
+  ,("gekatakana", '\x30B2')
+  ,("geometricallyequal", '\x2251')
+  ,("gereshaccenthebrew", '\x059C')
+  ,("gereshhebrew", '\x05F3')
+  ,("gereshmuqdamhebrew", '\x059D')
+  ,("germandbls", '\x00DF')
+  ,("gershayimaccenthebrew", '\x059E')
+  ,("gershayimhebrew", '\x05F4')
+  ,("getamark", '\x3013')
+  ,("ghabengali", '\x0998')
+  ,("ghadarmenian", '\x0572')
+  ,("ghadeva", '\x0918')
+  ,("ghagujarati", '\x0A98')
+  ,("ghagurmukhi", '\x0A18')
+  ,("ghainarabic", '\x063A')
+  ,("ghainfinalarabic", '\xFECE')
+  ,("ghaininitialarabic", '\xFECF')
+  ,("ghainmedialarabic", '\xFED0')
+  ,("ghemiddlehookcyrillic", '\x0495')
+  ,("ghestrokecyrillic", '\x0493')
+  ,("gheupturncyrillic", '\x0491')
+  ,("ghhadeva", '\x095A')
+  ,("ghhagurmukhi", '\x0A5A')
+  ,("ghook", '\x0260')
+  ,("ghzsquare", '\x3393')
+  ,("gihiragana", '\x304E')
+  ,("gikatakana", '\x30AE')
+  ,("gimarmenian", '\x0563')
+  ,("gimel", '\x05D2')
+  ,("gimeldagesh", '\xFB32')
+  ,("gimeldageshhebrew", '\xFB32')
+  ,("gimelhebrew", '\x05D2')
+  ,("gjecyrillic", '\x0453')
+  ,("glottalinvertedstroke", '\x01BE')
+  ,("glottalstop", '\x0294')
+  ,("glottalstopinverted", '\x0296')
+  ,("glottalstopmod", '\x02C0')
+  ,("glottalstopreversed", '\x0295')
+  ,("glottalstopreversedmod", '\x02C1')
+  ,("glottalstopreversedsuperior", '\x02E4')
+  ,("glottalstopstroke", '\x02A1')
+  ,("glottalstopstrokereversed", '\x02A2')
+  ,("gmacron", '\x1E21')
+  ,("gmonospace", '\xFF47')
+  ,("gohiragana", '\x3054')
+  ,("gokatakana", '\x30B4')
+  ,("gparen", '\x24A2')
+  ,("gpasquare", '\x33AC')
+  ,("gradient", '\x2207')
+  ,("grave", '\x0060')
+  ,("gravebelowcmb", '\x0316')
+  ,("gravecmb", '\x0300')
+  ,("gravecomb", '\x0300')
+  ,("gravedeva", '\x0953')
+  ,("gravelowmod", '\x02CE')
+  ,("gravemonospace", '\xFF40')
+  ,("gravetonecmb", '\x0340')
+  ,("greater", '\x003E')
+  ,("greaterequal", '\x2265')
+  ,("greaterequalorless", '\x22DB')
+  ,("greatermonospace", '\xFF1E')
+  ,("greaterorequivalent", '\x2273')
+  ,("greaterorless", '\x2277')
+  ,("greateroverequal", '\x2267')
+  ,("greatersmall", '\xFE65')
+  ,("gscript", '\x0261')
+  ,("gstroke", '\x01E5')
+  ,("guhiragana", '\x3050')
+  ,("guillemotleft", '\x00AB')
+  ,("guillemotright", '\x00BB')
+  ,("guilsinglleft", '\x2039')
+  ,("guilsinglright", '\x203A')
+  ,("gukatakana", '\x30B0')
+  ,("guramusquare", '\x3318')
+  ,("gysquare", '\x33C9')
+  ,("h", '\x0068')
+  ,("haabkhasiancyrillic", '\x04A9')
+  ,("haaltonearabic", '\x06C1')
+  ,("habengali", '\x09B9')
+  ,("hadescendercyrillic", '\x04B3')
+  ,("hadeva", '\x0939')
+  ,("hagujarati", '\x0AB9')
+  ,("hagurmukhi", '\x0A39')
+  ,("haharabic", '\x062D')
+  ,("hahfinalarabic", '\xFEA2')
+  ,("hahinitialarabic", '\xFEA3')
+  ,("hahiragana", '\x306F')
+  ,("hahmedialarabic", '\xFEA4')
+  ,("haitusquare", '\x332A')
+  ,("hakatakana", '\x30CF')
+  ,("hakatakanahalfwidth", '\xFF8A')
+  ,("halantgurmukhi", '\x0A4D')
+  ,("hamzaarabic", '\x0621')
+  ,("hamzadammaarabic", '\x0621')
+  ,("hamzadammatanarabic", '\x0621')
+  ,("hamzafathaarabic", '\x0621')
+  ,("hamzafathatanarabic", '\x0621')
+  ,("hamzalowarabic", '\x0621')
+  ,("hamzalowkasraarabic", '\x0621')
+  ,("hamzalowkasratanarabic", '\x0621')
+  ,("hamzasukunarabic", '\x0621')
+  ,("hangulfiller", '\x3164')
+  ,("hardsigncyrillic", '\x044A')
+  ,("harpoonleftbarbup", '\x21BC')
+  ,("harpoonrightbarbup", '\x21C0')
+  ,("hasquare", '\x33CA')
+  ,("hatafpatah", '\x05B2')
+  ,("hatafpatah16", '\x05B2')
+  ,("hatafpatah23", '\x05B2')
+  ,("hatafpatah2f", '\x05B2')
+  ,("hatafpatahhebrew", '\x05B2')
+  ,("hatafpatahnarrowhebrew", '\x05B2')
+  ,("hatafpatahquarterhebrew", '\x05B2')
+  ,("hatafpatahwidehebrew", '\x05B2')
+  ,("hatafqamats", '\x05B3')
+  ,("hatafqamats1b", '\x05B3')
+  ,("hatafqamats28", '\x05B3')
+  ,("hatafqamats34", '\x05B3')
+  ,("hatafqamatshebrew", '\x05B3')
+  ,("hatafqamatsnarrowhebrew", '\x05B3')
+  ,("hatafqamatsquarterhebrew", '\x05B3')
+  ,("hatafqamatswidehebrew", '\x05B3')
+  ,("hatafsegol", '\x05B1')
+  ,("hatafsegol17", '\x05B1')
+  ,("hatafsegol24", '\x05B1')
+  ,("hatafsegol30", '\x05B1')
+  ,("hatafsegolhebrew", '\x05B1')
+  ,("hatafsegolnarrowhebrew", '\x05B1')
+  ,("hatafsegolquarterhebrew", '\x05B1')
+  ,("hatafsegolwidehebrew", '\x05B1')
+  ,("hbar", '\x0127')
+  ,("hbopomofo", '\x310F')
+  ,("hbrevebelow", '\x1E2B')
+  ,("hcedilla", '\x1E29')
+  ,("hcircle", '\x24D7')
+  ,("hcircumflex", '\x0125')
+  ,("hdieresis", '\x1E27')
+  ,("hdotaccent", '\x1E23')
+  ,("hdotbelow", '\x1E25')
+  ,("he", '\x05D4')
+  ,("heart", '\x2665')
+  ,("heartsuitblack", '\x2665')
+  ,("heartsuitwhite", '\x2661')
+  ,("hedagesh", '\xFB34')
+  ,("hedageshhebrew", '\xFB34')
+  ,("hehaltonearabic", '\x06C1')
+  ,("heharabic", '\x0647')
+  ,("hehebrew", '\x05D4')
+  ,("hehfinalaltonearabic", '\xFBA7')
+  ,("hehfinalalttwoarabic", '\xFEEA')
+  ,("hehfinalarabic", '\xFEEA')
+  ,("hehhamzaabovefinalarabic", '\xFBA5')
+  ,("hehhamzaaboveisolatedarabic", '\xFBA4')
+  ,("hehinitialaltonearabic", '\xFBA8')
+  ,("hehinitialarabic", '\xFEEB')
+  ,("hehiragana", '\x3078')
+  ,("hehmedialaltonearabic", '\xFBA9')
+  ,("hehmedialarabic", '\xFEEC')
+  ,("heiseierasquare", '\x337B')
+  ,("hekatakana", '\x30D8')
+  ,("hekatakanahalfwidth", '\xFF8D')
+  ,("hekutaarusquare", '\x3336')
+  ,("henghook", '\x0267')
+  ,("herutusquare", '\x3339')
+  ,("het", '\x05D7')
+  ,("hethebrew", '\x05D7')
+  ,("hhook", '\x0266')
+  ,("hhooksuperior", '\x02B1')
+  ,("hieuhacirclekorean", '\x327B')
+  ,("hieuhaparenkorean", '\x321B')
+  ,("hieuhcirclekorean", '\x326D')
+  ,("hieuhkorean", '\x314E')
+  ,("hieuhparenkorean", '\x320D')
+  ,("hihiragana", '\x3072')
+  ,("hikatakana", '\x30D2')
+  ,("hikatakanahalfwidth", '\xFF8B')
+  ,("hiriq", '\x05B4')
+  ,("hiriq14", '\x05B4')
+  ,("hiriq21", '\x05B4')
+  ,("hiriq2d", '\x05B4')
+  ,("hiriqhebrew", '\x05B4')
+  ,("hiriqnarrowhebrew", '\x05B4')
+  ,("hiriqquarterhebrew", '\x05B4')
+  ,("hiriqwidehebrew", '\x05B4')
+  ,("hlinebelow", '\x1E96')
+  ,("hmonospace", '\xFF48')
+  ,("hoarmenian", '\x0570')
+  ,("hohipthai", '\x0E2B')
+  ,("hohiragana", '\x307B')
+  ,("hokatakana", '\x30DB')
+  ,("hokatakanahalfwidth", '\xFF8E')
+  ,("holam", '\x05B9')
+  ,("holam19", '\x05B9')
+  ,("holam26", '\x05B9')
+  ,("holam32", '\x05B9')
+  ,("holamhebrew", '\x05B9')
+  ,("holamnarrowhebrew", '\x05B9')
+  ,("holamquarterhebrew", '\x05B9')
+  ,("holamwidehebrew", '\x05B9')
+  ,("honokhukthai", '\x0E2E')
+  ,("hookabovecomb", '\x0309')
+  ,("hookcmb", '\x0309')
+  ,("hookpalatalizedbelowcmb", '\x0321')
+  ,("hookretroflexbelowcmb", '\x0322')
+  ,("hoonsquare", '\x3342')
+  ,("horicoptic", '\x03E9')
+  ,("horizontalbar", '\x2015')
+  ,("horncmb", '\x031B')
+  ,("hotsprings", '\x2668')
+  ,("house", '\x2302')
+  ,("hparen", '\x24A3')
+  ,("hsuperior", '\x02B0')
+  ,("hturned", '\x0265')
+  ,("huhiragana", '\x3075')
+  ,("huiitosquare", '\x3333')
+  ,("hukatakana", '\x30D5')
+  ,("hukatakanahalfwidth", '\xFF8C')
+  ,("hungarumlaut", '\x02DD')
+  ,("hungarumlautcmb", '\x030B')
+  ,("hv", '\x0195')
+  ,("hyphen", '\x002D')
+  ,("hypheninferior", '\xF6E5')
+  ,("hyphenmonospace", '\xFF0D')
+  ,("hyphensmall", '\xFE63')
+  ,("hyphensuperior", '\xF6E6')
+  ,("hyphentwo", '\x2010')
+  ,("i", '\x0069')
+  ,("iacute", '\x00ED')
+  ,("iacyrillic", '\x044F')
+  ,("ibengali", '\x0987')
+  ,("ibopomofo", '\x3127')
+  ,("ibreve", '\x012D')
+  ,("icaron", '\x01D0')
+  ,("icircle", '\x24D8')
+  ,("icircumflex", '\x00EE')
+  ,("icyrillic", '\x0456')
+  ,("idblgrave", '\x0209')
+  ,("ideographearthcircle", '\x328F')
+  ,("ideographfirecircle", '\x328B')
+  ,("ideographicallianceparen", '\x323F')
+  ,("ideographiccallparen", '\x323A')
+  ,("ideographiccentrecircle", '\x32A5')
+  ,("ideographicclose", '\x3006')
+  ,("ideographiccomma", '\x3001')
+  ,("ideographiccommaleft", '\xFF64')
+  ,("ideographiccongratulationparen", '\x3237')
+  ,("ideographiccorrectcircle", '\x32A3')
+  ,("ideographicearthparen", '\x322F')
+  ,("ideographicenterpriseparen", '\x323D')
+  ,("ideographicexcellentcircle", '\x329D')
+  ,("ideographicfestivalparen", '\x3240')
+  ,("ideographicfinancialcircle", '\x3296')
+  ,("ideographicfinancialparen", '\x3236')
+  ,("ideographicfireparen", '\x322B')
+  ,("ideographichaveparen", '\x3232')
+  ,("ideographichighcircle", '\x32A4')
+  ,("ideographiciterationmark", '\x3005')
+  ,("ideographiclaborcircle", '\x3298')
+  ,("ideographiclaborparen", '\x3238')
+  ,("ideographicleftcircle", '\x32A7')
+  ,("ideographiclowcircle", '\x32A6')
+  ,("ideographicmedicinecircle", '\x32A9')
+  ,("ideographicmetalparen", '\x322E')
+  ,("ideographicmoonparen", '\x322A')
+  ,("ideographicnameparen", '\x3234')
+  ,("ideographicperiod", '\x3002')
+  ,("ideographicprintcircle", '\x329E')
+  ,("ideographicreachparen", '\x3243')
+  ,("ideographicrepresentparen", '\x3239')
+  ,("ideographicresourceparen", '\x323E')
+  ,("ideographicrightcircle", '\x32A8')
+  ,("ideographicsecretcircle", '\x3299')
+  ,("ideographicselfparen", '\x3242')
+  ,("ideographicsocietyparen", '\x3233')
+  ,("ideographicspace", '\x3000')
+  ,("ideographicspecialparen", '\x3235')
+  ,("ideographicstockparen", '\x3231')
+  ,("ideographicstudyparen", '\x323B')
+  ,("ideographicsunparen", '\x3230')
+  ,("ideographicsuperviseparen", '\x323C')
+  ,("ideographicwaterparen", '\x322C')
+  ,("ideographicwoodparen", '\x322D')
+  ,("ideographiczero", '\x3007')
+  ,("ideographmetalcircle", '\x328E')
+  ,("ideographmooncircle", '\x328A')
+  ,("ideographnamecircle", '\x3294')
+  ,("ideographsuncircle", '\x3290')
+  ,("ideographwatercircle", '\x328C')
+  ,("ideographwoodcircle", '\x328D')
+  ,("ideva", '\x0907')
+  ,("idieresis", '\x00EF')
+  ,("idieresisacute", '\x1E2F')
+  ,("idieresiscyrillic", '\x04E5')
+  ,("idotbelow", '\x1ECB')
+  ,("iebrevecyrillic", '\x04D7')
+  ,("iecyrillic", '\x0435')
+  ,("ieungacirclekorean", '\x3275')
+  ,("ieungaparenkorean", '\x3215')
+  ,("ieungcirclekorean", '\x3267')
+  ,("ieungkorean", '\x3147')
+  ,("ieungparenkorean", '\x3207')
+  ,("igrave", '\x00EC')
+  ,("igujarati", '\x0A87')
+  ,("igurmukhi", '\x0A07')
+  ,("ihiragana", '\x3044')
+  ,("ihookabove", '\x1EC9')
+  ,("iibengali", '\x0988')
+  ,("iicyrillic", '\x0438')
+  ,("iideva", '\x0908')
+  ,("iigujarati", '\x0A88')
+  ,("iigurmukhi", '\x0A08')
+  ,("iimatragurmukhi", '\x0A40')
+  ,("iinvertedbreve", '\x020B')
+  ,("iishortcyrillic", '\x0439')
+  ,("iivowelsignbengali", '\x09C0')
+  ,("iivowelsigndeva", '\x0940')
+  ,("iivowelsigngujarati", '\x0AC0')
+  ,("ij", '\x0133')
+  ,("ikatakana", '\x30A4')
+  ,("ikatakanahalfwidth", '\xFF72')
+  ,("ikorean", '\x3163')
+  ,("ilde", '\x02DC')
+  ,("iluyhebrew", '\x05AC')
+  ,("imacron", '\x012B')
+  ,("imacroncyrillic", '\x04E3')
+  ,("imageorapproximatelyequal", '\x2253')
+  ,("imatragurmukhi", '\x0A3F')
+  ,("imonospace", '\xFF49')
+  ,("increment", '\x2206')
+  ,("infinity", '\x221E')
+  ,("iniarmenian", '\x056B')
+  ,("integral", '\x222B')
+  ,("integralbottom", '\x2321')
+  ,("integralbt", '\x2321')
+  ,("integralex", '\xF8F5')
+  ,("integraltop", '\x2320')
+  ,("integraltp", '\x2320')
+  ,("intersection", '\x2229')
+  ,("intisquare", '\x3305')
+  ,("invbullet", '\x25D8')
+  ,("invcircle", '\x25D9')
+  ,("invsmileface", '\x263B')
+  ,("iocyrillic", '\x0451')
+  ,("iogonek", '\x012F')
+  ,("iota", '\x03B9')
+  ,("iotadieresis", '\x03CA')
+  ,("iotadieresistonos", '\x0390')
+  ,("iotalatin", '\x0269')
+  ,("iotatonos", '\x03AF')
+  ,("iparen", '\x24A4')
+  ,("irigurmukhi", '\x0A72')
+  ,("ismallhiragana", '\x3043')
+  ,("ismallkatakana", '\x30A3')
+  ,("ismallkatakanahalfwidth", '\xFF68')
+  ,("issharbengali", '\x09FA')
+  ,("istroke", '\x0268')
+  ,("isuperior", '\xF6ED')
+  ,("iterationhiragana", '\x309D')
+  ,("iterationkatakana", '\x30FD')
+  ,("itilde", '\x0129')
+  ,("itildebelow", '\x1E2D')
+  ,("iubopomofo", '\x3129')
+  ,("iucyrillic", '\x044E')
+  ,("ivowelsignbengali", '\x09BF')
+  ,("ivowelsigndeva", '\x093F')
+  ,("ivowelsigngujarati", '\x0ABF')
+  ,("izhitsacyrillic", '\x0475')
+  ,("izhitsadblgravecyrillic", '\x0477')
+  ,("j", '\x006A')
+  ,("jaarmenian", '\x0571')
+  ,("jabengali", '\x099C')
+  ,("jadeva", '\x091C')
+  ,("jagujarati", '\x0A9C')
+  ,("jagurmukhi", '\x0A1C')
+  ,("jbopomofo", '\x3110')
+  ,("jcaron", '\x01F0')
+  ,("jcircle", '\x24D9')
+  ,("jcircumflex", '\x0135')
+  ,("jcrossedtail", '\x029D')
+  ,("jdotlessstroke", '\x025F')
+  ,("jecyrillic", '\x0458')
+  ,("jeemarabic", '\x062C')
+  ,("jeemfinalarabic", '\xFE9E')
+  ,("jeeminitialarabic", '\xFE9F')
+  ,("jeemmedialarabic", '\xFEA0')
+  ,("jeharabic", '\x0698')
+  ,("jehfinalarabic", '\xFB8B')
+  ,("jhabengali", '\x099D')
+  ,("jhadeva", '\x091D')
+  ,("jhagujarati", '\x0A9D')
+  ,("jhagurmukhi", '\x0A1D')
+  ,("jheharmenian", '\x057B')
+  ,("jis", '\x3004')
+  ,("jmonospace", '\xFF4A')
+  ,("jparen", '\x24A5')
+  ,("jsuperior", '\x02B2')
+  ,("k", '\x006B')
+  ,("kabashkircyrillic", '\x04A1')
+  ,("kabengali", '\x0995')
+  ,("kacute", '\x1E31')
+  ,("kacyrillic", '\x043A')
+  ,("kadescendercyrillic", '\x049B')
+  ,("kadeva", '\x0915')
+  ,("kaf", '\x05DB')
+  ,("kafarabic", '\x0643')
+  ,("kafdagesh", '\xFB3B')
+  ,("kafdageshhebrew", '\xFB3B')
+  ,("kaffinalarabic", '\xFEDA')
+  ,("kafhebrew", '\x05DB')
+  ,("kafinitialarabic", '\xFEDB')
+  ,("kafmedialarabic", '\xFEDC')
+  ,("kafrafehebrew", '\xFB4D')
+  ,("kagujarati", '\x0A95')
+  ,("kagurmukhi", '\x0A15')
+  ,("kahiragana", '\x304B')
+  ,("kahookcyrillic", '\x04C4')
+  ,("kakatakana", '\x30AB')
+  ,("kakatakanahalfwidth", '\xFF76')
+  ,("kappa", '\x03BA')
+  ,("kappasymbolgreek", '\x03F0')
+  ,("kapyeounmieumkorean", '\x3171')
+  ,("kapyeounphieuphkorean", '\x3184')
+  ,("kapyeounpieupkorean", '\x3178')
+  ,("kapyeounssangpieupkorean", '\x3179')
+  ,("karoriisquare", '\x330D')
+  ,("kashidaautoarabic", '\x0640')
+  ,("kashidaautonosidebearingarabic", '\x0640')
+  ,("kasmallkatakana", '\x30F5')
+  ,("kasquare", '\x3384')
+  ,("kasraarabic", '\x0650')
+  ,("kasratanarabic", '\x064D')
+  ,("kastrokecyrillic", '\x049F')
+  ,("katahiraprolongmarkhalfwidth", '\xFF70')
+  ,("kaverticalstrokecyrillic", '\x049D')
+  ,("kbopomofo", '\x310E')
+  ,("kcalsquare", '\x3389')
+  ,("kcaron", '\x01E9')
+  ,("kcedilla", '\x0137')
+  ,("kcircle", '\x24DA')
+  ,("kcommaaccent", '\x0137')
+  ,("kdotbelow", '\x1E33')
+  ,("keharmenian", '\x0584')
+  ,("kehiragana", '\x3051')
+  ,("kekatakana", '\x30B1')
+  ,("kekatakanahalfwidth", '\xFF79')
+  ,("kenarmenian", '\x056F')
+  ,("kesmallkatakana", '\x30F6')
+  ,("kgreenlandic", '\x0138')
+  ,("khabengali", '\x0996')
+  ,("khacyrillic", '\x0445')
+  ,("khadeva", '\x0916')
+  ,("khagujarati", '\x0A96')
+  ,("khagurmukhi", '\x0A16')
+  ,("khaharabic", '\x062E')
+  ,("khahfinalarabic", '\xFEA6')
+  ,("khahinitialarabic", '\xFEA7')
+  ,("khahmedialarabic", '\xFEA8')
+  ,("kheicoptic", '\x03E7')
+  ,("khhadeva", '\x0959')
+  ,("khhagurmukhi", '\x0A59')
+  ,("khieukhacirclekorean", '\x3278')
+  ,("khieukhaparenkorean", '\x3218')
+  ,("khieukhcirclekorean", '\x326A')
+  ,("khieukhkorean", '\x314B')
+  ,("khieukhparenkorean", '\x320A')
+  ,("khokhaithai", '\x0E02')
+  ,("khokhonthai", '\x0E05')
+  ,("khokhuatthai", '\x0E03')
+  ,("khokhwaithai", '\x0E04')
+  ,("khomutthai", '\x0E5B')
+  ,("khook", '\x0199')
+  ,("khorakhangthai", '\x0E06')
+  ,("khzsquare", '\x3391')
+  ,("kihiragana", '\x304D')
+  ,("kikatakana", '\x30AD')
+  ,("kikatakanahalfwidth", '\xFF77')
+  ,("kiroguramusquare", '\x3315')
+  ,("kiromeetorusquare", '\x3316')
+  ,("kirosquare", '\x3314')
+  ,("kiyeokacirclekorean", '\x326E')
+  ,("kiyeokaparenkorean", '\x320E')
+  ,("kiyeokcirclekorean", '\x3260')
+  ,("kiyeokkorean", '\x3131')
+  ,("kiyeokparenkorean", '\x3200')
+  ,("kiyeoksioskorean", '\x3133')
+  ,("kjecyrillic", '\x045C')
+  ,("klinebelow", '\x1E35')
+  ,("klsquare", '\x3398')
+  ,("kmcubedsquare", '\x33A6')
+  ,("kmonospace", '\xFF4B')
+  ,("kmsquaredsquare", '\x33A2')
+  ,("kohiragana", '\x3053')
+  ,("kohmsquare", '\x33C0')
+  ,("kokaithai", '\x0E01')
+  ,("kokatakana", '\x30B3')
+  ,("kokatakanahalfwidth", '\xFF7A')
+  ,("kooposquare", '\x331E')
+  ,("koppacyrillic", '\x0481')
+  ,("koreanstandardsymbol", '\x327F')
+  ,("koroniscmb", '\x0343')
+  ,("kparen", '\x24A6')
+  ,("kpasquare", '\x33AA')
+  ,("ksicyrillic", '\x046F')
+  ,("ktsquare", '\x33CF')
+  ,("kturned", '\x029E')
+  ,("kuhiragana", '\x304F')
+  ,("kukatakana", '\x30AF')
+  ,("kukatakanahalfwidth", '\xFF78')
+  ,("kvsquare", '\x33B8')
+  ,("kwsquare", '\x33BE')
+  ,("l", '\x006C')
+  ,("labengali", '\x09B2')
+  ,("lacute", '\x013A')
+  ,("ladeva", '\x0932')
+  ,("lagujarati", '\x0AB2')
+  ,("lagurmukhi", '\x0A32')
+  ,("lakkhangyaothai", '\x0E45')
+  ,("lamaleffinalarabic", '\xFEFC')
+  ,("lamalefhamzaabovefinalarabic", '\xFEF8')
+  ,("lamalefhamzaaboveisolatedarabic", '\xFEF7')
+  ,("lamalefhamzabelowfinalarabic", '\xFEFA')
+  ,("lamalefhamzabelowisolatedarabic", '\xFEF9')
+  ,("lamalefisolatedarabic", '\xFEFB')
+  ,("lamalefmaddaabovefinalarabic", '\xFEF6')
+  ,("lamalefmaddaaboveisolatedarabic", '\xFEF5')
+  ,("lamarabic", '\x0644')
+  ,("lambda", '\x03BB')
+  ,("lambdastroke", '\x019B')
+  ,("lamed", '\x05DC')
+  ,("lameddagesh", '\xFB3C')
+  ,("lameddageshhebrew", '\xFB3C')
+  ,("lamedhebrew", '\x05DC')
+  ,("lamedholam", '\x05DC')
+  ,("lamedholamdagesh", '\x05DC')
+  ,("lamedholamdageshhebrew", '\x05DC')
+  ,("lamedholamhebrew", '\x05DC')
+  ,("lamfinalarabic", '\xFEDE')
+  ,("lamhahinitialarabic", '\xFCCA')
+  ,("laminitialarabic", '\xFEDF')
+  ,("lamjeeminitialarabic", '\xFCC9')
+  ,("lamkhahinitialarabic", '\xFCCB')
+  ,("lamlamhehisolatedarabic", '\xFDF2')
+  ,("lammedialarabic", '\xFEE0')
+  ,("lammeemhahinitialarabic", '\xFD88')
+  ,("lammeeminitialarabic", '\xFCCC')
+  ,("lammeemjeeminitialarabic", '\xFEDF')
+  ,("lammeemkhahinitialarabic", '\xFEDF')
+  ,("largecircle", '\x25EF')
+  ,("lbar", '\x019A')
+  ,("lbelt", '\x026C')
+  ,("lbopomofo", '\x310C')
+  ,("lcaron", '\x013E')
+  ,("lcedilla", '\x013C')
+  ,("lcircle", '\x24DB')
+  ,("lcircumflexbelow", '\x1E3D')
+  ,("lcommaaccent", '\x013C')
+  ,("ldot", '\x0140')
+  ,("ldotaccent", '\x0140')
+  ,("ldotbelow", '\x1E37')
+  ,("ldotbelowmacron", '\x1E39')
+  ,("leftangleabovecmb", '\x031A')
+  ,("lefttackbelowcmb", '\x0318')
+  ,("less", '\x003C')
+  ,("lessequal", '\x2264')
+  ,("lessequalorgreater", '\x22DA')
+  ,("lessmonospace", '\xFF1C')
+  ,("lessorequivalent", '\x2272')
+  ,("lessorgreater", '\x2276')
+  ,("lessoverequal", '\x2266')
+  ,("lesssmall", '\xFE64')
+  ,("lezh", '\x026E')
+  ,("lfblock", '\x258C')
+  ,("lhookretroflex", '\x026D')
+  ,("lira", '\x20A4')
+  ,("liwnarmenian", '\x056C')
+  ,("lj", '\x01C9')
+  ,("ljecyrillic", '\x0459')
+  ,("ll", '\xF6C0')
+  ,("lladeva", '\x0933')
+  ,("llagujarati", '\x0AB3')
+  ,("llinebelow", '\x1E3B')
+  ,("llladeva", '\x0934')
+  ,("llvocalicbengali", '\x09E1')
+  ,("llvocalicdeva", '\x0961')
+  ,("llvocalicvowelsignbengali", '\x09E3')
+  ,("llvocalicvowelsigndeva", '\x0963')
+  ,("lmiddletilde", '\x026B')
+  ,("lmonospace", '\xFF4C')
+  ,("lmsquare", '\x33D0')
+  ,("lochulathai", '\x0E2C')
+  ,("logicaland", '\x2227')
+  ,("logicalnot", '\x00AC')
+  ,("logicalnotreversed", '\x2310')
+  ,("logicalor", '\x2228')
+  ,("lolingthai", '\x0E25')
+  ,("longs", '\x017F')
+  ,("lowlinecenterline", '\xFE4E')
+  ,("lowlinecmb", '\x0332')
+  ,("lowlinedashed", '\xFE4D')
+  ,("lozenge", '\x25CA')
+  ,("lparen", '\x24A7')
+  ,("lslash", '\x0142')
+  ,("lsquare", '\x2113')
+  ,("lsuperior", '\xF6EE')
+  ,("ltshade", '\x2591')
+  ,("luthai", '\x0E26')
+  ,("lvocalicbengali", '\x098C')
+  ,("lvocalicdeva", '\x090C')
+  ,("lvocalicvowelsignbengali", '\x09E2')
+  ,("lvocalicvowelsigndeva", '\x0962')
+  ,("lxsquare", '\x33D3')
+  ,("m", '\x006D')
+  ,("mabengali", '\x09AE')
+  ,("macron", '\x00AF')
+  ,("macronbelowcmb", '\x0331')
+  ,("macroncmb", '\x0304')
+  ,("macronlowmod", '\x02CD')
+  ,("macronmonospace", '\xFFE3')
+  ,("macute", '\x1E3F')
+  ,("madeva", '\x092E')
+  ,("magujarati", '\x0AAE')
+  ,("magurmukhi", '\x0A2E')
+  ,("mahapakhhebrew", '\x05A4')
+  ,("mahapakhlefthebrew", '\x05A4')
+  ,("mahiragana", '\x307E')
+  ,("maichattawalowleftthai", '\xF895')
+  ,("maichattawalowrightthai", '\xF894')
+  ,("maichattawathai", '\x0E4B')
+  ,("maichattawaupperleftthai", '\xF893')
+  ,("maieklowleftthai", '\xF88C')
+  ,("maieklowrightthai", '\xF88B')
+  ,("maiekthai", '\x0E48')
+  ,("maiekupperleftthai", '\xF88A')
+  ,("maihanakatleftthai", '\xF884')
+  ,("maihanakatthai", '\x0E31')
+  ,("maitaikhuleftthai", '\xF889')
+  ,("maitaikhuthai", '\x0E47')
+  ,("maitholowleftthai", '\xF88F')
+  ,("maitholowrightthai", '\xF88E')
+  ,("maithothai", '\x0E49')
+  ,("maithoupperleftthai", '\xF88D')
+  ,("maitrilowleftthai", '\xF892')
+  ,("maitrilowrightthai", '\xF891')
+  ,("maitrithai", '\x0E4A')
+  ,("maitriupperleftthai", '\xF890')
+  ,("maiyamokthai", '\x0E46')
+  ,("makatakana", '\x30DE')
+  ,("makatakanahalfwidth", '\xFF8F')
+  ,("male", '\x2642')
+  ,("mansyonsquare", '\x3347')
+  ,("maqafhebrew", '\x05BE')
+  ,("mars", '\x2642')
+  ,("masoracirclehebrew", '\x05AF')
+  ,("masquare", '\x3383')
+  ,("mbopomofo", '\x3107')
+  ,("mbsquare", '\x33D4')
+  ,("mcircle", '\x24DC')
+  ,("mcubedsquare", '\x33A5')
+  ,("mdotaccent", '\x1E41')
+  ,("mdotbelow", '\x1E43')
+  ,("meemarabic", '\x0645')
+  ,("meemfinalarabic", '\xFEE2')
+  ,("meeminitialarabic", '\xFEE3')
+  ,("meemmedialarabic", '\xFEE4')
+  ,("meemmeeminitialarabic", '\xFCD1')
+  ,("meemmeemisolatedarabic", '\xFC48')
+  ,("meetorusquare", '\x334D')
+  ,("mehiragana", '\x3081')
+  ,("meizierasquare", '\x337E')
+  ,("mekatakana", '\x30E1')
+  ,("mekatakanahalfwidth", '\xFF92')
+  ,("mem", '\x05DE')
+  ,("memdagesh", '\xFB3E')
+  ,("memdageshhebrew", '\xFB3E')
+  ,("memhebrew", '\x05DE')
+  ,("menarmenian", '\x0574')
+  ,("merkhahebrew", '\x05A5')
+  ,("merkhakefulahebrew", '\x05A6')
+  ,("merkhakefulalefthebrew", '\x05A6')
+  ,("merkhalefthebrew", '\x05A5')
+  ,("mhook", '\x0271')
+  ,("mhzsquare", '\x3392')
+  ,("middledotkatakanahalfwidth", '\xFF65')
+  ,("middot", '\x00B7')
+  ,("mieumacirclekorean", '\x3272')
+  ,("mieumaparenkorean", '\x3212')
+  ,("mieumcirclekorean", '\x3264')
+  ,("mieumkorean", '\x3141')
+  ,("mieumpansioskorean", '\x3170')
+  ,("mieumparenkorean", '\x3204')
+  ,("mieumpieupkorean", '\x316E')
+  ,("mieumsioskorean", '\x316F')
+  ,("mihiragana", '\x307F')
+  ,("mikatakana", '\x30DF')
+  ,("mikatakanahalfwidth", '\xFF90')
+  ,("minus", '\x2212')
+  ,("minusbelowcmb", '\x0320')
+  ,("minuscircle", '\x2296')
+  ,("minusmod", '\x02D7')
+  ,("minusplus", '\x2213')
+  ,("minute", '\x2032')
+  ,("miribaarusquare", '\x334A')
+  ,("mirisquare", '\x3349')
+  ,("mlonglegturned", '\x0270')
+  ,("mlsquare", '\x3396')
+  ,("mmcubedsquare", '\x33A3')
+  ,("mmonospace", '\xFF4D')
+  ,("mmsquaredsquare", '\x339F')
+  ,("mohiragana", '\x3082')
+  ,("mohmsquare", '\x33C1')
+  ,("mokatakana", '\x30E2')
+  ,("mokatakanahalfwidth", '\xFF93')
+  ,("molsquare", '\x33D6')
+  ,("momathai", '\x0E21')
+  ,("moverssquare", '\x33A7')
+  ,("moverssquaredsquare", '\x33A8')
+  ,("mparen", '\x24A8')
+  ,("mpasquare", '\x33AB')
+  ,("mssquare", '\x33B3')
+  ,("msuperior", '\xF6EF')
+  ,("mturned", '\x026F')
+  ,("mu", '\x00B5')
+  ,("mu1", '\x00B5')
+  ,("muasquare", '\x3382')
+  ,("muchgreater", '\x226B')
+  ,("muchless", '\x226A')
+  ,("mufsquare", '\x338C')
+  ,("mugreek", '\x03BC')
+  ,("mugsquare", '\x338D')
+  ,("muhiragana", '\x3080')
+  ,("mukatakana", '\x30E0')
+  ,("mukatakanahalfwidth", '\xFF91')
+  ,("mulsquare", '\x3395')
+  ,("multiply", '\x00D7')
+  ,("mumsquare", '\x339B')
+  ,("munahhebrew", '\x05A3')
+  ,("munahlefthebrew", '\x05A3')
+  ,("musicalnote", '\x266A')
+  ,("musicalnotedbl", '\x266B')
+  ,("musicflatsign", '\x266D')
+  ,("musicsharpsign", '\x266F')
+  ,("mussquare", '\x33B2')
+  ,("muvsquare", '\x33B6')
+  ,("muwsquare", '\x33BC')
+  ,("mvmegasquare", '\x33B9')
+  ,("mvsquare", '\x33B7')
+  ,("mwmegasquare", '\x33BF')
+  ,("mwsquare", '\x33BD')
+  ,("n", '\x006E')
+  ,("nabengali", '\x09A8')
+  ,("nabla", '\x2207')
+  ,("nacute", '\x0144')
+  ,("nadeva", '\x0928')
+  ,("nagujarati", '\x0AA8')
+  ,("nagurmukhi", '\x0A28')
+  ,("nahiragana", '\x306A')
+  ,("nakatakana", '\x30CA')
+  ,("nakatakanahalfwidth", '\xFF85')
+  ,("napostrophe", '\x0149')
+  ,("nasquare", '\x3381')
+  ,("nbopomofo", '\x310B')
+  ,("nbspace", '\x00A0')
+  ,("ncaron", '\x0148')
+  ,("ncedilla", '\x0146')
+  ,("ncircle", '\x24DD')
+  ,("ncircumflexbelow", '\x1E4B')
+  ,("ncommaaccent", '\x0146')
+  ,("ndotaccent", '\x1E45')
+  ,("ndotbelow", '\x1E47')
+  ,("nehiragana", '\x306D')
+  ,("nekatakana", '\x30CD')
+  ,("nekatakanahalfwidth", '\xFF88')
+  ,("newsheqelsign", '\x20AA')
+  ,("nfsquare", '\x338B')
+  ,("ngabengali", '\x0999')
+  ,("ngadeva", '\x0919')
+  ,("ngagujarati", '\x0A99')
+  ,("ngagurmukhi", '\x0A19')
+  ,("ngonguthai", '\x0E07')
+  ,("nhiragana", '\x3093')
+  ,("nhookleft", '\x0272')
+  ,("nhookretroflex", '\x0273')
+  ,("nieunacirclekorean", '\x326F')
+  ,("nieunaparenkorean", '\x320F')
+  ,("nieuncieuckorean", '\x3135')
+  ,("nieuncirclekorean", '\x3261')
+  ,("nieunhieuhkorean", '\x3136')
+  ,("nieunkorean", '\x3134')
+  ,("nieunpansioskorean", '\x3168')
+  ,("nieunparenkorean", '\x3201')
+  ,("nieunsioskorean", '\x3167')
+  ,("nieuntikeutkorean", '\x3166')
+  ,("nihiragana", '\x306B')
+  ,("nikatakana", '\x30CB')
+  ,("nikatakanahalfwidth", '\xFF86')
+  ,("nikhahitleftthai", '\xF899')
+  ,("nikhahitthai", '\x0E4D')
+  ,("nine", '\x0039')
+  ,("ninearabic", '\x0669')
+  ,("ninebengali", '\x09EF')
+  ,("ninecircle", '\x2468')
+  ,("ninecircleinversesansserif", '\x2792')
+  ,("ninedeva", '\x096F')
+  ,("ninegujarati", '\x0AEF')
+  ,("ninegurmukhi", '\x0A6F')
+  ,("ninehackarabic", '\x0669')
+  ,("ninehangzhou", '\x3029')
+  ,("nineideographicparen", '\x3228')
+  ,("nineinferior", '\x2089')
+  ,("ninemonospace", '\xFF19')
+  ,("nineoldstyle", '\xF739')
+  ,("nineparen", '\x247C')
+  ,("nineperiod", '\x2490')
+  ,("ninepersian", '\x06F9')
+  ,("nineroman", '\x2178')
+  ,("ninesuperior", '\x2079')
+  ,("nineteencircle", '\x2472')
+  ,("nineteenparen", '\x2486')
+  ,("nineteenperiod", '\x249A')
+  ,("ninethai", '\x0E59')
+  ,("nj", '\x01CC')
+  ,("njecyrillic", '\x045A')
+  ,("nkatakana", '\x30F3')
+  ,("nkatakanahalfwidth", '\xFF9D')
+  ,("nlegrightlong", '\x019E')
+  ,("nlinebelow", '\x1E49')
+  ,("nmonospace", '\xFF4E')
+  ,("nmsquare", '\x339A')
+  ,("nnabengali", '\x09A3')
+  ,("nnadeva", '\x0923')
+  ,("nnagujarati", '\x0AA3')
+  ,("nnagurmukhi", '\x0A23')
+  ,("nnnadeva", '\x0929')
+  ,("nohiragana", '\x306E')
+  ,("nokatakana", '\x30CE')
+  ,("nokatakanahalfwidth", '\xFF89')
+  ,("nonbreakingspace", '\x00A0')
+  ,("nonenthai", '\x0E13')
+  ,("nonuthai", '\x0E19')
+  ,("noonarabic", '\x0646')
+  ,("noonfinalarabic", '\xFEE6')
+  ,("noonghunnaarabic", '\x06BA')
+  ,("noonghunnafinalarabic", '\xFB9F')
+  ,("noonhehinitialarabic", '\xFEE7')
+  ,("nooninitialarabic", '\xFEE7')
+  ,("noonjeeminitialarabic", '\xFCD2')
+  ,("noonjeemisolatedarabic", '\xFC4B')
+  ,("noonmedialarabic", '\xFEE8')
+  ,("noonmeeminitialarabic", '\xFCD5')
+  ,("noonmeemisolatedarabic", '\xFC4E')
+  ,("noonnoonfinalarabic", '\xFC8D')
+  ,("notcontains", '\x220C')
+  ,("notelement", '\x2209')
+  ,("notelementof", '\x2209')
+  ,("notequal", '\x2260')
+  ,("notgreater", '\x226F')
+  ,("notgreaternorequal", '\x2271')
+  ,("notgreaternorless", '\x2279')
+  ,("notidentical", '\x2262')
+  ,("notless", '\x226E')
+  ,("notlessnorequal", '\x2270')
+  ,("notparallel", '\x2226')
+  ,("notprecedes", '\x2280')
+  ,("notsubset", '\x2284')
+  ,("notsucceeds", '\x2281')
+  ,("notsuperset", '\x2285')
+  ,("nowarmenian", '\x0576')
+  ,("nparen", '\x24A9')
+  ,("nssquare", '\x33B1')
+  ,("nsuperior", '\x207F')
+  ,("ntilde", '\x00F1')
+  ,("nu", '\x03BD')
+  ,("nuhiragana", '\x306C')
+  ,("nukatakana", '\x30CC')
+  ,("nukatakanahalfwidth", '\xFF87')
+  ,("nuktabengali", '\x09BC')
+  ,("nuktadeva", '\x093C')
+  ,("nuktagujarati", '\x0ABC')
+  ,("nuktagurmukhi", '\x0A3C')
+  ,("numbersign", '\x0023')
+  ,("numbersignmonospace", '\xFF03')
+  ,("numbersignsmall", '\xFE5F')
+  ,("numeralsigngreek", '\x0374')
+  ,("numeralsignlowergreek", '\x0375')
+  ,("numero", '\x2116')
+  ,("nun", '\x05E0')
+  ,("nundagesh", '\xFB40')
+  ,("nundageshhebrew", '\xFB40')
+  ,("nunhebrew", '\x05E0')
+  ,("nvsquare", '\x33B5')
+  ,("nwsquare", '\x33BB')
+  ,("nyabengali", '\x099E')
+  ,("nyadeva", '\x091E')
+  ,("nyagujarati", '\x0A9E')
+  ,("nyagurmukhi", '\x0A1E')
+  ,("o", '\x006F')
+  ,("oacute", '\x00F3')
+  ,("oangthai", '\x0E2D')
+  ,("obarred", '\x0275')
+  ,("obarredcyrillic", '\x04E9')
+  ,("obarreddieresiscyrillic", '\x04EB')
+  ,("obengali", '\x0993')
+  ,("obopomofo", '\x311B')
+  ,("obreve", '\x014F')
+  ,("ocandradeva", '\x0911')
+  ,("ocandragujarati", '\x0A91')
+  ,("ocandravowelsigndeva", '\x0949')
+  ,("ocandravowelsigngujarati", '\x0AC9')
+  ,("ocaron", '\x01D2')
+  ,("ocircle", '\x24DE')
+  ,("ocircumflex", '\x00F4')
+  ,("ocircumflexacute", '\x1ED1')
+  ,("ocircumflexdotbelow", '\x1ED9')
+  ,("ocircumflexgrave", '\x1ED3')
+  ,("ocircumflexhookabove", '\x1ED5')
+  ,("ocircumflextilde", '\x1ED7')
+  ,("ocyrillic", '\x043E')
+  ,("odblacute", '\x0151')
+  ,("odblgrave", '\x020D')
+  ,("odeva", '\x0913')
+  ,("odieresis", '\x00F6')
+  ,("odieresiscyrillic", '\x04E7')
+  ,("odotbelow", '\x1ECD')
+  ,("oe", '\x0153')
+  ,("oekorean", '\x315A')
+  ,("ogonek", '\x02DB')
+  ,("ogonekcmb", '\x0328')
+  ,("ograve", '\x00F2')
+  ,("ogujarati", '\x0A93')
+  ,("oharmenian", '\x0585')
+  ,("ohiragana", '\x304A')
+  ,("ohookabove", '\x1ECF')
+  ,("ohorn", '\x01A1')
+  ,("ohornacute", '\x1EDB')
+  ,("ohorndotbelow", '\x1EE3')
+  ,("ohorngrave", '\x1EDD')
+  ,("ohornhookabove", '\x1EDF')
+  ,("ohorntilde", '\x1EE1')
+  ,("ohungarumlaut", '\x0151')
+  ,("oi", '\x01A3')
+  ,("oinvertedbreve", '\x020F')
+  ,("okatakana", '\x30AA')
+  ,("okatakanahalfwidth", '\xFF75')
+  ,("okorean", '\x3157')
+  ,("olehebrew", '\x05AB')
+  ,("omacron", '\x014D')
+  ,("omacronacute", '\x1E53')
+  ,("omacrongrave", '\x1E51')
+  ,("omdeva", '\x0950')
+  ,("omega", '\x03C9')
+  ,("omega1", '\x03D6')
+  ,("omegacyrillic", '\x0461')
+  ,("omegalatinclosed", '\x0277')
+  ,("omegaroundcyrillic", '\x047B')
+  ,("omegatitlocyrillic", '\x047D')
+  ,("omegatonos", '\x03CE')
+  ,("omgujarati", '\x0AD0')
+  ,("omicron", '\x03BF')
+  ,("omicrontonos", '\x03CC')
+  ,("omonospace", '\xFF4F')
+  ,("one", '\x0031')
+  ,("onearabic", '\x0661')
+  ,("onebengali", '\x09E7')
+  ,("onecircle", '\x2460')
+  ,("onecircleinversesansserif", '\x278A')
+  ,("onedeva", '\x0967')
+  ,("onedotenleader", '\x2024')
+  ,("oneeighth", '\x215B')
+  ,("onefitted", '\xF6DC')
+  ,("onegujarati", '\x0AE7')
+  ,("onegurmukhi", '\x0A67')
+  ,("onehackarabic", '\x0661')
+  ,("onehalf", '\x00BD')
+  ,("onehangzhou", '\x3021')
+  ,("oneideographicparen", '\x3220')
+  ,("oneinferior", '\x2081')
+  ,("onemonospace", '\xFF11')
+  ,("onenumeratorbengali", '\x09F4')
+  ,("oneoldstyle", '\xF731')
+  ,("oneparen", '\x2474')
+  ,("oneperiod", '\x2488')
+  ,("onepersian", '\x06F1')
+  ,("onequarter", '\x00BC')
+  ,("oneroman", '\x2170')
+  ,("onesuperior", '\x00B9')
+  ,("onethai", '\x0E51')
+  ,("onethird", '\x2153')
+  ,("oogonek", '\x01EB')
+  ,("oogonekmacron", '\x01ED')
+  ,("oogurmukhi", '\x0A13')
+  ,("oomatragurmukhi", '\x0A4B')
+  ,("oopen", '\x0254')
+  ,("oparen", '\x24AA')
+  ,("openbullet", '\x25E6')
+  ,("option", '\x2325')
+  ,("ordfeminine", '\x00AA')
+  ,("ordmasculine", '\x00BA')
+  ,("orthogonal", '\x221F')
+  ,("oshortdeva", '\x0912')
+  ,("oshortvowelsigndeva", '\x094A')
+  ,("oslash", '\x00F8')
+  ,("oslashacute", '\x01FF')
+  ,("osmallhiragana", '\x3049')
+  ,("osmallkatakana", '\x30A9')
+  ,("osmallkatakanahalfwidth", '\xFF6B')
+  ,("ostrokeacute", '\x01FF')
+  ,("osuperior", '\xF6F0')
+  ,("otcyrillic", '\x047F')
+  ,("otilde", '\x00F5')
+  ,("otildeacute", '\x1E4D')
+  ,("otildedieresis", '\x1E4F')
+  ,("oubopomofo", '\x3121')
+  ,("overline", '\x203E')
+  ,("overlinecenterline", '\xFE4A')
+  ,("overlinecmb", '\x0305')
+  ,("overlinedashed", '\xFE49')
+  ,("overlinedblwavy", '\xFE4C')
+  ,("overlinewavy", '\xFE4B')
+  ,("overscore", '\x00AF')
+  ,("ovowelsignbengali", '\x09CB')
+  ,("ovowelsigndeva", '\x094B')
+  ,("ovowelsigngujarati", '\x0ACB')
+  ,("p", '\x0070')
+  ,("paampssquare", '\x3380')
+  ,("paasentosquare", '\x332B')
+  ,("pabengali", '\x09AA')
+  ,("pacute", '\x1E55')
+  ,("padeva", '\x092A')
+  ,("pagedown", '\x21DF')
+  ,("pageup", '\x21DE')
+  ,("pagujarati", '\x0AAA')
+  ,("pagurmukhi", '\x0A2A')
+  ,("pahiragana", '\x3071')
+  ,("paiyannoithai", '\x0E2F')
+  ,("pakatakana", '\x30D1')
+  ,("palatalizationcyrilliccmb", '\x0484')
+  ,("palochkacyrillic", '\x04C0')
+  ,("pansioskorean", '\x317F')
+  ,("paragraph", '\x00B6')
+  ,("parallel", '\x2225')
+  ,("parenleft", '\x0028')
+  ,("parenleftaltonearabic", '\xFD3E')
+  ,("parenleftbt", '\xF8ED')
+  ,("parenleftex", '\xF8EC')
+  ,("parenleftinferior", '\x208D')
+  ,("parenleftmonospace", '\xFF08')
+  ,("parenleftsmall", '\xFE59')
+  ,("parenleftsuperior", '\x207D')
+  ,("parenlefttp", '\xF8EB')
+  ,("parenleftvertical", '\xFE35')
+  ,("parenright", '\x0029')
+  ,("parenrightaltonearabic", '\xFD3F')
+  ,("parenrightbt", '\xF8F8')
+  ,("parenrightex", '\xF8F7')
+  ,("parenrightinferior", '\x208E')
+  ,("parenrightmonospace", '\xFF09')
+  ,("parenrightsmall", '\xFE5A')
+  ,("parenrightsuperior", '\x207E')
+  ,("parenrighttp", '\xF8F6')
+  ,("parenrightvertical", '\xFE36')
+  ,("partialdiff", '\x2202')
+  ,("paseqhebrew", '\x05C0')
+  ,("pashtahebrew", '\x0599')
+  ,("pasquare", '\x33A9')
+  ,("patah", '\x05B7')
+  ,("patah11", '\x05B7')
+  ,("patah1d", '\x05B7')
+  ,("patah2a", '\x05B7')
+  ,("patahhebrew", '\x05B7')
+  ,("patahnarrowhebrew", '\x05B7')
+  ,("patahquarterhebrew", '\x05B7')
+  ,("patahwidehebrew", '\x05B7')
+  ,("pazerhebrew", '\x05A1')
+  ,("pbopomofo", '\x3106')
+  ,("pcircle", '\x24DF')
+  ,("pdotaccent", '\x1E57')
+  ,("pe", '\x05E4')
+  ,("pecyrillic", '\x043F')
+  ,("pedagesh", '\xFB44')
+  ,("pedageshhebrew", '\xFB44')
+  ,("peezisquare", '\x333B')
+  ,("pefinaldageshhebrew", '\xFB43')
+  ,("peharabic", '\x067E')
+  ,("peharmenian", '\x057A')
+  ,("pehebrew", '\x05E4')
+  ,("pehfinalarabic", '\xFB57')
+  ,("pehinitialarabic", '\xFB58')
+  ,("pehiragana", '\x307A')
+  ,("pehmedialarabic", '\xFB59')
+  ,("pekatakana", '\x30DA')
+  ,("pemiddlehookcyrillic", '\x04A7')
+  ,("perafehebrew", '\xFB4E')
+  ,("percent", '\x0025')
+  ,("percentarabic", '\x066A')
+  ,("percentmonospace", '\xFF05')
+  ,("percentsmall", '\xFE6A')
+  ,("period", '\x002E')
+  ,("periodarmenian", '\x0589')
+  ,("periodcentered", '\x00B7')
+  ,("periodhalfwidth", '\xFF61')
+  ,("periodinferior", '\xF6E7')
+  ,("periodmonospace", '\xFF0E')
+  ,("periodsmall", '\xFE52')
+  ,("periodsuperior", '\xF6E8')
+  ,("perispomenigreekcmb", '\x0342')
+  ,("perpendicular", '\x22A5')
+  ,("perthousand", '\x2030')
+  ,("peseta", '\x20A7')
+  ,("pfsquare", '\x338A')
+  ,("phabengali", '\x09AB')
+  ,("phadeva", '\x092B')
+  ,("phagujarati", '\x0AAB')
+  ,("phagurmukhi", '\x0A2B')
+  ,("phi", '\x03C6')
+  ,("phi1", '\x03D5')
+  ,("phieuphacirclekorean", '\x327A')
+  ,("phieuphaparenkorean", '\x321A')
+  ,("phieuphcirclekorean", '\x326C')
+  ,("phieuphkorean", '\x314D')
+  ,("phieuphparenkorean", '\x320C')
+  ,("philatin", '\x0278')
+  ,("phinthuthai", '\x0E3A')
+  ,("phisymbolgreek", '\x03D5')
+  ,("phook", '\x01A5')
+  ,("phophanthai", '\x0E1E')
+  ,("phophungthai", '\x0E1C')
+  ,("phosamphaothai", '\x0E20')
+  ,("pi", '\x03C0')
+  ,("pieupacirclekorean", '\x3273')
+  ,("pieupaparenkorean", '\x3213')
+  ,("pieupcieuckorean", '\x3176')
+  ,("pieupcirclekorean", '\x3265')
+  ,("pieupkiyeokkorean", '\x3172')
+  ,("pieupkorean", '\x3142')
+  ,("pieupparenkorean", '\x3205')
+  ,("pieupsioskiyeokkorean", '\x3174')
+  ,("pieupsioskorean", '\x3144')
+  ,("pieupsiostikeutkorean", '\x3175')
+  ,("pieupthieuthkorean", '\x3177')
+  ,("pieuptikeutkorean", '\x3173')
+  ,("pihiragana", '\x3074')
+  ,("pikatakana", '\x30D4')
+  ,("pisymbolgreek", '\x03D6')
+  ,("piwrarmenian", '\x0583')
+  ,("plus", '\x002B')
+  ,("plusbelowcmb", '\x031F')
+  ,("pluscircle", '\x2295')
+  ,("plusminus", '\x00B1')
+  ,("plusmod", '\x02D6')
+  ,("plusmonospace", '\xFF0B')
+  ,("plussmall", '\xFE62')
+  ,("plussuperior", '\x207A')
+  ,("pmonospace", '\xFF50')
+  ,("pmsquare", '\x33D8')
+  ,("pohiragana", '\x307D')
+  ,("pointingindexdownwhite", '\x261F')
+  ,("pointingindexleftwhite", '\x261C')
+  ,("pointingindexrightwhite", '\x261E')
+  ,("pointingindexupwhite", '\x261D')
+  ,("pokatakana", '\x30DD')
+  ,("poplathai", '\x0E1B')
+  ,("postalmark", '\x3012')
+  ,("postalmarkface", '\x3020')
+  ,("pparen", '\x24AB')
+  ,("precedes", '\x227A')
+  ,("prescription", '\x211E')
+  ,("primemod", '\x02B9')
+  ,("primereversed", '\x2035')
+  ,("product", '\x220F')
+  ,("projective", '\x2305')
+  ,("prolongedkana", '\x30FC')
+  ,("propellor", '\x2318')
+  ,("propersubset", '\x2282')
+  ,("propersuperset", '\x2283')
+  ,("proportion", '\x2237')
+  ,("proportional", '\x221D')
+  ,("psi", '\x03C8')
+  ,("psicyrillic", '\x0471')
+  ,("psilipneumatacyrilliccmb", '\x0486')
+  ,("pssquare", '\x33B0')
+  ,("puhiragana", '\x3077')
+  ,("pukatakana", '\x30D7')
+  ,("pvsquare", '\x33B4')
+  ,("pwsquare", '\x33BA')
+  ,("q", '\x0071')
+  ,("qadeva", '\x0958')
+  ,("qadmahebrew", '\x05A8')
+  ,("qafarabic", '\x0642')
+  ,("qaffinalarabic", '\xFED6')
+  ,("qafinitialarabic", '\xFED7')
+  ,("qafmedialarabic", '\xFED8')
+  ,("qamats", '\x05B8')
+  ,("qamats10", '\x05B8')
+  ,("qamats1a", '\x05B8')
+  ,("qamats1c", '\x05B8')
+  ,("qamats27", '\x05B8')
+  ,("qamats29", '\x05B8')
+  ,("qamats33", '\x05B8')
+  ,("qamatsde", '\x05B8')
+  ,("qamatshebrew", '\x05B8')
+  ,("qamatsnarrowhebrew", '\x05B8')
+  ,("qamatsqatanhebrew", '\x05B8')
+  ,("qamatsqatannarrowhebrew", '\x05B8')
+  ,("qamatsqatanquarterhebrew", '\x05B8')
+  ,("qamatsqatanwidehebrew", '\x05B8')
+  ,("qamatsquarterhebrew", '\x05B8')
+  ,("qamatswidehebrew", '\x05B8')
+  ,("qarneyparahebrew", '\x059F')
+  ,("qbopomofo", '\x3111')
+  ,("qcircle", '\x24E0')
+  ,("qhook", '\x02A0')
+  ,("qmonospace", '\xFF51')
+  ,("qof", '\x05E7')
+  ,("qofdagesh", '\xFB47')
+  ,("qofdageshhebrew", '\xFB47')
+  ,("qofhatafpatah", '\x05E7')
+  ,("qofhatafpatahhebrew", '\x05E7')
+  ,("qofhatafsegol", '\x05E7')
+  ,("qofhatafsegolhebrew", '\x05E7')
+  ,("qofhebrew", '\x05E7')
+  ,("qofhiriq", '\x05E7')
+  ,("qofhiriqhebrew", '\x05E7')
+  ,("qofholam", '\x05E7')
+  ,("qofholamhebrew", '\x05E7')
+  ,("qofpatah", '\x05E7')
+  ,("qofpatahhebrew", '\x05E7')
+  ,("qofqamats", '\x05E7')
+  ,("qofqamatshebrew", '\x05E7')
+  ,("qofqubuts", '\x05E7')
+  ,("qofqubutshebrew", '\x05E7')
+  ,("qofsegol", '\x05E7')
+  ,("qofsegolhebrew", '\x05E7')
+  ,("qofsheva", '\x05E7')
+  ,("qofshevahebrew", '\x05E7')
+  ,("qoftsere", '\x05E7')
+  ,("qoftserehebrew", '\x05E7')
+  ,("qparen", '\x24AC')
+  ,("quarternote", '\x2669')
+  ,("qubuts", '\x05BB')
+  ,("qubuts18", '\x05BB')
+  ,("qubuts25", '\x05BB')
+  ,("qubuts31", '\x05BB')
+  ,("qubutshebrew", '\x05BB')
+  ,("qubutsnarrowhebrew", '\x05BB')
+  ,("qubutsquarterhebrew", '\x05BB')
+  ,("qubutswidehebrew", '\x05BB')
+  ,("question", '\x003F')
+  ,("questionarabic", '\x061F')
+  ,("questionarmenian", '\x055E')
+  ,("questiondown", '\x00BF')
+  ,("questiondownsmall", '\xF7BF')
+  ,("questiongreek", '\x037E')
+  ,("questionmonospace", '\xFF1F')
+  ,("questionsmall", '\xF73F')
+  ,("quotedbl", '\x0022')
+  ,("quotedblbase", '\x201E')
+  ,("quotedblleft", '\x201C')
+  ,("quotedblmonospace", '\xFF02')
+  ,("quotedblprime", '\x301E')
+  ,("quotedblprimereversed", '\x301D')
+  ,("quotedblright", '\x201D')
+  ,("quoteleft", '\x2018')
+  ,("quoteleftreversed", '\x201B')
+  ,("quotereversed", '\x201B')
+  ,("quoteright", '\x2019')
+  ,("quoterightn", '\x0149')
+  ,("quotesinglbase", '\x201A')
+  ,("quotesingle", '\x0027')
+  ,("quotesinglemonospace", '\xFF07')
+  ,("r", '\x0072')
+  ,("raarmenian", '\x057C')
+  ,("rabengali", '\x09B0')
+  ,("racute", '\x0155')
+  ,("radeva", '\x0930')
+  ,("radical", '\x221A')
+  ,("radicalex", '\xF8E5')
+  ,("radoverssquare", '\x33AE')
+  ,("radoverssquaredsquare", '\x33AF')
+  ,("radsquare", '\x33AD')
+  ,("rafe", '\x05BF')
+  ,("rafehebrew", '\x05BF')
+  ,("ragujarati", '\x0AB0')
+  ,("ragurmukhi", '\x0A30')
+  ,("rahiragana", '\x3089')
+  ,("rakatakana", '\x30E9')
+  ,("rakatakanahalfwidth", '\xFF97')
+  ,("ralowerdiagonalbengali", '\x09F1')
+  ,("ramiddlediagonalbengali", '\x09F0')
+  ,("ramshorn", '\x0264')
+  ,("ratio", '\x2236')
+  ,("rbopomofo", '\x3116')
+  ,("rcaron", '\x0159')
+  ,("rcedilla", '\x0157')
+  ,("rcircle", '\x24E1')
+  ,("rcommaaccent", '\x0157')
+  ,("rdblgrave", '\x0211')
+  ,("rdotaccent", '\x1E59')
+  ,("rdotbelow", '\x1E5B')
+  ,("rdotbelowmacron", '\x1E5D')
+  ,("referencemark", '\x203B')
+  ,("reflexsubset", '\x2286')
+  ,("reflexsuperset", '\x2287')
+  ,("registered", '\x00AE')
+  ,("registersans", '\xF8E8')
+  ,("registerserif", '\xF6DA')
+  ,("reharabic", '\x0631')
+  ,("reharmenian", '\x0580')
+  ,("rehfinalarabic", '\xFEAE')
+  ,("rehiragana", '\x308C')
+  ,("rehyehaleflamarabic", '\x0631')
+  ,("rekatakana", '\x30EC')
+  ,("rekatakanahalfwidth", '\xFF9A')
+  ,("resh", '\x05E8')
+  ,("reshdageshhebrew", '\xFB48')
+  ,("reshhatafpatah", '\x05E8')
+  ,("reshhatafpatahhebrew", '\x05E8')
+  ,("reshhatafsegol", '\x05E8')
+  ,("reshhatafsegolhebrew", '\x05E8')
+  ,("reshhebrew", '\x05E8')
+  ,("reshhiriq", '\x05E8')
+  ,("reshhiriqhebrew", '\x05E8')
+  ,("reshholam", '\x05E8')
+  ,("reshholamhebrew", '\x05E8')
+  ,("reshpatah", '\x05E8')
+  ,("reshpatahhebrew", '\x05E8')
+  ,("reshqamats", '\x05E8')
+  ,("reshqamatshebrew", '\x05E8')
+  ,("reshqubuts", '\x05E8')
+  ,("reshqubutshebrew", '\x05E8')
+  ,("reshsegol", '\x05E8')
+  ,("reshsegolhebrew", '\x05E8')
+  ,("reshsheva", '\x05E8')
+  ,("reshshevahebrew", '\x05E8')
+  ,("reshtsere", '\x05E8')
+  ,("reshtserehebrew", '\x05E8')
+  ,("reversedtilde", '\x223D')
+  ,("reviahebrew", '\x0597')
+  ,("reviamugrashhebrew", '\x0597')
+  ,("revlogicalnot", '\x2310')
+  ,("rfishhook", '\x027E')
+  ,("rfishhookreversed", '\x027F')
+  ,("rhabengali", '\x09DD')
+  ,("rhadeva", '\x095D')
+  ,("rho", '\x03C1')
+  ,("rhook", '\x027D')
+  ,("rhookturned", '\x027B')
+  ,("rhookturnedsuperior", '\x02B5')
+  ,("rhosymbolgreek", '\x03F1')
+  ,("rhotichookmod", '\x02DE')
+  ,("rieulacirclekorean", '\x3271')
+  ,("rieulaparenkorean", '\x3211')
+  ,("rieulcirclekorean", '\x3263')
+  ,("rieulhieuhkorean", '\x3140')
+  ,("rieulkiyeokkorean", '\x313A')
+  ,("rieulkiyeoksioskorean", '\x3169')
+  ,("rieulkorean", '\x3139')
+  ,("rieulmieumkorean", '\x313B')
+  ,("rieulpansioskorean", '\x316C')
+  ,("rieulparenkorean", '\x3203')
+  ,("rieulphieuphkorean", '\x313F')
+  ,("rieulpieupkorean", '\x313C')
+  ,("rieulpieupsioskorean", '\x316B')
+  ,("rieulsioskorean", '\x313D')
+  ,("rieulthieuthkorean", '\x313E')
+  ,("rieultikeutkorean", '\x316A')
+  ,("rieulyeorinhieuhkorean", '\x316D')
+  ,("rightangle", '\x221F')
+  ,("righttackbelowcmb", '\x0319')
+  ,("righttriangle", '\x22BF')
+  ,("rihiragana", '\x308A')
+  ,("rikatakana", '\x30EA')
+  ,("rikatakanahalfwidth", '\xFF98')
+  ,("ring", '\x02DA')
+  ,("ringbelowcmb", '\x0325')
+  ,("ringcmb", '\x030A')
+  ,("ringhalfleft", '\x02BF')
+  ,("ringhalfleftarmenian", '\x0559')
+  ,("ringhalfleftbelowcmb", '\x031C')
+  ,("ringhalfleftcentered", '\x02D3')
+  ,("ringhalfright", '\x02BE')
+  ,("ringhalfrightbelowcmb", '\x0339')
+  ,("ringhalfrightcentered", '\x02D2')
+  ,("rinvertedbreve", '\x0213')
+  ,("rittorusquare", '\x3351')
+  ,("rlinebelow", '\x1E5F')
+  ,("rlongleg", '\x027C')
+  ,("rlonglegturned", '\x027A')
+  ,("rmonospace", '\xFF52')
+  ,("rohiragana", '\x308D')
+  ,("rokatakana", '\x30ED')
+  ,("rokatakanahalfwidth", '\xFF9B')
+  ,("roruathai", '\x0E23')
+  ,("rparen", '\x24AD')
+  ,("rrabengali", '\x09DC')
+  ,("rradeva", '\x0931')
+  ,("rragurmukhi", '\x0A5C')
+  ,("rreharabic", '\x0691')
+  ,("rrehfinalarabic", '\xFB8D')
+  ,("rrvocalicbengali", '\x09E0')
+  ,("rrvocalicdeva", '\x0960')
+  ,("rrvocalicgujarati", '\x0AE0')
+  ,("rrvocalicvowelsignbengali", '\x09C4')
+  ,("rrvocalicvowelsigndeva", '\x0944')
+  ,("rrvocalicvowelsigngujarati", '\x0AC4')
+  ,("rsuperior", '\xF6F1')
+  ,("rtblock", '\x2590')
+  ,("rturned", '\x0279')
+  ,("rturnedsuperior", '\x02B4')
+  ,("ruhiragana", '\x308B')
+  ,("rukatakana", '\x30EB')
+  ,("rukatakanahalfwidth", '\xFF99')
+  ,("rupeemarkbengali", '\x09F2')
+  ,("rupeesignbengali", '\x09F3')
+  ,("rupiah", '\xF6DD')
+  ,("ruthai", '\x0E24')
+  ,("rvocalicbengali", '\x098B')
+  ,("rvocalicdeva", '\x090B')
+  ,("rvocalicgujarati", '\x0A8B')
+  ,("rvocalicvowelsignbengali", '\x09C3')
+  ,("rvocalicvowelsigndeva", '\x0943')
+  ,("rvocalicvowelsigngujarati", '\x0AC3')
+  ,("s", '\x0073')
+  ,("sabengali", '\x09B8')
+  ,("sacute", '\x015B')
+  ,("sacutedotaccent", '\x1E65')
+  ,("sadarabic", '\x0635')
+  ,("sadeva", '\x0938')
+  ,("sadfinalarabic", '\xFEBA')
+  ,("sadinitialarabic", '\xFEBB')
+  ,("sadmedialarabic", '\xFEBC')
+  ,("sagujarati", '\x0AB8')
+  ,("sagurmukhi", '\x0A38')
+  ,("sahiragana", '\x3055')
+  ,("sakatakana", '\x30B5')
+  ,("sakatakanahalfwidth", '\xFF7B')
+  ,("sallallahoualayhewasallamarabic", '\xFDFA')
+  ,("samekh", '\x05E1')
+  ,("samekhdagesh", '\xFB41')
+  ,("samekhdageshhebrew", '\xFB41')
+  ,("samekhhebrew", '\x05E1')
+  ,("saraaathai", '\x0E32')
+  ,("saraaethai", '\x0E41')
+  ,("saraaimaimalaithai", '\x0E44')
+  ,("saraaimaimuanthai", '\x0E43')
+  ,("saraamthai", '\x0E33')
+  ,("saraathai", '\x0E30')
+  ,("saraethai", '\x0E40')
+  ,("saraiileftthai", '\xF886')
+  ,("saraiithai", '\x0E35')
+  ,("saraileftthai", '\xF885')
+  ,("saraithai", '\x0E34')
+  ,("saraothai", '\x0E42')
+  ,("saraueeleftthai", '\xF888')
+  ,("saraueethai", '\x0E37')
+  ,("saraueleftthai", '\xF887')
+  ,("sarauethai", '\x0E36')
+  ,("sarauthai", '\x0E38')
+  ,("sarauuthai", '\x0E39')
+  ,("sbopomofo", '\x3119')
+  ,("scaron", '\x0161')
+  ,("scarondotaccent", '\x1E67')
+  ,("scedilla", '\x015F')
+  ,("schwa", '\x0259')
+  ,("schwacyrillic", '\x04D9')
+  ,("schwadieresiscyrillic", '\x04DB')
+  ,("schwahook", '\x025A')
+  ,("scircle", '\x24E2')
+  ,("scircumflex", '\x015D')
+  ,("scommaaccent", '\x0219')
+  ,("sdotaccent", '\x1E61')
+  ,("sdotbelow", '\x1E63')
+  ,("sdotbelowdotaccent", '\x1E69')
+  ,("seagullbelowcmb", '\x033C')
+  ,("second", '\x2033')
+  ,("secondtonechinese", '\x02CA')
+  ,("section", '\x00A7')
+  ,("seenarabic", '\x0633')
+  ,("seenfinalarabic", '\xFEB2')
+  ,("seeninitialarabic", '\xFEB3')
+  ,("seenmedialarabic", '\xFEB4')
+  ,("segol", '\x05B6')
+  ,("segol13", '\x05B6')
+  ,("segol1f", '\x05B6')
+  ,("segol2c", '\x05B6')
+  ,("segolhebrew", '\x05B6')
+  ,("segolnarrowhebrew", '\x05B6')
+  ,("segolquarterhebrew", '\x05B6')
+  ,("segoltahebrew", '\x0592')
+  ,("segolwidehebrew", '\x05B6')
+  ,("seharmenian", '\x057D')
+  ,("sehiragana", '\x305B')
+  ,("sekatakana", '\x30BB')
+  ,("sekatakanahalfwidth", '\xFF7E')
+  ,("semicolon", '\x003B')
+  ,("semicolonarabic", '\x061B')
+  ,("semicolonmonospace", '\xFF1B')
+  ,("semicolonsmall", '\xFE54')
+  ,("semivoicedmarkkana", '\x309C')
+  ,("semivoicedmarkkanahalfwidth", '\xFF9F')
+  ,("sentisquare", '\x3322')
+  ,("sentosquare", '\x3323')
+  ,("seven", '\x0037')
+  ,("sevenarabic", '\x0667')
+  ,("sevenbengali", '\x09ED')
+  ,("sevencircle", '\x2466')
+  ,("sevencircleinversesansserif", '\x2790')
+  ,("sevendeva", '\x096D')
+  ,("seveneighths", '\x215E')
+  ,("sevengujarati", '\x0AED')
+  ,("sevengurmukhi", '\x0A6D')
+  ,("sevenhackarabic", '\x0667')
+  ,("sevenhangzhou", '\x3027')
+  ,("sevenideographicparen", '\x3226')
+  ,("seveninferior", '\x2087')
+  ,("sevenmonospace", '\xFF17')
+  ,("sevenoldstyle", '\xF737')
+  ,("sevenparen", '\x247A')
+  ,("sevenperiod", '\x248E')
+  ,("sevenpersian", '\x06F7')
+  ,("sevenroman", '\x2176')
+  ,("sevensuperior", '\x2077')
+  ,("seventeencircle", '\x2470')
+  ,("seventeenparen", '\x2484')
+  ,("seventeenperiod", '\x2498')
+  ,("seventhai", '\x0E57')
+  ,("sfthyphen", '\x00AD')
+  ,("shaarmenian", '\x0577')
+  ,("shabengali", '\x09B6')
+  ,("shacyrillic", '\x0448')
+  ,("shaddaarabic", '\x0651')
+  ,("shaddadammaarabic", '\xFC61')
+  ,("shaddadammatanarabic", '\xFC5E')
+  ,("shaddafathaarabic", '\xFC60')
+  ,("shaddafathatanarabic", '\x0651')
+  ,("shaddakasraarabic", '\xFC62')
+  ,("shaddakasratanarabic", '\xFC5F')
+  ,("shade", '\x2592')
+  ,("shadedark", '\x2593')
+  ,("shadelight", '\x2591')
+  ,("shademedium", '\x2592')
+  ,("shadeva", '\x0936')
+  ,("shagujarati", '\x0AB6')
+  ,("shagurmukhi", '\x0A36')
+  ,("shalshelethebrew", '\x0593')
+  ,("shbopomofo", '\x3115')
+  ,("shchacyrillic", '\x0449')
+  ,("sheenarabic", '\x0634')
+  ,("sheenfinalarabic", '\xFEB6')
+  ,("sheeninitialarabic", '\xFEB7')
+  ,("sheenmedialarabic", '\xFEB8')
+  ,("sheicoptic", '\x03E3')
+  ,("sheqel", '\x20AA')
+  ,("sheqelhebrew", '\x20AA')
+  ,("sheva", '\x05B0')
+  ,("sheva115", '\x05B0')
+  ,("sheva15", '\x05B0')
+  ,("sheva22", '\x05B0')
+  ,("sheva2e", '\x05B0')
+  ,("shevahebrew", '\x05B0')
+  ,("shevanarrowhebrew", '\x05B0')
+  ,("shevaquarterhebrew", '\x05B0')
+  ,("shevawidehebrew", '\x05B0')
+  ,("shhacyrillic", '\x04BB')
+  ,("shimacoptic", '\x03ED')
+  ,("shin", '\x05E9')
+  ,("shindagesh", '\xFB49')
+  ,("shindageshhebrew", '\xFB49')
+  ,("shindageshshindot", '\xFB2C')
+  ,("shindageshshindothebrew", '\xFB2C')
+  ,("shindageshsindot", '\xFB2D')
+  ,("shindageshsindothebrew", '\xFB2D')
+  ,("shindothebrew", '\x05C1')
+  ,("shinhebrew", '\x05E9')
+  ,("shinshindot", '\xFB2A')
+  ,("shinshindothebrew", '\xFB2A')
+  ,("shinsindot", '\xFB2B')
+  ,("shinsindothebrew", '\xFB2B')
+  ,("shook", '\x0282')
+  ,("sigma", '\x03C3')
+  ,("sigma1", '\x03C2')
+  ,("sigmafinal", '\x03C2')
+  ,("sigmalunatesymbolgreek", '\x03F2')
+  ,("sihiragana", '\x3057')
+  ,("sikatakana", '\x30B7')
+  ,("sikatakanahalfwidth", '\xFF7C')
+  ,("siluqhebrew", '\x05BD')
+  ,("siluqlefthebrew", '\x05BD')
+  ,("similar", '\x223C')
+  ,("sindothebrew", '\x05C2')
+  ,("siosacirclekorean", '\x3274')
+  ,("siosaparenkorean", '\x3214')
+  ,("sioscieuckorean", '\x317E')
+  ,("sioscirclekorean", '\x3266')
+  ,("sioskiyeokkorean", '\x317A')
+  ,("sioskorean", '\x3145')
+  ,("siosnieunkorean", '\x317B')
+  ,("siosparenkorean", '\x3206')
+  ,("siospieupkorean", '\x317D')
+  ,("siostikeutkorean", '\x317C')
+  ,("six", '\x0036')
+  ,("sixarabic", '\x0666')
+  ,("sixbengali", '\x09EC')
+  ,("sixcircle", '\x2465')
+  ,("sixcircleinversesansserif", '\x278F')
+  ,("sixdeva", '\x096C')
+  ,("sixgujarati", '\x0AEC')
+  ,("sixgurmukhi", '\x0A6C')
+  ,("sixhackarabic", '\x0666')
+  ,("sixhangzhou", '\x3026')
+  ,("sixideographicparen", '\x3225')
+  ,("sixinferior", '\x2086')
+  ,("sixmonospace", '\xFF16')
+  ,("sixoldstyle", '\xF736')
+  ,("sixparen", '\x2479')
+  ,("sixperiod", '\x248D')
+  ,("sixpersian", '\x06F6')
+  ,("sixroman", '\x2175')
+  ,("sixsuperior", '\x2076')
+  ,("sixteencircle", '\x246F')
+  ,("sixteencurrencydenominatorbengali", '\x09F9')
+  ,("sixteenparen", '\x2483')
+  ,("sixteenperiod", '\x2497')
+  ,("sixthai", '\x0E56')
+  ,("slash", '\x002F')
+  ,("slashmonospace", '\xFF0F')
+  ,("slong", '\x017F')
+  ,("slongdotaccent", '\x1E9B')
+  ,("smileface", '\x263A')
+  ,("smonospace", '\xFF53')
+  ,("sofpasuqhebrew", '\x05C3')
+  ,("softhyphen", '\x00AD')
+  ,("softsigncyrillic", '\x044C')
+  ,("sohiragana", '\x305D')
+  ,("sokatakana", '\x30BD')
+  ,("sokatakanahalfwidth", '\xFF7F')
+  ,("soliduslongoverlaycmb", '\x0338')
+  ,("solidusshortoverlaycmb", '\x0337')
+  ,("sorusithai", '\x0E29')
+  ,("sosalathai", '\x0E28')
+  ,("sosothai", '\x0E0B')
+  ,("sosuathai", '\x0E2A')
+  ,("space", '\x0020')
+  ,("spacehackarabic", '\x0020')
+  ,("spade", '\x2660')
+  ,("spadesuitblack", '\x2660')
+  ,("spadesuitwhite", '\x2664')
+  ,("sparen", '\x24AE')
+  ,("squarebelowcmb", '\x033B')
+  ,("squarecc", '\x33C4')
+  ,("squarecm", '\x339D')
+  ,("squarediagonalcrosshatchfill", '\x25A9')
+  ,("squarehorizontalfill", '\x25A4')
+  ,("squarekg", '\x338F')
+  ,("squarekm", '\x339E')
+  ,("squarekmcapital", '\x33CE')
+  ,("squareln", '\x33D1')
+  ,("squarelog", '\x33D2')
+  ,("squaremg", '\x338E')
+  ,("squaremil", '\x33D5')
+  ,("squaremm", '\x339C')
+  ,("squaremsquared", '\x33A1')
+  ,("squareorthogonalcrosshatchfill", '\x25A6')
+  ,("squareupperlefttolowerrightfill", '\x25A7')
+  ,("squareupperrighttolowerleftfill", '\x25A8')
+  ,("squareverticalfill", '\x25A5')
+  ,("squarewhitewithsmallblack", '\x25A3')
+  ,("srsquare", '\x33DB')
+  ,("ssabengali", '\x09B7')
+  ,("ssadeva", '\x0937')
+  ,("ssagujarati", '\x0AB7')
+  ,("ssangcieuckorean", '\x3149')
+  ,("ssanghieuhkorean", '\x3185')
+  ,("ssangieungkorean", '\x3180')
+  ,("ssangkiyeokkorean", '\x3132')
+  ,("ssangnieunkorean", '\x3165')
+  ,("ssangpieupkorean", '\x3143')
+  ,("ssangsioskorean", '\x3146')
+  ,("ssangtikeutkorean", '\x3138')
+  ,("ssuperior", '\xF6F2')
+  ,("sterling", '\x00A3')
+  ,("sterlingmonospace", '\xFFE1')
+  ,("strokelongoverlaycmb", '\x0336')
+  ,("strokeshortoverlaycmb", '\x0335')
+  ,("subset", '\x2282')
+  ,("subsetnotequal", '\x228A')
+  ,("subsetorequal", '\x2286')
+  ,("succeeds", '\x227B')
+  ,("suchthat", '\x220B')
+  ,("suhiragana", '\x3059')
+  ,("sukatakana", '\x30B9')
+  ,("sukatakanahalfwidth", '\xFF7D')
+  ,("sukunarabic", '\x0652')
+  ,("summation", '\x2211')
+  ,("sun", '\x263C')
+  ,("superset", '\x2283')
+  ,("supersetnotequal", '\x228B')
+  ,("supersetorequal", '\x2287')
+  ,("svsquare", '\x33DC')
+  ,("syouwaerasquare", '\x337C')
+  ,("t", '\x0074')
+  ,("tabengali", '\x09A4')
+  ,("tackdown", '\x22A4')
+  ,("tackleft", '\x22A3')
+  ,("tadeva", '\x0924')
+  ,("tagujarati", '\x0AA4')
+  ,("tagurmukhi", '\x0A24')
+  ,("taharabic", '\x0637')
+  ,("tahfinalarabic", '\xFEC2')
+  ,("tahinitialarabic", '\xFEC3')
+  ,("tahiragana", '\x305F')
+  ,("tahmedialarabic", '\xFEC4')
+  ,("taisyouerasquare", '\x337D')
+  ,("takatakana", '\x30BF')
+  ,("takatakanahalfwidth", '\xFF80')
+  ,("tatweelarabic", '\x0640')
+  ,("tau", '\x03C4')
+  ,("tav", '\x05EA')
+  ,("tavdages", '\xFB4A')
+  ,("tavdagesh", '\xFB4A')
+  ,("tavdageshhebrew", '\xFB4A')
+  ,("tavhebrew", '\x05EA')
+  ,("tbar", '\x0167')
+  ,("tbopomofo", '\x310A')
+  ,("tcaron", '\x0165')
+  ,("tccurl", '\x02A8')
+  ,("tcedilla", '\x0163')
+  ,("tcheharabic", '\x0686')
+  ,("tchehfinalarabic", '\xFB7B')
+  ,("tchehinitialarabic", '\xFB7C')
+  ,("tchehmedialarabic", '\xFB7D')
+  ,("tchehmeeminitialarabic", '\xFB7C')
+  ,("tcircle", '\x24E3')
+  ,("tcircumflexbelow", '\x1E71')
+  ,("tcommaaccent", '\x0163')
+  ,("tdieresis", '\x1E97')
+  ,("tdotaccent", '\x1E6B')
+  ,("tdotbelow", '\x1E6D')
+  ,("tecyrillic", '\x0442')
+  ,("tedescendercyrillic", '\x04AD')
+  ,("teharabic", '\x062A')
+  ,("tehfinalarabic", '\xFE96')
+  ,("tehhahinitialarabic", '\xFCA2')
+  ,("tehhahisolatedarabic", '\xFC0C')
+  ,("tehinitialarabic", '\xFE97')
+  ,("tehiragana", '\x3066')
+  ,("tehjeeminitialarabic", '\xFCA1')
+  ,("tehjeemisolatedarabic", '\xFC0B')
+  ,("tehmarbutaarabic", '\x0629')
+  ,("tehmarbutafinalarabic", '\xFE94')
+  ,("tehmedialarabic", '\xFE98')
+  ,("tehmeeminitialarabic", '\xFCA4')
+  ,("tehmeemisolatedarabic", '\xFC0E')
+  ,("tehnoonfinalarabic", '\xFC73')
+  ,("tekatakana", '\x30C6')
+  ,("tekatakanahalfwidth", '\xFF83')
+  ,("telephone", '\x2121')
+  ,("telephoneblack", '\x260E')
+  ,("telishagedolahebrew", '\x05A0')
+  ,("telishaqetanahebrew", '\x05A9')
+  ,("tencircle", '\x2469')
+  ,("tenideographicparen", '\x3229')
+  ,("tenparen", '\x247D')
+  ,("tenperiod", '\x2491')
+  ,("tenroman", '\x2179')
+  ,("tesh", '\x02A7')
+  ,("tet", '\x05D8')
+  ,("tetdagesh", '\xFB38')
+  ,("tetdageshhebrew", '\xFB38')
+  ,("tethebrew", '\x05D8')
+  ,("tetsecyrillic", '\x04B5')
+  ,("tevirhebrew", '\x059B')
+  ,("tevirlefthebrew", '\x059B')
+  ,("thabengali", '\x09A5')
+  ,("thadeva", '\x0925')
+  ,("thagujarati", '\x0AA5')
+  ,("thagurmukhi", '\x0A25')
+  ,("thalarabic", '\x0630')
+  ,("thalfinalarabic", '\xFEAC')
+  ,("thanthakhatlowleftthai", '\xF898')
+  ,("thanthakhatlowrightthai", '\xF897')
+  ,("thanthakhatthai", '\x0E4C')
+  ,("thanthakhatupperleftthai", '\xF896')
+  ,("theharabic", '\x062B')
+  ,("thehfinalarabic", '\xFE9A')
+  ,("thehinitialarabic", '\xFE9B')
+  ,("thehmedialarabic", '\xFE9C')
+  ,("thereexists", '\x2203')
+  ,("therefore", '\x2234')
+  ,("theta", '\x03B8')
+  ,("theta1", '\x03D1')
+  ,("thetasymbolgreek", '\x03D1')
+  ,("thieuthacirclekorean", '\x3279')
+  ,("thieuthaparenkorean", '\x3219')
+  ,("thieuthcirclekorean", '\x326B')
+  ,("thieuthkorean", '\x314C')
+  ,("thieuthparenkorean", '\x320B')
+  ,("thirteencircle", '\x246C')
+  ,("thirteenparen", '\x2480')
+  ,("thirteenperiod", '\x2494')
+  ,("thonangmonthothai", '\x0E11')
+  ,("thook", '\x01AD')
+  ,("thophuthaothai", '\x0E12')
+  ,("thorn", '\x00FE')
+  ,("thothahanthai", '\x0E17')
+  ,("thothanthai", '\x0E10')
+  ,("thothongthai", '\x0E18')
+  ,("thothungthai", '\x0E16')
+  ,("thousandcyrillic", '\x0482')
+  ,("thousandsseparatorarabic", '\x066C')
+  ,("thousandsseparatorpersian", '\x066C')
+  ,("three", '\x0033')
+  ,("threearabic", '\x0663')
+  ,("threebengali", '\x09E9')
+  ,("threecircle", '\x2462')
+  ,("threecircleinversesansserif", '\x278C')
+  ,("threedeva", '\x0969')
+  ,("threeeighths", '\x215C')
+  ,("threegujarati", '\x0AE9')
+  ,("threegurmukhi", '\x0A69')
+  ,("threehackarabic", '\x0663')
+  ,("threehangzhou", '\x3023')
+  ,("threeideographicparen", '\x3222')
+  ,("threeinferior", '\x2083')
+  ,("threemonospace", '\xFF13')
+  ,("threenumeratorbengali", '\x09F6')
+  ,("threeoldstyle", '\xF733')
+  ,("threeparen", '\x2476')
+  ,("threeperiod", '\x248A')
+  ,("threepersian", '\x06F3')
+  ,("threequarters", '\x00BE')
+  ,("threequartersemdash", '\xF6DE')
+  ,("threeroman", '\x2172')
+  ,("threesuperior", '\x00B3')
+  ,("threethai", '\x0E53')
+  ,("thzsquare", '\x3394')
+  ,("tihiragana", '\x3061')
+  ,("tikatakana", '\x30C1')
+  ,("tikatakanahalfwidth", '\xFF81')
+  ,("tikeutacirclekorean", '\x3270')
+  ,("tikeutaparenkorean", '\x3210')
+  ,("tikeutcirclekorean", '\x3262')
+  ,("tikeutkorean", '\x3137')
+  ,("tikeutparenkorean", '\x3202')
+  ,("tilde", '\x02DC')
+  ,("tildebelowcmb", '\x0330')
+  ,("tildecmb", '\x0303')
+  ,("tildecomb", '\x0303')
+  ,("tildedoublecmb", '\x0360')
+  ,("tildeoperator", '\x223C')
+  ,("tildeoverlaycmb", '\x0334')
+  ,("tildeverticalcmb", '\x033E')
+  ,("timescircle", '\x2297')
+  ,("tipehahebrew", '\x0596')
+  ,("tipehalefthebrew", '\x0596')
+  ,("tippigurmukhi", '\x0A70')
+  ,("titlocyrilliccmb", '\x0483')
+  ,("tiwnarmenian", '\x057F')
+  ,("tlinebelow", '\x1E6F')
+  ,("tmonospace", '\xFF54')
+  ,("toarmenian", '\x0569')
+  ,("tohiragana", '\x3068')
+  ,("tokatakana", '\x30C8')
+  ,("tokatakanahalfwidth", '\xFF84')
+  ,("tonebarextrahighmod", '\x02E5')
+  ,("tonebarextralowmod", '\x02E9')
+  ,("tonebarhighmod", '\x02E6')
+  ,("tonebarlowmod", '\x02E8')
+  ,("tonebarmidmod", '\x02E7')
+  ,("tonefive", '\x01BD')
+  ,("tonesix", '\x0185')
+  ,("tonetwo", '\x01A8')
+  ,("tonos", '\x0384')
+  ,("tonsquare", '\x3327')
+  ,("topatakthai", '\x0E0F')
+  ,("tortoiseshellbracketleft", '\x3014')
+  ,("tortoiseshellbracketleftsmall", '\xFE5D')
+  ,("tortoiseshellbracketleftvertical", '\xFE39')
+  ,("tortoiseshellbracketright", '\x3015')
+  ,("tortoiseshellbracketrightsmall", '\xFE5E')
+  ,("tortoiseshellbracketrightvertical", '\xFE3A')
+  ,("totaothai", '\x0E15')
+  ,("tpalatalhook", '\x01AB')
+  ,("tparen", '\x24AF')
+  ,("trademark", '\x2122')
+  ,("trademarksans", '\xF8EA')
+  ,("trademarkserif", '\xF6DB')
+  ,("tretroflexhook", '\x0288')
+  ,("triagdn", '\x25BC')
+  ,("triaglf", '\x25C4')
+  ,("triagrt", '\x25BA')
+  ,("triagup", '\x25B2')
+  ,("ts", '\x02A6')
+  ,("tsadi", '\x05E6')
+  ,("tsadidagesh", '\xFB46')
+  ,("tsadidageshhebrew", '\xFB46')
+  ,("tsadihebrew", '\x05E6')
+  ,("tsecyrillic", '\x0446')
+  ,("tsere", '\x05B5')
+  ,("tsere12", '\x05B5')
+  ,("tsere1e", '\x05B5')
+  ,("tsere2b", '\x05B5')
+  ,("tserehebrew", '\x05B5')
+  ,("tserenarrowhebrew", '\x05B5')
+  ,("tserequarterhebrew", '\x05B5')
+  ,("tserewidehebrew", '\x05B5')
+  ,("tshecyrillic", '\x045B')
+  ,("tsuperior", '\xF6F3')
+  ,("ttabengali", '\x099F')
+  ,("ttadeva", '\x091F')
+  ,("ttagujarati", '\x0A9F')
+  ,("ttagurmukhi", '\x0A1F')
+  ,("tteharabic", '\x0679')
+  ,("ttehfinalarabic", '\xFB67')
+  ,("ttehinitialarabic", '\xFB68')
+  ,("ttehmedialarabic", '\xFB69')
+  ,("tthabengali", '\x09A0')
+  ,("tthadeva", '\x0920')
+  ,("tthagujarati", '\x0AA0')
+  ,("tthagurmukhi", '\x0A20')
+  ,("tturned", '\x0287')
+  ,("tuhiragana", '\x3064')
+  ,("tukatakana", '\x30C4')
+  ,("tukatakanahalfwidth", '\xFF82')
+  ,("tusmallhiragana", '\x3063')
+  ,("tusmallkatakana", '\x30C3')
+  ,("tusmallkatakanahalfwidth", '\xFF6F')
+  ,("twelvecircle", '\x246B')
+  ,("twelveparen", '\x247F')
+  ,("twelveperiod", '\x2493')
+  ,("twelveroman", '\x217B')
+  ,("twentycircle", '\x2473')
+  ,("twentyhangzhou", '\x5344')
+  ,("twentyparen", '\x2487')
+  ,("twentyperiod", '\x249B')
+  ,("two", '\x0032')
+  ,("twoarabic", '\x0662')
+  ,("twobengali", '\x09E8')
+  ,("twocircle", '\x2461')
+  ,("twocircleinversesansserif", '\x278B')
+  ,("twodeva", '\x0968')
+  ,("twodotenleader", '\x2025')
+  ,("twodotleader", '\x2025')
+  ,("twodotleadervertical", '\xFE30')
+  ,("twogujarati", '\x0AE8')
+  ,("twogurmukhi", '\x0A68')
+  ,("twohackarabic", '\x0662')
+  ,("twohangzhou", '\x3022')
+  ,("twoideographicparen", '\x3221')
+  ,("twoinferior", '\x2082')
+  ,("twomonospace", '\xFF12')
+  ,("twonumeratorbengali", '\x09F5')
+  ,("twooldstyle", '\xF732')
+  ,("twoparen", '\x2475')
+  ,("twoperiod", '\x2489')
+  ,("twopersian", '\x06F2')
+  ,("tworoman", '\x2171')
+  ,("twostroke", '\x01BB')
+  ,("twosuperior", '\x00B2')
+  ,("twothai", '\x0E52')
+  ,("twothirds", '\x2154')
+  ,("u", '\x0075')
+  ,("uacute", '\x00FA')
+  ,("ubar", '\x0289')
+  ,("ubengali", '\x0989')
+  ,("ubopomofo", '\x3128')
+  ,("ubreve", '\x016D')
+  ,("ucaron", '\x01D4')
+  ,("ucircle", '\x24E4')
+  ,("ucircumflex", '\x00FB')
+  ,("ucircumflexbelow", '\x1E77')
+  ,("ucyrillic", '\x0443')
+  ,("udattadeva", '\x0951')
+  ,("udblacute", '\x0171')
+  ,("udblgrave", '\x0215')
+  ,("udeva", '\x0909')
+  ,("udieresis", '\x00FC')
+  ,("udieresisacute", '\x01D8')
+  ,("udieresisbelow", '\x1E73')
+  ,("udieresiscaron", '\x01DA')
+  ,("udieresiscyrillic", '\x04F1')
+  ,("udieresisgrave", '\x01DC')
+  ,("udieresismacron", '\x01D6')
+  ,("udotbelow", '\x1EE5')
+  ,("ugrave", '\x00F9')
+  ,("ugujarati", '\x0A89')
+  ,("ugurmukhi", '\x0A09')
+  ,("uhiragana", '\x3046')
+  ,("uhookabove", '\x1EE7')
+  ,("uhorn", '\x01B0')
+  ,("uhornacute", '\x1EE9')
+  ,("uhorndotbelow", '\x1EF1')
+  ,("uhorngrave", '\x1EEB')
+  ,("uhornhookabove", '\x1EED')
+  ,("uhorntilde", '\x1EEF')
+  ,("uhungarumlaut", '\x0171')
+  ,("uhungarumlautcyrillic", '\x04F3')
+  ,("uinvertedbreve", '\x0217')
+  ,("ukatakana", '\x30A6')
+  ,("ukatakanahalfwidth", '\xFF73')
+  ,("ukcyrillic", '\x0479')
+  ,("ukorean", '\x315C')
+  ,("umacron", '\x016B')
+  ,("umacroncyrillic", '\x04EF')
+  ,("umacrondieresis", '\x1E7B')
+  ,("umatragurmukhi", '\x0A41')
+  ,("umonospace", '\xFF55')
+  ,("underscore", '\x005F')
+  ,("underscoredbl", '\x2017')
+  ,("underscoremonospace", '\xFF3F')
+  ,("underscorevertical", '\xFE33')
+  ,("underscorewavy", '\xFE4F')
+  ,("union", '\x222A')
+  ,("universal", '\x2200')
+  ,("uogonek", '\x0173')
+  ,("uparen", '\x24B0')
+  ,("upblock", '\x2580')
+  ,("upperdothebrew", '\x05C4')
+  ,("upsilon", '\x03C5')
+  ,("upsilondieresis", '\x03CB')
+  ,("upsilondieresistonos", '\x03B0')
+  ,("upsilonlatin", '\x028A')
+  ,("upsilontonos", '\x03CD')
+  ,("uptackbelowcmb", '\x031D')
+  ,("uptackmod", '\x02D4')
+  ,("uragurmukhi", '\x0A73')
+  ,("uring", '\x016F')
+  ,("ushortcyrillic", '\x045E')
+  ,("usmallhiragana", '\x3045')
+  ,("usmallkatakana", '\x30A5')
+  ,("usmallkatakanahalfwidth", '\xFF69')
+  ,("ustraightcyrillic", '\x04AF')
+  ,("ustraightstrokecyrillic", '\x04B1')
+  ,("utilde", '\x0169')
+  ,("utildeacute", '\x1E79')
+  ,("utildebelow", '\x1E75')
+  ,("uubengali", '\x098A')
+  ,("uudeva", '\x090A')
+  ,("uugujarati", '\x0A8A')
+  ,("uugurmukhi", '\x0A0A')
+  ,("uumatragurmukhi", '\x0A42')
+  ,("uuvowelsignbengali", '\x09C2')
+  ,("uuvowelsigndeva", '\x0942')
+  ,("uuvowelsigngujarati", '\x0AC2')
+  ,("uvowelsignbengali", '\x09C1')
+  ,("uvowelsigndeva", '\x0941')
+  ,("uvowelsigngujarati", '\x0AC1')
+  ,("v", '\x0076')
+  ,("vadeva", '\x0935')
+  ,("vagujarati", '\x0AB5')
+  ,("vagurmukhi", '\x0A35')
+  ,("vakatakana", '\x30F7')
+  ,("vav", '\x05D5')
+  ,("vavdagesh", '\xFB35')
+  ,("vavdagesh65", '\xFB35')
+  ,("vavdageshhebrew", '\xFB35')
+  ,("vavhebrew", '\x05D5')
+  ,("vavholam", '\xFB4B')
+  ,("vavholamhebrew", '\xFB4B')
+  ,("vavvavhebrew", '\x05F0')
+  ,("vavyodhebrew", '\x05F1')
+  ,("vcircle", '\x24E5')
+  ,("vdotbelow", '\x1E7F')
+  ,("vecyrillic", '\x0432')
+  ,("veharabic", '\x06A4')
+  ,("vehfinalarabic", '\xFB6B')
+  ,("vehinitialarabic", '\xFB6C')
+  ,("vehmedialarabic", '\xFB6D')
+  ,("vekatakana", '\x30F9')
+  ,("venus", '\x2640')
+  ,("verticalbar", '\x007C')
+  ,("verticallineabovecmb", '\x030D')
+  ,("verticallinebelowcmb", '\x0329')
+  ,("verticallinelowmod", '\x02CC')
+  ,("verticallinemod", '\x02C8')
+  ,("vewarmenian", '\x057E')
+  ,("vhook", '\x028B')
+  ,("vikatakana", '\x30F8')
+  ,("viramabengali", '\x09CD')
+  ,("viramadeva", '\x094D')
+  ,("viramagujarati", '\x0ACD')
+  ,("visargabengali", '\x0983')
+  ,("visargadeva", '\x0903')
+  ,("visargagujarati", '\x0A83')
+  ,("vmonospace", '\xFF56')
+  ,("voarmenian", '\x0578')
+  ,("voicediterationhiragana", '\x309E')
+  ,("voicediterationkatakana", '\x30FE')
+  ,("voicedmarkkana", '\x309B')
+  ,("voicedmarkkanahalfwidth", '\xFF9E')
+  ,("vokatakana", '\x30FA')
+  ,("vparen", '\x24B1')
+  ,("vtilde", '\x1E7D')
+  ,("vturned", '\x028C')
+  ,("vuhiragana", '\x3094')
+  ,("vukatakana", '\x30F4')
+  ,("w", '\x0077')
+  ,("wacute", '\x1E83')
+  ,("waekorean", '\x3159')
+  ,("wahiragana", '\x308F')
+  ,("wakatakana", '\x30EF')
+  ,("wakatakanahalfwidth", '\xFF9C')
+  ,("wakorean", '\x3158')
+  ,("wasmallhiragana", '\x308E')
+  ,("wasmallkatakana", '\x30EE')
+  ,("wattosquare", '\x3357')
+  ,("wavedash", '\x301C')
+  ,("wavyunderscorevertical", '\xFE34')
+  ,("wawarabic", '\x0648')
+  ,("wawfinalarabic", '\xFEEE')
+  ,("wawhamzaabovearabic", '\x0624')
+  ,("wawhamzaabovefinalarabic", '\xFE86')
+  ,("wbsquare", '\x33DD')
+  ,("wcircle", '\x24E6')
+  ,("wcircumflex", '\x0175')
+  ,("wdieresis", '\x1E85')
+  ,("wdotaccent", '\x1E87')
+  ,("wdotbelow", '\x1E89')
+  ,("wehiragana", '\x3091')
+  ,("weierstrass", '\x2118')
+  ,("wekatakana", '\x30F1')
+  ,("wekorean", '\x315E')
+  ,("weokorean", '\x315D')
+  ,("wgrave", '\x1E81')
+  ,("whitebullet", '\x25E6')
+  ,("whitecircle", '\x25CB')
+  ,("whitecircleinverse", '\x25D9')
+  ,("whitecornerbracketleft", '\x300E')
+  ,("whitecornerbracketleftvertical", '\xFE43')
+  ,("whitecornerbracketright", '\x300F')
+  ,("whitecornerbracketrightvertical", '\xFE44')
+  ,("whitediamond", '\x25C7')
+  ,("whitediamondcontainingblacksmalldiamond", '\x25C8')
+  ,("whitedownpointingsmalltriangle", '\x25BF')
+  ,("whitedownpointingtriangle", '\x25BD')
+  ,("whiteleftpointingsmalltriangle", '\x25C3')
+  ,("whiteleftpointingtriangle", '\x25C1')
+  ,("whitelenticularbracketleft", '\x3016')
+  ,("whitelenticularbracketright", '\x3017')
+  ,("whiterightpointingsmalltriangle", '\x25B9')
+  ,("whiterightpointingtriangle", '\x25B7')
+  ,("whitesmallsquare", '\x25AB')
+  ,("whitesmilingface", '\x263A')
+  ,("whitesquare", '\x25A1')
+  ,("whitestar", '\x2606')
+  ,("whitetelephone", '\x260F')
+  ,("whitetortoiseshellbracketleft", '\x3018')
+  ,("whitetortoiseshellbracketright", '\x3019')
+  ,("whiteuppointingsmalltriangle", '\x25B5')
+  ,("whiteuppointingtriangle", '\x25B3')
+  ,("wihiragana", '\x3090')
+  ,("wikatakana", '\x30F0')
+  ,("wikorean", '\x315F')
+  ,("wmonospace", '\xFF57')
+  ,("wohiragana", '\x3092')
+  ,("wokatakana", '\x30F2')
+  ,("wokatakanahalfwidth", '\xFF66')
+  ,("won", '\x20A9')
+  ,("wonmonospace", '\xFFE6')
+  ,("wowaenthai", '\x0E27')
+  ,("wparen", '\x24B2')
+  ,("wring", '\x1E98')
+  ,("wsuperior", '\x02B7')
+  ,("wturned", '\x028D')
+  ,("wynn", '\x01BF')
+  ,("x", '\x0078')
+  ,("xabovecmb", '\x033D')
+  ,("xbopomofo", '\x3112')
+  ,("xcircle", '\x24E7')
+  ,("xdieresis", '\x1E8D')
+  ,("xdotaccent", '\x1E8B')
+  ,("xeharmenian", '\x056D')
+  ,("xi", '\x03BE')
+  ,("xmonospace", '\xFF58')
+  ,("xparen", '\x24B3')
+  ,("xsuperior", '\x02E3')
+  ,("y", '\x0079')
+  ,("yaadosquare", '\x334E')
+  ,("yabengali", '\x09AF')
+  ,("yacute", '\x00FD')
+  ,("yadeva", '\x092F')
+  ,("yaekorean", '\x3152')
+  ,("yagujarati", '\x0AAF')
+  ,("yagurmukhi", '\x0A2F')
+  ,("yahiragana", '\x3084')
+  ,("yakatakana", '\x30E4')
+  ,("yakatakanahalfwidth", '\xFF94')
+  ,("yakorean", '\x3151')
+  ,("yamakkanthai", '\x0E4E')
+  ,("yasmallhiragana", '\x3083')
+  ,("yasmallkatakana", '\x30E3')
+  ,("yasmallkatakanahalfwidth", '\xFF6C')
+  ,("yatcyrillic", '\x0463')
+  ,("ycircle", '\x24E8')
+  ,("ycircumflex", '\x0177')
+  ,("ydieresis", '\x00FF')
+  ,("ydotaccent", '\x1E8F')
+  ,("ydotbelow", '\x1EF5')
+  ,("yeharabic", '\x064A')
+  ,("yehbarreearabic", '\x06D2')
+  ,("yehbarreefinalarabic", '\xFBAF')
+  ,("yehfinalarabic", '\xFEF2')
+  ,("yehhamzaabovearabic", '\x0626')
+  ,("yehhamzaabovefinalarabic", '\xFE8A')
+  ,("yehhamzaaboveinitialarabic", '\xFE8B')
+  ,("yehhamzaabovemedialarabic", '\xFE8C')
+  ,("yehinitialarabic", '\xFEF3')
+  ,("yehmedialarabic", '\xFEF4')
+  ,("yehmeeminitialarabic", '\xFCDD')
+  ,("yehmeemisolatedarabic", '\xFC58')
+  ,("yehnoonfinalarabic", '\xFC94')
+  ,("yehthreedotsbelowarabic", '\x06D1')
+  ,("yekorean", '\x3156')
+  ,("yen", '\x00A5')
+  ,("yenmonospace", '\xFFE5')
+  ,("yeokorean", '\x3155')
+  ,("yeorinhieuhkorean", '\x3186')
+  ,("yerahbenyomohebrew", '\x05AA')
+  ,("yerahbenyomolefthebrew", '\x05AA')
+  ,("yericyrillic", '\x044B')
+  ,("yerudieresiscyrillic", '\x04F9')
+  ,("yesieungkorean", '\x3181')
+  ,("yesieungpansioskorean", '\x3183')
+  ,("yesieungsioskorean", '\x3182')
+  ,("yetivhebrew", '\x059A')
+  ,("ygrave", '\x1EF3')
+  ,("yhook", '\x01B4')
+  ,("yhookabove", '\x1EF7')
+  ,("yiarmenian", '\x0575')
+  ,("yicyrillic", '\x0457')
+  ,("yikorean", '\x3162')
+  ,("yinyang", '\x262F')
+  ,("yiwnarmenian", '\x0582')
+  ,("ymonospace", '\xFF59')
+  ,("yod", '\x05D9')
+  ,("yoddagesh", '\xFB39')
+  ,("yoddageshhebrew", '\xFB39')
+  ,("yodhebrew", '\x05D9')
+  ,("yodyodhebrew", '\x05F2')
+  ,("yodyodpatahhebrew", '\xFB1F')
+  ,("yohiragana", '\x3088')
+  ,("yoikorean", '\x3189')
+  ,("yokatakana", '\x30E8')
+  ,("yokatakanahalfwidth", '\xFF96')
+  ,("yokorean", '\x315B')
+  ,("yosmallhiragana", '\x3087')
+  ,("yosmallkatakana", '\x30E7')
+  ,("yosmallkatakanahalfwidth", '\xFF6E')
+  ,("yotgreek", '\x03F3')
+  ,("yoyaekorean", '\x3188')
+  ,("yoyakorean", '\x3187')
+  ,("yoyakthai", '\x0E22')
+  ,("yoyingthai", '\x0E0D')
+  ,("yparen", '\x24B4')
+  ,("ypogegrammeni", '\x037A')
+  ,("ypogegrammenigreekcmb", '\x0345')
+  ,("yr", '\x01A6')
+  ,("yring", '\x1E99')
+  ,("ysuperior", '\x02B8')
+  ,("ytilde", '\x1EF9')
+  ,("yturned", '\x028E')
+  ,("yuhiragana", '\x3086')
+  ,("yuikorean", '\x318C')
+  ,("yukatakana", '\x30E6')
+  ,("yukatakanahalfwidth", '\xFF95')
+  ,("yukorean", '\x3160')
+  ,("yusbigcyrillic", '\x046B')
+  ,("yusbigiotifiedcyrillic", '\x046D')
+  ,("yuslittlecyrillic", '\x0467')
+  ,("yuslittleiotifiedcyrillic", '\x0469')
+  ,("yusmallhiragana", '\x3085')
+  ,("yusmallkatakana", '\x30E5')
+  ,("yusmallkatakanahalfwidth", '\xFF6D')
+  ,("yuyekorean", '\x318B')
+  ,("yuyeokorean", '\x318A')
+  ,("yyabengali", '\x09DF')
+  ,("yyadeva", '\x095F')
+  ,("z", '\x007A')
+  ,("zaarmenian", '\x0566')
+  ,("zacute", '\x017A')
+  ,("zadeva", '\x095B')
+  ,("zagurmukhi", '\x0A5B')
+  ,("zaharabic", '\x0638')
+  ,("zahfinalarabic", '\xFEC6')
+  ,("zahinitialarabic", '\xFEC7')
+  ,("zahiragana", '\x3056')
+  ,("zahmedialarabic", '\xFEC8')
+  ,("zainarabic", '\x0632')
+  ,("zainfinalarabic", '\xFEB0')
+  ,("zakatakana", '\x30B6')
+  ,("zaqefgadolhebrew", '\x0595')
+  ,("zaqefqatanhebrew", '\x0594')
+  ,("zarqahebrew", '\x0598')
+  ,("zayin", '\x05D6')
+  ,("zayindagesh", '\xFB36')
+  ,("zayindageshhebrew", '\xFB36')
+  ,("zayinhebrew", '\x05D6')
+  ,("zbopomofo", '\x3117')
+  ,("zcaron", '\x017E')
+  ,("zcircle", '\x24E9')
+  ,("zcircumflex", '\x1E91')
+  ,("zcurl", '\x0291')
+  ,("zdot", '\x017C')
+  ,("zdotaccent", '\x017C')
+  ,("zdotbelow", '\x1E93')
+  ,("zecyrillic", '\x0437')
+  ,("zedescendercyrillic", '\x0499')
+  ,("zedieresiscyrillic", '\x04DF')
+  ,("zehiragana", '\x305C')
+  ,("zekatakana", '\x30BC')
+  ,("zero", '\x0030')
+  ,("zeroarabic", '\x0660')
+  ,("zerobengali", '\x09E6')
+  ,("zerodeva", '\x0966')
+  ,("zerogujarati", '\x0AE6')
+  ,("zerogurmukhi", '\x0A66')
+  ,("zerohackarabic", '\x0660')
+  ,("zeroinferior", '\x2080')
+  ,("zeromonospace", '\xFF10')
+  ,("zerooldstyle", '\xF730')
+  ,("zeropersian", '\x06F0')
+  ,("zerosuperior", '\x2070')
+  ,("zerothai", '\x0E50')
+  ,("zerowidthjoiner", '\xFEFF')
+  ,("zerowidthnonjoiner", '\x200C')
+  ,("zerowidthspace", '\x200B')
+  ,("zeta", '\x03B6')
+  ,("zhbopomofo", '\x3113')
+  ,("zhearmenian", '\x056A')
+  ,("zhebrevecyrillic", '\x04C2')
+  ,("zhecyrillic", '\x0436')
+  ,("zhedescendercyrillic", '\x0497')
+  ,("zhedieresiscyrillic", '\x04DD')
+  ,("zihiragana", '\x3058')
+  ,("zikatakana", '\x30B8')
+  ,("zinorhebrew", '\x05AE')
+  ,("zlinebelow", '\x1E95')
+  ,("zmonospace", '\xFF5A')
+  ,("zohiragana", '\x305E')
+  ,("zokatakana", '\x30BE')
+  ,("zparen", '\x24B5')
+  ,("zretroflexhook", '\x0290')
+  ,("zstroke", '\x01B6')
+  ,("zuhiragana", '\x305A')
+  ,("zukatakana", '\x30BA')
+  ]
diff --git a/lib/Pdf/Content/Ops.hs b/lib/Pdf/Content/Ops.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Ops.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Content stream operators
+
+module Pdf.Content.Ops
+(
+  Op(..),
+  Expr(..),
+  Operator,
+  toOp
+)
+where
+
+import Pdf.Core
+
+import Data.ByteString (ByteString)
+
+-- | Operator with arguments
+type Operator = (Op, [Object])
+
+-- | Content stream operators
+data Op
+  -- | Graphics State Operators
+  = Op_q
+  | Op_Q
+  | Op_cm
+  | Op_w
+  | Op_J
+  | Op_j
+  | Op_M
+  | Op_d
+  | Op_ri
+  | Op_i
+  | Op_gs
+  -- | Path Construction Operators
+  | Op_m
+  | Op_l
+  | Op_c
+  | Op_v
+  | Op_y
+  | Op_h
+  | Op_re
+  -- | Path Painting Operators
+  | Op_S
+  | Op_s
+  | Op_f
+  | Op_F
+  | Op_f_star
+  | Op_B
+  | Op_B_star
+  | Op_b
+  | Op_b_star
+  | Op_n
+  -- | Clipping Path Operators
+  | Op_W
+  | Op_W_star
+  -- | Text Object Operators
+  | Op_BT
+  | Op_ET
+  -- | Text State Operators
+  | Op_Tc
+  | Op_Tw
+  | Op_Tz
+  | Op_TL
+  | Op_Tf
+  | Op_Tr
+  | Op_Ts
+  -- | Text Positioning Operators
+  | Op_Td
+  | Op_TD
+  | Op_Tm
+  | Op_T_star
+  -- | Text Showing Operators
+  | Op_Tj
+  | Op_apostrophe
+  | Op_quote
+  | Op_TJ
+  -- | Type 3 Font Operators
+  | Op_d0
+  | Op_d1
+  -- | Color Operators
+  | Op_CS
+  | Op_cs
+  | Op_SC
+  | Op_SCN
+  | Op_sc
+  | Op_scn
+  | Op_G
+  | Op_g
+  | Op_RG
+  | Op_rg
+  | Op_K
+  | Op_k
+  -- | Shading Operator
+  | Op_sh
+  -- | Inline Image Operators
+  | Op_BI
+  | Op_ID
+  | Op_EI
+  -- | XObject Operator
+  | Op_Do
+  -- | Marked Content Operators
+  | Op_MP
+  | Op_DP
+  | Op_BMC
+  | Op_BDC
+  | Op_EMC
+  -- | Compatibility Operators
+  | Op_BX
+  | Op_EX
+  -- | Unknown
+  | UnknownOp ByteString
+  deriving (Show, Eq)
+
+-- | Expression is a regular objects or an operators
+data Expr
+  = Obj Object
+  | Op Op
+  deriving (Show, Eq)
+
+-- | Conversion to operator
+toOp :: ByteString -> Op
+toOp "q" = Op_q
+toOp "Q" = Op_Q
+toOp "cm" = Op_cm
+toOp "w" = Op_w
+toOp "J" = Op_J
+toOp "j" = Op_j
+toOp "M" = Op_M
+toOp "d" = Op_d
+toOp "ri" = Op_ri
+toOp "i" = Op_i
+toOp "gs" = Op_gs
+toOp "m" = Op_m
+toOp "l" = Op_l
+toOp "c" = Op_c
+toOp "v" = Op_v
+toOp "y" = Op_y
+toOp "h" = Op_h
+toOp "re" = Op_re
+toOp "S" = Op_S
+toOp "s" = Op_s
+toOp "f" = Op_f
+toOp "F" = Op_F
+toOp "f*" = Op_f_star
+toOp "B" = Op_B
+toOp "B*" = Op_B_star
+toOp "b" = Op_b
+toOp "b*" = Op_b_star
+toOp "n" = Op_n
+toOp "W" = Op_W
+toOp "W*" = Op_W_star
+toOp "BT" = Op_BT
+toOp "ET" = Op_ET
+toOp "Tc" = Op_Tc
+toOp "Tw" = Op_Tw
+toOp "Tz" = Op_Tz
+toOp "TL" = Op_TL
+toOp "Tf" = Op_Tf
+toOp "Tr" = Op_Tr
+toOp "Ts" = Op_Ts
+toOp "Td" = Op_Td
+toOp "TD" = Op_TD
+toOp "Tm" = Op_Tm
+toOp "T*" = Op_T_star
+toOp "Tj" = Op_Tj
+toOp "'" = Op_apostrophe
+toOp "\"" = Op_quote
+toOp "TJ" = Op_TJ
+toOp "d0" = Op_d0
+toOp "d1" = Op_d1
+toOp "CS" = Op_CS
+toOp "cs" = Op_cs
+toOp "SC" = Op_SC
+toOp "SCN" = Op_SCN
+toOp "sc" = Op_sc
+toOp "scn" = Op_scn
+toOp "G" = Op_G
+toOp "g" = Op_g
+toOp "RG" = Op_RG
+toOp "rg" = Op_rg
+toOp "K" = Op_K
+toOp "k" = Op_k
+toOp "sh" = Op_sh
+toOp "BI" = Op_BI
+toOp "ID" = Op_ID
+toOp "EI" = Op_EI
+toOp "Do" = Op_Do
+toOp "MP" = Op_MP
+toOp "DP" = Op_DP
+toOp "BMC" = Op_BMC
+toOp "BDC" = Op_BDC
+toOp "EMC" = Op_EMC
+toOp "BX" = Op_BX
+toOp "EX" = Op_EX
+toOp str = UnknownOp str
diff --git a/lib/Pdf/Content/Parser.hs b/lib/Pdf/Content/Parser.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Parser.hs
@@ -0,0 +1,55 @@
+
+-- | Parse content stream
+
+module Pdf.Content.Parser
+(
+  readNextOperator,
+  parseContent,
+)
+where
+
+import Pdf.Core.Exception
+import Pdf.Core.Parsers.Object
+
+import Pdf.Content.Ops
+
+import Data.Attoparsec.ByteString.Char8 (Parser)
+import qualified Data.Attoparsec.ByteString.Char8 as Parser
+import Control.Applicative
+import Control.Monad
+import Control.Exception hiding (throw)
+import System.IO.Streams (InputStream)
+import qualified System.IO.Streams as Streams
+import qualified System.IO.Streams.Attoparsec as Streams
+
+-- | Read the next operator if any
+readNextOperator :: InputStream Expr -> IO (Maybe Operator)
+readNextOperator is = message "readNextOperator" $ go []
+  where
+  go args = do
+    expr <- Streams.read is
+      -- XXX: it should be handled by stream creator
+      `catch` \(Streams.ParseException msg) -> throwIO (Corrupted msg [])
+    case expr of
+      Nothing -> case args of
+                   [] -> return Nothing
+                   _ -> throwIO $ Corrupted ("Args without op: " ++ show args) []
+      Just (Obj o) -> go (o : args)
+      Just (Op o) -> return $ Just (o, reverse args)
+
+-- | Parser expression in a content stream
+parseContent :: Parser (Maybe Expr)
+parseContent = do
+  skipSpace
+  (Parser.endOfInput >> return Nothing) <|>
+    fmap Just (fmap Obj parseObject <|>
+               fmap (Op . toOp) (Parser.takeWhile1 isRegularChar))
+
+-- Treat comments as spaces
+skipSpace :: Parser ()
+skipSpace = do
+  Parser.skipSpace
+  void $ many $ do
+    _ <- Parser.char '%'
+    Parser.skipWhile $ \c -> c /= '\n' && c /= '\r'
+    Parser.skipSpace
diff --git a/lib/Pdf/Content/Processor.hs b/lib/Pdf/Content/Processor.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Processor.hs
@@ -0,0 +1,354 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Process content stream operators maintaining graphics state
+--
+-- It is pretty experimental
+
+module Pdf.Content.Processor
+(
+  Processor(..),
+  GraphicsState(..),
+  GlyphDecoder,
+  Glyph(..),
+  Span(..),
+  initialGraphicsState,
+  mkProcessor,
+  processOp
+)
+where
+
+import Pdf.Core
+import Pdf.Core.Object.Util
+import Pdf.Core.Util
+
+import Pdf.Content.Ops
+import Pdf.Content.Transform
+
+import Data.ByteString (ByteString)
+import Data.Text (Text)
+import qualified Data.Scientific as Scientific
+import qualified Data.Vector as Vector
+import Control.Monad
+
+-- | Given font name and string, it should return list of glyphs
+-- and their widths.
+--
+-- Note: it should not try to position or scale glyphs to user space,
+-- bounding boxes should be defined in glyph space.
+--
+-- Note: glyph width is a distance between the glyph's origin and
+-- the next glyph's origin, so it generally can't be calculated
+-- from bounding box
+--
+-- Note: the 'Processor' actually doesn't cares about glyph's
+-- bounding box, so you can return anything you want
+type GlyphDecoder = Name -> ByteString -> [(Glyph, Double)]
+
+-- | Glyph
+data Glyph = Glyph {
+  -- | The code as read from content stream
+  glyphCode :: Int,
+  -- | Top-left corner of glyph's bounding box
+  glyphTopLeft :: Vector Double,
+  -- | Bottom-right corner of glyph's bounding box
+  glyphBottomRight :: Vector Double,
+  -- | Text ectracted from the glyph
+  glyphText :: Maybe Text
+  }
+  deriving Show
+
+-- | Graphics state
+data GraphicsState = GraphicsState {
+  gsInText :: Bool,    -- ^ Indicates that we are inside text object
+  gsCurrentTransformMatrix :: Transform Double,
+  gsFont :: Maybe Name,
+  gsFontSize :: Maybe Double,
+  gsTextMatrix :: Transform Double,      -- ^ Defined only inside text object
+  gsTextLineMatrix :: Transform Double,  -- ^ Defined only inside text object
+  gsTextLeading :: Double,
+  gsTextCharSpacing :: Double,
+  gsTextWordSpacing :: Double
+  }
+  deriving Show
+
+-- | Empty graphics state
+initialGraphicsState :: GraphicsState
+initialGraphicsState = GraphicsState {
+  gsInText = False,
+  gsCurrentTransformMatrix = identity,
+  gsFont = Nothing,
+  gsFontSize = Nothing,
+  gsTextMatrix = identity,
+  gsTextLineMatrix = identity,
+  gsTextLeading = 0,
+  gsTextCharSpacing = 0,
+  gsTextWordSpacing = 0
+  }
+
+-- | Glyphs drawn in one shot
+data Span = Span
+  { spGlyphs :: [Glyph]
+  , spFontName :: Name
+  }
+
+-- | Processor maintains graphics state
+data Processor = Processor {
+  prState :: GraphicsState,
+  prStateStack :: [GraphicsState],
+  prGlyphDecoder :: GlyphDecoder,
+  prSpans :: [Span]
+  -- ^ Each element is a list of glyphs, drawn in one shot
+  }
+
+-- | Create processor in initial state
+mkProcessor :: Processor
+mkProcessor = Processor {
+  prState = initialGraphicsState,
+  prStateStack = [],
+  prGlyphDecoder = \_ _ -> [],
+  prSpans = mempty
+  }
+
+-- | Process one operation
+processOp :: Operator -> Processor -> Either String Processor
+
+processOp (Op_q, []) p = Right p {prStateStack = prState p : prStateStack p}
+processOp (Op_q, args) _ = Left ("Op_q: wrong number of arguments: "
+                                ++ show args)
+
+processOp (Op_Q, []) p =
+  case prStateStack p of
+    [] -> Left "Op_Q: state is empty"
+    (x:xs) -> Right p {prState = x, prStateStack = xs}
+processOp (Op_Q, args) _ = Left ("Op_Q: wrong number of arguments: "
+                                ++ show args)
+
+processOp (Op_BT, []) p = do
+  ensureInTextObject False p
+  let gstate = prState p
+  return p {prState = gstate {
+    gsInText = True,
+    gsTextMatrix = identity,
+    gsTextLineMatrix = identity
+    }}
+processOp (Op_BT, args) _ = Left ("Op_BT: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_ET, []) p = do
+  ensureInTextObject True p
+  let gstate = prState p
+  return p {prState = gstate {
+    gsInText = False
+    }}
+processOp (Op_ET, args) _ = Left ("Op_ET: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_Td, [txo, tyo]) p = do
+  ensureInTextObject True p
+  tx <- realValue txo `notice` "Td: x should be a real value"
+  ty <- realValue tyo `notice` "Td: y should be a real value"
+  let gstate = prState p
+      tm = translate tx ty $ gsTextLineMatrix gstate
+  Right p {prState = gstate {
+    gsTextMatrix = tm,
+    gsTextLineMatrix = tm
+    }}
+processOp (Op_Td, args) _ = Left ("Op_Td: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_TD, [txo, tyo]) p = do
+  l <- realValue tyo `notice` "TD: y should be a real value"
+  p' <- processOp (Op_TL, [Number $ Scientific.fromFloatDigits $ negate l]) p
+  processOp (Op_Td, [txo, tyo]) p'
+processOp (Op_TD, args) _ = Left ("Op_TD: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_Tm, [a', b', c', d', e', f']) p = do
+  ensureInTextObject True p
+  a <- realValue a' `notice` "Tm: a should be a real value"
+  b <- realValue b' `notice` "Tm: b should be a real value"
+  c <- realValue c' `notice` "Tm: c should be a real value"
+  d <- realValue d' `notice` "Tm: d should be a real value"
+  e <- realValue e' `notice` "Tm: e should be a real value"
+  f <- realValue f' `notice` "Tm: f should be a real value"
+  let gstate = prState p
+      tm = Transform a b c d e f
+  return p {prState = gstate {
+    gsTextMatrix = tm,
+    gsTextLineMatrix = tm
+    }}
+processOp (Op_Tm, args) _ = Left ("Op_Tm: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_T_star, []) p = do
+  ensureInTextObject True p
+  let gstate = prState p
+      l = gsTextLeading gstate
+  processOp (Op_TD, map (Number . Scientific.fromFloatDigits) [0, negate l]) p
+processOp (Op_T_star, args) _ = Left ("Op_T_star: wrong number of arguments: "
+                                      ++ show args)
+
+processOp (Op_TL, [lo]) p = do
+  l <- realValue lo `notice` "TL: l should be a real value"
+  let gstate = prState p
+  return p {prState = gstate {
+    gsTextLeading = l
+    }}
+processOp (Op_TL, args) _ = Left ("Op_TL: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_cm, [a', b', c', d', e', f']) p = do
+  a <- realValue a' `notice` "cm: a should be a real value"
+  b <- realValue b' `notice` "cm: b should be a real value"
+  c <- realValue c' `notice` "cm: c should be a real value"
+  d <- realValue d' `notice` "cm: d should be a real value"
+  e <- realValue e' `notice` "cm: e should be a real value"
+  f <- realValue f' `notice` "cm: f should be a real value"
+  let gstate = prState p
+      ctm = Transform a b c d e f `multiply` gsCurrentTransformMatrix gstate
+  return p {prState = gstate {
+    gsCurrentTransformMatrix = ctm
+    }}
+processOp (Op_cm, args) _ = Left ("Op_cm: wrong number of arguments: "
+                                  ++ show args)
+
+processOp (Op_Tf, [fontO, szO]) p = do
+  font <- nameValue fontO `notice` "Tf: font should be a name"
+  sz <- realValue szO `notice` "Tf: size should be a real value"
+  let gstate = prState p
+  return p {prState = gstate {
+    gsFont = Just font,
+    gsFontSize = Just sz
+    }}
+processOp (Op_Tf, args) _ = Left ("Op_Tf: wrong number of agruments: "
+                                  ++ show args)
+
+processOp (Op_Tj, [String str]) p = do
+  let gstate = prState p
+  fontName <-
+    case gsFont gstate of
+      Nothing -> Left "Op_Tj: font not set"
+      Just fn -> return fn
+  fontSize <-
+    case gsFontSize gstate of
+      Nothing -> Left "Op_Tj: font size not set"
+      Just fs -> return fs
+  let (tm, glyphs) = positionGlyghs
+                       fontSize
+                       (gsCurrentTransformMatrix gstate)
+                       (gsTextMatrix gstate)
+                       (gsTextCharSpacing gstate)
+                       (gsTextWordSpacing gstate)
+                       (prGlyphDecoder p fontName str)
+  let sp = Span
+        { spGlyphs = glyphs
+        , spFontName = fontName
+        }
+  return p {
+    prSpans = sp : prSpans p,
+    prState = gstate {
+      gsTextMatrix = tm
+      }
+    }
+processOp (Op_Tj, args) _ = Left ("Op_Tj: wrong number of agruments:"
+                                  ++ show args)
+
+processOp (Op_TJ, [Array array]) p = do
+  let gstate = prState p
+  fontName <-
+    case gsFont gstate of
+      Nothing -> Left "Op_Tj: font not set"
+      Just fn -> return fn
+  fontSize <-
+    case gsFontSize gstate of
+      Nothing -> Left "Op_Tj: font size not set"
+      Just fs -> return fs
+  let (textMatrix, glyphs) = loop (gsTextMatrix gstate) []
+                                  (Vector.toList array)
+        where
+        loop tm res [] = (tm, reverse res)
+        loop tm res (String str : rest) =
+          let (tm', gs) = positionGlyghs fontSize
+                                         (gsCurrentTransformMatrix gstate)
+                                         tm
+                                         (gsTextCharSpacing gstate)
+                                         (gsTextWordSpacing gstate)
+                                         (prGlyphDecoder p fontName str)
+          in loop tm' (gs : res) rest
+        loop tm res (Number n : rest) =
+          let d = Scientific.toRealFloat n
+          in loop (translate (-d * fontSize / 1000) 0 tm) res rest
+        loop tm res (_:rest) = loop tm res rest
+
+  let mkSpan gs = Span
+        { spGlyphs = gs
+        , spFontName = fontName
+        }
+  return p {
+    prSpans = reverse (map mkSpan glyphs) ++ prSpans p,
+    prState = gstate {
+      gsTextMatrix = textMatrix
+      }
+    }
+processOp (Op_TJ, args) _ = Left ("Op_TJ: wrong number of agruments:"
+                                  ++ show args)
+
+processOp (Op_Tc, [o]) p = do
+  spacing <- realValue o `notice` "Tc: spacing should be a real value"
+  let gstate = prState p
+  return p {
+    prState = gstate {
+      gsTextCharSpacing = spacing
+      }
+    }
+processOp (Op_Tc, args) _ = Left ("Op_Tc: wrong number of agruments:"
+                                  ++ show args)
+
+processOp (Op_Tw, [o]) p = do
+  spacing <- realValue o `notice` "Tw: spacing should be a real value"
+  let gstate = prState p
+  return p {
+    prState = gstate {
+      gsTextWordSpacing = spacing
+      }
+    }
+processOp (Op_Tw, args) _ = Left ("Op_Tw: wrong number of agruments:"
+                                  ++ show args)
+
+processOp (Op_apostrophe, [o]) p = do
+  p' <- processOp (Op_T_star, []) p
+  processOp (Op_Tj, [o]) p'
+processOp (Op_apostrophe, args) _ =
+  Left ("Op_apostrophe: wrong number of agruments:" ++ show args)
+
+processOp _ p = return p
+
+ensureInTextObject :: Bool -> Processor -> Either String ()
+ensureInTextObject inText p =
+  unless (inText == gsInText (prState p)) $
+    Left $ "ensureInTextObject: expected: " ++ show inText ++ ", found: "
+          ++ show (gsInText $ prState p)
+
+positionGlyghs :: Double
+               -> Transform Double
+               -> Transform Double
+               -> Double
+               -> Double
+               -> [(Glyph, Double)]
+               -> (Transform Double, [Glyph])
+positionGlyghs fontSize ctm textMatrix charSpacing wordSpacing
+  = go textMatrix []
+  where
+  go tm res [] = (tm, reverse res)
+  go tm res ((g, width):gs) =
+    let g' = g {
+          glyphTopLeft = transform (multiply tm ctm) topLeft,
+          glyphBottomRight = transform (multiply tm ctm) bottomRight
+          }
+        topLeft = transform (scale fontSize fontSize) $ glyphTopLeft g
+        bottomRight = transform (scale fontSize fontSize) $ glyphBottomRight g
+        spacing = charSpacing + case glyphText g of
+                                  Just " " -> wordSpacing
+                                  _ -> 0
+        tm' = translate (width * fontSize + spacing) 0 tm
+    in go tm' (g':res) gs
diff --git a/lib/Pdf/Content/TexGlyphList.hs b/lib/Pdf/Content/TexGlyphList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/TexGlyphList.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Mapping from glyph names to unicode characters
+-- for TeX fonts
+
+module Pdf.Content.TexGlyphList
+(
+  texGlyphList
+)
+where
+
+import Data.ByteString (ByteString)
+import Data.Map (Map)
+import qualified Data.Map as Map
+
+-- | Glyph list
+texGlyphList :: Map ByteString Char
+texGlyphList = Map.fromList
+  [("Delta", '\x2206')
+  ,("Ifractur", '\x2111')
+  ,("FFsmall", '\xF766')
+  ,("FFIsmall", '\xF766')
+  ,("FFLsmall", '\xF766')
+  ,("FIsmall", '\xF766')
+  ,("FLsmall", '\xF766')
+  ,("Germandbls", '\x0053')
+  ,("Germandblssmall", '\xF773')
+  ,("Ng", '\x014A')
+  ,("Omega", '\x2126')
+  ,("Rfractur", '\x211C')
+  ,("SS", '\x0053')
+  ,("SSsmall", '\xF773')
+  ,("altselector", '\xD802')
+  ,("angbracketleft", '\x27E8')
+  ,("angbracketright", '\x27E9')
+  ,("arrowbothv", '\x2195')
+  ,("arrowdblbothv", '\x21D5')
+  ,("arrowleftbothalf", '\x21BD')
+  ,("arrowlefttophalf", '\x21BC')
+  ,("arrownortheast", '\x2197')
+  ,("arrownorthwest", '\x2196')
+  ,("arrowrightbothalf", '\x21C1')
+  ,("arrowrighttophalf", '\x21C0')
+  ,("arrowsoutheast", '\x2198')
+  ,("arrowsouthwest", '\x2199')
+  ,("ascendercompwordmark", '\xD80A')
+  ,("asteriskcentered", '\x2217')
+  ,("bardbl", '\x2225')
+  ,("capitalcompwordmark", '\xD809')
+  ,("ceilingleft", '\x2308')
+  ,("ceilingright", '\x2309')
+  ,("circlecopyrt", '\x20DD')
+  ,("circledivide", '\x2298')
+  ,("circledot", '\x2299')
+  ,("circleminus", '\x2296')
+  ,("coproduct", '\x2A3F')
+  ,("ct", '\x0063')
+  ,("cwm", '\x200C')
+  ,("dblbracketleft", '\x27E6')
+  ,("dblbracketright", '\x27E7')
+  ,("diamond", '\x2662')
+  ,("diamondmath", '\x22C4')
+  ,("dotlessj", '\x0237')
+  ,("emptyset", '\x2205')
+  ,("emptyslot", '\xD801')
+  ,("epsilon1", '\x03F5')
+  ,("epsiloninv", '\x03F6')
+  ,("equivasymptotic", '\x224D')
+  ,("flat", '\x266D')
+  ,("floorleft", '\x230A')
+  ,("floorright", '\x230B')
+  ,("follows", '\x227B')
+  ,("followsequal", '\x2AB0')
+  ,("followsorcurly", '\x227D')
+  ,("greatermuch", '\x226B')
+  ,("heart", '\x2661')
+  ,("interrobang", '\x203D')
+  ,("interrobangdown", '\x2E18')
+  ,("intersectionsq", '\x2293')
+  ,("latticetop", '\x22A4')
+  ,("lessmuch", '\x226A')
+  ,("longdbls", '\x017F')
+  ,("longsh", '\x017F')
+  ,("longsi", '\x017F')
+  ,("longsl", '\x017F')
+  ,("longst", '\xFB05')
+  ,("lscript", '\x2113')
+  ,("natural", '\x266E')
+  ,("negationslash", '\x0338')
+  ,("ng", '\x014B')
+  ,("owner", '\x220B')
+  ,("pertenthousand", '\x2031')
+  ,("phi", '\x03D5')
+  ,("phi1", '\x03C6')
+  ,("pi1", '\x03D6')
+  ,("precedesequal", '\x2AAF')
+  ,("precedesorcurly", '\x227C')
+  ,("prime", '\x2032')
+  ,("rho1", '\x03F1')
+  ,("ringfitted", '\xD80D')
+  ,("sharp", '\x266F')
+  ,("similarequal", '\x2243')
+  ,("slurabove", '\x2322')
+  ,("slurbelow", '\x2323')
+  ,("st", '\xFB06')
+  ,("star", '\x22C6')
+  ,("subsetsqequal", '\x2291')
+  ,("supersetsqequal", '\x2292')
+  ,("triangle", '\x25B3')
+  ,("triangleinv", '\x25BD')
+  ,("triangleleft", '\x25C1')
+  ,("triangleright", '\x25B7')
+  ,("turnstileleft", '\x22A2')
+  ,("turnstileright", '\x22A3')
+  ,("twelveudash", '\xD80C')
+  ,("unionmulti", '\x228E')
+  ,("unionsq", '\x2294')
+  ,("vector", '\x20D7')
+  ,("visualspace", '\x2423')
+  ,("wreathproduct", '\x2240')
+  ,("Dbar", '\x0110')
+  ,("compwordmark", '\x200C')
+  ,("dbar", '\x0111')
+  ,("rangedash", '\x2013')
+  ,("hyphenchar", '\x002D')
+  ,("punctdash", '\x2014')
+  ,("visiblespace", '\x2423')
+  ,("Yen", '\x00A5')
+  ,("anticlockwise", '\x27F2')
+  ,("arrowparrleftright", '\x21C6')
+  ,("arrowparrrightleft", '\x21C4')
+  ,("arrowtailleft", '\x21A2')
+  ,("arrowtailright", '\x21A3')
+  ,("arrowtripleleft", '\x21DA')
+  ,("arrowtripleright", '\x21DB')
+  ,("between", '\x226C')
+  ,("check", '\x2713')
+  ,("circleR", '\x00AE')
+  ,("circleS", '\x24C8')
+  ,("circleasterisk", '\x229B')
+  ,("circleequal", '\x229C')
+  ,("circlering", '\x229A')
+  ,("clockwise", '\x27F3')
+  ,("complement", '\x2201')
+  ,("curlyleft", '\x21AB')
+  ,("curlyright", '\x21AC')
+  ,("dblarrowdwn", '\x21CA')
+  ,("dblarrowheadleft", '\x219E')
+  ,("dblarrowheadright", '\x21A0')
+  ,("dblarrowup", '\x21C8')
+  ,("defines", '\x225C')
+  ,("diamondsolid", '\x2666')
+  ,("difference", '\x224F')
+  ,("dotplus", '\x2214')
+  ,("downfall", '\x22CE')
+  ,("equaldotleftright", '\x2252')
+  ,("equaldotrightleft", '\x2253')
+  ,("equalorfollows", '\x22DF')
+  ,("equalorgreater", '\x2A96')
+  ,("equalorless", '\x2A95')
+  ,("equalorprecedes", '\x22DE')
+  ,("equalsdots", '\x2251')
+  ,("followsorequal", '\x227F')
+  ,("forces", '\x22A9')
+  ,("forcesbar", '\x22AA')
+  ,("fork", '\x22D4')
+  ,("frown", '\x2322')
+  ,("geomequivalent", '\x224E')
+  ,("greaterdbleqlless", '\x2A8C')
+  ,("greaterdblequal", '\x2267')
+  ,("greaterlessequal", '\x22DB')
+  ,("greaterorapproxeql", '\x2A86')
+  ,("greaterorequalslant", '\x2A7E')
+  ,("greaterorsimilar", '\x2273')
+  ,("harpoondownleft", '\x21C3')
+  ,("harpoondownright", '\x21C2')
+  ,("harpoonleftright", '\x21CC')
+  ,("harpoonrightleft", '\x21CB')
+  ,("harpoonupleft", '\x21BF')
+  ,("harpoonupright", '\x21BE')
+  ,("intercal", '\x22BA')
+  ,("intersectiondbl", '\x22D2')
+  ,("lessdbleqlgreater", '\x2A8B')
+  ,("lessdblequal", '\x2266')
+  ,("lessequalgreater", '\x22DA')
+  ,("lessorapproxeql", '\x2A85')
+  ,("lessorequalslant", '\x2A7D')
+  ,("lessorsimilar", '\x2272')
+  ,("maltesecross", '\x2720')
+  ,("measuredangle", '\x2221')
+  ,("multimap", '\x22B8')
+  ,("multiopenleft", '\x22CB')
+  ,("multiopenright", '\x22CC')
+  ,("nand", '\x22BC')
+  ,("orunderscore", '\x22BB')
+  ,("perpcorrespond", '\x2A5E')
+  ,("precedesorequal", '\x227E')
+  ,("primereverse", '\x2035')
+  ,("revasymptequal", '\x22CD')
+  ,("revsimilar", '\x223D')
+  ,("rightanglene", '\x231D')
+  ,("rightanglenw", '\x231C')
+  ,("rightanglese", '\x231F')
+  ,("rightanglesw", '\x231E')
+  ,("ringinequal", '\x2256')
+  ,("satisfies", '\x22A8')
+  ,("shiftleft", '\x21B0')
+  ,("shiftright", '\x21B1')
+  ,("smile", '\x2323')
+  ,("sphericalangle", '\x2222')
+  ,("square", '\x25A1')
+  ,("squaredot", '\x22A1')
+  ,("squareimage", '\x228F')
+  ,("squareminus", '\x229F')
+  ,("squaremultiply", '\x22A0')
+  ,("squareoriginal", '\x2290')
+  ,("squareplus", '\x229E')
+  ,("squaresolid", '\x25A0')
+  ,("squiggleleftright", '\x21AD')
+  ,("squiggleright", '\x21DD')
+  ,("subsetdbl", '\x22D0')
+  ,("subsetdblequal", '\x2AC5')
+  ,("supersetdbl", '\x22D1')
+  ,("supersetdblequal", '\x2AC6')
+  ,("triangledownsld", '\x25BC')
+  ,("triangleleftequal", '\x22B4')
+  ,("triangleleftsld", '\x25C0')
+  ,("trianglerightequal", '\x22B5')
+  ,("trianglerightsld", '\x25B6')
+  ,("trianglesolid", '\x25B2')
+  ,("uniondbl", '\x22D3')
+  ,("uprise", '\x22CF')
+  ,("Digamma", '\x1D7CB')
+  ,("Finv", '\x2132')
+  ,("Gmir", '\x2141')
+  ,("Omegainv", '\x2127')
+  ,("approxorequal", '\x224A')
+  ,("archleftdown", '\x21B6')
+  ,("archrightdown", '\x21B7')
+  ,("beth", '\x2136')
+  ,("daleth", '\x2138')
+  ,("dividemultiply", '\x22C7')
+  ,("downslope", '\x29F9')
+  ,("equalorsimilar", '\x2242')
+  ,("follownotdbleqv", '\x2ABA')
+  ,("follownotslnteql", '\x2AB6')
+  ,("followornoteqvlnt", '\x22E9')
+  ,("greaterdot", '\x22D7')
+  ,("greaternotdblequal", '\x2A8A')
+  ,("greaternotequal", '\x2A88')
+  ,("greaterornotdbleql", '\x2269')
+  ,("greaterornotequal", '\x2269')
+  ,("integerdivide", '\x2216')
+  ,("lessdot", '\x22D6')
+  ,("lessnotdblequal", '\x2A89')
+  ,("lessnotequal", '\x2A87')
+  ,("lessornotdbleql", '\x2268')
+  ,("lessornotequal", '\x2268')
+  ,("multicloseleft", '\x22C9')
+  ,("multicloseright", '\x22CA')
+  ,("notapproxequal", '\x2247')
+  ,("notarrowboth", '\x21AE')
+  ,("notarrowleft", '\x219A')
+  ,("notarrowright", '\x219B')
+  ,("notbar", '\x2224')
+  ,("notdblarrowboth", '\x21CE')
+  ,("notdblarrowleft", '\x21CD')
+  ,("notdblarrowright", '\x21CF')
+  ,("notexistential", '\x2204')
+  ,("notfollows", '\x2281')
+  ,("notfollowsoreql", '\x2AB0')
+  ,("notforces", '\x22AE')
+  ,("notforcesextra", '\x22AF')
+  ,("notgreaterdblequal", '\x2267')
+  ,("notgreaterequal", '\x2271')
+  ,("notgreaterorslnteql", '\x2A7E')
+  ,("notlessdblequal", '\x2266')
+  ,("notlessequal", '\x2270')
+  ,("notlessorslnteql", '\x2A7D')
+  ,("notprecedesoreql", '\x2AAF')
+  ,("notsatisfies", '\x22AD')
+  ,("notsimilar", '\x2241')
+  ,("notsubseteql", '\x2288')
+  ,("notsubsetordbleql", '\x2AC5')
+  ,("notsubsetoreql", '\x228A')
+  ,("notsuperseteql", '\x2289')
+  ,("notsupersetordbleql", '\x2AC6')
+  ,("notsupersetoreql", '\x228B')
+  ,("nottriangeqlleft", '\x22EC')
+  ,("nottriangeqlright", '\x22ED')
+  ,("nottriangleleft", '\x22EA')
+  ,("nottriangleright", '\x22EB')
+  ,("notturnstile", '\x22AC')
+  ,("planckover2pi", '\x210F')
+  ,("planckover2pi1", '\x210F')
+  ,("precedenotdbleqv", '\x2AB9')
+  ,("precedenotslnteql", '\x2AB5')
+  ,("precedeornoteqvlnt", '\x22E8')
+  ,("subsetnoteql", '\x228A')
+  ,("subsetornotdbleql", '\x2ACB')
+  ,("supersetnoteql", '\x228B')
+  ,("supersetornotdbleql", '\x2ACC')
+  ,("upslope", '\x29F8')
+  ]
diff --git a/lib/Pdf/Content/Transform.hs b/lib/Pdf/Content/Transform.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/Transform.hs
@@ -0,0 +1,56 @@
+
+-- | 2d affine transform
+
+module Pdf.Content.Transform
+(
+  Transform(..),
+  Vector(..),
+  identity,
+  translation,
+  scale,
+  transform,
+  translate,
+  multiply
+)
+where
+
+-- | Affine transform
+data Transform a = Transform a a a a a a
+  deriving Show
+
+-- | 2d vector/point
+data Vector a = Vector a a
+  deriving Show
+
+-- | Identity transform
+identity :: Num a => Transform a
+identity = Transform 1 0 0 1 0 0
+
+-- | Translation
+translation :: Num a => a -> a -> Transform a
+translation tx ty = Transform 1 0 0 1 tx ty
+
+-- | Scale
+scale :: Num a => a -> a -> Transform a
+scale sx sy = Transform sx 0 0 sy 0 0
+
+-- | Apply transformation to vector
+transform :: Num a => Transform a -> Vector a -> Vector a
+transform (Transform a b c d e f) (Vector x y) =
+  Vector (a * x + c * y + e) (b * x + d * y + f)
+
+-- | Translate
+translate :: Num a => a -> a -> Transform a -> Transform a
+translate tx ty t = translation tx ty `multiply` t
+
+-- | Combine two transformations
+multiply :: Num a => Transform a -> Transform a -> Transform a
+multiply (Transform a1 b1 c1 d1 e1 f1) (Transform a2 b2 c2 d2 e2 f2) =
+  Transform a b c d e f
+  where
+  a = a1 * a2 + b1 * c2
+  b = a1 * b2 + b1 * d2
+  c = c1 * a2 + d1 * c2
+  d = c1 * b2 + d1 * d2
+  e = e1 * a2 + f1 * c2 + e2
+  f = e1 * b2 + f1 * d2 + f2
diff --git a/lib/Pdf/Content/UnicodeCMap.hs b/lib/Pdf/Content/UnicodeCMap.hs
new file mode 100644
--- /dev/null
+++ b/lib/Pdf/Content/UnicodeCMap.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Unicode CMap defines mapping from glyphs to text
+
+module Pdf.Content.UnicodeCMap
+(
+  UnicodeCMap(..),
+  parseUnicodeCMap,
+  unicodeCMapNextGlyph,
+  unicodeCMapDecodeGlyph
+)
+where
+
+import Data.Char
+import qualified Data.List as List
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as ByteString
+import qualified Data.ByteString.Base16 as Base16
+import Data.Text (Text)
+import qualified Data.Text as Text
+import qualified Data.Text.Encoding as Text
+import Data.Attoparsec.ByteString.Char8 (Parser, parseOnly)
+import qualified Data.Attoparsec.ByteString.Char8 as P
+import Control.Monad
+import qualified Control.Monad.Fail as Fail
+
+-- | Unicode character map
+--
+-- Font dictionary can contain \"ToUnicode\" key -- reference
+-- to a stream with unicode CMap
+data UnicodeCMap = UnicodeCMap {
+  unicodeCMapCodeRanges :: [(ByteString, ByteString)],
+  unicodeCMapChars :: Map Int Text,
+  unicodeCMapRanges :: [(Int, Int, Char)]
+  }
+  deriving (Show)
+
+-- | Parse content of unicode CMap
+parseUnicodeCMap :: ByteString -> Either String UnicodeCMap
+parseUnicodeCMap cmap =
+  case (codeRanges, chars, ranges) of
+    (Right cr, Right cs, Right (rs, crs)) -> Right $ UnicodeCMap {
+      unicodeCMapCodeRanges = cr,
+      unicodeCMapChars = cs <> crs,
+      unicodeCMapRanges = rs
+      }
+    (Left err, _, _) -> Left $ "CMap code ranges: " ++ err
+    (_, Left err, _) -> Left $ "CMap chars: " ++ err
+    (_, _, Left err) -> Left $ "CMap ranges: " ++ err
+  where
+  codeRanges = parseOnly codeRangesParser cmap
+  chars = parseOnly charsParser cmap
+  ranges = parseOnly rangesParser cmap
+
+-- | Take the next glyph code from string, also returns the rest of the string
+unicodeCMapNextGlyph :: UnicodeCMap -> ByteString -> Maybe (Int, ByteString)
+unicodeCMapNextGlyph cmap = go 1
+  where
+  go 5 _ = Nothing
+  go n str =
+    let glyph = ByteString.take n str in
+    if ByteString.length glyph /= n
+      then Nothing
+      else if any (inRange glyph) (unicodeCMapCodeRanges cmap)
+             then Just (toCode glyph, ByteString.drop n str)
+             else go (n + 1) str
+  inRange glyph (start, end)
+    = ByteString.length glyph == ByteString.length start
+    && glyph >= start && glyph <= end
+
+toCode :: ByteString -> Int
+toCode bs = fst $ ByteString.foldr (\b (sm, i) ->
+                    (sm + fromIntegral b * i, i * 256)) (0, 1) bs
+
+-- | Convert glyph to text
+--
+-- Note: one glyph can represent more then one char, e.g. for ligatures
+unicodeCMapDecodeGlyph :: UnicodeCMap -> Int -> Maybe Text
+unicodeCMapDecodeGlyph cmap glyph =
+  case Map.lookup glyph (unicodeCMapChars cmap) of
+    Just txt -> Just txt
+    Nothing ->
+      case filter inRange (unicodeCMapRanges cmap) of
+        [(start, _, char)] -> Just (Text.singleton $ toEnum
+                                    $ (fromEnum char) + (glyph - start))
+        _ -> Nothing
+  where
+  inRange (start, end, _) = glyph >= start && glyph <= end
+
+charsParser :: Parser (Map Int Text)
+charsParser =
+  combineChars <$> P.many' charsParser'
+  where
+  combineChars = List.foldl' Map.union Map.empty
+
+charsParser' :: Parser (Map Int Text)
+charsParser' = do
+  n <- skipTillParser $ do
+    n <- P.decimal
+    P.skipSpace
+    _ <- P.string "beginbfchar"
+    return n
+
+  chars <- replicateM n $ do
+    P.skipSpace
+    i <- parseHex
+    P.skipSpace
+    j <- parseHex
+    return (toCode i, Text.decodeUtf16BE j)
+
+  return $ Map.fromList chars
+
+-- | It returns regular ranges and char map
+--
+-- Array ranges are converted to char map
+rangesParser :: Parser ([(Int, Int, Char)], Map Int Text)
+rangesParser =
+  combineRanges <$> P.many' rangesParser'
+  where
+  combineRanges = List.foldl' combineRange ([], Map.empty)
+  combineRange (ranges, rmap) (ranges', rmap') =
+    (ranges ++ ranges', Map.union rmap rmap')
+
+rangesParser' :: Parser ([(Int, Int, Char)], Map Int Text)
+rangesParser' = do
+  n <- skipTillParser $ do
+    n <- P.decimal
+    P.skipSpace
+    void $ P.string "beginbfrange"
+    return (n :: Int)
+
+  let go 0 rs cs = return (rs, cs)
+      go count rs cs = do
+        P.skipSpace
+        i <- toCode <$> parseHex
+        P.skipSpace
+        j <- toCode <$> parseHex
+        P.skipSpace
+        k <- P.eitherP parseHex parseHexArray
+        case k of
+          Left h -> do
+            c <- case Text.uncons $ Text.decodeUtf16BE h of
+                   Nothing -> fail "Can't decode range"
+                   Just (v, _) -> return v
+            go (pred count) ((i, j, c) : rs) cs
+          Right hs -> do
+            let cs' = zip [i..j] . map Text.decodeUtf16BE $ hs
+            go (pred count) rs (cs <> Map.fromList cs')
+
+  go n mempty mempty
+
+codeRangesParser :: Parser [(ByteString, ByteString)]
+codeRangesParser = do
+  n <- skipTillParser $ do
+    n <- P.decimal
+    P.skipSpace
+    void $ P.string "begincodespacerange"
+    return n
+
+  replicateM n $ do
+    P.skipSpace
+    i <- parseHex
+    P.skipSpace
+    j <- parseHex
+    return (i, j)
+
+parseHex :: Parser ByteString
+parseHex = do
+  void $ P.char '<'
+  -- hex can contain spaces, lets filter them out
+  res <- P.takeTill (== '>') >>= fromHex . ByteString.filter (/= 32)
+  void $ P.char '>'
+  return res
+
+parseHexArray :: Parser [ByteString]
+parseHexArray = do
+  void $ P.char '['
+  res <- P.many' $ do
+    P.skipSpace
+    parseHex
+  P.skipSpace
+  void $ P.char ']'
+  return res
+
+-- XXX: wtf?!
+fromHex :: Fail.MonadFail m => ByteString -> m ByteString
+fromHex hex = do
+  case Base16.decode (bsToLower hex) of
+    Left err -> fail err
+    Right str -> return str
+  where
+  bsToLower = ByteString.map $ fromIntegral
+                     . fromEnum
+                     . toLower
+                     . toEnum
+                     . fromIntegral
+
+skipTillParser :: Parser a -> Parser a
+skipTillParser p = P.choice [
+  p,
+  P.anyChar >> skipTillParser p
+  ]
diff --git a/lib/Pdf/Toolbox/Content.hs b/lib/Pdf/Toolbox/Content.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-
--- | Low level tools for processing PDF page content stream.
-
-module Pdf.Toolbox.Content
-(
-  module Pdf.Toolbox.Content.Ops,
-  module Pdf.Toolbox.Content.Parser,
-  module Pdf.Toolbox.Content.UnicodeCMap,
-  module Pdf.Toolbox.Content.Processor,
-  module Pdf.Toolbox.Content.Transform,
-  module Pdf.Toolbox.Content.FontInfo
-)
-where
-
-import Pdf.Toolbox.Content.Ops
-import Pdf.Toolbox.Content.Parser
-import Pdf.Toolbox.Content.UnicodeCMap
-import Pdf.Toolbox.Content.Processor
-import Pdf.Toolbox.Content.Transform
-import Pdf.Toolbox.Content.FontInfo
diff --git a/lib/Pdf/Toolbox/Content/Encoding/MacRoman.hs b/lib/Pdf/Toolbox/Content/Encoding/MacRoman.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Encoding/MacRoman.hs
+++ /dev/null
@@ -1,437 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module Pdf.Toolbox.Content.Encoding.MacRoman
-(
-  encoding
-)
-where
-
-import Data.Word
-import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.Text (Text)
-
-encoding :: Map Word8 Text
-encoding = Map.fromList $ zip codes chars
-
-chars :: [Text]
-chars = [
-  "A",
-  "Æ",
-  "Á",
-  "Â",
-  "Ä",
-  "À",
-  "Å",
-  "Ã",
-  "B",
-  "C",
-  "Ç",
-  "D",
-  "E",
-  "É",
-  "Ê",
-  "Ë",
-  "È",
-  "F",
-  "G",
-  "H",
-  "I",
-  "Í",
-  "Î",
-  "Ï",
-  "Ì",
-  "J",
-  "K",
-  "L",
-  "M",
-  "N",
-  "Ñ",
-  "O",
-  "Œ",
-  "Ó",
-  "Ô",
-  "Ö",
-  "Ò",
-  "Ø",
-  "Õ",
-  "P",
-  "Q",
-  "R",
-  "S",
-  "T",
-  "U",
-  "Ú",
-  "Û",
-  "Ü",
-  "Ù",
-  "V",
-  "W",
-  "X",
-  "Y",
-  "Ÿ",
-  "Z",
-  "a",
-  "á",
-  "â",
-  "´",
-  "ä",
-  "æ",
-  "à",
-  "&",
-  "å",
-  "^",
-  "~",
-  "*",
-  "@",
-  "ã",
-  "b",
-  "\\",
-  "|",
-  "{",
-  "}",
-  "[",
-  "]",
-  "˘",
-  "•",
-  "c",
-  "ˇ",
-  "ç",
-  " ̧",
-  "¢",
-  "ˆ",
-  ":",
-  ",",
-  "©",
-  "¤",
-  "d",
-  "†",
-  "‡",
-  "°",
-  "¨",
-  "÷",
-  "$",
-  "˙",
-  "ı",
-  "e",
-  "é",
-  "ê",
-  "ë",
-  "è",
-  "8",
-  "…",
-  "—",
-  "–",
-  "=",
-  "!",
-  "¡",
-  "f",
-  "ﬁ",
-  "5",
-  "ﬂ",
-  "ƒ",
-  "4",
-  "⁄",
-  "g",
-  "ß",
-  "`",
-  ">",
-  "«",
-  "»",
-  "‹",
-  "›",
-  "h",
-  "˝",
-  "-",
-  "i",
-  "í",
-  "î",
-  "ï",
-  "ì",
-  "j",
-  "k",
-  "l",
-  "<",
-  "¬",
-  "m",
-  " ̄",
-  "μ",
-  "n",
-  "9",
-  "ñ",
-  "#",
-  "o",
-  "ó",
-  "ô",
-  "ö",
-  "œ",
-  "˛",
-  "ò",
-  "1",
-  "ª",
-  "º",
-  "ø",
-  "õ",
-  "p",
-  "¶",
-  "(",
-  ")",
-  "%",
-  ".",
-  "·",
-  "‰",
-  "+",
-  "±",
-  "q",
-  "?",
-  "¿",
-  "\"",
-  "„",
-  "“",
-  "”",
-  "‘",
-  "’",
-  "‚",
-  "'",
-  "r",
-  "®",
-  "∘",
-  "s",
-  "§",
-  ";",
-  "7",
-  "6",
-  "/",
-  " ",
-  "£",
-  "t",
-  "3",
-  "~",
-  "™",
-  "2",
-  "u",
-  "ú",
-  "û",
-  "ü",
-  "ù",
-  "_",
-  "v",
-  "w",
-  "x",
-  "y",
-  "ÿ",
-  "¥",
-  "z",
-  "0"
-  ]
-
-codes :: [Word8]
-codes = [
-  0o101,
-  0o256,
-  0o347,
-  0o345,
-  0o200,
-  0o313,
-  0o201,
-  0o314,
-  0o102,
-  0o103,
-  0o202,
-  0o104,
-  0o105,
-  0o203,
-  0o346,
-  0o350,
-  0o351,
-  0o106,
-  0o107,
-  0o110,
-  0o111,
-  0o352,
-  0o353,
-  0o354,
-  0o355,
-  0o112,
-  0o113,
-  0o114,
-  0o115,
-  0o116,
-  0o204,
-  0o117,
-  0o316,
-  0o356,
-  0o357,
-  0o205,
-  0o361,
-  0o257,
-  0o315,
-  0o120,
-  0o121,
-  0o122,
-  0o123,
-  0o124,
-  0o125,
-  0o362,
-  0o363,
-  0o206,
-  0o364,
-  0o126,
-  0o127,
-  0o130,
-  0o131,
-  0o331,
-  0o132,
-  0o141,
-  0o207,
-  0o211,
-  0o253,
-  0o212,
-  0o276,
-  0o210,
-  0o046,
-  0o214,
-  0o136,
-  0o176,
-  0o052,
-  0o100,
-  0o213,
-  0o142,
-  0o134,
-  0o174,
-  0o173,
-  0o175,
-  0o133,
-  0o135,
-  0o371,
-  0o245,
-  0o143,
-  0o377,
-  0o215,
-  0o374,
-  0o242,
-  0o366,
-  0o072,
-  0o054,
-  0o251,
-  0o333,
-  0o144,
-  0o240,
-  0o340,
-  0o241,
-  0o254,
-  0o326,
-  0o044,
-  0o372,
-  0o365,
-  0o145,
-  0o216,
-  0o220,
-  0o221,
-  0o217,
-  0o070,
-  0o311,
-  0o321,
-  0o320,
-  0o075,
-  0o041,
-  0o301,
-  0o146,
-  0o336,
-  0o065,
-  0o337,
-  0o304,
-  0o064,
-  0o332,
-  0o147,
-  0o247,
-  0o140,
-  0o076,
-  0o307,
-  0o310,
-  0o334,
-  0o335,
-  0o150,
-  0o375,
-  0o055,
-  0o151,
-  0o222,
-  0o224,
-  0o225,
-  0o223,
-  0o152,
-  0o153,
-  0o154,
-  0o074,
-  0o302,
-  0o155,
-  0o370,
-  0o265,
-  0o156,
-  0o071,
-  0o226,
-  0o043,
-  0o157,
-  0o227,
-  0o231,
-  0o232,
-  0o317,
-  0o376,
-  0o230,
-  0o061,
-  0o273,
-  0o274,
-  0o277,
-  0o233,
-  0o160,
-  0o246,
-  0o050,
-  0o051,
-  0o045,
-  0o056,
-  0o341,
-  0o344,
-  0o053,
-  0o261,
-  0o161,
-  0o077,
-  0o300,
-  0o042,
-  0o343,
-  0o322,
-  0o323,
-  0o324,
-  0o325,
-  0o342,
-  0o047,
-  0o162,
-  0o250,
-  0o373,
-  0o163,
-  0o244,
-  0o073,
-  0o067,
-  0o066,
-  0o057,
-  0o040,
-  0o243,
-  0o164,
-  0o063,
-  0o367,
-  0o252,
-  0o062,
-  0o165,
-  0o234,
-  0o236,
-  0o237,
-  0o235,
-  0o137,
-  0o166,
-  0o167,
-  0o170,
-  0o171,
-  0o330,
-  0o264,
-  0o172,
-  0o060
-  ]
diff --git a/lib/Pdf/Toolbox/Content/Encoding/WinAnsi.hs b/lib/Pdf/Toolbox/Content/Encoding/WinAnsi.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Encoding/WinAnsi.hs
+++ /dev/null
@@ -1,455 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module Pdf.Toolbox.Content.Encoding.WinAnsi
-(
-  encoding
-)
-where
-
-import Data.Word
-import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.Text (Text)
-
-encoding :: Map Word8 Text
-encoding = Map.fromList $ zip codes chars
-
-chars :: [Text]
-chars = [
-  "A",
-  "Æ",
-  "Á",
-  "Â",
-  "Ä",
-  "À",
-  "Å",
-  "Ã",
-  "B",
-  "C",
-  "Ç",
-  "D",
-  "E",
-  "É",
-  "Ê",
-  "Ë",
-  "È",
-  "Ð",
-  "€",
-  "F",
-  "G",
-  "H",
-  "I",
-  "Í",
-  "Î",
-  "Ï",
-  "Ì",
-  "J",
-  "K",
-  "L",
-  "M",
-  "N",
-  "Ñ",
-  "O",
-  "Œ",
-  "Ó",
-  "Ô",
-  "Ö",
-  "Ò",
-  "Ø",
-  "Õ",
-  "P",
-  "Q",
-  "R",
-  "S",
-  "Š",
-  "T",
-  "Þ",
-  "U",
-  "Ú",
-  "Û",
-  "Ü",
-  "Ù",
-  "V",
-  "W",
-  "X",
-  "Y",
-  "Ý",
-  "Ÿ",
-  "Z",
-  "Ž",
-  "a",
-  "á",
-  "â",
-  "´",
-  "ä",
-  "æ",
-  "à",
-  "&",
-  "å",
-  "^",
-  "~",
-  "*",
-  "@",
-  "ã",
-  "b",
-  "\\",
-  "|",
-  "{",
-  "}",
-  "[",
-  "]",
-  "¦",
-  "•",
-  "c",
-  "ç",
-  " ̧",
-  "¢",
-  "ˆ",
-  ":",
-  ",",
-  "©",
-  "¤",
-  "d",
-  "†",
-  "‡",
-  "°",
-  "¨",
-  "÷",
-  "$",
-  "e",
-  "é",
-  "ê",
-  "ë",
-  "è",
-  "8",
-  "…",
-  "—",
-  "–",
-  "=",
-  "ð",
-  "!",
-  "¡",
-  "f",
-  "5",
-  "ƒ",
-  "4",
-  "g",
-  "ß",
-  "`",
-  ">",
-  "«",
-  "»",
-  "‹",
-  "›",
-  "h",
-  "-",
-  "i",
-  "í",
-  "î",
-  "ï",
-  "ì",
-  "j",
-  "k",
-  "l",
-  "<",
-  "¬",
-  "m",
-  " ̄",
-  "μ",
-  "×",
-  "n",
-  "9",
-  "ñ",
-  "#",
-  "o",
-  "ó",
-  "ô",
-  "ö",
-  "œ",
-  "ò",
-  "1",
-  "½",
-  "¼",
-  "¹",
-  "ª",
-  "º",
-  "ø",
-  "õ",
-  "p",
-  "¶",
-  "(",
-  ")",
-  "%",
-  ".",
-  "·",
-  "‰",
-  "+",
-  "±",
-  "q",
-  "?",
-  "¿",
-  "\"",
-  "„",
-  "“",
-  "”",
-  "‘",
-  "’",
-  "‚",
-  "'",
-  "r",
-  "®",
-  "s",
-  "š",
-  "§",
-  ";",
-  "7",
-  "6",
-  "/",
-  " ",
-  "£",
-  "t",
-  "þ",
-  "3",
-  "¾",
-  "³",
-  "~",
-  "™",
-  "2",
-  "²",
-  "u",
-  "ú",
-  "û",
-  "ü",
-  "ù",
-  "_",
-  "v",
-  "w",
-  "x",
-  "y",
-  "ý",
-  "ÿ",
-  "¥",
-  "z",
-  "ž",
-  "0"
-  ]
-
-codes :: [Word8]
-codes = [
-  0o101,
-  0o306,
-  0o301,
-  0o302,
-  0o304,
-  0o300,
-  0o305,
-  0o303,
-  0o102,
-  0o103,
-  0o307,
-  0o104,
-  0o105,
-  0o311,
-  0o312,
-  0o313,
-  0o310,
-  0o320,
-  0o200,
-  0o106,
-  0o107,
-  0o110,
-  0o111,
-  0o315,
-  0o316,
-  0o317,
-  0o314,
-  0o112,
-  0o113,
-  0o114,
-  0o115,
-  0o116,
-  0o321,
-  0o117,
-  0o214,
-  0o323,
-  0o324,
-  0o326,
-  0o322,
-  0o330,
-  0o325,
-  0o120,
-  0o121,
-  0o122,
-  0o123,
-  0o212,
-  0o124,
-  0o336,
-  0o125,
-  0o332,
-  0o333,
-  0o334,
-  0o331,
-  0o126,
-  0o127,
-  0o130,
-  0o131,
-  0o335,
-  0o237,
-  0o132,
-  0o216,
-  0o141,
-  0o341,
-  0o342,
-  0o264,
-  0o344,
-  0o346,
-  0o340,
-  0o046,
-  0o345,
-  0o136,
-  0o176,
-  0o052,
-  0o100,
-  0o343,
-  0o142,
-  0o134,
-  0o174,
-  0o173,
-  0o175,
-  0o133,
-  0o135,
-  0o246,
-  0o225,
-  0o143,
-  0o347,
-  0o270,
-  0o242,
-  0o210,
-  0o072,
-  0o054,
-  0o251,
-  0o244,
-  0o144,
-  0o206,
-  0o207,
-  0o260,
-  0o250,
-  0o367,
-  0o044,
-  0o145,
-  0o351,
-  0o352,
-  0o353,
-  0o350,
-  0o070,
-  0o205,
-  0o227,
-  0o226,
-  0o075,
-  0o360,
-  0o041,
-  0o241,
-  0o146,
-  0o065,
-  0o203,
-  0o064,
-  0o147,
-  0o337,
-  0o140,
-  0o076,
-  0o253,
-  0o273,
-  0o213,
-  0o233,
-  0o150,
-  0o055,
-  0o151,
-  0o355,
-  0o356,
-  0o357,
-  0o354,
-  0o152,
-  0o153,
-  0o154,
-  0o074,
-  0o254,
-  0o155,
-  0o257,
-  0o265,
-  0o327,
-  0o156,
-  0o071,
-  0o361,
-  0o043,
-  0o157,
-  0o363,
-  0o364,
-  0o366,
-  0o234,
-  0o362,
-  0o061,
-  0o275,
-  0o274,
-  0o271,
-  0o252,
-  0o272,
-  0o370,
-  0o365,
-  0o160,
-  0o266,
-  0o050,
-  0o051,
-  0o045,
-  0o056,
-  0o267,
-  0o211,
-  0o053,
-  0o261,
-  0o161,
-  0o077,
-  0o277,
-  0o042,
-  0o204,
-  0o223,
-  0o224,
-  0o221,
-  0o222,
-  0o202,
-  0o047,
-  0o162,
-  0o256,
-  0o163,
-  0o232,
-  0o247,
-  0o073,
-  0o067,
-  0o066,
-  0o057,
-  0o040,
-  0o243,
-  0o164,
-  0o376,
-  0o063,
-  0o276,
-  0o263,
-  0o230,
-  0o231,
-  0o062,
-  0o262,
-  0o165,
-  0o372,
-  0o373,
-  0o374,
-  0o371,
-  0o137,
-  0o166,
-  0o167,
-  0o170,
-  0o171,
-  0o375,
-  0o377,
-  0o245,
-  0o172,
-  0o236,
-  0o060
-  ]
diff --git a/lib/Pdf/Toolbox/Content/FontInfo.hs b/lib/Pdf/Toolbox/Content/FontInfo.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/FontInfo.hs
+++ /dev/null
@@ -1,223 +0,0 @@
-
--- | Font info contains information, extracted from font,
--- that may be needed when processing content stream
-
-module Pdf.Toolbox.Content.FontInfo
-(
-  FontInfo(..),
-  FISimple(..),
-  FontBaseEncoding(..),
-  SimpleFontEncoding(..),
-  FIComposite(..),
-  CIDFontWidths(..),
-  makeCIDFontWidths,
-  cidFontGetWidth,
-  fontInfoDecodeGlyphs
-)
-where
-
-import Data.List
-import Data.Word
-import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS
-import Data.Text (Text)
-import qualified Data.Text as Text
-import qualified Data.Text.Encoding as Text
-import Control.Monad
-
-import Pdf.Toolbox.Core
-
-import Pdf.Toolbox.Content.UnicodeCMap
-import Pdf.Toolbox.Content.Transform
-import Pdf.Toolbox.Content.Processor (Glyph(..))
-import Pdf.Toolbox.Content.GlyphList
-import Pdf.Toolbox.Content.TexGlyphList
-import qualified Pdf.Toolbox.Content.Encoding.WinAnsi as WinAnsi
-import qualified Pdf.Toolbox.Content.Encoding.MacRoman as MacRoman
-
--- | Font info
-data FontInfo
-  = FontInfoSimple FISimple
-  | FontInfoComposite FIComposite
-  deriving (Show)
-
--- | Font info for simple fonts
-data FISimple = FISimple {
-  fiSimpleUnicodeCMap :: Maybe UnicodeCMap,
-  fiSimpleEncoding :: Maybe SimpleFontEncoding,
-  fiSimpleWidths :: Maybe (Int, Int, [Double]),  -- ^ FirstChar, LastChar, list of widths
-  fiSimpleFontMatrix :: Transform Double
-  }
-  deriving (Show)
-
--- | Standard encoding, other encodings are based on them
-data FontBaseEncoding
-  = FontBaseEncodingWinAnsi
-  | FontBaseEncodingMacRoman
-  deriving (Show)
-
--- | Encoding fo simple font
-data SimpleFontEncoding = SimpleFontEncoding {
-  simpleFontBaseEncoding :: FontBaseEncoding,
-  -- | Mapping from glyph code to glyph name for cases when it is different
-  -- from base encoding
-  simpleFontDifferences :: [(Word8, ByteString)]
-  }
-  deriving (Show)
-
--- | Font info for Type0 font
-data FIComposite = FIComposite {
-  fiCompositeUnicodeCMap :: Maybe UnicodeCMap,
-  fiCompositeWidths :: CIDFontWidths,
-  fiCompositeDefaultWidth :: Double
-  }
-  deriving (Show)
-
--- | Glyph widths for CID fonts
-data CIDFontWidths = CIDFontWidths {
-  cidFontWidthsChars :: Map Int Double,
-  cidFontWidthsRanges :: [(Int, Int, Double)]
-  }
-  deriving (Show)
-
-instance Monoid CIDFontWidths where
-  mempty = CIDFontWidths {
-    cidFontWidthsChars = mempty,
-    cidFontWidthsRanges = mempty
-    }
-  w1 `mappend` w2 = CIDFontWidths {
-    cidFontWidthsChars = cidFontWidthsChars w1 `mappend` cidFontWidthsChars w2,
-    cidFontWidthsRanges = cidFontWidthsRanges w1 `mappend` cidFontWidthsRanges w2
-    }
-
-simpleFontEncodingDecode :: SimpleFontEncoding -> Word8 -> Maybe Text
-simpleFontEncodingDecode enc code =
-  case lookup code (simpleFontDifferences enc) of
-    Nothing ->
-      case simpleFontBaseEncoding enc of
-        FontBaseEncodingWinAnsi -> Map.lookup code WinAnsi.encoding
-        FontBaseEncodingMacRoman -> Map.lookup code MacRoman.encoding
-    Just glyphName ->
-      case Map.lookup glyphName adobeGlyphList of
-        Just c -> Just $ Text.pack [c]
-        Nothing ->
-          case Map.lookup glyphName texGlyphList of
-            Nothing-> Nothing
-            Just c -> Just $ Text.pack [c]
-
--- | Make `CIDFontWidths` from value of \"W\" key in descendant font
-makeCIDFontWidths :: Monad m => Array -> PdfE m CIDFontWidths
-makeCIDFontWidths (Array vals) = go mempty vals
-  where
-  go res [] = return res
-  go res (ONumber x1 : ONumber x2 : ONumber x3 : xs) = do
-    n1 <- intValue x1
-    n2 <- intValue x2
-    n3 <- realValue x3
-    go res {cidFontWidthsRanges = (n1, n2, n3) : cidFontWidthsRanges res} xs
-  go res (ONumber x: OArray (Array arr): xs) = do
-    n <- intValue x
-    ws <- forM arr $ \w -> fromObject w >>= realValue
-    go res {cidFontWidthsChars = Map.fromList (zip [n ..] ws) `mappend` cidFontWidthsChars res} xs
-  go _ _ = throwE $ UnexpectedError "Can't parse CIDFont width"
-
--- | Get glyph width by glyph code
-cidFontGetWidth :: CIDFontWidths -> Int -> Maybe Double
-cidFontGetWidth w code =
-  case Map.lookup code (cidFontWidthsChars w) of
-    Just width -> Just width
-    Nothing -> case find (\(start, end, _) -> code >= start && code <= end) (cidFontWidthsRanges w) of
-                 Just (_, _, width) -> Just width
-                 _ -> Nothing
-
--- | Decode string into list of glyphs and their widths
-fontInfoDecodeGlyphs :: FontInfo -> Str -> [(Glyph, Double)]
-fontInfoDecodeGlyphs (FontInfoSimple fi) = \(Str bs) ->
-  flip map (BS.unpack bs) $ \c ->
-    let code = fromIntegral c
-        txt =
-          case fiSimpleUnicodeCMap fi of
-            Nothing ->
-              case fiSimpleEncoding fi of
-                Nothing ->
-                  case Text.decodeUtf8' (BS.pack [c]) of
-                    Right t -> Just t
-                    _ -> Nothing
-                Just enc ->
-                  case simpleFontEncodingDecode enc c of
-                    Just t -> Just t
-                    Nothing ->
-                      case Text.decodeUtf8' (BS.pack [c]) of
-                        Right t -> Just t
-                        _ -> Nothing
-            Just toUnicode ->
-              case unicodeCMapDecodeGlyph toUnicode code of
-                Just t -> Just t
-                Nothing ->
-                  case fiSimpleEncoding fi of
-                    Nothing -> Nothing
-                    Just enc ->
-                      case simpleFontEncodingDecode enc c of
-                        Just t -> Just t
-                        Nothing ->
-                          case Text.decodeUtf8' (BS.pack [c]) of
-                            Right t -> Just t
-                            _ -> Nothing
-        width =
-          case fiSimpleWidths fi of
-            Nothing -> 0
-            Just (firstChar, lastChar, widths) ->
-              if code >= firstChar && code <= lastChar && (code - firstChar) < length widths
-                 then let Vector w _ = transform (fiSimpleFontMatrix fi) $ Vector (widths !! (code - firstChar)) 0
-                      in w
-                 else 0
-    in (Glyph {
-      glyphCode = code,
-      glyphTopLeft = Vector 0 0,
-      glyphBottomRight = Vector width 1,
-      glyphText = txt
-      }, width)
-fontInfoDecodeGlyphs (FontInfoComposite fi) = \str ->
-  case fiCompositeUnicodeCMap fi of
-    Nothing ->  -- XXX: use encoding here
-      let Str bs = str
-      in tryDecode2byte $ BS.unpack bs
-    Just toUnicode ->
-      let getWidth = fromMaybe (fiCompositeDefaultWidth fi) . cidFontGetWidth (fiCompositeWidths fi)
-      in cmapDecodeString getWidth toUnicode str
-  where
-  -- Most of the time composite fonts have 2-byte encoding,
-  -- so lets try that for now.
-  tryDecode2byte (b1:b2:rest) =
-    let code = fromIntegral b1 * 255 + fromIntegral b2
-        width = (/ 1000) $ fromMaybe (fiCompositeDefaultWidth fi) $ cidFontGetWidth (fiCompositeWidths fi) code
-        txt =
-          case Text.decodeUtf8' (BS.pack [b1, b2]) of
-            Right t -> Just t
-            _ -> Nothing
-        g = Glyph {
-          glyphCode = code,
-          glyphTopLeft = Vector 0 0,
-          glyphBottomRight = Vector width 1,
-          glyphText = txt
-          }
-    in (g, width) : tryDecode2byte rest
-  tryDecode2byte _ = []
-
-cmapDecodeString :: (Int -> Double) -> UnicodeCMap -> Str -> [(Glyph, Double)]
-cmapDecodeString getWidth cmap (Str str) = go str
-  where
-  go s =
-    case unicodeCMapNextGlyph cmap s of
-      Nothing -> []
-      Just (g, rest) ->
-        let width = getWidth g / 1000
-            glyph = Glyph {
-          glyphCode = g,
-          glyphTopLeft = Vector 0 0,
-          glyphBottomRight = Vector width 1,
-          glyphText = unicodeCMapDecodeGlyph cmap g
-          }
-        in (glyph, width) : go rest
diff --git a/lib/Pdf/Toolbox/Content/GlyphList.hs b/lib/Pdf/Toolbox/Content/GlyphList.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/GlyphList.hs
+++ /dev/null
@@ -1,4299 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Mapping from glyph names to unicode characters
-
-module Pdf.Toolbox.Content.GlyphList
-(
-    adobeGlyphList
-)
-where
-
-import Data.ByteString (ByteString)
-import Data.Map (Map)
-import qualified Data.Map as Map
-
--- | Glyph list
-adobeGlyphList :: Map ByteString Char
-adobeGlyphList = Map.fromList
-  [("A", '\x0041')
-  ,("AE", '\x00C6')
-  ,("AEacute", '\x01FC')
-  ,("AEmacron", '\x01E2')
-  ,("AEsmall", '\xF7E6')
-  ,("Aacute", '\x00C1')
-  ,("Aacutesmall", '\xF7E1')
-  ,("Abreve", '\x0102')
-  ,("Abreveacute", '\x1EAE')
-  ,("Abrevecyrillic", '\x04D0')
-  ,("Abrevedotbelow", '\x1EB6')
-  ,("Abrevegrave", '\x1EB0')
-  ,("Abrevehookabove", '\x1EB2')
-  ,("Abrevetilde", '\x1EB4')
-  ,("Acaron", '\x01CD')
-  ,("Acircle", '\x24B6')
-  ,("Acircumflex", '\x00C2')
-  ,("Acircumflexacute", '\x1EA4')
-  ,("Acircumflexdotbelow", '\x1EAC')
-  ,("Acircumflexgrave", '\x1EA6')
-  ,("Acircumflexhookabove", '\x1EA8')
-  ,("Acircumflexsmall", '\xF7E2')
-  ,("Acircumflextilde", '\x1EAA')
-  ,("Acute", '\xF6C9')
-  ,("Acutesmall", '\xF7B4')
-  ,("Acyrillic", '\x0410')
-  ,("Adblgrave", '\x0200')
-  ,("Adieresis", '\x00C4')
-  ,("Adieresiscyrillic", '\x04D2')
-  ,("Adieresismacron", '\x01DE')
-  ,("Adieresissmall", '\xF7E4')
-  ,("Adotbelow", '\x1EA0')
-  ,("Adotmacron", '\x01E0')
-  ,("Agrave", '\x00C0')
-  ,("Agravesmall", '\xF7E0')
-  ,("Ahookabove", '\x1EA2')
-  ,("Aiecyrillic", '\x04D4')
-  ,("Ainvertedbreve", '\x0202')
-  ,("Alpha", '\x0391')
-  ,("Alphatonos", '\x0386')
-  ,("Amacron", '\x0100')
-  ,("Amonospace", '\xFF21')
-  ,("Aogonek", '\x0104')
-  ,("Aring", '\x00C5')
-  ,("Aringacute", '\x01FA')
-  ,("Aringbelow", '\x1E00')
-  ,("Aringsmall", '\xF7E5')
-  ,("Asmall", '\xF761')
-  ,("Atilde", '\x00C3')
-  ,("Atildesmall", '\xF7E3')
-  ,("Aybarmenian", '\x0531')
-  ,("B", '\x0042')
-  ,("Bcircle", '\x24B7')
-  ,("Bdotaccent", '\x1E02')
-  ,("Bdotbelow", '\x1E04')
-  ,("Becyrillic", '\x0411')
-  ,("Benarmenian", '\x0532')
-  ,("Beta", '\x0392')
-  ,("Bhook", '\x0181')
-  ,("Blinebelow", '\x1E06')
-  ,("Bmonospace", '\xFF22')
-  ,("Brevesmall", '\xF6F4')
-  ,("Bsmall", '\xF762')
-  ,("Btopbar", '\x0182')
-  ,("C", '\x0043')
-  ,("Caarmenian", '\x053E')
-  ,("Cacute", '\x0106')
-  ,("Caron", '\xF6CA')
-  ,("Caronsmall", '\xF6F5')
-  ,("Ccaron", '\x010C')
-  ,("Ccedilla", '\x00C7')
-  ,("Ccedillaacute", '\x1E08')
-  ,("Ccedillasmall", '\xF7E7')
-  ,("Ccircle", '\x24B8')
-  ,("Ccircumflex", '\x0108')
-  ,("Cdot", '\x010A')
-  ,("Cdotaccent", '\x010A')
-  ,("Cedillasmall", '\xF7B8')
-  ,("Chaarmenian", '\x0549')
-  ,("Cheabkhasiancyrillic", '\x04BC')
-  ,("Checyrillic", '\x0427')
-  ,("Chedescenderabkhasiancyrillic", '\x04BE')
-  ,("Chedescendercyrillic", '\x04B6')
-  ,("Chedieresiscyrillic", '\x04F4')
-  ,("Cheharmenian", '\x0543')
-  ,("Chekhakassiancyrillic", '\x04CB')
-  ,("Cheverticalstrokecyrillic", '\x04B8')
-  ,("Chi", '\x03A7')
-  ,("Chook", '\x0187')
-  ,("Circumflexsmall", '\xF6F6')
-  ,("Cmonospace", '\xFF23')
-  ,("Coarmenian", '\x0551')
-  ,("Csmall", '\xF763')
-  ,("D", '\x0044')
-  ,("DZ", '\x01F1')
-  ,("DZcaron", '\x01C4')
-  ,("Daarmenian", '\x0534')
-  ,("Dafrican", '\x0189')
-  ,("Dcaron", '\x010E')
-  ,("Dcedilla", '\x1E10')
-  ,("Dcircle", '\x24B9')
-  ,("Dcircumflexbelow", '\x1E12')
-  ,("Dcroat", '\x0110')
-  ,("Ddotaccent", '\x1E0A')
-  ,("Ddotbelow", '\x1E0C')
-  ,("Decyrillic", '\x0414')
-  ,("Deicoptic", '\x03EE')
-  ,("Delta", '\x2206')
-  ,("Deltagreek", '\x0394')
-  ,("Dhook", '\x018A')
-  ,("Dieresis", '\xF6CB')
-  ,("DieresisAcute", '\xF6CC')
-  ,("DieresisGrave", '\xF6CD')
-  ,("Dieresissmall", '\xF7A8')
-  ,("Digammagreek", '\x03DC')
-  ,("Djecyrillic", '\x0402')
-  ,("Dlinebelow", '\x1E0E')
-  ,("Dmonospace", '\xFF24')
-  ,("Dotaccentsmall", '\xF6F7')
-  ,("Dslash", '\x0110')
-  ,("Dsmall", '\xF764')
-  ,("Dtopbar", '\x018B')
-  ,("Dz", '\x01F2')
-  ,("Dzcaron", '\x01C5')
-  ,("Dzeabkhasiancyrillic", '\x04E0')
-  ,("Dzecyrillic", '\x0405')
-  ,("Dzhecyrillic", '\x040F')
-  ,("E", '\x0045')
-  ,("Eacute", '\x00C9')
-  ,("Eacutesmall", '\xF7E9')
-  ,("Ebreve", '\x0114')
-  ,("Ecaron", '\x011A')
-  ,("Ecedillabreve", '\x1E1C')
-  ,("Echarmenian", '\x0535')
-  ,("Ecircle", '\x24BA')
-  ,("Ecircumflex", '\x00CA')
-  ,("Ecircumflexacute", '\x1EBE')
-  ,("Ecircumflexbelow", '\x1E18')
-  ,("Ecircumflexdotbelow", '\x1EC6')
-  ,("Ecircumflexgrave", '\x1EC0')
-  ,("Ecircumflexhookabove", '\x1EC2')
-  ,("Ecircumflexsmall", '\xF7EA')
-  ,("Ecircumflextilde", '\x1EC4')
-  ,("Ecyrillic", '\x0404')
-  ,("Edblgrave", '\x0204')
-  ,("Edieresis", '\x00CB')
-  ,("Edieresissmall", '\xF7EB')
-  ,("Edot", '\x0116')
-  ,("Edotaccent", '\x0116')
-  ,("Edotbelow", '\x1EB8')
-  ,("Efcyrillic", '\x0424')
-  ,("Egrave", '\x00C8')
-  ,("Egravesmall", '\xF7E8')
-  ,("Eharmenian", '\x0537')
-  ,("Ehookabove", '\x1EBA')
-  ,("Eightroman", '\x2167')
-  ,("Einvertedbreve", '\x0206')
-  ,("Eiotifiedcyrillic", '\x0464')
-  ,("Elcyrillic", '\x041B')
-  ,("Elevenroman", '\x216A')
-  ,("Emacron", '\x0112')
-  ,("Emacronacute", '\x1E16')
-  ,("Emacrongrave", '\x1E14')
-  ,("Emcyrillic", '\x041C')
-  ,("Emonospace", '\xFF25')
-  ,("Encyrillic", '\x041D')
-  ,("Endescendercyrillic", '\x04A2')
-  ,("Eng", '\x014A')
-  ,("Enghecyrillic", '\x04A4')
-  ,("Enhookcyrillic", '\x04C7')
-  ,("Eogonek", '\x0118')
-  ,("Eopen", '\x0190')
-  ,("Epsilon", '\x0395')
-  ,("Epsilontonos", '\x0388')
-  ,("Ercyrillic", '\x0420')
-  ,("Ereversed", '\x018E')
-  ,("Ereversedcyrillic", '\x042D')
-  ,("Escyrillic", '\x0421')
-  ,("Esdescendercyrillic", '\x04AA')
-  ,("Esh", '\x01A9')
-  ,("Esmall", '\xF765')
-  ,("Eta", '\x0397')
-  ,("Etarmenian", '\x0538')
-  ,("Etatonos", '\x0389')
-  ,("Eth", '\x00D0')
-  ,("Ethsmall", '\xF7F0')
-  ,("Etilde", '\x1EBC')
-  ,("Etildebelow", '\x1E1A')
-  ,("Euro", '\x20AC')
-  ,("Ezh", '\x01B7')
-  ,("Ezhcaron", '\x01EE')
-  ,("Ezhreversed", '\x01B8')
-  ,("F", '\x0046')
-  ,("Fcircle", '\x24BB')
-  ,("Fdotaccent", '\x1E1E')
-  ,("Feharmenian", '\x0556')
-  ,("Feicoptic", '\x03E4')
-  ,("Fhook", '\x0191')
-  ,("Fitacyrillic", '\x0472')
-  ,("Fiveroman", '\x2164')
-  ,("Fmonospace", '\xFF26')
-  ,("Fourroman", '\x2163')
-  ,("Fsmall", '\xF766')
-  ,("G", '\x0047')
-  ,("GBsquare", '\x3387')
-  ,("Gacute", '\x01F4')
-  ,("Gamma", '\x0393')
-  ,("Gammaafrican", '\x0194')
-  ,("Gangiacoptic", '\x03EA')
-  ,("Gbreve", '\x011E')
-  ,("Gcaron", '\x01E6')
-  ,("Gcedilla", '\x0122')
-  ,("Gcircle", '\x24BC')
-  ,("Gcircumflex", '\x011C')
-  ,("Gcommaaccent", '\x0122')
-  ,("Gdot", '\x0120')
-  ,("Gdotaccent", '\x0120')
-  ,("Gecyrillic", '\x0413')
-  ,("Ghadarmenian", '\x0542')
-  ,("Ghemiddlehookcyrillic", '\x0494')
-  ,("Ghestrokecyrillic", '\x0492')
-  ,("Gheupturncyrillic", '\x0490')
-  ,("Ghook", '\x0193')
-  ,("Gimarmenian", '\x0533')
-  ,("Gjecyrillic", '\x0403')
-  ,("Gmacron", '\x1E20')
-  ,("Gmonospace", '\xFF27')
-  ,("Grave", '\xF6CE')
-  ,("Gravesmall", '\xF760')
-  ,("Gsmall", '\xF767')
-  ,("Gsmallhook", '\x029B')
-  ,("Gstroke", '\x01E4')
-  ,("H", '\x0048')
-  ,("H18533", '\x25CF')
-  ,("H18543", '\x25AA')
-  ,("H18551", '\x25AB')
-  ,("H22073", '\x25A1')
-  ,("HPsquare", '\x33CB')
-  ,("Haabkhasiancyrillic", '\x04A8')
-  ,("Hadescendercyrillic", '\x04B2')
-  ,("Hardsigncyrillic", '\x042A')
-  ,("Hbar", '\x0126')
-  ,("Hbrevebelow", '\x1E2A')
-  ,("Hcedilla", '\x1E28')
-  ,("Hcircle", '\x24BD')
-  ,("Hcircumflex", '\x0124')
-  ,("Hdieresis", '\x1E26')
-  ,("Hdotaccent", '\x1E22')
-  ,("Hdotbelow", '\x1E24')
-  ,("Hmonospace", '\xFF28')
-  ,("Hoarmenian", '\x0540')
-  ,("Horicoptic", '\x03E8')
-  ,("Hsmall", '\xF768')
-  ,("Hungarumlaut", '\xF6CF')
-  ,("Hungarumlautsmall", '\xF6F8')
-  ,("Hzsquare", '\x3390')
-  ,("I", '\x0049')
-  ,("IAcyrillic", '\x042F')
-  ,("IJ", '\x0132')
-  ,("IUcyrillic", '\x042E')
-  ,("Iacute", '\x00CD')
-  ,("Iacutesmall", '\xF7ED')
-  ,("Ibreve", '\x012C')
-  ,("Icaron", '\x01CF')
-  ,("Icircle", '\x24BE')
-  ,("Icircumflex", '\x00CE')
-  ,("Icircumflexsmall", '\xF7EE')
-  ,("Icyrillic", '\x0406')
-  ,("Idblgrave", '\x0208')
-  ,("Idieresis", '\x00CF')
-  ,("Idieresisacute", '\x1E2E')
-  ,("Idieresiscyrillic", '\x04E4')
-  ,("Idieresissmall", '\xF7EF')
-  ,("Idot", '\x0130')
-  ,("Idotaccent", '\x0130')
-  ,("Idotbelow", '\x1ECA')
-  ,("Iebrevecyrillic", '\x04D6')
-  ,("Iecyrillic", '\x0415')
-  ,("Ifraktur", '\x2111')
-  ,("Igrave", '\x00CC')
-  ,("Igravesmall", '\xF7EC')
-  ,("Ihookabove", '\x1EC8')
-  ,("Iicyrillic", '\x0418')
-  ,("Iinvertedbreve", '\x020A')
-  ,("Iishortcyrillic", '\x0419')
-  ,("Imacron", '\x012A')
-  ,("Imacroncyrillic", '\x04E2')
-  ,("Imonospace", '\xFF29')
-  ,("Iniarmenian", '\x053B')
-  ,("Iocyrillic", '\x0401')
-  ,("Iogonek", '\x012E')
-  ,("Iota", '\x0399')
-  ,("Iotaafrican", '\x0196')
-  ,("Iotadieresis", '\x03AA')
-  ,("Iotatonos", '\x038A')
-  ,("Ismall", '\xF769')
-  ,("Istroke", '\x0197')
-  ,("Itilde", '\x0128')
-  ,("Itildebelow", '\x1E2C')
-  ,("Izhitsacyrillic", '\x0474')
-  ,("Izhitsadblgravecyrillic", '\x0476')
-  ,("J", '\x004A')
-  ,("Jaarmenian", '\x0541')
-  ,("Jcircle", '\x24BF')
-  ,("Jcircumflex", '\x0134')
-  ,("Jecyrillic", '\x0408')
-  ,("Jheharmenian", '\x054B')
-  ,("Jmonospace", '\xFF2A')
-  ,("Jsmall", '\xF76A')
-  ,("K", '\x004B')
-  ,("KBsquare", '\x3385')
-  ,("KKsquare", '\x33CD')
-  ,("Kabashkircyrillic", '\x04A0')
-  ,("Kacute", '\x1E30')
-  ,("Kacyrillic", '\x041A')
-  ,("Kadescendercyrillic", '\x049A')
-  ,("Kahookcyrillic", '\x04C3')
-  ,("Kappa", '\x039A')
-  ,("Kastrokecyrillic", '\x049E')
-  ,("Kaverticalstrokecyrillic", '\x049C')
-  ,("Kcaron", '\x01E8')
-  ,("Kcedilla", '\x0136')
-  ,("Kcircle", '\x24C0')
-  ,("Kcommaaccent", '\x0136')
-  ,("Kdotbelow", '\x1E32')
-  ,("Keharmenian", '\x0554')
-  ,("Kenarmenian", '\x053F')
-  ,("Khacyrillic", '\x0425')
-  ,("Kheicoptic", '\x03E6')
-  ,("Khook", '\x0198')
-  ,("Kjecyrillic", '\x040C')
-  ,("Klinebelow", '\x1E34')
-  ,("Kmonospace", '\xFF2B')
-  ,("Koppacyrillic", '\x0480')
-  ,("Koppagreek", '\x03DE')
-  ,("Ksicyrillic", '\x046E')
-  ,("Ksmall", '\xF76B')
-  ,("L", '\x004C')
-  ,("LJ", '\x01C7')
-  ,("LL", '\xF6BF')
-  ,("Lacute", '\x0139')
-  ,("Lambda", '\x039B')
-  ,("Lcaron", '\x013D')
-  ,("Lcedilla", '\x013B')
-  ,("Lcircle", '\x24C1')
-  ,("Lcircumflexbelow", '\x1E3C')
-  ,("Lcommaaccent", '\x013B')
-  ,("Ldot", '\x013F')
-  ,("Ldotaccent", '\x013F')
-  ,("Ldotbelow", '\x1E36')
-  ,("Ldotbelowmacron", '\x1E38')
-  ,("Liwnarmenian", '\x053C')
-  ,("Lj", '\x01C8')
-  ,("Ljecyrillic", '\x0409')
-  ,("Llinebelow", '\x1E3A')
-  ,("Lmonospace", '\xFF2C')
-  ,("Lslash", '\x0141')
-  ,("Lslashsmall", '\xF6F9')
-  ,("Lsmall", '\xF76C')
-  ,("M", '\x004D')
-  ,("MBsquare", '\x3386')
-  ,("Macron", '\xF6D0')
-  ,("Macronsmall", '\xF7AF')
-  ,("Macute", '\x1E3E')
-  ,("Mcircle", '\x24C2')
-  ,("Mdotaccent", '\x1E40')
-  ,("Mdotbelow", '\x1E42')
-  ,("Menarmenian", '\x0544')
-  ,("Mmonospace", '\xFF2D')
-  ,("Msmall", '\xF76D')
-  ,("Mturned", '\x019C')
-  ,("Mu", '\x039C')
-  ,("N", '\x004E')
-  ,("NJ", '\x01CA')
-  ,("Nacute", '\x0143')
-  ,("Ncaron", '\x0147')
-  ,("Ncedilla", '\x0145')
-  ,("Ncircle", '\x24C3')
-  ,("Ncircumflexbelow", '\x1E4A')
-  ,("Ncommaaccent", '\x0145')
-  ,("Ndotaccent", '\x1E44')
-  ,("Ndotbelow", '\x1E46')
-  ,("Nhookleft", '\x019D')
-  ,("Nineroman", '\x2168')
-  ,("Nj", '\x01CB')
-  ,("Njecyrillic", '\x040A')
-  ,("Nlinebelow", '\x1E48')
-  ,("Nmonospace", '\xFF2E')
-  ,("Nowarmenian", '\x0546')
-  ,("Nsmall", '\xF76E')
-  ,("Ntilde", '\x00D1')
-  ,("Ntildesmall", '\xF7F1')
-  ,("Nu", '\x039D')
-  ,("O", '\x004F')
-  ,("OE", '\x0152')
-  ,("OEsmall", '\xF6FA')
-  ,("Oacute", '\x00D3')
-  ,("Oacutesmall", '\xF7F3')
-  ,("Obarredcyrillic", '\x04E8')
-  ,("Obarreddieresiscyrillic", '\x04EA')
-  ,("Obreve", '\x014E')
-  ,("Ocaron", '\x01D1')
-  ,("Ocenteredtilde", '\x019F')
-  ,("Ocircle", '\x24C4')
-  ,("Ocircumflex", '\x00D4')
-  ,("Ocircumflexacute", '\x1ED0')
-  ,("Ocircumflexdotbelow", '\x1ED8')
-  ,("Ocircumflexgrave", '\x1ED2')
-  ,("Ocircumflexhookabove", '\x1ED4')
-  ,("Ocircumflexsmall", '\xF7F4')
-  ,("Ocircumflextilde", '\x1ED6')
-  ,("Ocyrillic", '\x041E')
-  ,("Odblacute", '\x0150')
-  ,("Odblgrave", '\x020C')
-  ,("Odieresis", '\x00D6')
-  ,("Odieresiscyrillic", '\x04E6')
-  ,("Odieresissmall", '\xF7F6')
-  ,("Odotbelow", '\x1ECC')
-  ,("Ogoneksmall", '\xF6FB')
-  ,("Ograve", '\x00D2')
-  ,("Ogravesmall", '\xF7F2')
-  ,("Oharmenian", '\x0555')
-  ,("Ohm", '\x2126')
-  ,("Ohookabove", '\x1ECE')
-  ,("Ohorn", '\x01A0')
-  ,("Ohornacute", '\x1EDA')
-  ,("Ohorndotbelow", '\x1EE2')
-  ,("Ohorngrave", '\x1EDC')
-  ,("Ohornhookabove", '\x1EDE')
-  ,("Ohorntilde", '\x1EE0')
-  ,("Ohungarumlaut", '\x0150')
-  ,("Oi", '\x01A2')
-  ,("Oinvertedbreve", '\x020E')
-  ,("Omacron", '\x014C')
-  ,("Omacronacute", '\x1E52')
-  ,("Omacrongrave", '\x1E50')
-  ,("Omega", '\x2126')
-  ,("Omegacyrillic", '\x0460')
-  ,("Omegagreek", '\x03A9')
-  ,("Omegaroundcyrillic", '\x047A')
-  ,("Omegatitlocyrillic", '\x047C')
-  ,("Omegatonos", '\x038F')
-  ,("Omicron", '\x039F')
-  ,("Omicrontonos", '\x038C')
-  ,("Omonospace", '\xFF2F')
-  ,("Oneroman", '\x2160')
-  ,("Oogonek", '\x01EA')
-  ,("Oogonekmacron", '\x01EC')
-  ,("Oopen", '\x0186')
-  ,("Oslash", '\x00D8')
-  ,("Oslashacute", '\x01FE')
-  ,("Oslashsmall", '\xF7F8')
-  ,("Osmall", '\xF76F')
-  ,("Ostrokeacute", '\x01FE')
-  ,("Otcyrillic", '\x047E')
-  ,("Otilde", '\x00D5')
-  ,("Otildeacute", '\x1E4C')
-  ,("Otildedieresis", '\x1E4E')
-  ,("Otildesmall", '\xF7F5')
-  ,("P", '\x0050')
-  ,("Pacute", '\x1E54')
-  ,("Pcircle", '\x24C5')
-  ,("Pdotaccent", '\x1E56')
-  ,("Pecyrillic", '\x041F')
-  ,("Peharmenian", '\x054A')
-  ,("Pemiddlehookcyrillic", '\x04A6')
-  ,("Phi", '\x03A6')
-  ,("Phook", '\x01A4')
-  ,("Pi", '\x03A0')
-  ,("Piwrarmenian", '\x0553')
-  ,("Pmonospace", '\xFF30')
-  ,("Psi", '\x03A8')
-  ,("Psicyrillic", '\x0470')
-  ,("Psmall", '\xF770')
-  ,("Q", '\x0051')
-  ,("Qcircle", '\x24C6')
-  ,("Qmonospace", '\xFF31')
-  ,("Qsmall", '\xF771')
-  ,("R", '\x0052')
-  ,("Raarmenian", '\x054C')
-  ,("Racute", '\x0154')
-  ,("Rcaron", '\x0158')
-  ,("Rcedilla", '\x0156')
-  ,("Rcircle", '\x24C7')
-  ,("Rcommaaccent", '\x0156')
-  ,("Rdblgrave", '\x0210')
-  ,("Rdotaccent", '\x1E58')
-  ,("Rdotbelow", '\x1E5A')
-  ,("Rdotbelowmacron", '\x1E5C')
-  ,("Reharmenian", '\x0550')
-  ,("Rfraktur", '\x211C')
-  ,("Rho", '\x03A1')
-  ,("Ringsmall", '\xF6FC')
-  ,("Rinvertedbreve", '\x0212')
-  ,("Rlinebelow", '\x1E5E')
-  ,("Rmonospace", '\xFF32')
-  ,("Rsmall", '\xF772')
-  ,("Rsmallinverted", '\x0281')
-  ,("Rsmallinvertedsuperior", '\x02B6')
-  ,("S", '\x0053')
-  ,("SF010000", '\x250C')
-  ,("SF020000", '\x2514')
-  ,("SF030000", '\x2510')
-  ,("SF040000", '\x2518')
-  ,("SF050000", '\x253C')
-  ,("SF060000", '\x252C')
-  ,("SF070000", '\x2534')
-  ,("SF080000", '\x251C')
-  ,("SF090000", '\x2524')
-  ,("SF100000", '\x2500')
-  ,("SF110000", '\x2502')
-  ,("SF190000", '\x2561')
-  ,("SF200000", '\x2562')
-  ,("SF210000", '\x2556')
-  ,("SF220000", '\x2555')
-  ,("SF230000", '\x2563')
-  ,("SF240000", '\x2551')
-  ,("SF250000", '\x2557')
-  ,("SF260000", '\x255D')
-  ,("SF270000", '\x255C')
-  ,("SF280000", '\x255B')
-  ,("SF360000", '\x255E')
-  ,("SF370000", '\x255F')
-  ,("SF380000", '\x255A')
-  ,("SF390000", '\x2554')
-  ,("SF400000", '\x2569')
-  ,("SF410000", '\x2566')
-  ,("SF420000", '\x2560')
-  ,("SF430000", '\x2550')
-  ,("SF440000", '\x256C')
-  ,("SF450000", '\x2567')
-  ,("SF460000", '\x2568')
-  ,("SF470000", '\x2564')
-  ,("SF480000", '\x2565')
-  ,("SF490000", '\x2559')
-  ,("SF500000", '\x2558')
-  ,("SF510000", '\x2552')
-  ,("SF520000", '\x2553')
-  ,("SF530000", '\x256B')
-  ,("SF540000", '\x256A')
-  ,("Sacute", '\x015A')
-  ,("Sacutedotaccent", '\x1E64')
-  ,("Sampigreek", '\x03E0')
-  ,("Scaron", '\x0160')
-  ,("Scarondotaccent", '\x1E66')
-  ,("Scaronsmall", '\xF6FD')
-  ,("Scedilla", '\x015E')
-  ,("Schwa", '\x018F')
-  ,("Schwacyrillic", '\x04D8')
-  ,("Schwadieresiscyrillic", '\x04DA')
-  ,("Scircle", '\x24C8')
-  ,("Scircumflex", '\x015C')
-  ,("Scommaaccent", '\x0218')
-  ,("Sdotaccent", '\x1E60')
-  ,("Sdotbelow", '\x1E62')
-  ,("Sdotbelowdotaccent", '\x1E68')
-  ,("Seharmenian", '\x054D')
-  ,("Sevenroman", '\x2166')
-  ,("Shaarmenian", '\x0547')
-  ,("Shacyrillic", '\x0428')
-  ,("Shchacyrillic", '\x0429')
-  ,("Sheicoptic", '\x03E2')
-  ,("Shhacyrillic", '\x04BA')
-  ,("Shimacoptic", '\x03EC')
-  ,("Sigma", '\x03A3')
-  ,("Sixroman", '\x2165')
-  ,("Smonospace", '\xFF33')
-  ,("Softsigncyrillic", '\x042C')
-  ,("Ssmall", '\xF773')
-  ,("Stigmagreek", '\x03DA')
-  ,("T", '\x0054')
-  ,("Tau", '\x03A4')
-  ,("Tbar", '\x0166')
-  ,("Tcaron", '\x0164')
-  ,("Tcedilla", '\x0162')
-  ,("Tcircle", '\x24C9')
-  ,("Tcircumflexbelow", '\x1E70')
-  ,("Tcommaaccent", '\x0162')
-  ,("Tdotaccent", '\x1E6A')
-  ,("Tdotbelow", '\x1E6C')
-  ,("Tecyrillic", '\x0422')
-  ,("Tedescendercyrillic", '\x04AC')
-  ,("Tenroman", '\x2169')
-  ,("Tetsecyrillic", '\x04B4')
-  ,("Theta", '\x0398')
-  ,("Thook", '\x01AC')
-  ,("Thorn", '\x00DE')
-  ,("Thornsmall", '\xF7FE')
-  ,("Threeroman", '\x2162')
-  ,("Tildesmall", '\xF6FE')
-  ,("Tiwnarmenian", '\x054F')
-  ,("Tlinebelow", '\x1E6E')
-  ,("Tmonospace", '\xFF34')
-  ,("Toarmenian", '\x0539')
-  ,("Tonefive", '\x01BC')
-  ,("Tonesix", '\x0184')
-  ,("Tonetwo", '\x01A7')
-  ,("Tretroflexhook", '\x01AE')
-  ,("Tsecyrillic", '\x0426')
-  ,("Tshecyrillic", '\x040B')
-  ,("Tsmall", '\xF774')
-  ,("Twelveroman", '\x216B')
-  ,("Tworoman", '\x2161')
-  ,("U", '\x0055')
-  ,("Uacute", '\x00DA')
-  ,("Uacutesmall", '\xF7FA')
-  ,("Ubreve", '\x016C')
-  ,("Ucaron", '\x01D3')
-  ,("Ucircle", '\x24CA')
-  ,("Ucircumflex", '\x00DB')
-  ,("Ucircumflexbelow", '\x1E76')
-  ,("Ucircumflexsmall", '\xF7FB')
-  ,("Ucyrillic", '\x0423')
-  ,("Udblacute", '\x0170')
-  ,("Udblgrave", '\x0214')
-  ,("Udieresis", '\x00DC')
-  ,("Udieresisacute", '\x01D7')
-  ,("Udieresisbelow", '\x1E72')
-  ,("Udieresiscaron", '\x01D9')
-  ,("Udieresiscyrillic", '\x04F0')
-  ,("Udieresisgrave", '\x01DB')
-  ,("Udieresismacron", '\x01D5')
-  ,("Udieresissmall", '\xF7FC')
-  ,("Udotbelow", '\x1EE4')
-  ,("Ugrave", '\x00D9')
-  ,("Ugravesmall", '\xF7F9')
-  ,("Uhookabove", '\x1EE6')
-  ,("Uhorn", '\x01AF')
-  ,("Uhornacute", '\x1EE8')
-  ,("Uhorndotbelow", '\x1EF0')
-  ,("Uhorngrave", '\x1EEA')
-  ,("Uhornhookabove", '\x1EEC')
-  ,("Uhorntilde", '\x1EEE')
-  ,("Uhungarumlaut", '\x0170')
-  ,("Uhungarumlautcyrillic", '\x04F2')
-  ,("Uinvertedbreve", '\x0216')
-  ,("Ukcyrillic", '\x0478')
-  ,("Umacron", '\x016A')
-  ,("Umacroncyrillic", '\x04EE')
-  ,("Umacrondieresis", '\x1E7A')
-  ,("Umonospace", '\xFF35')
-  ,("Uogonek", '\x0172')
-  ,("Upsilon", '\x03A5')
-  ,("Upsilon1", '\x03D2')
-  ,("Upsilonacutehooksymbolgreek", '\x03D3')
-  ,("Upsilonafrican", '\x01B1')
-  ,("Upsilondieresis", '\x03AB')
-  ,("Upsilondieresishooksymbolgreek", '\x03D4')
-  ,("Upsilonhooksymbol", '\x03D2')
-  ,("Upsilontonos", '\x038E')
-  ,("Uring", '\x016E')
-  ,("Ushortcyrillic", '\x040E')
-  ,("Usmall", '\xF775')
-  ,("Ustraightcyrillic", '\x04AE')
-  ,("Ustraightstrokecyrillic", '\x04B0')
-  ,("Utilde", '\x0168')
-  ,("Utildeacute", '\x1E78')
-  ,("Utildebelow", '\x1E74')
-  ,("V", '\x0056')
-  ,("Vcircle", '\x24CB')
-  ,("Vdotbelow", '\x1E7E')
-  ,("Vecyrillic", '\x0412')
-  ,("Vewarmenian", '\x054E')
-  ,("Vhook", '\x01B2')
-  ,("Vmonospace", '\xFF36')
-  ,("Voarmenian", '\x0548')
-  ,("Vsmall", '\xF776')
-  ,("Vtilde", '\x1E7C')
-  ,("W", '\x0057')
-  ,("Wacute", '\x1E82')
-  ,("Wcircle", '\x24CC')
-  ,("Wcircumflex", '\x0174')
-  ,("Wdieresis", '\x1E84')
-  ,("Wdotaccent", '\x1E86')
-  ,("Wdotbelow", '\x1E88')
-  ,("Wgrave", '\x1E80')
-  ,("Wmonospace", '\xFF37')
-  ,("Wsmall", '\xF777')
-  ,("X", '\x0058')
-  ,("Xcircle", '\x24CD')
-  ,("Xdieresis", '\x1E8C')
-  ,("Xdotaccent", '\x1E8A')
-  ,("Xeharmenian", '\x053D')
-  ,("Xi", '\x039E')
-  ,("Xmonospace", '\xFF38')
-  ,("Xsmall", '\xF778')
-  ,("Y", '\x0059')
-  ,("Yacute", '\x00DD')
-  ,("Yacutesmall", '\xF7FD')
-  ,("Yatcyrillic", '\x0462')
-  ,("Ycircle", '\x24CE')
-  ,("Ycircumflex", '\x0176')
-  ,("Ydieresis", '\x0178')
-  ,("Ydieresissmall", '\xF7FF')
-  ,("Ydotaccent", '\x1E8E')
-  ,("Ydotbelow", '\x1EF4')
-  ,("Yericyrillic", '\x042B')
-  ,("Yerudieresiscyrillic", '\x04F8')
-  ,("Ygrave", '\x1EF2')
-  ,("Yhook", '\x01B3')
-  ,("Yhookabove", '\x1EF6')
-  ,("Yiarmenian", '\x0545')
-  ,("Yicyrillic", '\x0407')
-  ,("Yiwnarmenian", '\x0552')
-  ,("Ymonospace", '\xFF39')
-  ,("Ysmall", '\xF779')
-  ,("Ytilde", '\x1EF8')
-  ,("Yusbigcyrillic", '\x046A')
-  ,("Yusbigiotifiedcyrillic", '\x046C')
-  ,("Yuslittlecyrillic", '\x0466')
-  ,("Yuslittleiotifiedcyrillic", '\x0468')
-  ,("Z", '\x005A')
-  ,("Zaarmenian", '\x0536')
-  ,("Zacute", '\x0179')
-  ,("Zcaron", '\x017D')
-  ,("Zcaronsmall", '\xF6FF')
-  ,("Zcircle", '\x24CF')
-  ,("Zcircumflex", '\x1E90')
-  ,("Zdot", '\x017B')
-  ,("Zdotaccent", '\x017B')
-  ,("Zdotbelow", '\x1E92')
-  ,("Zecyrillic", '\x0417')
-  ,("Zedescendercyrillic", '\x0498')
-  ,("Zedieresiscyrillic", '\x04DE')
-  ,("Zeta", '\x0396')
-  ,("Zhearmenian", '\x053A')
-  ,("Zhebrevecyrillic", '\x04C1')
-  ,("Zhecyrillic", '\x0416')
-  ,("Zhedescendercyrillic", '\x0496')
-  ,("Zhedieresiscyrillic", '\x04DC')
-  ,("Zlinebelow", '\x1E94')
-  ,("Zmonospace", '\xFF3A')
-  ,("Zsmall", '\xF77A')
-  ,("Zstroke", '\x01B5')
-  ,("a", '\x0061')
-  ,("aabengali", '\x0986')
-  ,("aacute", '\x00E1')
-  ,("aadeva", '\x0906')
-  ,("aagujarati", '\x0A86')
-  ,("aagurmukhi", '\x0A06')
-  ,("aamatragurmukhi", '\x0A3E')
-  ,("aarusquare", '\x3303')
-  ,("aavowelsignbengali", '\x09BE')
-  ,("aavowelsigndeva", '\x093E')
-  ,("aavowelsigngujarati", '\x0ABE')
-  ,("abbreviationmarkarmenian", '\x055F')
-  ,("abbreviationsigndeva", '\x0970')
-  ,("abengali", '\x0985')
-  ,("abopomofo", '\x311A')
-  ,("abreve", '\x0103')
-  ,("abreveacute", '\x1EAF')
-  ,("abrevecyrillic", '\x04D1')
-  ,("abrevedotbelow", '\x1EB7')
-  ,("abrevegrave", '\x1EB1')
-  ,("abrevehookabove", '\x1EB3')
-  ,("abrevetilde", '\x1EB5')
-  ,("acaron", '\x01CE')
-  ,("acircle", '\x24D0')
-  ,("acircumflex", '\x00E2')
-  ,("acircumflexacute", '\x1EA5')
-  ,("acircumflexdotbelow", '\x1EAD')
-  ,("acircumflexgrave", '\x1EA7')
-  ,("acircumflexhookabove", '\x1EA9')
-  ,("acircumflextilde", '\x1EAB')
-  ,("acute", '\x00B4')
-  ,("acutebelowcmb", '\x0317')
-  ,("acutecmb", '\x0301')
-  ,("acutecomb", '\x0301')
-  ,("acutedeva", '\x0954')
-  ,("acutelowmod", '\x02CF')
-  ,("acutetonecmb", '\x0341')
-  ,("acyrillic", '\x0430')
-  ,("adblgrave", '\x0201')
-  ,("addakgurmukhi", '\x0A71')
-  ,("adeva", '\x0905')
-  ,("adieresis", '\x00E4')
-  ,("adieresiscyrillic", '\x04D3')
-  ,("adieresismacron", '\x01DF')
-  ,("adotbelow", '\x1EA1')
-  ,("adotmacron", '\x01E1')
-  ,("ae", '\x00E6')
-  ,("aeacute", '\x01FD')
-  ,("aekorean", '\x3150')
-  ,("aemacron", '\x01E3')
-  ,("afii00208", '\x2015')
-  ,("afii08941", '\x20A4')
-  ,("afii10017", '\x0410')
-  ,("afii10018", '\x0411')
-  ,("afii10019", '\x0412')
-  ,("afii10020", '\x0413')
-  ,("afii10021", '\x0414')
-  ,("afii10022", '\x0415')
-  ,("afii10023", '\x0401')
-  ,("afii10024", '\x0416')
-  ,("afii10025", '\x0417')
-  ,("afii10026", '\x0418')
-  ,("afii10027", '\x0419')
-  ,("afii10028", '\x041A')
-  ,("afii10029", '\x041B')
-  ,("afii10030", '\x041C')
-  ,("afii10031", '\x041D')
-  ,("afii10032", '\x041E')
-  ,("afii10033", '\x041F')
-  ,("afii10034", '\x0420')
-  ,("afii10035", '\x0421')
-  ,("afii10036", '\x0422')
-  ,("afii10037", '\x0423')
-  ,("afii10038", '\x0424')
-  ,("afii10039", '\x0425')
-  ,("afii10040", '\x0426')
-  ,("afii10041", '\x0427')
-  ,("afii10042", '\x0428')
-  ,("afii10043", '\x0429')
-  ,("afii10044", '\x042A')
-  ,("afii10045", '\x042B')
-  ,("afii10046", '\x042C')
-  ,("afii10047", '\x042D')
-  ,("afii10048", '\x042E')
-  ,("afii10049", '\x042F')
-  ,("afii10050", '\x0490')
-  ,("afii10051", '\x0402')
-  ,("afii10052", '\x0403')
-  ,("afii10053", '\x0404')
-  ,("afii10054", '\x0405')
-  ,("afii10055", '\x0406')
-  ,("afii10056", '\x0407')
-  ,("afii10057", '\x0408')
-  ,("afii10058", '\x0409')
-  ,("afii10059", '\x040A')
-  ,("afii10060", '\x040B')
-  ,("afii10061", '\x040C')
-  ,("afii10062", '\x040E')
-  ,("afii10063", '\xF6C4')
-  ,("afii10064", '\xF6C5')
-  ,("afii10065", '\x0430')
-  ,("afii10066", '\x0431')
-  ,("afii10067", '\x0432')
-  ,("afii10068", '\x0433')
-  ,("afii10069", '\x0434')
-  ,("afii10070", '\x0435')
-  ,("afii10071", '\x0451')
-  ,("afii10072", '\x0436')
-  ,("afii10073", '\x0437')
-  ,("afii10074", '\x0438')
-  ,("afii10075", '\x0439')
-  ,("afii10076", '\x043A')
-  ,("afii10077", '\x043B')
-  ,("afii10078", '\x043C')
-  ,("afii10079", '\x043D')
-  ,("afii10080", '\x043E')
-  ,("afii10081", '\x043F')
-  ,("afii10082", '\x0440')
-  ,("afii10083", '\x0441')
-  ,("afii10084", '\x0442')
-  ,("afii10085", '\x0443')
-  ,("afii10086", '\x0444')
-  ,("afii10087", '\x0445')
-  ,("afii10088", '\x0446')
-  ,("afii10089", '\x0447')
-  ,("afii10090", '\x0448')
-  ,("afii10091", '\x0449')
-  ,("afii10092", '\x044A')
-  ,("afii10093", '\x044B')
-  ,("afii10094", '\x044C')
-  ,("afii10095", '\x044D')
-  ,("afii10096", '\x044E')
-  ,("afii10097", '\x044F')
-  ,("afii10098", '\x0491')
-  ,("afii10099", '\x0452')
-  ,("afii10100", '\x0453')
-  ,("afii10101", '\x0454')
-  ,("afii10102", '\x0455')
-  ,("afii10103", '\x0456')
-  ,("afii10104", '\x0457')
-  ,("afii10105", '\x0458')
-  ,("afii10106", '\x0459')
-  ,("afii10107", '\x045A')
-  ,("afii10108", '\x045B')
-  ,("afii10109", '\x045C')
-  ,("afii10110", '\x045E')
-  ,("afii10145", '\x040F')
-  ,("afii10146", '\x0462')
-  ,("afii10147", '\x0472')
-  ,("afii10148", '\x0474')
-  ,("afii10192", '\xF6C6')
-  ,("afii10193", '\x045F')
-  ,("afii10194", '\x0463')
-  ,("afii10195", '\x0473')
-  ,("afii10196", '\x0475')
-  ,("afii10831", '\xF6C7')
-  ,("afii10832", '\xF6C8')
-  ,("afii10846", '\x04D9')
-  ,("afii299", '\x200E')
-  ,("afii300", '\x200F')
-  ,("afii301", '\x200D')
-  ,("afii57381", '\x066A')
-  ,("afii57388", '\x060C')
-  ,("afii57392", '\x0660')
-  ,("afii57393", '\x0661')
-  ,("afii57394", '\x0662')
-  ,("afii57395", '\x0663')
-  ,("afii57396", '\x0664')
-  ,("afii57397", '\x0665')
-  ,("afii57398", '\x0666')
-  ,("afii57399", '\x0667')
-  ,("afii57400", '\x0668')
-  ,("afii57401", '\x0669')
-  ,("afii57403", '\x061B')
-  ,("afii57407", '\x061F')
-  ,("afii57409", '\x0621')
-  ,("afii57410", '\x0622')
-  ,("afii57411", '\x0623')
-  ,("afii57412", '\x0624')
-  ,("afii57413", '\x0625')
-  ,("afii57414", '\x0626')
-  ,("afii57415", '\x0627')
-  ,("afii57416", '\x0628')
-  ,("afii57417", '\x0629')
-  ,("afii57418", '\x062A')
-  ,("afii57419", '\x062B')
-  ,("afii57420", '\x062C')
-  ,("afii57421", '\x062D')
-  ,("afii57422", '\x062E')
-  ,("afii57423", '\x062F')
-  ,("afii57424", '\x0630')
-  ,("afii57425", '\x0631')
-  ,("afii57426", '\x0632')
-  ,("afii57427", '\x0633')
-  ,("afii57428", '\x0634')
-  ,("afii57429", '\x0635')
-  ,("afii57430", '\x0636')
-  ,("afii57431", '\x0637')
-  ,("afii57432", '\x0638')
-  ,("afii57433", '\x0639')
-  ,("afii57434", '\x063A')
-  ,("afii57440", '\x0640')
-  ,("afii57441", '\x0641')
-  ,("afii57442", '\x0642')
-  ,("afii57443", '\x0643')
-  ,("afii57444", '\x0644')
-  ,("afii57445", '\x0645')
-  ,("afii57446", '\x0646')
-  ,("afii57448", '\x0648')
-  ,("afii57449", '\x0649')
-  ,("afii57450", '\x064A')
-  ,("afii57451", '\x064B')
-  ,("afii57452", '\x064C')
-  ,("afii57453", '\x064D')
-  ,("afii57454", '\x064E')
-  ,("afii57455", '\x064F')
-  ,("afii57456", '\x0650')
-  ,("afii57457", '\x0651')
-  ,("afii57458", '\x0652')
-  ,("afii57470", '\x0647')
-  ,("afii57505", '\x06A4')
-  ,("afii57506", '\x067E')
-  ,("afii57507", '\x0686')
-  ,("afii57508", '\x0698')
-  ,("afii57509", '\x06AF')
-  ,("afii57511", '\x0679')
-  ,("afii57512", '\x0688')
-  ,("afii57513", '\x0691')
-  ,("afii57514", '\x06BA')
-  ,("afii57519", '\x06D2')
-  ,("afii57534", '\x06D5')
-  ,("afii57636", '\x20AA')
-  ,("afii57645", '\x05BE')
-  ,("afii57658", '\x05C3')
-  ,("afii57664", '\x05D0')
-  ,("afii57665", '\x05D1')
-  ,("afii57666", '\x05D2')
-  ,("afii57667", '\x05D3')
-  ,("afii57668", '\x05D4')
-  ,("afii57669", '\x05D5')
-  ,("afii57670", '\x05D6')
-  ,("afii57671", '\x05D7')
-  ,("afii57672", '\x05D8')
-  ,("afii57673", '\x05D9')
-  ,("afii57674", '\x05DA')
-  ,("afii57675", '\x05DB')
-  ,("afii57676", '\x05DC')
-  ,("afii57677", '\x05DD')
-  ,("afii57678", '\x05DE')
-  ,("afii57679", '\x05DF')
-  ,("afii57680", '\x05E0')
-  ,("afii57681", '\x05E1')
-  ,("afii57682", '\x05E2')
-  ,("afii57683", '\x05E3')
-  ,("afii57684", '\x05E4')
-  ,("afii57685", '\x05E5')
-  ,("afii57686", '\x05E6')
-  ,("afii57687", '\x05E7')
-  ,("afii57688", '\x05E8')
-  ,("afii57689", '\x05E9')
-  ,("afii57690", '\x05EA')
-  ,("afii57694", '\xFB2A')
-  ,("afii57695", '\xFB2B')
-  ,("afii57700", '\xFB4B')
-  ,("afii57705", '\xFB1F')
-  ,("afii57716", '\x05F0')
-  ,("afii57717", '\x05F1')
-  ,("afii57718", '\x05F2')
-  ,("afii57723", '\xFB35')
-  ,("afii57793", '\x05B4')
-  ,("afii57794", '\x05B5')
-  ,("afii57795", '\x05B6')
-  ,("afii57796", '\x05BB')
-  ,("afii57797", '\x05B8')
-  ,("afii57798", '\x05B7')
-  ,("afii57799", '\x05B0')
-  ,("afii57800", '\x05B2')
-  ,("afii57801", '\x05B1')
-  ,("afii57802", '\x05B3')
-  ,("afii57803", '\x05C2')
-  ,("afii57804", '\x05C1')
-  ,("afii57806", '\x05B9')
-  ,("afii57807", '\x05BC')
-  ,("afii57839", '\x05BD')
-  ,("afii57841", '\x05BF')
-  ,("afii57842", '\x05C0')
-  ,("afii57929", '\x02BC')
-  ,("afii61248", '\x2105')
-  ,("afii61289", '\x2113')
-  ,("afii61352", '\x2116')
-  ,("afii61573", '\x202C')
-  ,("afii61574", '\x202D')
-  ,("afii61575", '\x202E')
-  ,("afii61664", '\x200C')
-  ,("afii63167", '\x066D')
-  ,("afii64937", '\x02BD')
-  ,("agrave", '\x00E0')
-  ,("agujarati", '\x0A85')
-  ,("agurmukhi", '\x0A05')
-  ,("ahiragana", '\x3042')
-  ,("ahookabove", '\x1EA3')
-  ,("aibengali", '\x0990')
-  ,("aibopomofo", '\x311E')
-  ,("aideva", '\x0910')
-  ,("aiecyrillic", '\x04D5')
-  ,("aigujarati", '\x0A90')
-  ,("aigurmukhi", '\x0A10')
-  ,("aimatragurmukhi", '\x0A48')
-  ,("ainarabic", '\x0639')
-  ,("ainfinalarabic", '\xFECA')
-  ,("aininitialarabic", '\xFECB')
-  ,("ainmedialarabic", '\xFECC')
-  ,("ainvertedbreve", '\x0203')
-  ,("aivowelsignbengali", '\x09C8')
-  ,("aivowelsigndeva", '\x0948')
-  ,("aivowelsigngujarati", '\x0AC8')
-  ,("akatakana", '\x30A2')
-  ,("akatakanahalfwidth", '\xFF71')
-  ,("akorean", '\x314F')
-  ,("alef", '\x05D0')
-  ,("alefarabic", '\x0627')
-  ,("alefdageshhebrew", '\xFB30')
-  ,("aleffinalarabic", '\xFE8E')
-  ,("alefhamzaabovearabic", '\x0623')
-  ,("alefhamzaabovefinalarabic", '\xFE84')
-  ,("alefhamzabelowarabic", '\x0625')
-  ,("alefhamzabelowfinalarabic", '\xFE88')
-  ,("alefhebrew", '\x05D0')
-  ,("aleflamedhebrew", '\xFB4F')
-  ,("alefmaddaabovearabic", '\x0622')
-  ,("alefmaddaabovefinalarabic", '\xFE82')
-  ,("alefmaksuraarabic", '\x0649')
-  ,("alefmaksurafinalarabic", '\xFEF0')
-  ,("alefmaksurainitialarabic", '\xFEF3')
-  ,("alefmaksuramedialarabic", '\xFEF4')
-  ,("alefpatahhebrew", '\xFB2E')
-  ,("alefqamatshebrew", '\xFB2F')
-  ,("aleph", '\x2135')
-  ,("allequal", '\x224C')
-  ,("alpha", '\x03B1')
-  ,("alphatonos", '\x03AC')
-  ,("amacron", '\x0101')
-  ,("amonospace", '\xFF41')
-  ,("ampersand", '\x0026')
-  ,("ampersandmonospace", '\xFF06')
-  ,("ampersandsmall", '\xF726')
-  ,("amsquare", '\x33C2')
-  ,("anbopomofo", '\x3122')
-  ,("angbopomofo", '\x3124')
-  ,("angkhankhuthai", '\x0E5A')
-  ,("angle", '\x2220')
-  ,("anglebracketleft", '\x3008')
-  ,("anglebracketleftvertical", '\xFE3F')
-  ,("anglebracketright", '\x3009')
-  ,("anglebracketrightvertical", '\xFE40')
-  ,("angleleft", '\x2329')
-  ,("angleright", '\x232A')
-  ,("angstrom", '\x212B')
-  ,("anoteleia", '\x0387')
-  ,("anudattadeva", '\x0952')
-  ,("anusvarabengali", '\x0982')
-  ,("anusvaradeva", '\x0902')
-  ,("anusvaragujarati", '\x0A82')
-  ,("aogonek", '\x0105')
-  ,("apaatosquare", '\x3300')
-  ,("aparen", '\x249C')
-  ,("apostrophearmenian", '\x055A')
-  ,("apostrophemod", '\x02BC')
-  ,("apple", '\xF8FF')
-  ,("approaches", '\x2250')
-  ,("approxequal", '\x2248')
-  ,("approxequalorimage", '\x2252')
-  ,("approximatelyequal", '\x2245')
-  ,("araeaekorean", '\x318E')
-  ,("araeakorean", '\x318D')
-  ,("arc", '\x2312')
-  ,("arighthalfring", '\x1E9A')
-  ,("aring", '\x00E5')
-  ,("aringacute", '\x01FB')
-  ,("aringbelow", '\x1E01')
-  ,("arrowboth", '\x2194')
-  ,("arrowdashdown", '\x21E3')
-  ,("arrowdashleft", '\x21E0')
-  ,("arrowdashright", '\x21E2')
-  ,("arrowdashup", '\x21E1')
-  ,("arrowdblboth", '\x21D4')
-  ,("arrowdbldown", '\x21D3')
-  ,("arrowdblleft", '\x21D0')
-  ,("arrowdblright", '\x21D2')
-  ,("arrowdblup", '\x21D1')
-  ,("arrowdown", '\x2193')
-  ,("arrowdownleft", '\x2199')
-  ,("arrowdownright", '\x2198')
-  ,("arrowdownwhite", '\x21E9')
-  ,("arrowheaddownmod", '\x02C5')
-  ,("arrowheadleftmod", '\x02C2')
-  ,("arrowheadrightmod", '\x02C3')
-  ,("arrowheadupmod", '\x02C4')
-  ,("arrowhorizex", '\xF8E7')
-  ,("arrowleft", '\x2190')
-  ,("arrowleftdbl", '\x21D0')
-  ,("arrowleftdblstroke", '\x21CD')
-  ,("arrowleftoverright", '\x21C6')
-  ,("arrowleftwhite", '\x21E6')
-  ,("arrowright", '\x2192')
-  ,("arrowrightdblstroke", '\x21CF')
-  ,("arrowrightheavy", '\x279E')
-  ,("arrowrightoverleft", '\x21C4')
-  ,("arrowrightwhite", '\x21E8')
-  ,("arrowtableft", '\x21E4')
-  ,("arrowtabright", '\x21E5')
-  ,("arrowup", '\x2191')
-  ,("arrowupdn", '\x2195')
-  ,("arrowupdnbse", '\x21A8')
-  ,("arrowupdownbase", '\x21A8')
-  ,("arrowupleft", '\x2196')
-  ,("arrowupleftofdown", '\x21C5')
-  ,("arrowupright", '\x2197')
-  ,("arrowupwhite", '\x21E7')
-  ,("arrowvertex", '\xF8E6')
-  ,("asciicircum", '\x005E')
-  ,("asciicircummonospace", '\xFF3E')
-  ,("asciitilde", '\x007E')
-  ,("asciitildemonospace", '\xFF5E')
-  ,("ascript", '\x0251')
-  ,("ascriptturned", '\x0252')
-  ,("asmallhiragana", '\x3041')
-  ,("asmallkatakana", '\x30A1')
-  ,("asmallkatakanahalfwidth", '\xFF67')
-  ,("asterisk", '\x002A')
-  ,("asteriskaltonearabic", '\x066D')
-  ,("asteriskarabic", '\x066D')
-  ,("asteriskmath", '\x2217')
-  ,("asteriskmonospace", '\xFF0A')
-  ,("asterisksmall", '\xFE61')
-  ,("asterism", '\x2042')
-  ,("asuperior", '\xF6E9')
-  ,("asymptoticallyequal", '\x2243')
-  ,("at", '\x0040')
-  ,("atilde", '\x00E3')
-  ,("atmonospace", '\xFF20')
-  ,("atsmall", '\xFE6B')
-  ,("aturned", '\x0250')
-  ,("aubengali", '\x0994')
-  ,("aubopomofo", '\x3120')
-  ,("audeva", '\x0914')
-  ,("augujarati", '\x0A94')
-  ,("augurmukhi", '\x0A14')
-  ,("aulengthmarkbengali", '\x09D7')
-  ,("aumatragurmukhi", '\x0A4C')
-  ,("auvowelsignbengali", '\x09CC')
-  ,("auvowelsigndeva", '\x094C')
-  ,("auvowelsigngujarati", '\x0ACC')
-  ,("avagrahadeva", '\x093D')
-  ,("aybarmenian", '\x0561')
-  ,("ayin", '\x05E2')
-  ,("ayinaltonehebrew", '\xFB20')
-  ,("ayinhebrew", '\x05E2')
-  ,("b", '\x0062')
-  ,("babengali", '\x09AC')
-  ,("backslash", '\x005C')
-  ,("backslashmonospace", '\xFF3C')
-  ,("badeva", '\x092C')
-  ,("bagujarati", '\x0AAC')
-  ,("bagurmukhi", '\x0A2C')
-  ,("bahiragana", '\x3070')
-  ,("bahtthai", '\x0E3F')
-  ,("bakatakana", '\x30D0')
-  ,("bar", '\x007C')
-  ,("barmonospace", '\xFF5C')
-  ,("bbopomofo", '\x3105')
-  ,("bcircle", '\x24D1')
-  ,("bdotaccent", '\x1E03')
-  ,("bdotbelow", '\x1E05')
-  ,("beamedsixteenthnotes", '\x266C')
-  ,("because", '\x2235')
-  ,("becyrillic", '\x0431')
-  ,("beharabic", '\x0628')
-  ,("behfinalarabic", '\xFE90')
-  ,("behinitialarabic", '\xFE91')
-  ,("behiragana", '\x3079')
-  ,("behmedialarabic", '\xFE92')
-  ,("behmeeminitialarabic", '\xFC9F')
-  ,("behmeemisolatedarabic", '\xFC08')
-  ,("behnoonfinalarabic", '\xFC6D')
-  ,("bekatakana", '\x30D9')
-  ,("benarmenian", '\x0562')
-  ,("bet", '\x05D1')
-  ,("beta", '\x03B2')
-  ,("betasymbolgreek", '\x03D0')
-  ,("betdagesh", '\xFB31')
-  ,("betdageshhebrew", '\xFB31')
-  ,("bethebrew", '\x05D1')
-  ,("betrafehebrew", '\xFB4C')
-  ,("bhabengali", '\x09AD')
-  ,("bhadeva", '\x092D')
-  ,("bhagujarati", '\x0AAD')
-  ,("bhagurmukhi", '\x0A2D')
-  ,("bhook", '\x0253')
-  ,("bihiragana", '\x3073')
-  ,("bikatakana", '\x30D3')
-  ,("bilabialclick", '\x0298')
-  ,("bindigurmukhi", '\x0A02')
-  ,("birusquare", '\x3331')
-  ,("blackcircle", '\x25CF')
-  ,("blackdiamond", '\x25C6')
-  ,("blackdownpointingtriangle", '\x25BC')
-  ,("blackleftpointingpointer", '\x25C4')
-  ,("blackleftpointingtriangle", '\x25C0')
-  ,("blacklenticularbracketleft", '\x3010')
-  ,("blacklenticularbracketleftvertical", '\xFE3B')
-  ,("blacklenticularbracketright", '\x3011')
-  ,("blacklenticularbracketrightvertical", '\xFE3C')
-  ,("blacklowerlefttriangle", '\x25E3')
-  ,("blacklowerrighttriangle", '\x25E2')
-  ,("blackrectangle", '\x25AC')
-  ,("blackrightpointingpointer", '\x25BA')
-  ,("blackrightpointingtriangle", '\x25B6')
-  ,("blacksmallsquare", '\x25AA')
-  ,("blacksmilingface", '\x263B')
-  ,("blacksquare", '\x25A0')
-  ,("blackstar", '\x2605')
-  ,("blackupperlefttriangle", '\x25E4')
-  ,("blackupperrighttriangle", '\x25E5')
-  ,("blackuppointingsmalltriangle", '\x25B4')
-  ,("blackuppointingtriangle", '\x25B2')
-  ,("blank", '\x2423')
-  ,("blinebelow", '\x1E07')
-  ,("block", '\x2588')
-  ,("bmonospace", '\xFF42')
-  ,("bobaimaithai", '\x0E1A')
-  ,("bohiragana", '\x307C')
-  ,("bokatakana", '\x30DC')
-  ,("bparen", '\x249D')
-  ,("bqsquare", '\x33C3')
-  ,("braceex", '\xF8F4')
-  ,("braceleft", '\x007B')
-  ,("braceleftbt", '\xF8F3')
-  ,("braceleftmid", '\xF8F2')
-  ,("braceleftmonospace", '\xFF5B')
-  ,("braceleftsmall", '\xFE5B')
-  ,("bracelefttp", '\xF8F1')
-  ,("braceleftvertical", '\xFE37')
-  ,("braceright", '\x007D')
-  ,("bracerightbt", '\xF8FE')
-  ,("bracerightmid", '\xF8FD')
-  ,("bracerightmonospace", '\xFF5D')
-  ,("bracerightsmall", '\xFE5C')
-  ,("bracerighttp", '\xF8FC')
-  ,("bracerightvertical", '\xFE38')
-  ,("bracketleft", '\x005B')
-  ,("bracketleftbt", '\xF8F0')
-  ,("bracketleftex", '\xF8EF')
-  ,("bracketleftmonospace", '\xFF3B')
-  ,("bracketlefttp", '\xF8EE')
-  ,("bracketright", '\x005D')
-  ,("bracketrightbt", '\xF8FB')
-  ,("bracketrightex", '\xF8FA')
-  ,("bracketrightmonospace", '\xFF3D')
-  ,("bracketrighttp", '\xF8F9')
-  ,("breve", '\x02D8')
-  ,("brevebelowcmb", '\x032E')
-  ,("brevecmb", '\x0306')
-  ,("breveinvertedbelowcmb", '\x032F')
-  ,("breveinvertedcmb", '\x0311')
-  ,("breveinverteddoublecmb", '\x0361')
-  ,("bridgebelowcmb", '\x032A')
-  ,("bridgeinvertedbelowcmb", '\x033A')
-  ,("brokenbar", '\x00A6')
-  ,("bstroke", '\x0180')
-  ,("bsuperior", '\xF6EA')
-  ,("btopbar", '\x0183')
-  ,("buhiragana", '\x3076')
-  ,("bukatakana", '\x30D6')
-  ,("bullet", '\x2022')
-  ,("bulletinverse", '\x25D8')
-  ,("bulletoperator", '\x2219')
-  ,("bullseye", '\x25CE')
-  ,("c", '\x0063')
-  ,("caarmenian", '\x056E')
-  ,("cabengali", '\x099A')
-  ,("cacute", '\x0107')
-  ,("cadeva", '\x091A')
-  ,("cagujarati", '\x0A9A')
-  ,("cagurmukhi", '\x0A1A')
-  ,("calsquare", '\x3388')
-  ,("candrabindubengali", '\x0981')
-  ,("candrabinducmb", '\x0310')
-  ,("candrabindudeva", '\x0901')
-  ,("candrabindugujarati", '\x0A81')
-  ,("capslock", '\x21EA')
-  ,("careof", '\x2105')
-  ,("caron", '\x02C7')
-  ,("caronbelowcmb", '\x032C')
-  ,("caroncmb", '\x030C')
-  ,("carriagereturn", '\x21B5')
-  ,("cbopomofo", '\x3118')
-  ,("ccaron", '\x010D')
-  ,("ccedilla", '\x00E7')
-  ,("ccedillaacute", '\x1E09')
-  ,("ccircle", '\x24D2')
-  ,("ccircumflex", '\x0109')
-  ,("ccurl", '\x0255')
-  ,("cdot", '\x010B')
-  ,("cdotaccent", '\x010B')
-  ,("cdsquare", '\x33C5')
-  ,("cedilla", '\x00B8')
-  ,("cedillacmb", '\x0327')
-  ,("cent", '\x00A2')
-  ,("centigrade", '\x2103')
-  ,("centinferior", '\xF6DF')
-  ,("centmonospace", '\xFFE0')
-  ,("centoldstyle", '\xF7A2')
-  ,("centsuperior", '\xF6E0')
-  ,("chaarmenian", '\x0579')
-  ,("chabengali", '\x099B')
-  ,("chadeva", '\x091B')
-  ,("chagujarati", '\x0A9B')
-  ,("chagurmukhi", '\x0A1B')
-  ,("chbopomofo", '\x3114')
-  ,("cheabkhasiancyrillic", '\x04BD')
-  ,("checkmark", '\x2713')
-  ,("checyrillic", '\x0447')
-  ,("chedescenderabkhasiancyrillic", '\x04BF')
-  ,("chedescendercyrillic", '\x04B7')
-  ,("chedieresiscyrillic", '\x04F5')
-  ,("cheharmenian", '\x0573')
-  ,("chekhakassiancyrillic", '\x04CC')
-  ,("cheverticalstrokecyrillic", '\x04B9')
-  ,("chi", '\x03C7')
-  ,("chieuchacirclekorean", '\x3277')
-  ,("chieuchaparenkorean", '\x3217')
-  ,("chieuchcirclekorean", '\x3269')
-  ,("chieuchkorean", '\x314A')
-  ,("chieuchparenkorean", '\x3209')
-  ,("chochangthai", '\x0E0A')
-  ,("chochanthai", '\x0E08')
-  ,("chochingthai", '\x0E09')
-  ,("chochoethai", '\x0E0C')
-  ,("chook", '\x0188')
-  ,("cieucacirclekorean", '\x3276')
-  ,("cieucaparenkorean", '\x3216')
-  ,("cieuccirclekorean", '\x3268')
-  ,("cieuckorean", '\x3148')
-  ,("cieucparenkorean", '\x3208')
-  ,("cieucuparenkorean", '\x321C')
-  ,("circle", '\x25CB')
-  ,("circlemultiply", '\x2297')
-  ,("circleot", '\x2299')
-  ,("circleplus", '\x2295')
-  ,("circlepostalmark", '\x3036')
-  ,("circlewithlefthalfblack", '\x25D0')
-  ,("circlewithrighthalfblack", '\x25D1')
-  ,("circumflex", '\x02C6')
-  ,("circumflexbelowcmb", '\x032D')
-  ,("circumflexcmb", '\x0302')
-  ,("clear", '\x2327')
-  ,("clickalveolar", '\x01C2')
-  ,("clickdental", '\x01C0')
-  ,("clicklateral", '\x01C1')
-  ,("clickretroflex", '\x01C3')
-  ,("club", '\x2663')
-  ,("clubsuitblack", '\x2663')
-  ,("clubsuitwhite", '\x2667')
-  ,("cmcubedsquare", '\x33A4')
-  ,("cmonospace", '\xFF43')
-  ,("cmsquaredsquare", '\x33A0')
-  ,("coarmenian", '\x0581')
-  ,("colon", '\x003A')
-  ,("colonmonetary", '\x20A1')
-  ,("colonmonospace", '\xFF1A')
-  ,("colonsign", '\x20A1')
-  ,("colonsmall", '\xFE55')
-  ,("colontriangularhalfmod", '\x02D1')
-  ,("colontriangularmod", '\x02D0')
-  ,("comma", '\x002C')
-  ,("commaabovecmb", '\x0313')
-  ,("commaaboverightcmb", '\x0315')
-  ,("commaaccent", '\xF6C3')
-  ,("commaarabic", '\x060C')
-  ,("commaarmenian", '\x055D')
-  ,("commainferior", '\xF6E1')
-  ,("commamonospace", '\xFF0C')
-  ,("commareversedabovecmb", '\x0314')
-  ,("commareversedmod", '\x02BD')
-  ,("commasmall", '\xFE50')
-  ,("commasuperior", '\xF6E2')
-  ,("commaturnedabovecmb", '\x0312')
-  ,("commaturnedmod", '\x02BB')
-  ,("compass", '\x263C')
-  ,("congruent", '\x2245')
-  ,("contourintegral", '\x222E')
-  ,("control", '\x2303')
-  ,("controlACK", '\x0006')
-  ,("controlBEL", '\x0007')
-  ,("controlBS", '\x0008')
-  ,("controlCAN", '\x0018')
-  ,("controlCR", '\x000D')
-  ,("controlDC1", '\x0011')
-  ,("controlDC2", '\x0012')
-  ,("controlDC3", '\x0013')
-  ,("controlDC4", '\x0014')
-  ,("controlDEL", '\x007F')
-  ,("controlDLE", '\x0010')
-  ,("controlEM", '\x0019')
-  ,("controlENQ", '\x0005')
-  ,("controlEOT", '\x0004')
-  ,("controlESC", '\x001B')
-  ,("controlETB", '\x0017')
-  ,("controlETX", '\x0003')
-  ,("controlFF", '\x000C')
-  ,("controlFS", '\x001C')
-  ,("controlGS", '\x001D')
-  ,("controlHT", '\x0009')
-  ,("controlLF", '\x000A')
-  ,("controlNAK", '\x0015')
-  ,("controlRS", '\x001E')
-  ,("controlSI", '\x000F')
-  ,("controlSO", '\x000E')
-  ,("controlSOT", '\x0002')
-  ,("controlSTX", '\x0001')
-  ,("controlSUB", '\x001A')
-  ,("controlSYN", '\x0016')
-  ,("controlUS", '\x001F')
-  ,("controlVT", '\x000B')
-  ,("copyright", '\x00A9')
-  ,("copyrightsans", '\xF8E9')
-  ,("copyrightserif", '\xF6D9')
-  ,("cornerbracketleft", '\x300C')
-  ,("cornerbracketlefthalfwidth", '\xFF62')
-  ,("cornerbracketleftvertical", '\xFE41')
-  ,("cornerbracketright", '\x300D')
-  ,("cornerbracketrighthalfwidth", '\xFF63')
-  ,("cornerbracketrightvertical", '\xFE42')
-  ,("corporationsquare", '\x337F')
-  ,("cosquare", '\x33C7')
-  ,("coverkgsquare", '\x33C6')
-  ,("cparen", '\x249E')
-  ,("cruzeiro", '\x20A2')
-  ,("cstretched", '\x0297')
-  ,("curlyand", '\x22CF')
-  ,("curlyor", '\x22CE')
-  ,("currency", '\x00A4')
-  ,("cyrBreve", '\xF6D1')
-  ,("cyrFlex", '\xF6D2')
-  ,("cyrbreve", '\xF6D4')
-  ,("cyrflex", '\xF6D5')
-  ,("d", '\x0064')
-  ,("daarmenian", '\x0564')
-  ,("dabengali", '\x09A6')
-  ,("dadarabic", '\x0636')
-  ,("dadeva", '\x0926')
-  ,("dadfinalarabic", '\xFEBE')
-  ,("dadinitialarabic", '\xFEBF')
-  ,("dadmedialarabic", '\xFEC0')
-  ,("dagesh", '\x05BC')
-  ,("dageshhebrew", '\x05BC')
-  ,("dagger", '\x2020')
-  ,("daggerdbl", '\x2021')
-  ,("dagujarati", '\x0AA6')
-  ,("dagurmukhi", '\x0A26')
-  ,("dahiragana", '\x3060')
-  ,("dakatakana", '\x30C0')
-  ,("dalarabic", '\x062F')
-  ,("dalet", '\x05D3')
-  ,("daletdagesh", '\xFB33')
-  ,("daletdageshhebrew", '\xFB33')
-  ,("dalethatafpatah", '\x05D3')
-  ,("dalethatafpatahhebrew", '\x05D3')
-  ,("dalethatafsegol", '\x05D3')
-  ,("dalethatafsegolhebrew", '\x05D3')
-  ,("dalethebrew", '\x05D3')
-  ,("dalethiriq", '\x05D3')
-  ,("dalethiriqhebrew", '\x05D3')
-  ,("daletholam", '\x05D3')
-  ,("daletholamhebrew", '\x05D3')
-  ,("daletpatah", '\x05D3')
-  ,("daletpatahhebrew", '\x05D3')
-  ,("daletqamats", '\x05D3')
-  ,("daletqamatshebrew", '\x05D3')
-  ,("daletqubuts", '\x05D3')
-  ,("daletqubutshebrew", '\x05D3')
-  ,("daletsegol", '\x05D3')
-  ,("daletsegolhebrew", '\x05D3')
-  ,("daletsheva", '\x05D3')
-  ,("daletshevahebrew", '\x05D3')
-  ,("dalettsere", '\x05D3')
-  ,("dalettserehebrew", '\x05D3')
-  ,("dalfinalarabic", '\xFEAA')
-  ,("dammaarabic", '\x064F')
-  ,("dammalowarabic", '\x064F')
-  ,("dammatanaltonearabic", '\x064C')
-  ,("dammatanarabic", '\x064C')
-  ,("danda", '\x0964')
-  ,("dargahebrew", '\x05A7')
-  ,("dargalefthebrew", '\x05A7')
-  ,("dasiapneumatacyrilliccmb", '\x0485')
-  ,("dblGrave", '\xF6D3')
-  ,("dblanglebracketleft", '\x300A')
-  ,("dblanglebracketleftvertical", '\xFE3D')
-  ,("dblanglebracketright", '\x300B')
-  ,("dblanglebracketrightvertical", '\xFE3E')
-  ,("dblarchinvertedbelowcmb", '\x032B')
-  ,("dblarrowleft", '\x21D4')
-  ,("dblarrowright", '\x21D2')
-  ,("dbldanda", '\x0965')
-  ,("dblgrave", '\xF6D6')
-  ,("dblgravecmb", '\x030F')
-  ,("dblintegral", '\x222C')
-  ,("dbllowline", '\x2017')
-  ,("dbllowlinecmb", '\x0333')
-  ,("dbloverlinecmb", '\x033F')
-  ,("dblprimemod", '\x02BA')
-  ,("dblverticalbar", '\x2016')
-  ,("dblverticallineabovecmb", '\x030E')
-  ,("dbopomofo", '\x3109')
-  ,("dbsquare", '\x33C8')
-  ,("dcaron", '\x010F')
-  ,("dcedilla", '\x1E11')
-  ,("dcircle", '\x24D3')
-  ,("dcircumflexbelow", '\x1E13')
-  ,("dcroat", '\x0111')
-  ,("ddabengali", '\x09A1')
-  ,("ddadeva", '\x0921')
-  ,("ddagujarati", '\x0AA1')
-  ,("ddagurmukhi", '\x0A21')
-  ,("ddalarabic", '\x0688')
-  ,("ddalfinalarabic", '\xFB89')
-  ,("dddhadeva", '\x095C')
-  ,("ddhabengali", '\x09A2')
-  ,("ddhadeva", '\x0922')
-  ,("ddhagujarati", '\x0AA2')
-  ,("ddhagurmukhi", '\x0A22')
-  ,("ddotaccent", '\x1E0B')
-  ,("ddotbelow", '\x1E0D')
-  ,("decimalseparatorarabic", '\x066B')
-  ,("decimalseparatorpersian", '\x066B')
-  ,("decyrillic", '\x0434')
-  ,("degree", '\x00B0')
-  ,("dehihebrew", '\x05AD')
-  ,("dehiragana", '\x3067')
-  ,("deicoptic", '\x03EF')
-  ,("dekatakana", '\x30C7')
-  ,("deleteleft", '\x232B')
-  ,("deleteright", '\x2326')
-  ,("delta", '\x03B4')
-  ,("deltaturned", '\x018D')
-  ,("denominatorminusonenumeratorbengali", '\x09F8')
-  ,("dezh", '\x02A4')
-  ,("dhabengali", '\x09A7')
-  ,("dhadeva", '\x0927')
-  ,("dhagujarati", '\x0AA7')
-  ,("dhagurmukhi", '\x0A27')
-  ,("dhook", '\x0257')
-  ,("dialytikatonos", '\x0385')
-  ,("dialytikatonoscmb", '\x0344')
-  ,("diamond", '\x2666')
-  ,("diamondsuitwhite", '\x2662')
-  ,("dieresis", '\x00A8')
-  ,("dieresisacute", '\xF6D7')
-  ,("dieresisbelowcmb", '\x0324')
-  ,("dieresiscmb", '\x0308')
-  ,("dieresisgrave", '\xF6D8')
-  ,("dieresistonos", '\x0385')
-  ,("dihiragana", '\x3062')
-  ,("dikatakana", '\x30C2')
-  ,("dittomark", '\x3003')
-  ,("divide", '\x00F7')
-  ,("divides", '\x2223')
-  ,("divisionslash", '\x2215')
-  ,("djecyrillic", '\x0452')
-  ,("dkshade", '\x2593')
-  ,("dlinebelow", '\x1E0F')
-  ,("dlsquare", '\x3397')
-  ,("dmacron", '\x0111')
-  ,("dmonospace", '\xFF44')
-  ,("dnblock", '\x2584')
-  ,("dochadathai", '\x0E0E')
-  ,("dodekthai", '\x0E14')
-  ,("dohiragana", '\x3069')
-  ,("dokatakana", '\x30C9')
-  ,("dollar", '\x0024')
-  ,("dollarinferior", '\xF6E3')
-  ,("dollarmonospace", '\xFF04')
-  ,("dollaroldstyle", '\xF724')
-  ,("dollarsmall", '\xFE69')
-  ,("dollarsuperior", '\xF6E4')
-  ,("dong", '\x20AB')
-  ,("dorusquare", '\x3326')
-  ,("dotaccent", '\x02D9')
-  ,("dotaccentcmb", '\x0307')
-  ,("dotbelowcmb", '\x0323')
-  ,("dotbelowcomb", '\x0323')
-  ,("dotkatakana", '\x30FB')
-  ,("dotlessi", '\x0131')
-  ,("dotlessj", '\xF6BE')
-  ,("dotlessjstrokehook", '\x0284')
-  ,("dotmath", '\x22C5')
-  ,("dottedcircle", '\x25CC')
-  ,("doubleyodpatah", '\xFB1F')
-  ,("doubleyodpatahhebrew", '\xFB1F')
-  ,("downtackbelowcmb", '\x031E')
-  ,("downtackmod", '\x02D5')
-  ,("dparen", '\x249F')
-  ,("dsuperior", '\xF6EB')
-  ,("dtail", '\x0256')
-  ,("dtopbar", '\x018C')
-  ,("duhiragana", '\x3065')
-  ,("dukatakana", '\x30C5')
-  ,("dz", '\x01F3')
-  ,("dzaltone", '\x02A3')
-  ,("dzcaron", '\x01C6')
-  ,("dzcurl", '\x02A5')
-  ,("dzeabkhasiancyrillic", '\x04E1')
-  ,("dzecyrillic", '\x0455')
-  ,("dzhecyrillic", '\x045F')
-  ,("e", '\x0065')
-  ,("eacute", '\x00E9')
-  ,("earth", '\x2641')
-  ,("ebengali", '\x098F')
-  ,("ebopomofo", '\x311C')
-  ,("ebreve", '\x0115')
-  ,("ecandradeva", '\x090D')
-  ,("ecandragujarati", '\x0A8D')
-  ,("ecandravowelsigndeva", '\x0945')
-  ,("ecandravowelsigngujarati", '\x0AC5')
-  ,("ecaron", '\x011B')
-  ,("ecedillabreve", '\x1E1D')
-  ,("echarmenian", '\x0565')
-  ,("echyiwnarmenian", '\x0587')
-  ,("ecircle", '\x24D4')
-  ,("ecircumflex", '\x00EA')
-  ,("ecircumflexacute", '\x1EBF')
-  ,("ecircumflexbelow", '\x1E19')
-  ,("ecircumflexdotbelow", '\x1EC7')
-  ,("ecircumflexgrave", '\x1EC1')
-  ,("ecircumflexhookabove", '\x1EC3')
-  ,("ecircumflextilde", '\x1EC5')
-  ,("ecyrillic", '\x0454')
-  ,("edblgrave", '\x0205')
-  ,("edeva", '\x090F')
-  ,("edieresis", '\x00EB')
-  ,("edot", '\x0117')
-  ,("edotaccent", '\x0117')
-  ,("edotbelow", '\x1EB9')
-  ,("eegurmukhi", '\x0A0F')
-  ,("eematragurmukhi", '\x0A47')
-  ,("efcyrillic", '\x0444')
-  ,("egrave", '\x00E8')
-  ,("egujarati", '\x0A8F')
-  ,("eharmenian", '\x0567')
-  ,("ehbopomofo", '\x311D')
-  ,("ehiragana", '\x3048')
-  ,("ehookabove", '\x1EBB')
-  ,("eibopomofo", '\x311F')
-  ,("eight", '\x0038')
-  ,("eightarabic", '\x0668')
-  ,("eightbengali", '\x09EE')
-  ,("eightcircle", '\x2467')
-  ,("eightcircleinversesansserif", '\x2791')
-  ,("eightdeva", '\x096E')
-  ,("eighteencircle", '\x2471')
-  ,("eighteenparen", '\x2485')
-  ,("eighteenperiod", '\x2499')
-  ,("eightgujarati", '\x0AEE')
-  ,("eightgurmukhi", '\x0A6E')
-  ,("eighthackarabic", '\x0668')
-  ,("eighthangzhou", '\x3028')
-  ,("eighthnotebeamed", '\x266B')
-  ,("eightideographicparen", '\x3227')
-  ,("eightinferior", '\x2088')
-  ,("eightmonospace", '\xFF18')
-  ,("eightoldstyle", '\xF738')
-  ,("eightparen", '\x247B')
-  ,("eightperiod", '\x248F')
-  ,("eightpersian", '\x06F8')
-  ,("eightroman", '\x2177')
-  ,("eightsuperior", '\x2078')
-  ,("eightthai", '\x0E58')
-  ,("einvertedbreve", '\x0207')
-  ,("eiotifiedcyrillic", '\x0465')
-  ,("ekatakana", '\x30A8')
-  ,("ekatakanahalfwidth", '\xFF74')
-  ,("ekonkargurmukhi", '\x0A74')
-  ,("ekorean", '\x3154')
-  ,("elcyrillic", '\x043B')
-  ,("element", '\x2208')
-  ,("elevencircle", '\x246A')
-  ,("elevenparen", '\x247E')
-  ,("elevenperiod", '\x2492')
-  ,("elevenroman", '\x217A')
-  ,("ellipsis", '\x2026')
-  ,("ellipsisvertical", '\x22EE')
-  ,("emacron", '\x0113')
-  ,("emacronacute", '\x1E17')
-  ,("emacrongrave", '\x1E15')
-  ,("emcyrillic", '\x043C')
-  ,("emdash", '\x2014')
-  ,("emdashvertical", '\xFE31')
-  ,("emonospace", '\xFF45')
-  ,("emphasismarkarmenian", '\x055B')
-  ,("emptyset", '\x2205')
-  ,("enbopomofo", '\x3123')
-  ,("encyrillic", '\x043D')
-  ,("endash", '\x2013')
-  ,("endashvertical", '\xFE32')
-  ,("endescendercyrillic", '\x04A3')
-  ,("eng", '\x014B')
-  ,("engbopomofo", '\x3125')
-  ,("enghecyrillic", '\x04A5')
-  ,("enhookcyrillic", '\x04C8')
-  ,("enspace", '\x2002')
-  ,("eogonek", '\x0119')
-  ,("eokorean", '\x3153')
-  ,("eopen", '\x025B')
-  ,("eopenclosed", '\x029A')
-  ,("eopenreversed", '\x025C')
-  ,("eopenreversedclosed", '\x025E')
-  ,("eopenreversedhook", '\x025D')
-  ,("eparen", '\x24A0')
-  ,("epsilon", '\x03B5')
-  ,("epsilontonos", '\x03AD')
-  ,("equal", '\x003D')
-  ,("equalmonospace", '\xFF1D')
-  ,("equalsmall", '\xFE66')
-  ,("equalsuperior", '\x207C')
-  ,("equivalence", '\x2261')
-  ,("erbopomofo", '\x3126')
-  ,("ercyrillic", '\x0440')
-  ,("ereversed", '\x0258')
-  ,("ereversedcyrillic", '\x044D')
-  ,("escyrillic", '\x0441')
-  ,("esdescendercyrillic", '\x04AB')
-  ,("esh", '\x0283')
-  ,("eshcurl", '\x0286')
-  ,("eshortdeva", '\x090E')
-  ,("eshortvowelsigndeva", '\x0946')
-  ,("eshreversedloop", '\x01AA')
-  ,("eshsquatreversed", '\x0285')
-  ,("esmallhiragana", '\x3047')
-  ,("esmallkatakana", '\x30A7')
-  ,("esmallkatakanahalfwidth", '\xFF6A')
-  ,("estimated", '\x212E')
-  ,("esuperior", '\xF6EC')
-  ,("eta", '\x03B7')
-  ,("etarmenian", '\x0568')
-  ,("etatonos", '\x03AE')
-  ,("eth", '\x00F0')
-  ,("etilde", '\x1EBD')
-  ,("etildebelow", '\x1E1B')
-  ,("etnahtafoukhhebrew", '\x0591')
-  ,("etnahtafoukhlefthebrew", '\x0591')
-  ,("etnahtahebrew", '\x0591')
-  ,("etnahtalefthebrew", '\x0591')
-  ,("eturned", '\x01DD')
-  ,("eukorean", '\x3161')
-  ,("euro", '\x20AC')
-  ,("evowelsignbengali", '\x09C7')
-  ,("evowelsigndeva", '\x0947')
-  ,("evowelsigngujarati", '\x0AC7')
-  ,("exclam", '\x0021')
-  ,("exclamarmenian", '\x055C')
-  ,("exclamdbl", '\x203C')
-  ,("exclamdown", '\x00A1')
-  ,("exclamdownsmall", '\xF7A1')
-  ,("exclammonospace", '\xFF01')
-  ,("exclamsmall", '\xF721')
-  ,("existential", '\x2203')
-  ,("ezh", '\x0292')
-  ,("ezhcaron", '\x01EF')
-  ,("ezhcurl", '\x0293')
-  ,("ezhreversed", '\x01B9')
-  ,("ezhtail", '\x01BA')
-  ,("f", '\x0066')
-  ,("fadeva", '\x095E')
-  ,("fagurmukhi", '\x0A5E')
-  ,("fahrenheit", '\x2109')
-  ,("fathaarabic", '\x064E')
-  ,("fathalowarabic", '\x064E')
-  ,("fathatanarabic", '\x064B')
-  ,("fbopomofo", '\x3108')
-  ,("fcircle", '\x24D5')
-  ,("fdotaccent", '\x1E1F')
-  ,("feharabic", '\x0641')
-  ,("feharmenian", '\x0586')
-  ,("fehfinalarabic", '\xFED2')
-  ,("fehinitialarabic", '\xFED3')
-  ,("fehmedialarabic", '\xFED4')
-  ,("feicoptic", '\x03E5')
-  ,("female", '\x2640')
-  ,("ff", '\xFB00')
-  ,("ffi", '\xFB03')
-  ,("ffl", '\xFB04')
-  ,("fi", '\xFB01')
-  ,("fifteencircle", '\x246E')
-  ,("fifteenparen", '\x2482')
-  ,("fifteenperiod", '\x2496')
-  ,("figuredash", '\x2012')
-  ,("filledbox", '\x25A0')
-  ,("filledrect", '\x25AC')
-  ,("finalkaf", '\x05DA')
-  ,("finalkafdagesh", '\xFB3A')
-  ,("finalkafdageshhebrew", '\xFB3A')
-  ,("finalkafhebrew", '\x05DA')
-  ,("finalkafqamats", '\x05DA')
-  ,("finalkafqamatshebrew", '\x05DA')
-  ,("finalkafsheva", '\x05DA')
-  ,("finalkafshevahebrew", '\x05DA')
-  ,("finalmem", '\x05DD')
-  ,("finalmemhebrew", '\x05DD')
-  ,("finalnun", '\x05DF')
-  ,("finalnunhebrew", '\x05DF')
-  ,("finalpe", '\x05E3')
-  ,("finalpehebrew", '\x05E3')
-  ,("finaltsadi", '\x05E5')
-  ,("finaltsadihebrew", '\x05E5')
-  ,("firsttonechinese", '\x02C9')
-  ,("fisheye", '\x25C9')
-  ,("fitacyrillic", '\x0473')
-  ,("five", '\x0035')
-  ,("fivearabic", '\x0665')
-  ,("fivebengali", '\x09EB')
-  ,("fivecircle", '\x2464')
-  ,("fivecircleinversesansserif", '\x278E')
-  ,("fivedeva", '\x096B')
-  ,("fiveeighths", '\x215D')
-  ,("fivegujarati", '\x0AEB')
-  ,("fivegurmukhi", '\x0A6B')
-  ,("fivehackarabic", '\x0665')
-  ,("fivehangzhou", '\x3025')
-  ,("fiveideographicparen", '\x3224')
-  ,("fiveinferior", '\x2085')
-  ,("fivemonospace", '\xFF15')
-  ,("fiveoldstyle", '\xF735')
-  ,("fiveparen", '\x2478')
-  ,("fiveperiod", '\x248C')
-  ,("fivepersian", '\x06F5')
-  ,("fiveroman", '\x2174')
-  ,("fivesuperior", '\x2075')
-  ,("fivethai", '\x0E55')
-  ,("fl", '\xFB02')
-  ,("florin", '\x0192')
-  ,("fmonospace", '\xFF46')
-  ,("fmsquare", '\x3399')
-  ,("fofanthai", '\x0E1F')
-  ,("fofathai", '\x0E1D')
-  ,("fongmanthai", '\x0E4F')
-  ,("forall", '\x2200')
-  ,("four", '\x0034')
-  ,("fourarabic", '\x0664')
-  ,("fourbengali", '\x09EA')
-  ,("fourcircle", '\x2463')
-  ,("fourcircleinversesansserif", '\x278D')
-  ,("fourdeva", '\x096A')
-  ,("fourgujarati", '\x0AEA')
-  ,("fourgurmukhi", '\x0A6A')
-  ,("fourhackarabic", '\x0664')
-  ,("fourhangzhou", '\x3024')
-  ,("fourideographicparen", '\x3223')
-  ,("fourinferior", '\x2084')
-  ,("fourmonospace", '\xFF14')
-  ,("fournumeratorbengali", '\x09F7')
-  ,("fouroldstyle", '\xF734')
-  ,("fourparen", '\x2477')
-  ,("fourperiod", '\x248B')
-  ,("fourpersian", '\x06F4')
-  ,("fourroman", '\x2173')
-  ,("foursuperior", '\x2074')
-  ,("fourteencircle", '\x246D')
-  ,("fourteenparen", '\x2481')
-  ,("fourteenperiod", '\x2495')
-  ,("fourthai", '\x0E54')
-  ,("fourthtonechinese", '\x02CB')
-  ,("fparen", '\x24A1')
-  ,("fraction", '\x2044')
-  ,("franc", '\x20A3')
-  ,("g", '\x0067')
-  ,("gabengali", '\x0997')
-  ,("gacute", '\x01F5')
-  ,("gadeva", '\x0917')
-  ,("gafarabic", '\x06AF')
-  ,("gaffinalarabic", '\xFB93')
-  ,("gafinitialarabic", '\xFB94')
-  ,("gafmedialarabic", '\xFB95')
-  ,("gagujarati", '\x0A97')
-  ,("gagurmukhi", '\x0A17')
-  ,("gahiragana", '\x304C')
-  ,("gakatakana", '\x30AC')
-  ,("gamma", '\x03B3')
-  ,("gammalatinsmall", '\x0263')
-  ,("gammasuperior", '\x02E0')
-  ,("gangiacoptic", '\x03EB')
-  ,("gbopomofo", '\x310D')
-  ,("gbreve", '\x011F')
-  ,("gcaron", '\x01E7')
-  ,("gcedilla", '\x0123')
-  ,("gcircle", '\x24D6')
-  ,("gcircumflex", '\x011D')
-  ,("gcommaaccent", '\x0123')
-  ,("gdot", '\x0121')
-  ,("gdotaccent", '\x0121')
-  ,("gecyrillic", '\x0433')
-  ,("gehiragana", '\x3052')
-  ,("gekatakana", '\x30B2')
-  ,("geometricallyequal", '\x2251')
-  ,("gereshaccenthebrew", '\x059C')
-  ,("gereshhebrew", '\x05F3')
-  ,("gereshmuqdamhebrew", '\x059D')
-  ,("germandbls", '\x00DF')
-  ,("gershayimaccenthebrew", '\x059E')
-  ,("gershayimhebrew", '\x05F4')
-  ,("getamark", '\x3013')
-  ,("ghabengali", '\x0998')
-  ,("ghadarmenian", '\x0572')
-  ,("ghadeva", '\x0918')
-  ,("ghagujarati", '\x0A98')
-  ,("ghagurmukhi", '\x0A18')
-  ,("ghainarabic", '\x063A')
-  ,("ghainfinalarabic", '\xFECE')
-  ,("ghaininitialarabic", '\xFECF')
-  ,("ghainmedialarabic", '\xFED0')
-  ,("ghemiddlehookcyrillic", '\x0495')
-  ,("ghestrokecyrillic", '\x0493')
-  ,("gheupturncyrillic", '\x0491')
-  ,("ghhadeva", '\x095A')
-  ,("ghhagurmukhi", '\x0A5A')
-  ,("ghook", '\x0260')
-  ,("ghzsquare", '\x3393')
-  ,("gihiragana", '\x304E')
-  ,("gikatakana", '\x30AE')
-  ,("gimarmenian", '\x0563')
-  ,("gimel", '\x05D2')
-  ,("gimeldagesh", '\xFB32')
-  ,("gimeldageshhebrew", '\xFB32')
-  ,("gimelhebrew", '\x05D2')
-  ,("gjecyrillic", '\x0453')
-  ,("glottalinvertedstroke", '\x01BE')
-  ,("glottalstop", '\x0294')
-  ,("glottalstopinverted", '\x0296')
-  ,("glottalstopmod", '\x02C0')
-  ,("glottalstopreversed", '\x0295')
-  ,("glottalstopreversedmod", '\x02C1')
-  ,("glottalstopreversedsuperior", '\x02E4')
-  ,("glottalstopstroke", '\x02A1')
-  ,("glottalstopstrokereversed", '\x02A2')
-  ,("gmacron", '\x1E21')
-  ,("gmonospace", '\xFF47')
-  ,("gohiragana", '\x3054')
-  ,("gokatakana", '\x30B4')
-  ,("gparen", '\x24A2')
-  ,("gpasquare", '\x33AC')
-  ,("gradient", '\x2207')
-  ,("grave", '\x0060')
-  ,("gravebelowcmb", '\x0316')
-  ,("gravecmb", '\x0300')
-  ,("gravecomb", '\x0300')
-  ,("gravedeva", '\x0953')
-  ,("gravelowmod", '\x02CE')
-  ,("gravemonospace", '\xFF40')
-  ,("gravetonecmb", '\x0340')
-  ,("greater", '\x003E')
-  ,("greaterequal", '\x2265')
-  ,("greaterequalorless", '\x22DB')
-  ,("greatermonospace", '\xFF1E')
-  ,("greaterorequivalent", '\x2273')
-  ,("greaterorless", '\x2277')
-  ,("greateroverequal", '\x2267')
-  ,("greatersmall", '\xFE65')
-  ,("gscript", '\x0261')
-  ,("gstroke", '\x01E5')
-  ,("guhiragana", '\x3050')
-  ,("guillemotleft", '\x00AB')
-  ,("guillemotright", '\x00BB')
-  ,("guilsinglleft", '\x2039')
-  ,("guilsinglright", '\x203A')
-  ,("gukatakana", '\x30B0')
-  ,("guramusquare", '\x3318')
-  ,("gysquare", '\x33C9')
-  ,("h", '\x0068')
-  ,("haabkhasiancyrillic", '\x04A9')
-  ,("haaltonearabic", '\x06C1')
-  ,("habengali", '\x09B9')
-  ,("hadescendercyrillic", '\x04B3')
-  ,("hadeva", '\x0939')
-  ,("hagujarati", '\x0AB9')
-  ,("hagurmukhi", '\x0A39')
-  ,("haharabic", '\x062D')
-  ,("hahfinalarabic", '\xFEA2')
-  ,("hahinitialarabic", '\xFEA3')
-  ,("hahiragana", '\x306F')
-  ,("hahmedialarabic", '\xFEA4')
-  ,("haitusquare", '\x332A')
-  ,("hakatakana", '\x30CF')
-  ,("hakatakanahalfwidth", '\xFF8A')
-  ,("halantgurmukhi", '\x0A4D')
-  ,("hamzaarabic", '\x0621')
-  ,("hamzadammaarabic", '\x0621')
-  ,("hamzadammatanarabic", '\x0621')
-  ,("hamzafathaarabic", '\x0621')
-  ,("hamzafathatanarabic", '\x0621')
-  ,("hamzalowarabic", '\x0621')
-  ,("hamzalowkasraarabic", '\x0621')
-  ,("hamzalowkasratanarabic", '\x0621')
-  ,("hamzasukunarabic", '\x0621')
-  ,("hangulfiller", '\x3164')
-  ,("hardsigncyrillic", '\x044A')
-  ,("harpoonleftbarbup", '\x21BC')
-  ,("harpoonrightbarbup", '\x21C0')
-  ,("hasquare", '\x33CA')
-  ,("hatafpatah", '\x05B2')
-  ,("hatafpatah16", '\x05B2')
-  ,("hatafpatah23", '\x05B2')
-  ,("hatafpatah2f", '\x05B2')
-  ,("hatafpatahhebrew", '\x05B2')
-  ,("hatafpatahnarrowhebrew", '\x05B2')
-  ,("hatafpatahquarterhebrew", '\x05B2')
-  ,("hatafpatahwidehebrew", '\x05B2')
-  ,("hatafqamats", '\x05B3')
-  ,("hatafqamats1b", '\x05B3')
-  ,("hatafqamats28", '\x05B3')
-  ,("hatafqamats34", '\x05B3')
-  ,("hatafqamatshebrew", '\x05B3')
-  ,("hatafqamatsnarrowhebrew", '\x05B3')
-  ,("hatafqamatsquarterhebrew", '\x05B3')
-  ,("hatafqamatswidehebrew", '\x05B3')
-  ,("hatafsegol", '\x05B1')
-  ,("hatafsegol17", '\x05B1')
-  ,("hatafsegol24", '\x05B1')
-  ,("hatafsegol30", '\x05B1')
-  ,("hatafsegolhebrew", '\x05B1')
-  ,("hatafsegolnarrowhebrew", '\x05B1')
-  ,("hatafsegolquarterhebrew", '\x05B1')
-  ,("hatafsegolwidehebrew", '\x05B1')
-  ,("hbar", '\x0127')
-  ,("hbopomofo", '\x310F')
-  ,("hbrevebelow", '\x1E2B')
-  ,("hcedilla", '\x1E29')
-  ,("hcircle", '\x24D7')
-  ,("hcircumflex", '\x0125')
-  ,("hdieresis", '\x1E27')
-  ,("hdotaccent", '\x1E23')
-  ,("hdotbelow", '\x1E25')
-  ,("he", '\x05D4')
-  ,("heart", '\x2665')
-  ,("heartsuitblack", '\x2665')
-  ,("heartsuitwhite", '\x2661')
-  ,("hedagesh", '\xFB34')
-  ,("hedageshhebrew", '\xFB34')
-  ,("hehaltonearabic", '\x06C1')
-  ,("heharabic", '\x0647')
-  ,("hehebrew", '\x05D4')
-  ,("hehfinalaltonearabic", '\xFBA7')
-  ,("hehfinalalttwoarabic", '\xFEEA')
-  ,("hehfinalarabic", '\xFEEA')
-  ,("hehhamzaabovefinalarabic", '\xFBA5')
-  ,("hehhamzaaboveisolatedarabic", '\xFBA4')
-  ,("hehinitialaltonearabic", '\xFBA8')
-  ,("hehinitialarabic", '\xFEEB')
-  ,("hehiragana", '\x3078')
-  ,("hehmedialaltonearabic", '\xFBA9')
-  ,("hehmedialarabic", '\xFEEC')
-  ,("heiseierasquare", '\x337B')
-  ,("hekatakana", '\x30D8')
-  ,("hekatakanahalfwidth", '\xFF8D')
-  ,("hekutaarusquare", '\x3336')
-  ,("henghook", '\x0267')
-  ,("herutusquare", '\x3339')
-  ,("het", '\x05D7')
-  ,("hethebrew", '\x05D7')
-  ,("hhook", '\x0266')
-  ,("hhooksuperior", '\x02B1')
-  ,("hieuhacirclekorean", '\x327B')
-  ,("hieuhaparenkorean", '\x321B')
-  ,("hieuhcirclekorean", '\x326D')
-  ,("hieuhkorean", '\x314E')
-  ,("hieuhparenkorean", '\x320D')
-  ,("hihiragana", '\x3072')
-  ,("hikatakana", '\x30D2')
-  ,("hikatakanahalfwidth", '\xFF8B')
-  ,("hiriq", '\x05B4')
-  ,("hiriq14", '\x05B4')
-  ,("hiriq21", '\x05B4')
-  ,("hiriq2d", '\x05B4')
-  ,("hiriqhebrew", '\x05B4')
-  ,("hiriqnarrowhebrew", '\x05B4')
-  ,("hiriqquarterhebrew", '\x05B4')
-  ,("hiriqwidehebrew", '\x05B4')
-  ,("hlinebelow", '\x1E96')
-  ,("hmonospace", '\xFF48')
-  ,("hoarmenian", '\x0570')
-  ,("hohipthai", '\x0E2B')
-  ,("hohiragana", '\x307B')
-  ,("hokatakana", '\x30DB')
-  ,("hokatakanahalfwidth", '\xFF8E')
-  ,("holam", '\x05B9')
-  ,("holam19", '\x05B9')
-  ,("holam26", '\x05B9')
-  ,("holam32", '\x05B9')
-  ,("holamhebrew", '\x05B9')
-  ,("holamnarrowhebrew", '\x05B9')
-  ,("holamquarterhebrew", '\x05B9')
-  ,("holamwidehebrew", '\x05B9')
-  ,("honokhukthai", '\x0E2E')
-  ,("hookabovecomb", '\x0309')
-  ,("hookcmb", '\x0309')
-  ,("hookpalatalizedbelowcmb", '\x0321')
-  ,("hookretroflexbelowcmb", '\x0322')
-  ,("hoonsquare", '\x3342')
-  ,("horicoptic", '\x03E9')
-  ,("horizontalbar", '\x2015')
-  ,("horncmb", '\x031B')
-  ,("hotsprings", '\x2668')
-  ,("house", '\x2302')
-  ,("hparen", '\x24A3')
-  ,("hsuperior", '\x02B0')
-  ,("hturned", '\x0265')
-  ,("huhiragana", '\x3075')
-  ,("huiitosquare", '\x3333')
-  ,("hukatakana", '\x30D5')
-  ,("hukatakanahalfwidth", '\xFF8C')
-  ,("hungarumlaut", '\x02DD')
-  ,("hungarumlautcmb", '\x030B')
-  ,("hv", '\x0195')
-  ,("hyphen", '\x002D')
-  ,("hypheninferior", '\xF6E5')
-  ,("hyphenmonospace", '\xFF0D')
-  ,("hyphensmall", '\xFE63')
-  ,("hyphensuperior", '\xF6E6')
-  ,("hyphentwo", '\x2010')
-  ,("i", '\x0069')
-  ,("iacute", '\x00ED')
-  ,("iacyrillic", '\x044F')
-  ,("ibengali", '\x0987')
-  ,("ibopomofo", '\x3127')
-  ,("ibreve", '\x012D')
-  ,("icaron", '\x01D0')
-  ,("icircle", '\x24D8')
-  ,("icircumflex", '\x00EE')
-  ,("icyrillic", '\x0456')
-  ,("idblgrave", '\x0209')
-  ,("ideographearthcircle", '\x328F')
-  ,("ideographfirecircle", '\x328B')
-  ,("ideographicallianceparen", '\x323F')
-  ,("ideographiccallparen", '\x323A')
-  ,("ideographiccentrecircle", '\x32A5')
-  ,("ideographicclose", '\x3006')
-  ,("ideographiccomma", '\x3001')
-  ,("ideographiccommaleft", '\xFF64')
-  ,("ideographiccongratulationparen", '\x3237')
-  ,("ideographiccorrectcircle", '\x32A3')
-  ,("ideographicearthparen", '\x322F')
-  ,("ideographicenterpriseparen", '\x323D')
-  ,("ideographicexcellentcircle", '\x329D')
-  ,("ideographicfestivalparen", '\x3240')
-  ,("ideographicfinancialcircle", '\x3296')
-  ,("ideographicfinancialparen", '\x3236')
-  ,("ideographicfireparen", '\x322B')
-  ,("ideographichaveparen", '\x3232')
-  ,("ideographichighcircle", '\x32A4')
-  ,("ideographiciterationmark", '\x3005')
-  ,("ideographiclaborcircle", '\x3298')
-  ,("ideographiclaborparen", '\x3238')
-  ,("ideographicleftcircle", '\x32A7')
-  ,("ideographiclowcircle", '\x32A6')
-  ,("ideographicmedicinecircle", '\x32A9')
-  ,("ideographicmetalparen", '\x322E')
-  ,("ideographicmoonparen", '\x322A')
-  ,("ideographicnameparen", '\x3234')
-  ,("ideographicperiod", '\x3002')
-  ,("ideographicprintcircle", '\x329E')
-  ,("ideographicreachparen", '\x3243')
-  ,("ideographicrepresentparen", '\x3239')
-  ,("ideographicresourceparen", '\x323E')
-  ,("ideographicrightcircle", '\x32A8')
-  ,("ideographicsecretcircle", '\x3299')
-  ,("ideographicselfparen", '\x3242')
-  ,("ideographicsocietyparen", '\x3233')
-  ,("ideographicspace", '\x3000')
-  ,("ideographicspecialparen", '\x3235')
-  ,("ideographicstockparen", '\x3231')
-  ,("ideographicstudyparen", '\x323B')
-  ,("ideographicsunparen", '\x3230')
-  ,("ideographicsuperviseparen", '\x323C')
-  ,("ideographicwaterparen", '\x322C')
-  ,("ideographicwoodparen", '\x322D')
-  ,("ideographiczero", '\x3007')
-  ,("ideographmetalcircle", '\x328E')
-  ,("ideographmooncircle", '\x328A')
-  ,("ideographnamecircle", '\x3294')
-  ,("ideographsuncircle", '\x3290')
-  ,("ideographwatercircle", '\x328C')
-  ,("ideographwoodcircle", '\x328D')
-  ,("ideva", '\x0907')
-  ,("idieresis", '\x00EF')
-  ,("idieresisacute", '\x1E2F')
-  ,("idieresiscyrillic", '\x04E5')
-  ,("idotbelow", '\x1ECB')
-  ,("iebrevecyrillic", '\x04D7')
-  ,("iecyrillic", '\x0435')
-  ,("ieungacirclekorean", '\x3275')
-  ,("ieungaparenkorean", '\x3215')
-  ,("ieungcirclekorean", '\x3267')
-  ,("ieungkorean", '\x3147')
-  ,("ieungparenkorean", '\x3207')
-  ,("igrave", '\x00EC')
-  ,("igujarati", '\x0A87')
-  ,("igurmukhi", '\x0A07')
-  ,("ihiragana", '\x3044')
-  ,("ihookabove", '\x1EC9')
-  ,("iibengali", '\x0988')
-  ,("iicyrillic", '\x0438')
-  ,("iideva", '\x0908')
-  ,("iigujarati", '\x0A88')
-  ,("iigurmukhi", '\x0A08')
-  ,("iimatragurmukhi", '\x0A40')
-  ,("iinvertedbreve", '\x020B')
-  ,("iishortcyrillic", '\x0439')
-  ,("iivowelsignbengali", '\x09C0')
-  ,("iivowelsigndeva", '\x0940')
-  ,("iivowelsigngujarati", '\x0AC0')
-  ,("ij", '\x0133')
-  ,("ikatakana", '\x30A4')
-  ,("ikatakanahalfwidth", '\xFF72')
-  ,("ikorean", '\x3163')
-  ,("ilde", '\x02DC')
-  ,("iluyhebrew", '\x05AC')
-  ,("imacron", '\x012B')
-  ,("imacroncyrillic", '\x04E3')
-  ,("imageorapproximatelyequal", '\x2253')
-  ,("imatragurmukhi", '\x0A3F')
-  ,("imonospace", '\xFF49')
-  ,("increment", '\x2206')
-  ,("infinity", '\x221E')
-  ,("iniarmenian", '\x056B')
-  ,("integral", '\x222B')
-  ,("integralbottom", '\x2321')
-  ,("integralbt", '\x2321')
-  ,("integralex", '\xF8F5')
-  ,("integraltop", '\x2320')
-  ,("integraltp", '\x2320')
-  ,("intersection", '\x2229')
-  ,("intisquare", '\x3305')
-  ,("invbullet", '\x25D8')
-  ,("invcircle", '\x25D9')
-  ,("invsmileface", '\x263B')
-  ,("iocyrillic", '\x0451')
-  ,("iogonek", '\x012F')
-  ,("iota", '\x03B9')
-  ,("iotadieresis", '\x03CA')
-  ,("iotadieresistonos", '\x0390')
-  ,("iotalatin", '\x0269')
-  ,("iotatonos", '\x03AF')
-  ,("iparen", '\x24A4')
-  ,("irigurmukhi", '\x0A72')
-  ,("ismallhiragana", '\x3043')
-  ,("ismallkatakana", '\x30A3')
-  ,("ismallkatakanahalfwidth", '\xFF68')
-  ,("issharbengali", '\x09FA')
-  ,("istroke", '\x0268')
-  ,("isuperior", '\xF6ED')
-  ,("iterationhiragana", '\x309D')
-  ,("iterationkatakana", '\x30FD')
-  ,("itilde", '\x0129')
-  ,("itildebelow", '\x1E2D')
-  ,("iubopomofo", '\x3129')
-  ,("iucyrillic", '\x044E')
-  ,("ivowelsignbengali", '\x09BF')
-  ,("ivowelsigndeva", '\x093F')
-  ,("ivowelsigngujarati", '\x0ABF')
-  ,("izhitsacyrillic", '\x0475')
-  ,("izhitsadblgravecyrillic", '\x0477')
-  ,("j", '\x006A')
-  ,("jaarmenian", '\x0571')
-  ,("jabengali", '\x099C')
-  ,("jadeva", '\x091C')
-  ,("jagujarati", '\x0A9C')
-  ,("jagurmukhi", '\x0A1C')
-  ,("jbopomofo", '\x3110')
-  ,("jcaron", '\x01F0')
-  ,("jcircle", '\x24D9')
-  ,("jcircumflex", '\x0135')
-  ,("jcrossedtail", '\x029D')
-  ,("jdotlessstroke", '\x025F')
-  ,("jecyrillic", '\x0458')
-  ,("jeemarabic", '\x062C')
-  ,("jeemfinalarabic", '\xFE9E')
-  ,("jeeminitialarabic", '\xFE9F')
-  ,("jeemmedialarabic", '\xFEA0')
-  ,("jeharabic", '\x0698')
-  ,("jehfinalarabic", '\xFB8B')
-  ,("jhabengali", '\x099D')
-  ,("jhadeva", '\x091D')
-  ,("jhagujarati", '\x0A9D')
-  ,("jhagurmukhi", '\x0A1D')
-  ,("jheharmenian", '\x057B')
-  ,("jis", '\x3004')
-  ,("jmonospace", '\xFF4A')
-  ,("jparen", '\x24A5')
-  ,("jsuperior", '\x02B2')
-  ,("k", '\x006B')
-  ,("kabashkircyrillic", '\x04A1')
-  ,("kabengali", '\x0995')
-  ,("kacute", '\x1E31')
-  ,("kacyrillic", '\x043A')
-  ,("kadescendercyrillic", '\x049B')
-  ,("kadeva", '\x0915')
-  ,("kaf", '\x05DB')
-  ,("kafarabic", '\x0643')
-  ,("kafdagesh", '\xFB3B')
-  ,("kafdageshhebrew", '\xFB3B')
-  ,("kaffinalarabic", '\xFEDA')
-  ,("kafhebrew", '\x05DB')
-  ,("kafinitialarabic", '\xFEDB')
-  ,("kafmedialarabic", '\xFEDC')
-  ,("kafrafehebrew", '\xFB4D')
-  ,("kagujarati", '\x0A95')
-  ,("kagurmukhi", '\x0A15')
-  ,("kahiragana", '\x304B')
-  ,("kahookcyrillic", '\x04C4')
-  ,("kakatakana", '\x30AB')
-  ,("kakatakanahalfwidth", '\xFF76')
-  ,("kappa", '\x03BA')
-  ,("kappasymbolgreek", '\x03F0')
-  ,("kapyeounmieumkorean", '\x3171')
-  ,("kapyeounphieuphkorean", '\x3184')
-  ,("kapyeounpieupkorean", '\x3178')
-  ,("kapyeounssangpieupkorean", '\x3179')
-  ,("karoriisquare", '\x330D')
-  ,("kashidaautoarabic", '\x0640')
-  ,("kashidaautonosidebearingarabic", '\x0640')
-  ,("kasmallkatakana", '\x30F5')
-  ,("kasquare", '\x3384')
-  ,("kasraarabic", '\x0650')
-  ,("kasratanarabic", '\x064D')
-  ,("kastrokecyrillic", '\x049F')
-  ,("katahiraprolongmarkhalfwidth", '\xFF70')
-  ,("kaverticalstrokecyrillic", '\x049D')
-  ,("kbopomofo", '\x310E')
-  ,("kcalsquare", '\x3389')
-  ,("kcaron", '\x01E9')
-  ,("kcedilla", '\x0137')
-  ,("kcircle", '\x24DA')
-  ,("kcommaaccent", '\x0137')
-  ,("kdotbelow", '\x1E33')
-  ,("keharmenian", '\x0584')
-  ,("kehiragana", '\x3051')
-  ,("kekatakana", '\x30B1')
-  ,("kekatakanahalfwidth", '\xFF79')
-  ,("kenarmenian", '\x056F')
-  ,("kesmallkatakana", '\x30F6')
-  ,("kgreenlandic", '\x0138')
-  ,("khabengali", '\x0996')
-  ,("khacyrillic", '\x0445')
-  ,("khadeva", '\x0916')
-  ,("khagujarati", '\x0A96')
-  ,("khagurmukhi", '\x0A16')
-  ,("khaharabic", '\x062E')
-  ,("khahfinalarabic", '\xFEA6')
-  ,("khahinitialarabic", '\xFEA7')
-  ,("khahmedialarabic", '\xFEA8')
-  ,("kheicoptic", '\x03E7')
-  ,("khhadeva", '\x0959')
-  ,("khhagurmukhi", '\x0A59')
-  ,("khieukhacirclekorean", '\x3278')
-  ,("khieukhaparenkorean", '\x3218')
-  ,("khieukhcirclekorean", '\x326A')
-  ,("khieukhkorean", '\x314B')
-  ,("khieukhparenkorean", '\x320A')
-  ,("khokhaithai", '\x0E02')
-  ,("khokhonthai", '\x0E05')
-  ,("khokhuatthai", '\x0E03')
-  ,("khokhwaithai", '\x0E04')
-  ,("khomutthai", '\x0E5B')
-  ,("khook", '\x0199')
-  ,("khorakhangthai", '\x0E06')
-  ,("khzsquare", '\x3391')
-  ,("kihiragana", '\x304D')
-  ,("kikatakana", '\x30AD')
-  ,("kikatakanahalfwidth", '\xFF77')
-  ,("kiroguramusquare", '\x3315')
-  ,("kiromeetorusquare", '\x3316')
-  ,("kirosquare", '\x3314')
-  ,("kiyeokacirclekorean", '\x326E')
-  ,("kiyeokaparenkorean", '\x320E')
-  ,("kiyeokcirclekorean", '\x3260')
-  ,("kiyeokkorean", '\x3131')
-  ,("kiyeokparenkorean", '\x3200')
-  ,("kiyeoksioskorean", '\x3133')
-  ,("kjecyrillic", '\x045C')
-  ,("klinebelow", '\x1E35')
-  ,("klsquare", '\x3398')
-  ,("kmcubedsquare", '\x33A6')
-  ,("kmonospace", '\xFF4B')
-  ,("kmsquaredsquare", '\x33A2')
-  ,("kohiragana", '\x3053')
-  ,("kohmsquare", '\x33C0')
-  ,("kokaithai", '\x0E01')
-  ,("kokatakana", '\x30B3')
-  ,("kokatakanahalfwidth", '\xFF7A')
-  ,("kooposquare", '\x331E')
-  ,("koppacyrillic", '\x0481')
-  ,("koreanstandardsymbol", '\x327F')
-  ,("koroniscmb", '\x0343')
-  ,("kparen", '\x24A6')
-  ,("kpasquare", '\x33AA')
-  ,("ksicyrillic", '\x046F')
-  ,("ktsquare", '\x33CF')
-  ,("kturned", '\x029E')
-  ,("kuhiragana", '\x304F')
-  ,("kukatakana", '\x30AF')
-  ,("kukatakanahalfwidth", '\xFF78')
-  ,("kvsquare", '\x33B8')
-  ,("kwsquare", '\x33BE')
-  ,("l", '\x006C')
-  ,("labengali", '\x09B2')
-  ,("lacute", '\x013A')
-  ,("ladeva", '\x0932')
-  ,("lagujarati", '\x0AB2')
-  ,("lagurmukhi", '\x0A32')
-  ,("lakkhangyaothai", '\x0E45')
-  ,("lamaleffinalarabic", '\xFEFC')
-  ,("lamalefhamzaabovefinalarabic", '\xFEF8')
-  ,("lamalefhamzaaboveisolatedarabic", '\xFEF7')
-  ,("lamalefhamzabelowfinalarabic", '\xFEFA')
-  ,("lamalefhamzabelowisolatedarabic", '\xFEF9')
-  ,("lamalefisolatedarabic", '\xFEFB')
-  ,("lamalefmaddaabovefinalarabic", '\xFEF6')
-  ,("lamalefmaddaaboveisolatedarabic", '\xFEF5')
-  ,("lamarabic", '\x0644')
-  ,("lambda", '\x03BB')
-  ,("lambdastroke", '\x019B')
-  ,("lamed", '\x05DC')
-  ,("lameddagesh", '\xFB3C')
-  ,("lameddageshhebrew", '\xFB3C')
-  ,("lamedhebrew", '\x05DC')
-  ,("lamedholam", '\x05DC')
-  ,("lamedholamdagesh", '\x05DC')
-  ,("lamedholamdageshhebrew", '\x05DC')
-  ,("lamedholamhebrew", '\x05DC')
-  ,("lamfinalarabic", '\xFEDE')
-  ,("lamhahinitialarabic", '\xFCCA')
-  ,("laminitialarabic", '\xFEDF')
-  ,("lamjeeminitialarabic", '\xFCC9')
-  ,("lamkhahinitialarabic", '\xFCCB')
-  ,("lamlamhehisolatedarabic", '\xFDF2')
-  ,("lammedialarabic", '\xFEE0')
-  ,("lammeemhahinitialarabic", '\xFD88')
-  ,("lammeeminitialarabic", '\xFCCC')
-  ,("lammeemjeeminitialarabic", '\xFEDF')
-  ,("lammeemkhahinitialarabic", '\xFEDF')
-  ,("largecircle", '\x25EF')
-  ,("lbar", '\x019A')
-  ,("lbelt", '\x026C')
-  ,("lbopomofo", '\x310C')
-  ,("lcaron", '\x013E')
-  ,("lcedilla", '\x013C')
-  ,("lcircle", '\x24DB')
-  ,("lcircumflexbelow", '\x1E3D')
-  ,("lcommaaccent", '\x013C')
-  ,("ldot", '\x0140')
-  ,("ldotaccent", '\x0140')
-  ,("ldotbelow", '\x1E37')
-  ,("ldotbelowmacron", '\x1E39')
-  ,("leftangleabovecmb", '\x031A')
-  ,("lefttackbelowcmb", '\x0318')
-  ,("less", '\x003C')
-  ,("lessequal", '\x2264')
-  ,("lessequalorgreater", '\x22DA')
-  ,("lessmonospace", '\xFF1C')
-  ,("lessorequivalent", '\x2272')
-  ,("lessorgreater", '\x2276')
-  ,("lessoverequal", '\x2266')
-  ,("lesssmall", '\xFE64')
-  ,("lezh", '\x026E')
-  ,("lfblock", '\x258C')
-  ,("lhookretroflex", '\x026D')
-  ,("lira", '\x20A4')
-  ,("liwnarmenian", '\x056C')
-  ,("lj", '\x01C9')
-  ,("ljecyrillic", '\x0459')
-  ,("ll", '\xF6C0')
-  ,("lladeva", '\x0933')
-  ,("llagujarati", '\x0AB3')
-  ,("llinebelow", '\x1E3B')
-  ,("llladeva", '\x0934')
-  ,("llvocalicbengali", '\x09E1')
-  ,("llvocalicdeva", '\x0961')
-  ,("llvocalicvowelsignbengali", '\x09E3')
-  ,("llvocalicvowelsigndeva", '\x0963')
-  ,("lmiddletilde", '\x026B')
-  ,("lmonospace", '\xFF4C')
-  ,("lmsquare", '\x33D0')
-  ,("lochulathai", '\x0E2C')
-  ,("logicaland", '\x2227')
-  ,("logicalnot", '\x00AC')
-  ,("logicalnotreversed", '\x2310')
-  ,("logicalor", '\x2228')
-  ,("lolingthai", '\x0E25')
-  ,("longs", '\x017F')
-  ,("lowlinecenterline", '\xFE4E')
-  ,("lowlinecmb", '\x0332')
-  ,("lowlinedashed", '\xFE4D')
-  ,("lozenge", '\x25CA')
-  ,("lparen", '\x24A7')
-  ,("lslash", '\x0142')
-  ,("lsquare", '\x2113')
-  ,("lsuperior", '\xF6EE')
-  ,("ltshade", '\x2591')
-  ,("luthai", '\x0E26')
-  ,("lvocalicbengali", '\x098C')
-  ,("lvocalicdeva", '\x090C')
-  ,("lvocalicvowelsignbengali", '\x09E2')
-  ,("lvocalicvowelsigndeva", '\x0962')
-  ,("lxsquare", '\x33D3')
-  ,("m", '\x006D')
-  ,("mabengali", '\x09AE')
-  ,("macron", '\x00AF')
-  ,("macronbelowcmb", '\x0331')
-  ,("macroncmb", '\x0304')
-  ,("macronlowmod", '\x02CD')
-  ,("macronmonospace", '\xFFE3')
-  ,("macute", '\x1E3F')
-  ,("madeva", '\x092E')
-  ,("magujarati", '\x0AAE')
-  ,("magurmukhi", '\x0A2E')
-  ,("mahapakhhebrew", '\x05A4')
-  ,("mahapakhlefthebrew", '\x05A4')
-  ,("mahiragana", '\x307E')
-  ,("maichattawalowleftthai", '\xF895')
-  ,("maichattawalowrightthai", '\xF894')
-  ,("maichattawathai", '\x0E4B')
-  ,("maichattawaupperleftthai", '\xF893')
-  ,("maieklowleftthai", '\xF88C')
-  ,("maieklowrightthai", '\xF88B')
-  ,("maiekthai", '\x0E48')
-  ,("maiekupperleftthai", '\xF88A')
-  ,("maihanakatleftthai", '\xF884')
-  ,("maihanakatthai", '\x0E31')
-  ,("maitaikhuleftthai", '\xF889')
-  ,("maitaikhuthai", '\x0E47')
-  ,("maitholowleftthai", '\xF88F')
-  ,("maitholowrightthai", '\xF88E')
-  ,("maithothai", '\x0E49')
-  ,("maithoupperleftthai", '\xF88D')
-  ,("maitrilowleftthai", '\xF892')
-  ,("maitrilowrightthai", '\xF891')
-  ,("maitrithai", '\x0E4A')
-  ,("maitriupperleftthai", '\xF890')
-  ,("maiyamokthai", '\x0E46')
-  ,("makatakana", '\x30DE')
-  ,("makatakanahalfwidth", '\xFF8F')
-  ,("male", '\x2642')
-  ,("mansyonsquare", '\x3347')
-  ,("maqafhebrew", '\x05BE')
-  ,("mars", '\x2642')
-  ,("masoracirclehebrew", '\x05AF')
-  ,("masquare", '\x3383')
-  ,("mbopomofo", '\x3107')
-  ,("mbsquare", '\x33D4')
-  ,("mcircle", '\x24DC')
-  ,("mcubedsquare", '\x33A5')
-  ,("mdotaccent", '\x1E41')
-  ,("mdotbelow", '\x1E43')
-  ,("meemarabic", '\x0645')
-  ,("meemfinalarabic", '\xFEE2')
-  ,("meeminitialarabic", '\xFEE3')
-  ,("meemmedialarabic", '\xFEE4')
-  ,("meemmeeminitialarabic", '\xFCD1')
-  ,("meemmeemisolatedarabic", '\xFC48')
-  ,("meetorusquare", '\x334D')
-  ,("mehiragana", '\x3081')
-  ,("meizierasquare", '\x337E')
-  ,("mekatakana", '\x30E1')
-  ,("mekatakanahalfwidth", '\xFF92')
-  ,("mem", '\x05DE')
-  ,("memdagesh", '\xFB3E')
-  ,("memdageshhebrew", '\xFB3E')
-  ,("memhebrew", '\x05DE')
-  ,("menarmenian", '\x0574')
-  ,("merkhahebrew", '\x05A5')
-  ,("merkhakefulahebrew", '\x05A6')
-  ,("merkhakefulalefthebrew", '\x05A6')
-  ,("merkhalefthebrew", '\x05A5')
-  ,("mhook", '\x0271')
-  ,("mhzsquare", '\x3392')
-  ,("middledotkatakanahalfwidth", '\xFF65')
-  ,("middot", '\x00B7')
-  ,("mieumacirclekorean", '\x3272')
-  ,("mieumaparenkorean", '\x3212')
-  ,("mieumcirclekorean", '\x3264')
-  ,("mieumkorean", '\x3141')
-  ,("mieumpansioskorean", '\x3170')
-  ,("mieumparenkorean", '\x3204')
-  ,("mieumpieupkorean", '\x316E')
-  ,("mieumsioskorean", '\x316F')
-  ,("mihiragana", '\x307F')
-  ,("mikatakana", '\x30DF')
-  ,("mikatakanahalfwidth", '\xFF90')
-  ,("minus", '\x2212')
-  ,("minusbelowcmb", '\x0320')
-  ,("minuscircle", '\x2296')
-  ,("minusmod", '\x02D7')
-  ,("minusplus", '\x2213')
-  ,("minute", '\x2032')
-  ,("miribaarusquare", '\x334A')
-  ,("mirisquare", '\x3349')
-  ,("mlonglegturned", '\x0270')
-  ,("mlsquare", '\x3396')
-  ,("mmcubedsquare", '\x33A3')
-  ,("mmonospace", '\xFF4D')
-  ,("mmsquaredsquare", '\x339F')
-  ,("mohiragana", '\x3082')
-  ,("mohmsquare", '\x33C1')
-  ,("mokatakana", '\x30E2')
-  ,("mokatakanahalfwidth", '\xFF93')
-  ,("molsquare", '\x33D6')
-  ,("momathai", '\x0E21')
-  ,("moverssquare", '\x33A7')
-  ,("moverssquaredsquare", '\x33A8')
-  ,("mparen", '\x24A8')
-  ,("mpasquare", '\x33AB')
-  ,("mssquare", '\x33B3')
-  ,("msuperior", '\xF6EF')
-  ,("mturned", '\x026F')
-  ,("mu", '\x00B5')
-  ,("mu1", '\x00B5')
-  ,("muasquare", '\x3382')
-  ,("muchgreater", '\x226B')
-  ,("muchless", '\x226A')
-  ,("mufsquare", '\x338C')
-  ,("mugreek", '\x03BC')
-  ,("mugsquare", '\x338D')
-  ,("muhiragana", '\x3080')
-  ,("mukatakana", '\x30E0')
-  ,("mukatakanahalfwidth", '\xFF91')
-  ,("mulsquare", '\x3395')
-  ,("multiply", '\x00D7')
-  ,("mumsquare", '\x339B')
-  ,("munahhebrew", '\x05A3')
-  ,("munahlefthebrew", '\x05A3')
-  ,("musicalnote", '\x266A')
-  ,("musicalnotedbl", '\x266B')
-  ,("musicflatsign", '\x266D')
-  ,("musicsharpsign", '\x266F')
-  ,("mussquare", '\x33B2')
-  ,("muvsquare", '\x33B6')
-  ,("muwsquare", '\x33BC')
-  ,("mvmegasquare", '\x33B9')
-  ,("mvsquare", '\x33B7')
-  ,("mwmegasquare", '\x33BF')
-  ,("mwsquare", '\x33BD')
-  ,("n", '\x006E')
-  ,("nabengali", '\x09A8')
-  ,("nabla", '\x2207')
-  ,("nacute", '\x0144')
-  ,("nadeva", '\x0928')
-  ,("nagujarati", '\x0AA8')
-  ,("nagurmukhi", '\x0A28')
-  ,("nahiragana", '\x306A')
-  ,("nakatakana", '\x30CA')
-  ,("nakatakanahalfwidth", '\xFF85')
-  ,("napostrophe", '\x0149')
-  ,("nasquare", '\x3381')
-  ,("nbopomofo", '\x310B')
-  ,("nbspace", '\x00A0')
-  ,("ncaron", '\x0148')
-  ,("ncedilla", '\x0146')
-  ,("ncircle", '\x24DD')
-  ,("ncircumflexbelow", '\x1E4B')
-  ,("ncommaaccent", '\x0146')
-  ,("ndotaccent", '\x1E45')
-  ,("ndotbelow", '\x1E47')
-  ,("nehiragana", '\x306D')
-  ,("nekatakana", '\x30CD')
-  ,("nekatakanahalfwidth", '\xFF88')
-  ,("newsheqelsign", '\x20AA')
-  ,("nfsquare", '\x338B')
-  ,("ngabengali", '\x0999')
-  ,("ngadeva", '\x0919')
-  ,("ngagujarati", '\x0A99')
-  ,("ngagurmukhi", '\x0A19')
-  ,("ngonguthai", '\x0E07')
-  ,("nhiragana", '\x3093')
-  ,("nhookleft", '\x0272')
-  ,("nhookretroflex", '\x0273')
-  ,("nieunacirclekorean", '\x326F')
-  ,("nieunaparenkorean", '\x320F')
-  ,("nieuncieuckorean", '\x3135')
-  ,("nieuncirclekorean", '\x3261')
-  ,("nieunhieuhkorean", '\x3136')
-  ,("nieunkorean", '\x3134')
-  ,("nieunpansioskorean", '\x3168')
-  ,("nieunparenkorean", '\x3201')
-  ,("nieunsioskorean", '\x3167')
-  ,("nieuntikeutkorean", '\x3166')
-  ,("nihiragana", '\x306B')
-  ,("nikatakana", '\x30CB')
-  ,("nikatakanahalfwidth", '\xFF86')
-  ,("nikhahitleftthai", '\xF899')
-  ,("nikhahitthai", '\x0E4D')
-  ,("nine", '\x0039')
-  ,("ninearabic", '\x0669')
-  ,("ninebengali", '\x09EF')
-  ,("ninecircle", '\x2468')
-  ,("ninecircleinversesansserif", '\x2792')
-  ,("ninedeva", '\x096F')
-  ,("ninegujarati", '\x0AEF')
-  ,("ninegurmukhi", '\x0A6F')
-  ,("ninehackarabic", '\x0669')
-  ,("ninehangzhou", '\x3029')
-  ,("nineideographicparen", '\x3228')
-  ,("nineinferior", '\x2089')
-  ,("ninemonospace", '\xFF19')
-  ,("nineoldstyle", '\xF739')
-  ,("nineparen", '\x247C')
-  ,("nineperiod", '\x2490')
-  ,("ninepersian", '\x06F9')
-  ,("nineroman", '\x2178')
-  ,("ninesuperior", '\x2079')
-  ,("nineteencircle", '\x2472')
-  ,("nineteenparen", '\x2486')
-  ,("nineteenperiod", '\x249A')
-  ,("ninethai", '\x0E59')
-  ,("nj", '\x01CC')
-  ,("njecyrillic", '\x045A')
-  ,("nkatakana", '\x30F3')
-  ,("nkatakanahalfwidth", '\xFF9D')
-  ,("nlegrightlong", '\x019E')
-  ,("nlinebelow", '\x1E49')
-  ,("nmonospace", '\xFF4E')
-  ,("nmsquare", '\x339A')
-  ,("nnabengali", '\x09A3')
-  ,("nnadeva", '\x0923')
-  ,("nnagujarati", '\x0AA3')
-  ,("nnagurmukhi", '\x0A23')
-  ,("nnnadeva", '\x0929')
-  ,("nohiragana", '\x306E')
-  ,("nokatakana", '\x30CE')
-  ,("nokatakanahalfwidth", '\xFF89')
-  ,("nonbreakingspace", '\x00A0')
-  ,("nonenthai", '\x0E13')
-  ,("nonuthai", '\x0E19')
-  ,("noonarabic", '\x0646')
-  ,("noonfinalarabic", '\xFEE6')
-  ,("noonghunnaarabic", '\x06BA')
-  ,("noonghunnafinalarabic", '\xFB9F')
-  ,("noonhehinitialarabic", '\xFEE7')
-  ,("nooninitialarabic", '\xFEE7')
-  ,("noonjeeminitialarabic", '\xFCD2')
-  ,("noonjeemisolatedarabic", '\xFC4B')
-  ,("noonmedialarabic", '\xFEE8')
-  ,("noonmeeminitialarabic", '\xFCD5')
-  ,("noonmeemisolatedarabic", '\xFC4E')
-  ,("noonnoonfinalarabic", '\xFC8D')
-  ,("notcontains", '\x220C')
-  ,("notelement", '\x2209')
-  ,("notelementof", '\x2209')
-  ,("notequal", '\x2260')
-  ,("notgreater", '\x226F')
-  ,("notgreaternorequal", '\x2271')
-  ,("notgreaternorless", '\x2279')
-  ,("notidentical", '\x2262')
-  ,("notless", '\x226E')
-  ,("notlessnorequal", '\x2270')
-  ,("notparallel", '\x2226')
-  ,("notprecedes", '\x2280')
-  ,("notsubset", '\x2284')
-  ,("notsucceeds", '\x2281')
-  ,("notsuperset", '\x2285')
-  ,("nowarmenian", '\x0576')
-  ,("nparen", '\x24A9')
-  ,("nssquare", '\x33B1')
-  ,("nsuperior", '\x207F')
-  ,("ntilde", '\x00F1')
-  ,("nu", '\x03BD')
-  ,("nuhiragana", '\x306C')
-  ,("nukatakana", '\x30CC')
-  ,("nukatakanahalfwidth", '\xFF87')
-  ,("nuktabengali", '\x09BC')
-  ,("nuktadeva", '\x093C')
-  ,("nuktagujarati", '\x0ABC')
-  ,("nuktagurmukhi", '\x0A3C')
-  ,("numbersign", '\x0023')
-  ,("numbersignmonospace", '\xFF03')
-  ,("numbersignsmall", '\xFE5F')
-  ,("numeralsigngreek", '\x0374')
-  ,("numeralsignlowergreek", '\x0375')
-  ,("numero", '\x2116')
-  ,("nun", '\x05E0')
-  ,("nundagesh", '\xFB40')
-  ,("nundageshhebrew", '\xFB40')
-  ,("nunhebrew", '\x05E0')
-  ,("nvsquare", '\x33B5')
-  ,("nwsquare", '\x33BB')
-  ,("nyabengali", '\x099E')
-  ,("nyadeva", '\x091E')
-  ,("nyagujarati", '\x0A9E')
-  ,("nyagurmukhi", '\x0A1E')
-  ,("o", '\x006F')
-  ,("oacute", '\x00F3')
-  ,("oangthai", '\x0E2D')
-  ,("obarred", '\x0275')
-  ,("obarredcyrillic", '\x04E9')
-  ,("obarreddieresiscyrillic", '\x04EB')
-  ,("obengali", '\x0993')
-  ,("obopomofo", '\x311B')
-  ,("obreve", '\x014F')
-  ,("ocandradeva", '\x0911')
-  ,("ocandragujarati", '\x0A91')
-  ,("ocandravowelsigndeva", '\x0949')
-  ,("ocandravowelsigngujarati", '\x0AC9')
-  ,("ocaron", '\x01D2')
-  ,("ocircle", '\x24DE')
-  ,("ocircumflex", '\x00F4')
-  ,("ocircumflexacute", '\x1ED1')
-  ,("ocircumflexdotbelow", '\x1ED9')
-  ,("ocircumflexgrave", '\x1ED3')
-  ,("ocircumflexhookabove", '\x1ED5')
-  ,("ocircumflextilde", '\x1ED7')
-  ,("ocyrillic", '\x043E')
-  ,("odblacute", '\x0151')
-  ,("odblgrave", '\x020D')
-  ,("odeva", '\x0913')
-  ,("odieresis", '\x00F6')
-  ,("odieresiscyrillic", '\x04E7')
-  ,("odotbelow", '\x1ECD')
-  ,("oe", '\x0153')
-  ,("oekorean", '\x315A')
-  ,("ogonek", '\x02DB')
-  ,("ogonekcmb", '\x0328')
-  ,("ograve", '\x00F2')
-  ,("ogujarati", '\x0A93')
-  ,("oharmenian", '\x0585')
-  ,("ohiragana", '\x304A')
-  ,("ohookabove", '\x1ECF')
-  ,("ohorn", '\x01A1')
-  ,("ohornacute", '\x1EDB')
-  ,("ohorndotbelow", '\x1EE3')
-  ,("ohorngrave", '\x1EDD')
-  ,("ohornhookabove", '\x1EDF')
-  ,("ohorntilde", '\x1EE1')
-  ,("ohungarumlaut", '\x0151')
-  ,("oi", '\x01A3')
-  ,("oinvertedbreve", '\x020F')
-  ,("okatakana", '\x30AA')
-  ,("okatakanahalfwidth", '\xFF75')
-  ,("okorean", '\x3157')
-  ,("olehebrew", '\x05AB')
-  ,("omacron", '\x014D')
-  ,("omacronacute", '\x1E53')
-  ,("omacrongrave", '\x1E51')
-  ,("omdeva", '\x0950')
-  ,("omega", '\x03C9')
-  ,("omega1", '\x03D6')
-  ,("omegacyrillic", '\x0461')
-  ,("omegalatinclosed", '\x0277')
-  ,("omegaroundcyrillic", '\x047B')
-  ,("omegatitlocyrillic", '\x047D')
-  ,("omegatonos", '\x03CE')
-  ,("omgujarati", '\x0AD0')
-  ,("omicron", '\x03BF')
-  ,("omicrontonos", '\x03CC')
-  ,("omonospace", '\xFF4F')
-  ,("one", '\x0031')
-  ,("onearabic", '\x0661')
-  ,("onebengali", '\x09E7')
-  ,("onecircle", '\x2460')
-  ,("onecircleinversesansserif", '\x278A')
-  ,("onedeva", '\x0967')
-  ,("onedotenleader", '\x2024')
-  ,("oneeighth", '\x215B')
-  ,("onefitted", '\xF6DC')
-  ,("onegujarati", '\x0AE7')
-  ,("onegurmukhi", '\x0A67')
-  ,("onehackarabic", '\x0661')
-  ,("onehalf", '\x00BD')
-  ,("onehangzhou", '\x3021')
-  ,("oneideographicparen", '\x3220')
-  ,("oneinferior", '\x2081')
-  ,("onemonospace", '\xFF11')
-  ,("onenumeratorbengali", '\x09F4')
-  ,("oneoldstyle", '\xF731')
-  ,("oneparen", '\x2474')
-  ,("oneperiod", '\x2488')
-  ,("onepersian", '\x06F1')
-  ,("onequarter", '\x00BC')
-  ,("oneroman", '\x2170')
-  ,("onesuperior", '\x00B9')
-  ,("onethai", '\x0E51')
-  ,("onethird", '\x2153')
-  ,("oogonek", '\x01EB')
-  ,("oogonekmacron", '\x01ED')
-  ,("oogurmukhi", '\x0A13')
-  ,("oomatragurmukhi", '\x0A4B')
-  ,("oopen", '\x0254')
-  ,("oparen", '\x24AA')
-  ,("openbullet", '\x25E6')
-  ,("option", '\x2325')
-  ,("ordfeminine", '\x00AA')
-  ,("ordmasculine", '\x00BA')
-  ,("orthogonal", '\x221F')
-  ,("oshortdeva", '\x0912')
-  ,("oshortvowelsigndeva", '\x094A')
-  ,("oslash", '\x00F8')
-  ,("oslashacute", '\x01FF')
-  ,("osmallhiragana", '\x3049')
-  ,("osmallkatakana", '\x30A9')
-  ,("osmallkatakanahalfwidth", '\xFF6B')
-  ,("ostrokeacute", '\x01FF')
-  ,("osuperior", '\xF6F0')
-  ,("otcyrillic", '\x047F')
-  ,("otilde", '\x00F5')
-  ,("otildeacute", '\x1E4D')
-  ,("otildedieresis", '\x1E4F')
-  ,("oubopomofo", '\x3121')
-  ,("overline", '\x203E')
-  ,("overlinecenterline", '\xFE4A')
-  ,("overlinecmb", '\x0305')
-  ,("overlinedashed", '\xFE49')
-  ,("overlinedblwavy", '\xFE4C')
-  ,("overlinewavy", '\xFE4B')
-  ,("overscore", '\x00AF')
-  ,("ovowelsignbengali", '\x09CB')
-  ,("ovowelsigndeva", '\x094B')
-  ,("ovowelsigngujarati", '\x0ACB')
-  ,("p", '\x0070')
-  ,("paampssquare", '\x3380')
-  ,("paasentosquare", '\x332B')
-  ,("pabengali", '\x09AA')
-  ,("pacute", '\x1E55')
-  ,("padeva", '\x092A')
-  ,("pagedown", '\x21DF')
-  ,("pageup", '\x21DE')
-  ,("pagujarati", '\x0AAA')
-  ,("pagurmukhi", '\x0A2A')
-  ,("pahiragana", '\x3071')
-  ,("paiyannoithai", '\x0E2F')
-  ,("pakatakana", '\x30D1')
-  ,("palatalizationcyrilliccmb", '\x0484')
-  ,("palochkacyrillic", '\x04C0')
-  ,("pansioskorean", '\x317F')
-  ,("paragraph", '\x00B6')
-  ,("parallel", '\x2225')
-  ,("parenleft", '\x0028')
-  ,("parenleftaltonearabic", '\xFD3E')
-  ,("parenleftbt", '\xF8ED')
-  ,("parenleftex", '\xF8EC')
-  ,("parenleftinferior", '\x208D')
-  ,("parenleftmonospace", '\xFF08')
-  ,("parenleftsmall", '\xFE59')
-  ,("parenleftsuperior", '\x207D')
-  ,("parenlefttp", '\xF8EB')
-  ,("parenleftvertical", '\xFE35')
-  ,("parenright", '\x0029')
-  ,("parenrightaltonearabic", '\xFD3F')
-  ,("parenrightbt", '\xF8F8')
-  ,("parenrightex", '\xF8F7')
-  ,("parenrightinferior", '\x208E')
-  ,("parenrightmonospace", '\xFF09')
-  ,("parenrightsmall", '\xFE5A')
-  ,("parenrightsuperior", '\x207E')
-  ,("parenrighttp", '\xF8F6')
-  ,("parenrightvertical", '\xFE36')
-  ,("partialdiff", '\x2202')
-  ,("paseqhebrew", '\x05C0')
-  ,("pashtahebrew", '\x0599')
-  ,("pasquare", '\x33A9')
-  ,("patah", '\x05B7')
-  ,("patah11", '\x05B7')
-  ,("patah1d", '\x05B7')
-  ,("patah2a", '\x05B7')
-  ,("patahhebrew", '\x05B7')
-  ,("patahnarrowhebrew", '\x05B7')
-  ,("patahquarterhebrew", '\x05B7')
-  ,("patahwidehebrew", '\x05B7')
-  ,("pazerhebrew", '\x05A1')
-  ,("pbopomofo", '\x3106')
-  ,("pcircle", '\x24DF')
-  ,("pdotaccent", '\x1E57')
-  ,("pe", '\x05E4')
-  ,("pecyrillic", '\x043F')
-  ,("pedagesh", '\xFB44')
-  ,("pedageshhebrew", '\xFB44')
-  ,("peezisquare", '\x333B')
-  ,("pefinaldageshhebrew", '\xFB43')
-  ,("peharabic", '\x067E')
-  ,("peharmenian", '\x057A')
-  ,("pehebrew", '\x05E4')
-  ,("pehfinalarabic", '\xFB57')
-  ,("pehinitialarabic", '\xFB58')
-  ,("pehiragana", '\x307A')
-  ,("pehmedialarabic", '\xFB59')
-  ,("pekatakana", '\x30DA')
-  ,("pemiddlehookcyrillic", '\x04A7')
-  ,("perafehebrew", '\xFB4E')
-  ,("percent", '\x0025')
-  ,("percentarabic", '\x066A')
-  ,("percentmonospace", '\xFF05')
-  ,("percentsmall", '\xFE6A')
-  ,("period", '\x002E')
-  ,("periodarmenian", '\x0589')
-  ,("periodcentered", '\x00B7')
-  ,("periodhalfwidth", '\xFF61')
-  ,("periodinferior", '\xF6E7')
-  ,("periodmonospace", '\xFF0E')
-  ,("periodsmall", '\xFE52')
-  ,("periodsuperior", '\xF6E8')
-  ,("perispomenigreekcmb", '\x0342')
-  ,("perpendicular", '\x22A5')
-  ,("perthousand", '\x2030')
-  ,("peseta", '\x20A7')
-  ,("pfsquare", '\x338A')
-  ,("phabengali", '\x09AB')
-  ,("phadeva", '\x092B')
-  ,("phagujarati", '\x0AAB')
-  ,("phagurmukhi", '\x0A2B')
-  ,("phi", '\x03C6')
-  ,("phi1", '\x03D5')
-  ,("phieuphacirclekorean", '\x327A')
-  ,("phieuphaparenkorean", '\x321A')
-  ,("phieuphcirclekorean", '\x326C')
-  ,("phieuphkorean", '\x314D')
-  ,("phieuphparenkorean", '\x320C')
-  ,("philatin", '\x0278')
-  ,("phinthuthai", '\x0E3A')
-  ,("phisymbolgreek", '\x03D5')
-  ,("phook", '\x01A5')
-  ,("phophanthai", '\x0E1E')
-  ,("phophungthai", '\x0E1C')
-  ,("phosamphaothai", '\x0E20')
-  ,("pi", '\x03C0')
-  ,("pieupacirclekorean", '\x3273')
-  ,("pieupaparenkorean", '\x3213')
-  ,("pieupcieuckorean", '\x3176')
-  ,("pieupcirclekorean", '\x3265')
-  ,("pieupkiyeokkorean", '\x3172')
-  ,("pieupkorean", '\x3142')
-  ,("pieupparenkorean", '\x3205')
-  ,("pieupsioskiyeokkorean", '\x3174')
-  ,("pieupsioskorean", '\x3144')
-  ,("pieupsiostikeutkorean", '\x3175')
-  ,("pieupthieuthkorean", '\x3177')
-  ,("pieuptikeutkorean", '\x3173')
-  ,("pihiragana", '\x3074')
-  ,("pikatakana", '\x30D4')
-  ,("pisymbolgreek", '\x03D6')
-  ,("piwrarmenian", '\x0583')
-  ,("plus", '\x002B')
-  ,("plusbelowcmb", '\x031F')
-  ,("pluscircle", '\x2295')
-  ,("plusminus", '\x00B1')
-  ,("plusmod", '\x02D6')
-  ,("plusmonospace", '\xFF0B')
-  ,("plussmall", '\xFE62')
-  ,("plussuperior", '\x207A')
-  ,("pmonospace", '\xFF50')
-  ,("pmsquare", '\x33D8')
-  ,("pohiragana", '\x307D')
-  ,("pointingindexdownwhite", '\x261F')
-  ,("pointingindexleftwhite", '\x261C')
-  ,("pointingindexrightwhite", '\x261E')
-  ,("pointingindexupwhite", '\x261D')
-  ,("pokatakana", '\x30DD')
-  ,("poplathai", '\x0E1B')
-  ,("postalmark", '\x3012')
-  ,("postalmarkface", '\x3020')
-  ,("pparen", '\x24AB')
-  ,("precedes", '\x227A')
-  ,("prescription", '\x211E')
-  ,("primemod", '\x02B9')
-  ,("primereversed", '\x2035')
-  ,("product", '\x220F')
-  ,("projective", '\x2305')
-  ,("prolongedkana", '\x30FC')
-  ,("propellor", '\x2318')
-  ,("propersubset", '\x2282')
-  ,("propersuperset", '\x2283')
-  ,("proportion", '\x2237')
-  ,("proportional", '\x221D')
-  ,("psi", '\x03C8')
-  ,("psicyrillic", '\x0471')
-  ,("psilipneumatacyrilliccmb", '\x0486')
-  ,("pssquare", '\x33B0')
-  ,("puhiragana", '\x3077')
-  ,("pukatakana", '\x30D7')
-  ,("pvsquare", '\x33B4')
-  ,("pwsquare", '\x33BA')
-  ,("q", '\x0071')
-  ,("qadeva", '\x0958')
-  ,("qadmahebrew", '\x05A8')
-  ,("qafarabic", '\x0642')
-  ,("qaffinalarabic", '\xFED6')
-  ,("qafinitialarabic", '\xFED7')
-  ,("qafmedialarabic", '\xFED8')
-  ,("qamats", '\x05B8')
-  ,("qamats10", '\x05B8')
-  ,("qamats1a", '\x05B8')
-  ,("qamats1c", '\x05B8')
-  ,("qamats27", '\x05B8')
-  ,("qamats29", '\x05B8')
-  ,("qamats33", '\x05B8')
-  ,("qamatsde", '\x05B8')
-  ,("qamatshebrew", '\x05B8')
-  ,("qamatsnarrowhebrew", '\x05B8')
-  ,("qamatsqatanhebrew", '\x05B8')
-  ,("qamatsqatannarrowhebrew", '\x05B8')
-  ,("qamatsqatanquarterhebrew", '\x05B8')
-  ,("qamatsqatanwidehebrew", '\x05B8')
-  ,("qamatsquarterhebrew", '\x05B8')
-  ,("qamatswidehebrew", '\x05B8')
-  ,("qarneyparahebrew", '\x059F')
-  ,("qbopomofo", '\x3111')
-  ,("qcircle", '\x24E0')
-  ,("qhook", '\x02A0')
-  ,("qmonospace", '\xFF51')
-  ,("qof", '\x05E7')
-  ,("qofdagesh", '\xFB47')
-  ,("qofdageshhebrew", '\xFB47')
-  ,("qofhatafpatah", '\x05E7')
-  ,("qofhatafpatahhebrew", '\x05E7')
-  ,("qofhatafsegol", '\x05E7')
-  ,("qofhatafsegolhebrew", '\x05E7')
-  ,("qofhebrew", '\x05E7')
-  ,("qofhiriq", '\x05E7')
-  ,("qofhiriqhebrew", '\x05E7')
-  ,("qofholam", '\x05E7')
-  ,("qofholamhebrew", '\x05E7')
-  ,("qofpatah", '\x05E7')
-  ,("qofpatahhebrew", '\x05E7')
-  ,("qofqamats", '\x05E7')
-  ,("qofqamatshebrew", '\x05E7')
-  ,("qofqubuts", '\x05E7')
-  ,("qofqubutshebrew", '\x05E7')
-  ,("qofsegol", '\x05E7')
-  ,("qofsegolhebrew", '\x05E7')
-  ,("qofsheva", '\x05E7')
-  ,("qofshevahebrew", '\x05E7')
-  ,("qoftsere", '\x05E7')
-  ,("qoftserehebrew", '\x05E7')
-  ,("qparen", '\x24AC')
-  ,("quarternote", '\x2669')
-  ,("qubuts", '\x05BB')
-  ,("qubuts18", '\x05BB')
-  ,("qubuts25", '\x05BB')
-  ,("qubuts31", '\x05BB')
-  ,("qubutshebrew", '\x05BB')
-  ,("qubutsnarrowhebrew", '\x05BB')
-  ,("qubutsquarterhebrew", '\x05BB')
-  ,("qubutswidehebrew", '\x05BB')
-  ,("question", '\x003F')
-  ,("questionarabic", '\x061F')
-  ,("questionarmenian", '\x055E')
-  ,("questiondown", '\x00BF')
-  ,("questiondownsmall", '\xF7BF')
-  ,("questiongreek", '\x037E')
-  ,("questionmonospace", '\xFF1F')
-  ,("questionsmall", '\xF73F')
-  ,("quotedbl", '\x0022')
-  ,("quotedblbase", '\x201E')
-  ,("quotedblleft", '\x201C')
-  ,("quotedblmonospace", '\xFF02')
-  ,("quotedblprime", '\x301E')
-  ,("quotedblprimereversed", '\x301D')
-  ,("quotedblright", '\x201D')
-  ,("quoteleft", '\x2018')
-  ,("quoteleftreversed", '\x201B')
-  ,("quotereversed", '\x201B')
-  ,("quoteright", '\x2019')
-  ,("quoterightn", '\x0149')
-  ,("quotesinglbase", '\x201A')
-  ,("quotesingle", '\x0027')
-  ,("quotesinglemonospace", '\xFF07')
-  ,("r", '\x0072')
-  ,("raarmenian", '\x057C')
-  ,("rabengali", '\x09B0')
-  ,("racute", '\x0155')
-  ,("radeva", '\x0930')
-  ,("radical", '\x221A')
-  ,("radicalex", '\xF8E5')
-  ,("radoverssquare", '\x33AE')
-  ,("radoverssquaredsquare", '\x33AF')
-  ,("radsquare", '\x33AD')
-  ,("rafe", '\x05BF')
-  ,("rafehebrew", '\x05BF')
-  ,("ragujarati", '\x0AB0')
-  ,("ragurmukhi", '\x0A30')
-  ,("rahiragana", '\x3089')
-  ,("rakatakana", '\x30E9')
-  ,("rakatakanahalfwidth", '\xFF97')
-  ,("ralowerdiagonalbengali", '\x09F1')
-  ,("ramiddlediagonalbengali", '\x09F0')
-  ,("ramshorn", '\x0264')
-  ,("ratio", '\x2236')
-  ,("rbopomofo", '\x3116')
-  ,("rcaron", '\x0159')
-  ,("rcedilla", '\x0157')
-  ,("rcircle", '\x24E1')
-  ,("rcommaaccent", '\x0157')
-  ,("rdblgrave", '\x0211')
-  ,("rdotaccent", '\x1E59')
-  ,("rdotbelow", '\x1E5B')
-  ,("rdotbelowmacron", '\x1E5D')
-  ,("referencemark", '\x203B')
-  ,("reflexsubset", '\x2286')
-  ,("reflexsuperset", '\x2287')
-  ,("registered", '\x00AE')
-  ,("registersans", '\xF8E8')
-  ,("registerserif", '\xF6DA')
-  ,("reharabic", '\x0631')
-  ,("reharmenian", '\x0580')
-  ,("rehfinalarabic", '\xFEAE')
-  ,("rehiragana", '\x308C')
-  ,("rehyehaleflamarabic", '\x0631')
-  ,("rekatakana", '\x30EC')
-  ,("rekatakanahalfwidth", '\xFF9A')
-  ,("resh", '\x05E8')
-  ,("reshdageshhebrew", '\xFB48')
-  ,("reshhatafpatah", '\x05E8')
-  ,("reshhatafpatahhebrew", '\x05E8')
-  ,("reshhatafsegol", '\x05E8')
-  ,("reshhatafsegolhebrew", '\x05E8')
-  ,("reshhebrew", '\x05E8')
-  ,("reshhiriq", '\x05E8')
-  ,("reshhiriqhebrew", '\x05E8')
-  ,("reshholam", '\x05E8')
-  ,("reshholamhebrew", '\x05E8')
-  ,("reshpatah", '\x05E8')
-  ,("reshpatahhebrew", '\x05E8')
-  ,("reshqamats", '\x05E8')
-  ,("reshqamatshebrew", '\x05E8')
-  ,("reshqubuts", '\x05E8')
-  ,("reshqubutshebrew", '\x05E8')
-  ,("reshsegol", '\x05E8')
-  ,("reshsegolhebrew", '\x05E8')
-  ,("reshsheva", '\x05E8')
-  ,("reshshevahebrew", '\x05E8')
-  ,("reshtsere", '\x05E8')
-  ,("reshtserehebrew", '\x05E8')
-  ,("reversedtilde", '\x223D')
-  ,("reviahebrew", '\x0597')
-  ,("reviamugrashhebrew", '\x0597')
-  ,("revlogicalnot", '\x2310')
-  ,("rfishhook", '\x027E')
-  ,("rfishhookreversed", '\x027F')
-  ,("rhabengali", '\x09DD')
-  ,("rhadeva", '\x095D')
-  ,("rho", '\x03C1')
-  ,("rhook", '\x027D')
-  ,("rhookturned", '\x027B')
-  ,("rhookturnedsuperior", '\x02B5')
-  ,("rhosymbolgreek", '\x03F1')
-  ,("rhotichookmod", '\x02DE')
-  ,("rieulacirclekorean", '\x3271')
-  ,("rieulaparenkorean", '\x3211')
-  ,("rieulcirclekorean", '\x3263')
-  ,("rieulhieuhkorean", '\x3140')
-  ,("rieulkiyeokkorean", '\x313A')
-  ,("rieulkiyeoksioskorean", '\x3169')
-  ,("rieulkorean", '\x3139')
-  ,("rieulmieumkorean", '\x313B')
-  ,("rieulpansioskorean", '\x316C')
-  ,("rieulparenkorean", '\x3203')
-  ,("rieulphieuphkorean", '\x313F')
-  ,("rieulpieupkorean", '\x313C')
-  ,("rieulpieupsioskorean", '\x316B')
-  ,("rieulsioskorean", '\x313D')
-  ,("rieulthieuthkorean", '\x313E')
-  ,("rieultikeutkorean", '\x316A')
-  ,("rieulyeorinhieuhkorean", '\x316D')
-  ,("rightangle", '\x221F')
-  ,("righttackbelowcmb", '\x0319')
-  ,("righttriangle", '\x22BF')
-  ,("rihiragana", '\x308A')
-  ,("rikatakana", '\x30EA')
-  ,("rikatakanahalfwidth", '\xFF98')
-  ,("ring", '\x02DA')
-  ,("ringbelowcmb", '\x0325')
-  ,("ringcmb", '\x030A')
-  ,("ringhalfleft", '\x02BF')
-  ,("ringhalfleftarmenian", '\x0559')
-  ,("ringhalfleftbelowcmb", '\x031C')
-  ,("ringhalfleftcentered", '\x02D3')
-  ,("ringhalfright", '\x02BE')
-  ,("ringhalfrightbelowcmb", '\x0339')
-  ,("ringhalfrightcentered", '\x02D2')
-  ,("rinvertedbreve", '\x0213')
-  ,("rittorusquare", '\x3351')
-  ,("rlinebelow", '\x1E5F')
-  ,("rlongleg", '\x027C')
-  ,("rlonglegturned", '\x027A')
-  ,("rmonospace", '\xFF52')
-  ,("rohiragana", '\x308D')
-  ,("rokatakana", '\x30ED')
-  ,("rokatakanahalfwidth", '\xFF9B')
-  ,("roruathai", '\x0E23')
-  ,("rparen", '\x24AD')
-  ,("rrabengali", '\x09DC')
-  ,("rradeva", '\x0931')
-  ,("rragurmukhi", '\x0A5C')
-  ,("rreharabic", '\x0691')
-  ,("rrehfinalarabic", '\xFB8D')
-  ,("rrvocalicbengali", '\x09E0')
-  ,("rrvocalicdeva", '\x0960')
-  ,("rrvocalicgujarati", '\x0AE0')
-  ,("rrvocalicvowelsignbengali", '\x09C4')
-  ,("rrvocalicvowelsigndeva", '\x0944')
-  ,("rrvocalicvowelsigngujarati", '\x0AC4')
-  ,("rsuperior", '\xF6F1')
-  ,("rtblock", '\x2590')
-  ,("rturned", '\x0279')
-  ,("rturnedsuperior", '\x02B4')
-  ,("ruhiragana", '\x308B')
-  ,("rukatakana", '\x30EB')
-  ,("rukatakanahalfwidth", '\xFF99')
-  ,("rupeemarkbengali", '\x09F2')
-  ,("rupeesignbengali", '\x09F3')
-  ,("rupiah", '\xF6DD')
-  ,("ruthai", '\x0E24')
-  ,("rvocalicbengali", '\x098B')
-  ,("rvocalicdeva", '\x090B')
-  ,("rvocalicgujarati", '\x0A8B')
-  ,("rvocalicvowelsignbengali", '\x09C3')
-  ,("rvocalicvowelsigndeva", '\x0943')
-  ,("rvocalicvowelsigngujarati", '\x0AC3')
-  ,("s", '\x0073')
-  ,("sabengali", '\x09B8')
-  ,("sacute", '\x015B')
-  ,("sacutedotaccent", '\x1E65')
-  ,("sadarabic", '\x0635')
-  ,("sadeva", '\x0938')
-  ,("sadfinalarabic", '\xFEBA')
-  ,("sadinitialarabic", '\xFEBB')
-  ,("sadmedialarabic", '\xFEBC')
-  ,("sagujarati", '\x0AB8')
-  ,("sagurmukhi", '\x0A38')
-  ,("sahiragana", '\x3055')
-  ,("sakatakana", '\x30B5')
-  ,("sakatakanahalfwidth", '\xFF7B')
-  ,("sallallahoualayhewasallamarabic", '\xFDFA')
-  ,("samekh", '\x05E1')
-  ,("samekhdagesh", '\xFB41')
-  ,("samekhdageshhebrew", '\xFB41')
-  ,("samekhhebrew", '\x05E1')
-  ,("saraaathai", '\x0E32')
-  ,("saraaethai", '\x0E41')
-  ,("saraaimaimalaithai", '\x0E44')
-  ,("saraaimaimuanthai", '\x0E43')
-  ,("saraamthai", '\x0E33')
-  ,("saraathai", '\x0E30')
-  ,("saraethai", '\x0E40')
-  ,("saraiileftthai", '\xF886')
-  ,("saraiithai", '\x0E35')
-  ,("saraileftthai", '\xF885')
-  ,("saraithai", '\x0E34')
-  ,("saraothai", '\x0E42')
-  ,("saraueeleftthai", '\xF888')
-  ,("saraueethai", '\x0E37')
-  ,("saraueleftthai", '\xF887')
-  ,("sarauethai", '\x0E36')
-  ,("sarauthai", '\x0E38')
-  ,("sarauuthai", '\x0E39')
-  ,("sbopomofo", '\x3119')
-  ,("scaron", '\x0161')
-  ,("scarondotaccent", '\x1E67')
-  ,("scedilla", '\x015F')
-  ,("schwa", '\x0259')
-  ,("schwacyrillic", '\x04D9')
-  ,("schwadieresiscyrillic", '\x04DB')
-  ,("schwahook", '\x025A')
-  ,("scircle", '\x24E2')
-  ,("scircumflex", '\x015D')
-  ,("scommaaccent", '\x0219')
-  ,("sdotaccent", '\x1E61')
-  ,("sdotbelow", '\x1E63')
-  ,("sdotbelowdotaccent", '\x1E69')
-  ,("seagullbelowcmb", '\x033C')
-  ,("second", '\x2033')
-  ,("secondtonechinese", '\x02CA')
-  ,("section", '\x00A7')
-  ,("seenarabic", '\x0633')
-  ,("seenfinalarabic", '\xFEB2')
-  ,("seeninitialarabic", '\xFEB3')
-  ,("seenmedialarabic", '\xFEB4')
-  ,("segol", '\x05B6')
-  ,("segol13", '\x05B6')
-  ,("segol1f", '\x05B6')
-  ,("segol2c", '\x05B6')
-  ,("segolhebrew", '\x05B6')
-  ,("segolnarrowhebrew", '\x05B6')
-  ,("segolquarterhebrew", '\x05B6')
-  ,("segoltahebrew", '\x0592')
-  ,("segolwidehebrew", '\x05B6')
-  ,("seharmenian", '\x057D')
-  ,("sehiragana", '\x305B')
-  ,("sekatakana", '\x30BB')
-  ,("sekatakanahalfwidth", '\xFF7E')
-  ,("semicolon", '\x003B')
-  ,("semicolonarabic", '\x061B')
-  ,("semicolonmonospace", '\xFF1B')
-  ,("semicolonsmall", '\xFE54')
-  ,("semivoicedmarkkana", '\x309C')
-  ,("semivoicedmarkkanahalfwidth", '\xFF9F')
-  ,("sentisquare", '\x3322')
-  ,("sentosquare", '\x3323')
-  ,("seven", '\x0037')
-  ,("sevenarabic", '\x0667')
-  ,("sevenbengali", '\x09ED')
-  ,("sevencircle", '\x2466')
-  ,("sevencircleinversesansserif", '\x2790')
-  ,("sevendeva", '\x096D')
-  ,("seveneighths", '\x215E')
-  ,("sevengujarati", '\x0AED')
-  ,("sevengurmukhi", '\x0A6D')
-  ,("sevenhackarabic", '\x0667')
-  ,("sevenhangzhou", '\x3027')
-  ,("sevenideographicparen", '\x3226')
-  ,("seveninferior", '\x2087')
-  ,("sevenmonospace", '\xFF17')
-  ,("sevenoldstyle", '\xF737')
-  ,("sevenparen", '\x247A')
-  ,("sevenperiod", '\x248E')
-  ,("sevenpersian", '\x06F7')
-  ,("sevenroman", '\x2176')
-  ,("sevensuperior", '\x2077')
-  ,("seventeencircle", '\x2470')
-  ,("seventeenparen", '\x2484')
-  ,("seventeenperiod", '\x2498')
-  ,("seventhai", '\x0E57')
-  ,("sfthyphen", '\x00AD')
-  ,("shaarmenian", '\x0577')
-  ,("shabengali", '\x09B6')
-  ,("shacyrillic", '\x0448')
-  ,("shaddaarabic", '\x0651')
-  ,("shaddadammaarabic", '\xFC61')
-  ,("shaddadammatanarabic", '\xFC5E')
-  ,("shaddafathaarabic", '\xFC60')
-  ,("shaddafathatanarabic", '\x0651')
-  ,("shaddakasraarabic", '\xFC62')
-  ,("shaddakasratanarabic", '\xFC5F')
-  ,("shade", '\x2592')
-  ,("shadedark", '\x2593')
-  ,("shadelight", '\x2591')
-  ,("shademedium", '\x2592')
-  ,("shadeva", '\x0936')
-  ,("shagujarati", '\x0AB6')
-  ,("shagurmukhi", '\x0A36')
-  ,("shalshelethebrew", '\x0593')
-  ,("shbopomofo", '\x3115')
-  ,("shchacyrillic", '\x0449')
-  ,("sheenarabic", '\x0634')
-  ,("sheenfinalarabic", '\xFEB6')
-  ,("sheeninitialarabic", '\xFEB7')
-  ,("sheenmedialarabic", '\xFEB8')
-  ,("sheicoptic", '\x03E3')
-  ,("sheqel", '\x20AA')
-  ,("sheqelhebrew", '\x20AA')
-  ,("sheva", '\x05B0')
-  ,("sheva115", '\x05B0')
-  ,("sheva15", '\x05B0')
-  ,("sheva22", '\x05B0')
-  ,("sheva2e", '\x05B0')
-  ,("shevahebrew", '\x05B0')
-  ,("shevanarrowhebrew", '\x05B0')
-  ,("shevaquarterhebrew", '\x05B0')
-  ,("shevawidehebrew", '\x05B0')
-  ,("shhacyrillic", '\x04BB')
-  ,("shimacoptic", '\x03ED')
-  ,("shin", '\x05E9')
-  ,("shindagesh", '\xFB49')
-  ,("shindageshhebrew", '\xFB49')
-  ,("shindageshshindot", '\xFB2C')
-  ,("shindageshshindothebrew", '\xFB2C')
-  ,("shindageshsindot", '\xFB2D')
-  ,("shindageshsindothebrew", '\xFB2D')
-  ,("shindothebrew", '\x05C1')
-  ,("shinhebrew", '\x05E9')
-  ,("shinshindot", '\xFB2A')
-  ,("shinshindothebrew", '\xFB2A')
-  ,("shinsindot", '\xFB2B')
-  ,("shinsindothebrew", '\xFB2B')
-  ,("shook", '\x0282')
-  ,("sigma", '\x03C3')
-  ,("sigma1", '\x03C2')
-  ,("sigmafinal", '\x03C2')
-  ,("sigmalunatesymbolgreek", '\x03F2')
-  ,("sihiragana", '\x3057')
-  ,("sikatakana", '\x30B7')
-  ,("sikatakanahalfwidth", '\xFF7C')
-  ,("siluqhebrew", '\x05BD')
-  ,("siluqlefthebrew", '\x05BD')
-  ,("similar", '\x223C')
-  ,("sindothebrew", '\x05C2')
-  ,("siosacirclekorean", '\x3274')
-  ,("siosaparenkorean", '\x3214')
-  ,("sioscieuckorean", '\x317E')
-  ,("sioscirclekorean", '\x3266')
-  ,("sioskiyeokkorean", '\x317A')
-  ,("sioskorean", '\x3145')
-  ,("siosnieunkorean", '\x317B')
-  ,("siosparenkorean", '\x3206')
-  ,("siospieupkorean", '\x317D')
-  ,("siostikeutkorean", '\x317C')
-  ,("six", '\x0036')
-  ,("sixarabic", '\x0666')
-  ,("sixbengali", '\x09EC')
-  ,("sixcircle", '\x2465')
-  ,("sixcircleinversesansserif", '\x278F')
-  ,("sixdeva", '\x096C')
-  ,("sixgujarati", '\x0AEC')
-  ,("sixgurmukhi", '\x0A6C')
-  ,("sixhackarabic", '\x0666')
-  ,("sixhangzhou", '\x3026')
-  ,("sixideographicparen", '\x3225')
-  ,("sixinferior", '\x2086')
-  ,("sixmonospace", '\xFF16')
-  ,("sixoldstyle", '\xF736')
-  ,("sixparen", '\x2479')
-  ,("sixperiod", '\x248D')
-  ,("sixpersian", '\x06F6')
-  ,("sixroman", '\x2175')
-  ,("sixsuperior", '\x2076')
-  ,("sixteencircle", '\x246F')
-  ,("sixteencurrencydenominatorbengali", '\x09F9')
-  ,("sixteenparen", '\x2483')
-  ,("sixteenperiod", '\x2497')
-  ,("sixthai", '\x0E56')
-  ,("slash", '\x002F')
-  ,("slashmonospace", '\xFF0F')
-  ,("slong", '\x017F')
-  ,("slongdotaccent", '\x1E9B')
-  ,("smileface", '\x263A')
-  ,("smonospace", '\xFF53')
-  ,("sofpasuqhebrew", '\x05C3')
-  ,("softhyphen", '\x00AD')
-  ,("softsigncyrillic", '\x044C')
-  ,("sohiragana", '\x305D')
-  ,("sokatakana", '\x30BD')
-  ,("sokatakanahalfwidth", '\xFF7F')
-  ,("soliduslongoverlaycmb", '\x0338')
-  ,("solidusshortoverlaycmb", '\x0337')
-  ,("sorusithai", '\x0E29')
-  ,("sosalathai", '\x0E28')
-  ,("sosothai", '\x0E0B')
-  ,("sosuathai", '\x0E2A')
-  ,("space", '\x0020')
-  ,("spacehackarabic", '\x0020')
-  ,("spade", '\x2660')
-  ,("spadesuitblack", '\x2660')
-  ,("spadesuitwhite", '\x2664')
-  ,("sparen", '\x24AE')
-  ,("squarebelowcmb", '\x033B')
-  ,("squarecc", '\x33C4')
-  ,("squarecm", '\x339D')
-  ,("squarediagonalcrosshatchfill", '\x25A9')
-  ,("squarehorizontalfill", '\x25A4')
-  ,("squarekg", '\x338F')
-  ,("squarekm", '\x339E')
-  ,("squarekmcapital", '\x33CE')
-  ,("squareln", '\x33D1')
-  ,("squarelog", '\x33D2')
-  ,("squaremg", '\x338E')
-  ,("squaremil", '\x33D5')
-  ,("squaremm", '\x339C')
-  ,("squaremsquared", '\x33A1')
-  ,("squareorthogonalcrosshatchfill", '\x25A6')
-  ,("squareupperlefttolowerrightfill", '\x25A7')
-  ,("squareupperrighttolowerleftfill", '\x25A8')
-  ,("squareverticalfill", '\x25A5')
-  ,("squarewhitewithsmallblack", '\x25A3')
-  ,("srsquare", '\x33DB')
-  ,("ssabengali", '\x09B7')
-  ,("ssadeva", '\x0937')
-  ,("ssagujarati", '\x0AB7')
-  ,("ssangcieuckorean", '\x3149')
-  ,("ssanghieuhkorean", '\x3185')
-  ,("ssangieungkorean", '\x3180')
-  ,("ssangkiyeokkorean", '\x3132')
-  ,("ssangnieunkorean", '\x3165')
-  ,("ssangpieupkorean", '\x3143')
-  ,("ssangsioskorean", '\x3146')
-  ,("ssangtikeutkorean", '\x3138')
-  ,("ssuperior", '\xF6F2')
-  ,("sterling", '\x00A3')
-  ,("sterlingmonospace", '\xFFE1')
-  ,("strokelongoverlaycmb", '\x0336')
-  ,("strokeshortoverlaycmb", '\x0335')
-  ,("subset", '\x2282')
-  ,("subsetnotequal", '\x228A')
-  ,("subsetorequal", '\x2286')
-  ,("succeeds", '\x227B')
-  ,("suchthat", '\x220B')
-  ,("suhiragana", '\x3059')
-  ,("sukatakana", '\x30B9')
-  ,("sukatakanahalfwidth", '\xFF7D')
-  ,("sukunarabic", '\x0652')
-  ,("summation", '\x2211')
-  ,("sun", '\x263C')
-  ,("superset", '\x2283')
-  ,("supersetnotequal", '\x228B')
-  ,("supersetorequal", '\x2287')
-  ,("svsquare", '\x33DC')
-  ,("syouwaerasquare", '\x337C')
-  ,("t", '\x0074')
-  ,("tabengali", '\x09A4')
-  ,("tackdown", '\x22A4')
-  ,("tackleft", '\x22A3')
-  ,("tadeva", '\x0924')
-  ,("tagujarati", '\x0AA4')
-  ,("tagurmukhi", '\x0A24')
-  ,("taharabic", '\x0637')
-  ,("tahfinalarabic", '\xFEC2')
-  ,("tahinitialarabic", '\xFEC3')
-  ,("tahiragana", '\x305F')
-  ,("tahmedialarabic", '\xFEC4')
-  ,("taisyouerasquare", '\x337D')
-  ,("takatakana", '\x30BF')
-  ,("takatakanahalfwidth", '\xFF80')
-  ,("tatweelarabic", '\x0640')
-  ,("tau", '\x03C4')
-  ,("tav", '\x05EA')
-  ,("tavdages", '\xFB4A')
-  ,("tavdagesh", '\xFB4A')
-  ,("tavdageshhebrew", '\xFB4A')
-  ,("tavhebrew", '\x05EA')
-  ,("tbar", '\x0167')
-  ,("tbopomofo", '\x310A')
-  ,("tcaron", '\x0165')
-  ,("tccurl", '\x02A8')
-  ,("tcedilla", '\x0163')
-  ,("tcheharabic", '\x0686')
-  ,("tchehfinalarabic", '\xFB7B')
-  ,("tchehinitialarabic", '\xFB7C')
-  ,("tchehmedialarabic", '\xFB7D')
-  ,("tchehmeeminitialarabic", '\xFB7C')
-  ,("tcircle", '\x24E3')
-  ,("tcircumflexbelow", '\x1E71')
-  ,("tcommaaccent", '\x0163')
-  ,("tdieresis", '\x1E97')
-  ,("tdotaccent", '\x1E6B')
-  ,("tdotbelow", '\x1E6D')
-  ,("tecyrillic", '\x0442')
-  ,("tedescendercyrillic", '\x04AD')
-  ,("teharabic", '\x062A')
-  ,("tehfinalarabic", '\xFE96')
-  ,("tehhahinitialarabic", '\xFCA2')
-  ,("tehhahisolatedarabic", '\xFC0C')
-  ,("tehinitialarabic", '\xFE97')
-  ,("tehiragana", '\x3066')
-  ,("tehjeeminitialarabic", '\xFCA1')
-  ,("tehjeemisolatedarabic", '\xFC0B')
-  ,("tehmarbutaarabic", '\x0629')
-  ,("tehmarbutafinalarabic", '\xFE94')
-  ,("tehmedialarabic", '\xFE98')
-  ,("tehmeeminitialarabic", '\xFCA4')
-  ,("tehmeemisolatedarabic", '\xFC0E')
-  ,("tehnoonfinalarabic", '\xFC73')
-  ,("tekatakana", '\x30C6')
-  ,("tekatakanahalfwidth", '\xFF83')
-  ,("telephone", '\x2121')
-  ,("telephoneblack", '\x260E')
-  ,("telishagedolahebrew", '\x05A0')
-  ,("telishaqetanahebrew", '\x05A9')
-  ,("tencircle", '\x2469')
-  ,("tenideographicparen", '\x3229')
-  ,("tenparen", '\x247D')
-  ,("tenperiod", '\x2491')
-  ,("tenroman", '\x2179')
-  ,("tesh", '\x02A7')
-  ,("tet", '\x05D8')
-  ,("tetdagesh", '\xFB38')
-  ,("tetdageshhebrew", '\xFB38')
-  ,("tethebrew", '\x05D8')
-  ,("tetsecyrillic", '\x04B5')
-  ,("tevirhebrew", '\x059B')
-  ,("tevirlefthebrew", '\x059B')
-  ,("thabengali", '\x09A5')
-  ,("thadeva", '\x0925')
-  ,("thagujarati", '\x0AA5')
-  ,("thagurmukhi", '\x0A25')
-  ,("thalarabic", '\x0630')
-  ,("thalfinalarabic", '\xFEAC')
-  ,("thanthakhatlowleftthai", '\xF898')
-  ,("thanthakhatlowrightthai", '\xF897')
-  ,("thanthakhatthai", '\x0E4C')
-  ,("thanthakhatupperleftthai", '\xF896')
-  ,("theharabic", '\x062B')
-  ,("thehfinalarabic", '\xFE9A')
-  ,("thehinitialarabic", '\xFE9B')
-  ,("thehmedialarabic", '\xFE9C')
-  ,("thereexists", '\x2203')
-  ,("therefore", '\x2234')
-  ,("theta", '\x03B8')
-  ,("theta1", '\x03D1')
-  ,("thetasymbolgreek", '\x03D1')
-  ,("thieuthacirclekorean", '\x3279')
-  ,("thieuthaparenkorean", '\x3219')
-  ,("thieuthcirclekorean", '\x326B')
-  ,("thieuthkorean", '\x314C')
-  ,("thieuthparenkorean", '\x320B')
-  ,("thirteencircle", '\x246C')
-  ,("thirteenparen", '\x2480')
-  ,("thirteenperiod", '\x2494')
-  ,("thonangmonthothai", '\x0E11')
-  ,("thook", '\x01AD')
-  ,("thophuthaothai", '\x0E12')
-  ,("thorn", '\x00FE')
-  ,("thothahanthai", '\x0E17')
-  ,("thothanthai", '\x0E10')
-  ,("thothongthai", '\x0E18')
-  ,("thothungthai", '\x0E16')
-  ,("thousandcyrillic", '\x0482')
-  ,("thousandsseparatorarabic", '\x066C')
-  ,("thousandsseparatorpersian", '\x066C')
-  ,("three", '\x0033')
-  ,("threearabic", '\x0663')
-  ,("threebengali", '\x09E9')
-  ,("threecircle", '\x2462')
-  ,("threecircleinversesansserif", '\x278C')
-  ,("threedeva", '\x0969')
-  ,("threeeighths", '\x215C')
-  ,("threegujarati", '\x0AE9')
-  ,("threegurmukhi", '\x0A69')
-  ,("threehackarabic", '\x0663')
-  ,("threehangzhou", '\x3023')
-  ,("threeideographicparen", '\x3222')
-  ,("threeinferior", '\x2083')
-  ,("threemonospace", '\xFF13')
-  ,("threenumeratorbengali", '\x09F6')
-  ,("threeoldstyle", '\xF733')
-  ,("threeparen", '\x2476')
-  ,("threeperiod", '\x248A')
-  ,("threepersian", '\x06F3')
-  ,("threequarters", '\x00BE')
-  ,("threequartersemdash", '\xF6DE')
-  ,("threeroman", '\x2172')
-  ,("threesuperior", '\x00B3')
-  ,("threethai", '\x0E53')
-  ,("thzsquare", '\x3394')
-  ,("tihiragana", '\x3061')
-  ,("tikatakana", '\x30C1')
-  ,("tikatakanahalfwidth", '\xFF81')
-  ,("tikeutacirclekorean", '\x3270')
-  ,("tikeutaparenkorean", '\x3210')
-  ,("tikeutcirclekorean", '\x3262')
-  ,("tikeutkorean", '\x3137')
-  ,("tikeutparenkorean", '\x3202')
-  ,("tilde", '\x02DC')
-  ,("tildebelowcmb", '\x0330')
-  ,("tildecmb", '\x0303')
-  ,("tildecomb", '\x0303')
-  ,("tildedoublecmb", '\x0360')
-  ,("tildeoperator", '\x223C')
-  ,("tildeoverlaycmb", '\x0334')
-  ,("tildeverticalcmb", '\x033E')
-  ,("timescircle", '\x2297')
-  ,("tipehahebrew", '\x0596')
-  ,("tipehalefthebrew", '\x0596')
-  ,("tippigurmukhi", '\x0A70')
-  ,("titlocyrilliccmb", '\x0483')
-  ,("tiwnarmenian", '\x057F')
-  ,("tlinebelow", '\x1E6F')
-  ,("tmonospace", '\xFF54')
-  ,("toarmenian", '\x0569')
-  ,("tohiragana", '\x3068')
-  ,("tokatakana", '\x30C8')
-  ,("tokatakanahalfwidth", '\xFF84')
-  ,("tonebarextrahighmod", '\x02E5')
-  ,("tonebarextralowmod", '\x02E9')
-  ,("tonebarhighmod", '\x02E6')
-  ,("tonebarlowmod", '\x02E8')
-  ,("tonebarmidmod", '\x02E7')
-  ,("tonefive", '\x01BD')
-  ,("tonesix", '\x0185')
-  ,("tonetwo", '\x01A8')
-  ,("tonos", '\x0384')
-  ,("tonsquare", '\x3327')
-  ,("topatakthai", '\x0E0F')
-  ,("tortoiseshellbracketleft", '\x3014')
-  ,("tortoiseshellbracketleftsmall", '\xFE5D')
-  ,("tortoiseshellbracketleftvertical", '\xFE39')
-  ,("tortoiseshellbracketright", '\x3015')
-  ,("tortoiseshellbracketrightsmall", '\xFE5E')
-  ,("tortoiseshellbracketrightvertical", '\xFE3A')
-  ,("totaothai", '\x0E15')
-  ,("tpalatalhook", '\x01AB')
-  ,("tparen", '\x24AF')
-  ,("trademark", '\x2122')
-  ,("trademarksans", '\xF8EA')
-  ,("trademarkserif", '\xF6DB')
-  ,("tretroflexhook", '\x0288')
-  ,("triagdn", '\x25BC')
-  ,("triaglf", '\x25C4')
-  ,("triagrt", '\x25BA')
-  ,("triagup", '\x25B2')
-  ,("ts", '\x02A6')
-  ,("tsadi", '\x05E6')
-  ,("tsadidagesh", '\xFB46')
-  ,("tsadidageshhebrew", '\xFB46')
-  ,("tsadihebrew", '\x05E6')
-  ,("tsecyrillic", '\x0446')
-  ,("tsere", '\x05B5')
-  ,("tsere12", '\x05B5')
-  ,("tsere1e", '\x05B5')
-  ,("tsere2b", '\x05B5')
-  ,("tserehebrew", '\x05B5')
-  ,("tserenarrowhebrew", '\x05B5')
-  ,("tserequarterhebrew", '\x05B5')
-  ,("tserewidehebrew", '\x05B5')
-  ,("tshecyrillic", '\x045B')
-  ,("tsuperior", '\xF6F3')
-  ,("ttabengali", '\x099F')
-  ,("ttadeva", '\x091F')
-  ,("ttagujarati", '\x0A9F')
-  ,("ttagurmukhi", '\x0A1F')
-  ,("tteharabic", '\x0679')
-  ,("ttehfinalarabic", '\xFB67')
-  ,("ttehinitialarabic", '\xFB68')
-  ,("ttehmedialarabic", '\xFB69')
-  ,("tthabengali", '\x09A0')
-  ,("tthadeva", '\x0920')
-  ,("tthagujarati", '\x0AA0')
-  ,("tthagurmukhi", '\x0A20')
-  ,("tturned", '\x0287')
-  ,("tuhiragana", '\x3064')
-  ,("tukatakana", '\x30C4')
-  ,("tukatakanahalfwidth", '\xFF82')
-  ,("tusmallhiragana", '\x3063')
-  ,("tusmallkatakana", '\x30C3')
-  ,("tusmallkatakanahalfwidth", '\xFF6F')
-  ,("twelvecircle", '\x246B')
-  ,("twelveparen", '\x247F')
-  ,("twelveperiod", '\x2493')
-  ,("twelveroman", '\x217B')
-  ,("twentycircle", '\x2473')
-  ,("twentyhangzhou", '\x5344')
-  ,("twentyparen", '\x2487')
-  ,("twentyperiod", '\x249B')
-  ,("two", '\x0032')
-  ,("twoarabic", '\x0662')
-  ,("twobengali", '\x09E8')
-  ,("twocircle", '\x2461')
-  ,("twocircleinversesansserif", '\x278B')
-  ,("twodeva", '\x0968')
-  ,("twodotenleader", '\x2025')
-  ,("twodotleader", '\x2025')
-  ,("twodotleadervertical", '\xFE30')
-  ,("twogujarati", '\x0AE8')
-  ,("twogurmukhi", '\x0A68')
-  ,("twohackarabic", '\x0662')
-  ,("twohangzhou", '\x3022')
-  ,("twoideographicparen", '\x3221')
-  ,("twoinferior", '\x2082')
-  ,("twomonospace", '\xFF12')
-  ,("twonumeratorbengali", '\x09F5')
-  ,("twooldstyle", '\xF732')
-  ,("twoparen", '\x2475')
-  ,("twoperiod", '\x2489')
-  ,("twopersian", '\x06F2')
-  ,("tworoman", '\x2171')
-  ,("twostroke", '\x01BB')
-  ,("twosuperior", '\x00B2')
-  ,("twothai", '\x0E52')
-  ,("twothirds", '\x2154')
-  ,("u", '\x0075')
-  ,("uacute", '\x00FA')
-  ,("ubar", '\x0289')
-  ,("ubengali", '\x0989')
-  ,("ubopomofo", '\x3128')
-  ,("ubreve", '\x016D')
-  ,("ucaron", '\x01D4')
-  ,("ucircle", '\x24E4')
-  ,("ucircumflex", '\x00FB')
-  ,("ucircumflexbelow", '\x1E77')
-  ,("ucyrillic", '\x0443')
-  ,("udattadeva", '\x0951')
-  ,("udblacute", '\x0171')
-  ,("udblgrave", '\x0215')
-  ,("udeva", '\x0909')
-  ,("udieresis", '\x00FC')
-  ,("udieresisacute", '\x01D8')
-  ,("udieresisbelow", '\x1E73')
-  ,("udieresiscaron", '\x01DA')
-  ,("udieresiscyrillic", '\x04F1')
-  ,("udieresisgrave", '\x01DC')
-  ,("udieresismacron", '\x01D6')
-  ,("udotbelow", '\x1EE5')
-  ,("ugrave", '\x00F9')
-  ,("ugujarati", '\x0A89')
-  ,("ugurmukhi", '\x0A09')
-  ,("uhiragana", '\x3046')
-  ,("uhookabove", '\x1EE7')
-  ,("uhorn", '\x01B0')
-  ,("uhornacute", '\x1EE9')
-  ,("uhorndotbelow", '\x1EF1')
-  ,("uhorngrave", '\x1EEB')
-  ,("uhornhookabove", '\x1EED')
-  ,("uhorntilde", '\x1EEF')
-  ,("uhungarumlaut", '\x0171')
-  ,("uhungarumlautcyrillic", '\x04F3')
-  ,("uinvertedbreve", '\x0217')
-  ,("ukatakana", '\x30A6')
-  ,("ukatakanahalfwidth", '\xFF73')
-  ,("ukcyrillic", '\x0479')
-  ,("ukorean", '\x315C')
-  ,("umacron", '\x016B')
-  ,("umacroncyrillic", '\x04EF')
-  ,("umacrondieresis", '\x1E7B')
-  ,("umatragurmukhi", '\x0A41')
-  ,("umonospace", '\xFF55')
-  ,("underscore", '\x005F')
-  ,("underscoredbl", '\x2017')
-  ,("underscoremonospace", '\xFF3F')
-  ,("underscorevertical", '\xFE33')
-  ,("underscorewavy", '\xFE4F')
-  ,("union", '\x222A')
-  ,("universal", '\x2200')
-  ,("uogonek", '\x0173')
-  ,("uparen", '\x24B0')
-  ,("upblock", '\x2580')
-  ,("upperdothebrew", '\x05C4')
-  ,("upsilon", '\x03C5')
-  ,("upsilondieresis", '\x03CB')
-  ,("upsilondieresistonos", '\x03B0')
-  ,("upsilonlatin", '\x028A')
-  ,("upsilontonos", '\x03CD')
-  ,("uptackbelowcmb", '\x031D')
-  ,("uptackmod", '\x02D4')
-  ,("uragurmukhi", '\x0A73')
-  ,("uring", '\x016F')
-  ,("ushortcyrillic", '\x045E')
-  ,("usmallhiragana", '\x3045')
-  ,("usmallkatakana", '\x30A5')
-  ,("usmallkatakanahalfwidth", '\xFF69')
-  ,("ustraightcyrillic", '\x04AF')
-  ,("ustraightstrokecyrillic", '\x04B1')
-  ,("utilde", '\x0169')
-  ,("utildeacute", '\x1E79')
-  ,("utildebelow", '\x1E75')
-  ,("uubengali", '\x098A')
-  ,("uudeva", '\x090A')
-  ,("uugujarati", '\x0A8A')
-  ,("uugurmukhi", '\x0A0A')
-  ,("uumatragurmukhi", '\x0A42')
-  ,("uuvowelsignbengali", '\x09C2')
-  ,("uuvowelsigndeva", '\x0942')
-  ,("uuvowelsigngujarati", '\x0AC2')
-  ,("uvowelsignbengali", '\x09C1')
-  ,("uvowelsigndeva", '\x0941')
-  ,("uvowelsigngujarati", '\x0AC1')
-  ,("v", '\x0076')
-  ,("vadeva", '\x0935')
-  ,("vagujarati", '\x0AB5')
-  ,("vagurmukhi", '\x0A35')
-  ,("vakatakana", '\x30F7')
-  ,("vav", '\x05D5')
-  ,("vavdagesh", '\xFB35')
-  ,("vavdagesh65", '\xFB35')
-  ,("vavdageshhebrew", '\xFB35')
-  ,("vavhebrew", '\x05D5')
-  ,("vavholam", '\xFB4B')
-  ,("vavholamhebrew", '\xFB4B')
-  ,("vavvavhebrew", '\x05F0')
-  ,("vavyodhebrew", '\x05F1')
-  ,("vcircle", '\x24E5')
-  ,("vdotbelow", '\x1E7F')
-  ,("vecyrillic", '\x0432')
-  ,("veharabic", '\x06A4')
-  ,("vehfinalarabic", '\xFB6B')
-  ,("vehinitialarabic", '\xFB6C')
-  ,("vehmedialarabic", '\xFB6D')
-  ,("vekatakana", '\x30F9')
-  ,("venus", '\x2640')
-  ,("verticalbar", '\x007C')
-  ,("verticallineabovecmb", '\x030D')
-  ,("verticallinebelowcmb", '\x0329')
-  ,("verticallinelowmod", '\x02CC')
-  ,("verticallinemod", '\x02C8')
-  ,("vewarmenian", '\x057E')
-  ,("vhook", '\x028B')
-  ,("vikatakana", '\x30F8')
-  ,("viramabengali", '\x09CD')
-  ,("viramadeva", '\x094D')
-  ,("viramagujarati", '\x0ACD')
-  ,("visargabengali", '\x0983')
-  ,("visargadeva", '\x0903')
-  ,("visargagujarati", '\x0A83')
-  ,("vmonospace", '\xFF56')
-  ,("voarmenian", '\x0578')
-  ,("voicediterationhiragana", '\x309E')
-  ,("voicediterationkatakana", '\x30FE')
-  ,("voicedmarkkana", '\x309B')
-  ,("voicedmarkkanahalfwidth", '\xFF9E')
-  ,("vokatakana", '\x30FA')
-  ,("vparen", '\x24B1')
-  ,("vtilde", '\x1E7D')
-  ,("vturned", '\x028C')
-  ,("vuhiragana", '\x3094')
-  ,("vukatakana", '\x30F4')
-  ,("w", '\x0077')
-  ,("wacute", '\x1E83')
-  ,("waekorean", '\x3159')
-  ,("wahiragana", '\x308F')
-  ,("wakatakana", '\x30EF')
-  ,("wakatakanahalfwidth", '\xFF9C')
-  ,("wakorean", '\x3158')
-  ,("wasmallhiragana", '\x308E')
-  ,("wasmallkatakana", '\x30EE')
-  ,("wattosquare", '\x3357')
-  ,("wavedash", '\x301C')
-  ,("wavyunderscorevertical", '\xFE34')
-  ,("wawarabic", '\x0648')
-  ,("wawfinalarabic", '\xFEEE')
-  ,("wawhamzaabovearabic", '\x0624')
-  ,("wawhamzaabovefinalarabic", '\xFE86')
-  ,("wbsquare", '\x33DD')
-  ,("wcircle", '\x24E6')
-  ,("wcircumflex", '\x0175')
-  ,("wdieresis", '\x1E85')
-  ,("wdotaccent", '\x1E87')
-  ,("wdotbelow", '\x1E89')
-  ,("wehiragana", '\x3091')
-  ,("weierstrass", '\x2118')
-  ,("wekatakana", '\x30F1')
-  ,("wekorean", '\x315E')
-  ,("weokorean", '\x315D')
-  ,("wgrave", '\x1E81')
-  ,("whitebullet", '\x25E6')
-  ,("whitecircle", '\x25CB')
-  ,("whitecircleinverse", '\x25D9')
-  ,("whitecornerbracketleft", '\x300E')
-  ,("whitecornerbracketleftvertical", '\xFE43')
-  ,("whitecornerbracketright", '\x300F')
-  ,("whitecornerbracketrightvertical", '\xFE44')
-  ,("whitediamond", '\x25C7')
-  ,("whitediamondcontainingblacksmalldiamond", '\x25C8')
-  ,("whitedownpointingsmalltriangle", '\x25BF')
-  ,("whitedownpointingtriangle", '\x25BD')
-  ,("whiteleftpointingsmalltriangle", '\x25C3')
-  ,("whiteleftpointingtriangle", '\x25C1')
-  ,("whitelenticularbracketleft", '\x3016')
-  ,("whitelenticularbracketright", '\x3017')
-  ,("whiterightpointingsmalltriangle", '\x25B9')
-  ,("whiterightpointingtriangle", '\x25B7')
-  ,("whitesmallsquare", '\x25AB')
-  ,("whitesmilingface", '\x263A')
-  ,("whitesquare", '\x25A1')
-  ,("whitestar", '\x2606')
-  ,("whitetelephone", '\x260F')
-  ,("whitetortoiseshellbracketleft", '\x3018')
-  ,("whitetortoiseshellbracketright", '\x3019')
-  ,("whiteuppointingsmalltriangle", '\x25B5')
-  ,("whiteuppointingtriangle", '\x25B3')
-  ,("wihiragana", '\x3090')
-  ,("wikatakana", '\x30F0')
-  ,("wikorean", '\x315F')
-  ,("wmonospace", '\xFF57')
-  ,("wohiragana", '\x3092')
-  ,("wokatakana", '\x30F2')
-  ,("wokatakanahalfwidth", '\xFF66')
-  ,("won", '\x20A9')
-  ,("wonmonospace", '\xFFE6')
-  ,("wowaenthai", '\x0E27')
-  ,("wparen", '\x24B2')
-  ,("wring", '\x1E98')
-  ,("wsuperior", '\x02B7')
-  ,("wturned", '\x028D')
-  ,("wynn", '\x01BF')
-  ,("x", '\x0078')
-  ,("xabovecmb", '\x033D')
-  ,("xbopomofo", '\x3112')
-  ,("xcircle", '\x24E7')
-  ,("xdieresis", '\x1E8D')
-  ,("xdotaccent", '\x1E8B')
-  ,("xeharmenian", '\x056D')
-  ,("xi", '\x03BE')
-  ,("xmonospace", '\xFF58')
-  ,("xparen", '\x24B3')
-  ,("xsuperior", '\x02E3')
-  ,("y", '\x0079')
-  ,("yaadosquare", '\x334E')
-  ,("yabengali", '\x09AF')
-  ,("yacute", '\x00FD')
-  ,("yadeva", '\x092F')
-  ,("yaekorean", '\x3152')
-  ,("yagujarati", '\x0AAF')
-  ,("yagurmukhi", '\x0A2F')
-  ,("yahiragana", '\x3084')
-  ,("yakatakana", '\x30E4')
-  ,("yakatakanahalfwidth", '\xFF94')
-  ,("yakorean", '\x3151')
-  ,("yamakkanthai", '\x0E4E')
-  ,("yasmallhiragana", '\x3083')
-  ,("yasmallkatakana", '\x30E3')
-  ,("yasmallkatakanahalfwidth", '\xFF6C')
-  ,("yatcyrillic", '\x0463')
-  ,("ycircle", '\x24E8')
-  ,("ycircumflex", '\x0177')
-  ,("ydieresis", '\x00FF')
-  ,("ydotaccent", '\x1E8F')
-  ,("ydotbelow", '\x1EF5')
-  ,("yeharabic", '\x064A')
-  ,("yehbarreearabic", '\x06D2')
-  ,("yehbarreefinalarabic", '\xFBAF')
-  ,("yehfinalarabic", '\xFEF2')
-  ,("yehhamzaabovearabic", '\x0626')
-  ,("yehhamzaabovefinalarabic", '\xFE8A')
-  ,("yehhamzaaboveinitialarabic", '\xFE8B')
-  ,("yehhamzaabovemedialarabic", '\xFE8C')
-  ,("yehinitialarabic", '\xFEF3')
-  ,("yehmedialarabic", '\xFEF4')
-  ,("yehmeeminitialarabic", '\xFCDD')
-  ,("yehmeemisolatedarabic", '\xFC58')
-  ,("yehnoonfinalarabic", '\xFC94')
-  ,("yehthreedotsbelowarabic", '\x06D1')
-  ,("yekorean", '\x3156')
-  ,("yen", '\x00A5')
-  ,("yenmonospace", '\xFFE5')
-  ,("yeokorean", '\x3155')
-  ,("yeorinhieuhkorean", '\x3186')
-  ,("yerahbenyomohebrew", '\x05AA')
-  ,("yerahbenyomolefthebrew", '\x05AA')
-  ,("yericyrillic", '\x044B')
-  ,("yerudieresiscyrillic", '\x04F9')
-  ,("yesieungkorean", '\x3181')
-  ,("yesieungpansioskorean", '\x3183')
-  ,("yesieungsioskorean", '\x3182')
-  ,("yetivhebrew", '\x059A')
-  ,("ygrave", '\x1EF3')
-  ,("yhook", '\x01B4')
-  ,("yhookabove", '\x1EF7')
-  ,("yiarmenian", '\x0575')
-  ,("yicyrillic", '\x0457')
-  ,("yikorean", '\x3162')
-  ,("yinyang", '\x262F')
-  ,("yiwnarmenian", '\x0582')
-  ,("ymonospace", '\xFF59')
-  ,("yod", '\x05D9')
-  ,("yoddagesh", '\xFB39')
-  ,("yoddageshhebrew", '\xFB39')
-  ,("yodhebrew", '\x05D9')
-  ,("yodyodhebrew", '\x05F2')
-  ,("yodyodpatahhebrew", '\xFB1F')
-  ,("yohiragana", '\x3088')
-  ,("yoikorean", '\x3189')
-  ,("yokatakana", '\x30E8')
-  ,("yokatakanahalfwidth", '\xFF96')
-  ,("yokorean", '\x315B')
-  ,("yosmallhiragana", '\x3087')
-  ,("yosmallkatakana", '\x30E7')
-  ,("yosmallkatakanahalfwidth", '\xFF6E')
-  ,("yotgreek", '\x03F3')
-  ,("yoyaekorean", '\x3188')
-  ,("yoyakorean", '\x3187')
-  ,("yoyakthai", '\x0E22')
-  ,("yoyingthai", '\x0E0D')
-  ,("yparen", '\x24B4')
-  ,("ypogegrammeni", '\x037A')
-  ,("ypogegrammenigreekcmb", '\x0345')
-  ,("yr", '\x01A6')
-  ,("yring", '\x1E99')
-  ,("ysuperior", '\x02B8')
-  ,("ytilde", '\x1EF9')
-  ,("yturned", '\x028E')
-  ,("yuhiragana", '\x3086')
-  ,("yuikorean", '\x318C')
-  ,("yukatakana", '\x30E6')
-  ,("yukatakanahalfwidth", '\xFF95')
-  ,("yukorean", '\x3160')
-  ,("yusbigcyrillic", '\x046B')
-  ,("yusbigiotifiedcyrillic", '\x046D')
-  ,("yuslittlecyrillic", '\x0467')
-  ,("yuslittleiotifiedcyrillic", '\x0469')
-  ,("yusmallhiragana", '\x3085')
-  ,("yusmallkatakana", '\x30E5')
-  ,("yusmallkatakanahalfwidth", '\xFF6D')
-  ,("yuyekorean", '\x318B')
-  ,("yuyeokorean", '\x318A')
-  ,("yyabengali", '\x09DF')
-  ,("yyadeva", '\x095F')
-  ,("z", '\x007A')
-  ,("zaarmenian", '\x0566')
-  ,("zacute", '\x017A')
-  ,("zadeva", '\x095B')
-  ,("zagurmukhi", '\x0A5B')
-  ,("zaharabic", '\x0638')
-  ,("zahfinalarabic", '\xFEC6')
-  ,("zahinitialarabic", '\xFEC7')
-  ,("zahiragana", '\x3056')
-  ,("zahmedialarabic", '\xFEC8')
-  ,("zainarabic", '\x0632')
-  ,("zainfinalarabic", '\xFEB0')
-  ,("zakatakana", '\x30B6')
-  ,("zaqefgadolhebrew", '\x0595')
-  ,("zaqefqatanhebrew", '\x0594')
-  ,("zarqahebrew", '\x0598')
-  ,("zayin", '\x05D6')
-  ,("zayindagesh", '\xFB36')
-  ,("zayindageshhebrew", '\xFB36')
-  ,("zayinhebrew", '\x05D6')
-  ,("zbopomofo", '\x3117')
-  ,("zcaron", '\x017E')
-  ,("zcircle", '\x24E9')
-  ,("zcircumflex", '\x1E91')
-  ,("zcurl", '\x0291')
-  ,("zdot", '\x017C')
-  ,("zdotaccent", '\x017C')
-  ,("zdotbelow", '\x1E93')
-  ,("zecyrillic", '\x0437')
-  ,("zedescendercyrillic", '\x0499')
-  ,("zedieresiscyrillic", '\x04DF')
-  ,("zehiragana", '\x305C')
-  ,("zekatakana", '\x30BC')
-  ,("zero", '\x0030')
-  ,("zeroarabic", '\x0660')
-  ,("zerobengali", '\x09E6')
-  ,("zerodeva", '\x0966')
-  ,("zerogujarati", '\x0AE6')
-  ,("zerogurmukhi", '\x0A66')
-  ,("zerohackarabic", '\x0660')
-  ,("zeroinferior", '\x2080')
-  ,("zeromonospace", '\xFF10')
-  ,("zerooldstyle", '\xF730')
-  ,("zeropersian", '\x06F0')
-  ,("zerosuperior", '\x2070')
-  ,("zerothai", '\x0E50')
-  ,("zerowidthjoiner", '\xFEFF')
-  ,("zerowidthnonjoiner", '\x200C')
-  ,("zerowidthspace", '\x200B')
-  ,("zeta", '\x03B6')
-  ,("zhbopomofo", '\x3113')
-  ,("zhearmenian", '\x056A')
-  ,("zhebrevecyrillic", '\x04C2')
-  ,("zhecyrillic", '\x0436')
-  ,("zhedescendercyrillic", '\x0497')
-  ,("zhedieresiscyrillic", '\x04DD')
-  ,("zihiragana", '\x3058')
-  ,("zikatakana", '\x30B8')
-  ,("zinorhebrew", '\x05AE')
-  ,("zlinebelow", '\x1E95')
-  ,("zmonospace", '\xFF5A')
-  ,("zohiragana", '\x305E')
-  ,("zokatakana", '\x30BE')
-  ,("zparen", '\x24B5')
-  ,("zretroflexhook", '\x0290')
-  ,("zstroke", '\x01B6')
-  ,("zuhiragana", '\x305A')
-  ,("zukatakana", '\x30BA')
-  ]
diff --git a/lib/Pdf/Toolbox/Content/Ops.hs b/lib/Pdf/Toolbox/Content/Ops.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Ops.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Content stream operators
-
-module Pdf.Toolbox.Content.Ops
-(
-  Op(..),
-  Expr(..),
-  Operator,
-  toOp
-)
-where
-
-import Data.ByteString (ByteString)
-
-import Pdf.Toolbox.Core
-
--- | Operator with arguments
-type Operator = (Op, [Object ()])
-
--- | Content stream operators
-data Op
-  -- | Graphics State Operators
-  = Op_q
-  | Op_Q
-  | Op_cm
-  | Op_w
-  | Op_J
-  | Op_j
-  | Op_M
-  | Op_d
-  | Op_ri
-  | Op_i
-  | Op_gs
-  -- | Path Construction Operators
-  | Op_m
-  | Op_l
-  | Op_c
-  | Op_v
-  | Op_y
-  | Op_h
-  | Op_re
-  -- | Path Painting Operators
-  | Op_S
-  | Op_s
-  | Op_f
-  | Op_F
-  | Op_f_star
-  | Op_B
-  | Op_B_star
-  | Op_b
-  | Op_b_star
-  | Op_n
-  -- | Clipping Path Operators
-  | Op_W
-  | Op_W_star
-  -- | Text Object Operators
-  | Op_BT
-  | Op_ET
-  -- | Text State Operators
-  | Op_Tc
-  | Op_Tw
-  | Op_Tz
-  | Op_TL
-  | Op_Tf
-  | Op_Tr
-  | Op_Ts
-  -- | Text Positioning Operators
-  | Op_Td
-  | Op_TD
-  | Op_Tm
-  | Op_T_star
-  -- | Text Showing Operators
-  | Op_Tj
-  | Op_apostrophe
-  | Op_quote
-  | Op_TJ
-  -- | Type 3 Font Operators
-  | Op_d0
-  | Op_d1
-  -- | Color Operators
-  | Op_CS
-  | Op_cs
-  | Op_SC
-  | Op_SCN
-  | Op_sc
-  | Op_scn
-  | Op_G
-  | Op_g
-  | Op_RG
-  | Op_rg
-  | Op_K
-  | Op_k
-  -- | Shading Operator
-  | Op_sh
-  -- | Inline Image Operators
-  | Op_BI
-  | Op_ID
-  | Op_EI
-  -- | XObject Operator
-  | Op_Do
-  -- | Marked Content Operators
-  | Op_MP
-  | Op_DP
-  | Op_BMC
-  | Op_BDC
-  | Op_EMC
-  -- | Compatibility Operators
-  | Op_BX
-  | Op_EX
-  -- | Unknown
-  | UnknownOp ByteString
-  deriving (Show, Eq)
-
--- | Expression is a regular objects or an operators
-data Expr
-  = Obj (Object ())
-  | Op Op
-  deriving (Show, Eq)
-
--- | Conversion to operator
-toOp :: ByteString -> Op
-toOp "q" = Op_q
-toOp "Q" = Op_Q
-toOp "cm" = Op_cm
-toOp "w" = Op_w
-toOp "J" = Op_J
-toOp "j" = Op_j
-toOp "M" = Op_M
-toOp "d" = Op_d
-toOp "ri" = Op_ri
-toOp "i" = Op_i
-toOp "gs" = Op_gs
-toOp "m" = Op_m
-toOp "l" = Op_l
-toOp "c" = Op_c
-toOp "v" = Op_v
-toOp "y" = Op_y
-toOp "h" = Op_h
-toOp "re" = Op_re
-toOp "S" = Op_S
-toOp "s" = Op_s
-toOp "f" = Op_f
-toOp "F" = Op_F
-toOp "f*" = Op_f_star
-toOp "B" = Op_B
-toOp "B*" = Op_B_star
-toOp "b" = Op_b
-toOp "b*" = Op_b_star
-toOp "n" = Op_n
-toOp "W" = Op_W
-toOp "W*" = Op_W_star
-toOp "BT" = Op_BT
-toOp "ET" = Op_ET
-toOp "Tc" = Op_Tc
-toOp "Tw" = Op_Tw
-toOp "Tz" = Op_Tz
-toOp "TL" = Op_TL
-toOp "Tf" = Op_Tf
-toOp "Tr" = Op_Tr
-toOp "Ts" = Op_Ts
-toOp "Td" = Op_Td
-toOp "TD" = Op_TD
-toOp "Tm" = Op_Tm
-toOp "T*" = Op_T_star
-toOp "Tj" = Op_Tj
-toOp "'" = Op_apostrophe
-toOp "\"" = Op_quote
-toOp "TJ" = Op_TJ
-toOp "d0" = Op_d0
-toOp "d1" = Op_d1
-toOp "CS" = Op_CS
-toOp "cs" = Op_cs
-toOp "SC" = Op_SC
-toOp "SCN" = Op_SCN
-toOp "sc" = Op_sc
-toOp "scn" = Op_scn
-toOp "G" = Op_G
-toOp "g" = Op_g
-toOp "RG" = Op_RG
-toOp "rg" = Op_rg
-toOp "K" = Op_K
-toOp "k" = Op_k
-toOp "sh" = Op_sh
-toOp "BI" = Op_BI
-toOp "ID" = Op_ID
-toOp "EI" = Op_EI
-toOp "Do" = Op_Do
-toOp "MP" = Op_MP
-toOp "DP" = Op_DP
-toOp "BMC" = Op_BMC
-toOp "BDC" = Op_BDC
-toOp "EMC" = Op_EMC
-toOp "BX" = Op_BX
-toOp "EX" = Op_EX
-toOp str = UnknownOp str
diff --git a/lib/Pdf/Toolbox/Content/Parser.hs b/lib/Pdf/Toolbox/Content/Parser.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Parser.hs
+++ /dev/null
@@ -1,119 +0,0 @@
-
--- | Parse content stream
-
-module Pdf.Toolbox.Content.Parser
-(
-  parseContentStream,
-  readNextOperator,
-  parseContent
-)
-where
-
-import Data.Int
-import qualified Data.ByteString.Char8 as ByteString8
-import Data.Attoparsec.ByteString.Char8 (Parser)
-import qualified Data.Attoparsec.ByteString.Char8 as Parser
-import Data.IORef
-import Control.Applicative
-import Control.Exception
-import System.IO.Streams (InputStream)
-import qualified System.IO.Streams as Streams
-import qualified System.IO.Streams.Attoparsec as Streams
-
-import Pdf.Toolbox.Core
-import Pdf.Toolbox.Core.Parsers.Object
-
-import Pdf.Toolbox.Content.Ops
-
--- | Parse content streams for a page
---
--- Note: we need content stream ref to be able to decrypt stream content.
--- We need stream length because it can be an indirect object in
--- stream dictionary
-parseContentStream :: MonadIO m
-                   => RIS                         -- ^ random input stream to read data from
-                   -> [StreamFilter]              -- ^ how to unpack data
-                   -> (Ref -> IS -> IO IS)        -- ^ how to decrypt data
-                   -> [(Stream Int64, Ref, Int)]  -- ^ content streams (with offset), their refs and length
-                   -> PdfE m (InputStream Expr)
-parseContentStream ris filters decryptor streams = do
-  is <- combineStreams ris filters decryptor streams
-  liftIO $ Streams.parserToInputStream parseContent is
-
--- | Read the next operator if any
-readNextOperator :: MonadIO m => InputStream Expr -> PdfE m (Maybe Operator)
-readNextOperator is = annotateError "reading the next operator from content stream" $ go []
-  where
-  go args = do
-    expr <- do
-      e <- tryPdfIO $ (Right <$> Streams.read is)
-        `catch` (\e -> return $ Left $ UnexpectedError $ show (e :: Streams.ParseException))
-      case e of
-        Right expr -> return expr
-        Left er -> throwE er
-    case expr of
-      Nothing -> case args of
-                   [] -> return Nothing
-                   _ -> throwE $ UnexpectedError $ "Args without op: " ++ show args
-      Just (Obj o) -> go (o : args)
-      Just (Op o) -> return $ Just (o, reverse args)
-
-combineStreams :: MonadIO m => RIS -> [StreamFilter] -> (Ref -> IS -> IO IS) -> [(Stream Int64, Ref, Int)] -> PdfE m IS
-combineStreams _ _ _ [] = liftIO Streams.nullInput
-combineStreams ris filters decryptor (x:xs) = do
-  reader <- mkReader x xs
-  ref <- liftIO $ newIORef reader
-  liftIO $ Streams.makeInputStream (doRead ref)
-  where
-  mkReader (s, ref, len) ss = do
-    Stream _ is <- decodedStreamContent ris filters (decryptor ref) len s
-    return (is, ss)
-  doRead ref = do
-    (is, ss) <- liftIO $ readIORef ref
-    chunk <- liftIO $ Streams.read is
-    case chunk of
-      Nothing ->
-        case ss of
-          [] -> return Nothing
-          (h:t) -> do
-            reader <- runExceptT $ mkReader h t
-            case reader of
-              Left e -> liftIO $ ioError $ userError $ show e
-              Right r -> do
-                liftIO $ writeIORef ref r
-                doRead ref
-      Just c -> return (Just c)
-
-parseContent :: Parser (Maybe Expr)
-parseContent
-  = (skipSpace >> Parser.endOfInput >> return Nothing)
-  <|> do
-    skipSpace
-    fmap Just $ fmap Obj parseObject
-      <|> fmap (Op . toOp) (Parser.takeWhile1 isRegularChar)
-      -- See Note Inline image
-      <|> fmap (Op . UnknownOp . ByteString8.pack . return) Parser.anyChar
-
-{- Note Inline image
-
-There is at least one case that doesn't fit the way we represent content
-stream operators: inline images, see Pdf1.7:8.9.7
-
-Inline image looks like "BI" operator, a number of key/value pairs, "ID"
-operator, image data and "EI" operator. I have no idea how to handle that case.
-There is no data length, so the "EI" string is the only indicator for end
-of image data. What if the data contains "EI"?
-
-For now lets skip all unknown bytes as unknown operator. That seems to work,
-but it is not reliable.
--}
-
--- Treat comments as spaces
-skipSpace :: Parser ()
-skipSpace = do
-  Parser.skipSpace
-  _ <- many $ do
-    _ <- Parser.char '%'
-    Parser.skipWhile $ \c -> c /= '\n' && c /= '\r'
-    Parser.skipSpace
-  return ()
diff --git a/lib/Pdf/Toolbox/Content/Processor.hs b/lib/Pdf/Toolbox/Content/Processor.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Processor.hs
+++ /dev/null
@@ -1,298 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Process content stream operators maintaining graphics state
---
--- It is pretty experimental
-
-module Pdf.Toolbox.Content.Processor
-(
-  Processor(..),
-  GraphicsState(..),
-  GlyphDecoder,
-  Glyph(..),
-  initialGraphicsState,
-  mkProcessor,
-  processOp
-)
-where
-
-import Data.Text (Text)
-import Control.Monad
-
-import Pdf.Toolbox.Core
-
-import Pdf.Toolbox.Content.Ops
-import Pdf.Toolbox.Content.Transform
-
--- | Given font name and string, it should return list of glyphs
--- and their widths.
---
--- Note: it should not try to position or scale glyphs to user space,
--- bounding boxes should be defined in glyph space.
---
--- Note: glyph width is a distance between the glyph's origin and
--- the next glyph's origin, so it generally can't be calculated
--- from bounding box
---
--- Note: the 'Processor' actually doesn't cares about glyph's
--- bounding box, so you can return anything you want
-type GlyphDecoder = Name -> Str -> [(Glyph, Double)]
-
--- | Glyph
-data Glyph = Glyph {
-  -- | The code as read from content stream
-  glyphCode :: Int,
-  -- | Top-left corner of glyph's bounding box
-  glyphTopLeft :: Vector Double,
-  -- | Bottom-right corner of glyph's bounding box
-  glyphBottomRight :: Vector Double,
-  -- | Text ectracted from the glyph
-  glyphText :: Maybe Text
-  }
-  deriving Show
-
--- | Graphics state
-data GraphicsState = GraphicsState {
-  gsInText :: Bool,    -- ^ Indicates that we are inside text object
-  gsCurrentTransformMatrix :: Transform Double,
-  gsFont :: Maybe Name,
-  gsFontSize :: Maybe Double,
-  gsTextMatrix :: Transform Double,      -- ^ Defined only inside text object
-  gsTextLineMatrix :: Transform Double,  -- ^ Defined only inside text object
-  gsTextLeading :: Double,
-  gsTextCharSpacing :: Double,
-  gsTextWordSpacing :: Double
-  }
-  deriving Show
-
--- | Empty graphics state
-initialGraphicsState :: GraphicsState
-initialGraphicsState = GraphicsState {
-  gsInText = False,
-  gsCurrentTransformMatrix = identity,
-  gsFont = Nothing,
-  gsFontSize = Nothing,
-  gsTextMatrix = identity,
-  gsTextLineMatrix = identity,
-  gsTextLeading = 0,
-  gsTextCharSpacing = 0,
-  gsTextWordSpacing = 0
-  }
-
--- | Processor maintains graphics state
-data Processor = Processor {
-  prState :: GraphicsState,
-  prStateStack :: [GraphicsState],
-  prGlyphDecoder :: GlyphDecoder,
-  prGlyphs :: [[Glyph]]         -- ^ Each element is a list of glyphs, drawn in one shot
-  }
-
--- | Create processor in initial state
-mkProcessor :: Processor
-mkProcessor = Processor {
-  prState = initialGraphicsState,
-  prStateStack = [],
-  prGlyphDecoder = \_ _ -> [],
-  prGlyphs = mempty
-  }
-
--- | Process one operation
-processOp :: Monad m => Operator -> Processor -> PdfE m Processor
-
-processOp (Op_q, []) p = return p {prStateStack = prState p : prStateStack p}
-processOp (Op_q, args) _ = throwE $ UnexpectedError $ "Op_q: wrong number of arguments: " ++ show args
-
-processOp (Op_Q, []) p =
-  case prStateStack p of
-    [] -> throwE $ UnexpectedError "Op_Q: state is empty"
-    (x:xs) -> return p {prState = x, prStateStack = xs}
-processOp (Op_Q, args) _ = throwE $ UnexpectedError $ "Op_Q: wrong number of arguments: " ++ show args
-
-processOp (Op_BT, []) p = do
-  ensureInTextObject False p
-  let gstate = prState p
-  return p {prState = gstate {
-    gsInText = True,
-    gsTextMatrix = identity,
-    gsTextLineMatrix = identity
-    }}
-processOp (Op_BT, args) _ = throwE $ UnexpectedError $ "Op_BT: wrong number of arguments: " ++ show args
-
-processOp (Op_ET, []) p = do
-  ensureInTextObject True p
-  let gstate = prState p
-  return p {prState = gstate {
-    gsInText = False
-    }}
-processOp (Op_ET, args) _ = throwE $ UnexpectedError $ "Op_ET: wrong number of arguments: " ++ show args
-
-processOp (Op_Td, [txo, tyo]) p = do
-  ensureInTextObject True p
-  tx <- fromObject txo >>= realValue
-  ty <- fromObject tyo >>= realValue
-  let gstate = prState p
-      tm = translate tx ty $ gsTextLineMatrix gstate
-  return p {prState = gstate {
-    gsTextMatrix = tm,
-    gsTextLineMatrix = tm
-    }}
-processOp (Op_Td, args) _ = throwE $ UnexpectedError $ "Op_Td: wrong number of arguments: " ++ show args
-
-processOp (Op_TD, [txo, tyo]) p = do
-  l <- fromObject tyo >>= realValue
-  p' <- processOp (Op_TL, [ONumber $ NumReal $ negate l]) p
-  processOp (Op_Td, [txo, tyo]) p'
-processOp (Op_TD, args) _ = throwE $ UnexpectedError $ "Op_TD: wrong number of arguments: " ++ show args
-
-processOp (Op_Tm, [a', b', c', d', e', f']) p = do
-  ensureInTextObject True p
-  a <- fromObject a' >>= realValue
-  b <- fromObject b' >>= realValue
-  c <- fromObject c' >>= realValue
-  d <- fromObject d' >>= realValue
-  e <- fromObject e' >>= realValue
-  f <- fromObject f' >>= realValue
-  let gstate = prState p
-      tm = Transform a b c d e f
-  return p {prState = gstate {
-    gsTextMatrix = tm,
-    gsTextLineMatrix = tm
-    }}
-processOp (Op_Tm, args) _ = throwE $ UnexpectedError $ "Op_Tm: wrong number of arguments: " ++ show args
-
-processOp (Op_T_star, []) p = do
-  ensureInTextObject True p
-  let gstate = prState p
-      l = gsTextLeading gstate
-  processOp (Op_TD, map (ONumber . NumReal) [0, negate l]) p
-processOp (Op_T_star, args) _ = throwE $ UnexpectedError $ "Op_T_star: wrong number of arguments: " ++ show args
-
-processOp (Op_TL, [lo]) p = do
-  l <- fromObject lo >>= realValue
-  let gstate = prState p
-  return p {prState = gstate {
-    gsTextLeading = l
-    }}
-processOp (Op_TL, args) _ = throwE $ UnexpectedError $ "Op_TL: wrong number of arguments: " ++ show args
-
-processOp (Op_cm, [a', b', c', d', e', f']) p = do
-  a <- fromObject a' >>= realValue
-  b <- fromObject b' >>= realValue
-  c <- fromObject c' >>= realValue
-  d <- fromObject d' >>= realValue
-  e <- fromObject e' >>= realValue
-  f <- fromObject f' >>= realValue
-  let gstate = prState p
-      ctm = Transform a b c d e f `multiply` gsCurrentTransformMatrix gstate
-  return p {prState = gstate {
-    gsCurrentTransformMatrix = ctm
-    }}
-processOp (Op_cm, args) _ = throwE $ UnexpectedError $ "Op_cm: wrong number of arguments: " ++ show args
-
-processOp (Op_Tf, [fontO, szO]) p = do
-  font <- fromObject fontO
-  sz <- fromObject szO >>= realValue
-  let gstate = prState p
-  return p {prState = gstate {
-    gsFont = Just font,
-    gsFontSize = Just sz
-    }}
-processOp (Op_Tf, args) _ = throwE $ UnexpectedError $ "Op_Tf: wrong number of agruments: " ++ show args
-
-processOp (Op_Tj, [OStr str]) p = do
-  let gstate = prState p
-  fontName <-
-    case gsFont gstate of
-      Nothing -> throwE $ UnexpectedError "Op_Tj: font not set"
-      Just fn -> return fn
-  fontSize <-
-    case gsFontSize gstate of
-      Nothing -> throwE $ UnexpectedError "Op_Tj: font size not set"
-      Just fs -> return fs
-  let (tm, glyphs) = positionGlyghs fontSize (gsCurrentTransformMatrix gstate)
-                       (gsTextMatrix gstate) (gsTextCharSpacing gstate) (gsTextWordSpacing gstate) $
-                       prGlyphDecoder p fontName str
-  return p {
-    prGlyphs = prGlyphs p ++ [glyphs],
-    prState = gstate {
-      gsTextMatrix = tm
-      }
-    }
-processOp (Op_Tj, args) _ = throwE $ UnexpectedError $ "Op_Tj: wrong number of agruments:" ++ show args
-
-processOp (Op_TJ, [OArray (Array array)]) p = do
-  let gstate = prState p
-  fontName <-
-    case gsFont gstate of
-      Nothing -> throwE $ UnexpectedError "Op_Tj: font not set"
-      Just fn -> return fn
-  fontSize <-
-    case gsFontSize gstate of
-      Nothing -> throwE $ UnexpectedError "Op_Tj: font size not set"
-      Just fs -> return fs
-  let (textMatrix, glyphs) = loop (gsTextMatrix gstate) [] array
-        where
-        loop tm res [] = (tm, reverse res)
-        loop tm res (OStr str : rest) = let (tm', gs) = positionGlyghs fontSize (gsCurrentTransformMatrix gstate)
-                                                          tm (gsTextCharSpacing gstate) (gsTextWordSpacing gstate)
-                                                          (prGlyphDecoder p fontName str)
-                                        in loop tm' (gs : res) rest
-        loop tm res (ONumber (NumInt i): rest) = loop (translate (fromIntegral (-i) * fontSize / 1000) 0 tm) res rest
-        loop tm res (ONumber (NumReal d): rest) = loop (translate (-d * fontSize / 1000) 0 tm) res rest
-        loop tm res (_:rest) = loop tm res rest
-  return p {
-    prGlyphs = prGlyphs p ++ glyphs,
-    prState = gstate {
-      gsTextMatrix = textMatrix
-      }
-    }
-processOp (Op_TJ, args) _ = throwE $ UnexpectedError $ "Op_TJ: wrong number of agruments:" ++ show args
-
-processOp (Op_Tc, [o]) p = do
-  spacing <- fromObject o >>= realValue
-  let gstate = prState p
-  return p {
-    prState = gstate {
-      gsTextCharSpacing = spacing
-      }
-    }
-processOp (Op_Tc, args) _ = throwE $ UnexpectedError $ "Op_Tc: wrong number of agruments:" ++ show args
-
-processOp (Op_Tw, [o]) p = do
-  spacing <- fromObject o >>= realValue
-  let gstate = prState p
-  return p {
-    prState = gstate {
-      gsTextWordSpacing = spacing
-      }
-    }
-processOp (Op_Tw, args) _ = throwE $ UnexpectedError $ "Op_Tw: wrong number of agruments:" ++ show args
-
-processOp (Op_apostrophe, [o]) p = do
-  p' <- processOp (Op_T_star, []) p
-  processOp (Op_Tj, [o]) p'
-processOp (Op_apostrophe, args) _ = throwE $ UnexpectedError $ "Op_apostrophe: wrong number of agruments:" ++ show args
-
-processOp _ p = return p
-
-ensureInTextObject :: Monad m => Bool -> Processor -> PdfE m ()
-ensureInTextObject inText p =
-  unless (inText == gsInText (prState p)) $ throwE $
-    UnexpectedError $ "ensureInTextObject: expected: " ++ show inText ++ ", found: " ++ show (gsInText $ prState p)
-
-positionGlyghs :: Double -> Transform Double -> Transform Double -> Double -> Double -> [(Glyph, Double)] -> (Transform Double, [Glyph])
-positionGlyghs fontSize ctm textMatrix charSpacing wordSpacing = go textMatrix []
-  where
-  go tm res [] = (tm, reverse res)
-  go tm res ((g, width):gs) =
-    let g' = g {
-          glyphTopLeft = transform (multiply tm ctm) topLeft,
-          glyphBottomRight = transform (multiply tm ctm) bottomRight
-          }
-        topLeft = transform (scale fontSize fontSize) $ glyphTopLeft g
-        bottomRight = transform (scale fontSize fontSize) $ glyphBottomRight g
-        spacing = charSpacing + case glyphText g of
-                                  Just " " -> wordSpacing
-                                  _ -> 0
-        tm' = translate (width * fontSize + spacing) 0 tm
-    in go tm' (g':res) gs
diff --git a/lib/Pdf/Toolbox/Content/TexGlyphList.hs b/lib/Pdf/Toolbox/Content/TexGlyphList.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/TexGlyphList.hs
+++ /dev/null
@@ -1,304 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Mapping from glyph names to unicode characters
--- for TeX fonts
-
-module Pdf.Toolbox.Content.TexGlyphList
-(
-  texGlyphList
-)
-where
-
-import Data.ByteString (ByteString)
-import Data.Map (Map)
-import qualified Data.Map as Map
-
--- | Glyph list
-texGlyphList :: Map ByteString Char
-texGlyphList = Map.fromList
-  [("Delta", '\x2206')
-  ,("Ifractur", '\x2111')
-  ,("FFsmall", '\xF766')
-  ,("FFIsmall", '\xF766')
-  ,("FFLsmall", '\xF766')
-  ,("FIsmall", '\xF766')
-  ,("FLsmall", '\xF766')
-  ,("Germandbls", '\x0053')
-  ,("Germandblssmall", '\xF773')
-  ,("Ng", '\x014A')
-  ,("Omega", '\x2126')
-  ,("Rfractur", '\x211C')
-  ,("SS", '\x0053')
-  ,("SSsmall", '\xF773')
-  ,("altselector", '\xD802')
-  ,("angbracketleft", '\x27E8')
-  ,("angbracketright", '\x27E9')
-  ,("arrowbothv", '\x2195')
-  ,("arrowdblbothv", '\x21D5')
-  ,("arrowleftbothalf", '\x21BD')
-  ,("arrowlefttophalf", '\x21BC')
-  ,("arrownortheast", '\x2197')
-  ,("arrownorthwest", '\x2196')
-  ,("arrowrightbothalf", '\x21C1')
-  ,("arrowrighttophalf", '\x21C0')
-  ,("arrowsoutheast", '\x2198')
-  ,("arrowsouthwest", '\x2199')
-  ,("ascendercompwordmark", '\xD80A')
-  ,("asteriskcentered", '\x2217')
-  ,("bardbl", '\x2225')
-  ,("capitalcompwordmark", '\xD809')
-  ,("ceilingleft", '\x2308')
-  ,("ceilingright", '\x2309')
-  ,("circlecopyrt", '\x20DD')
-  ,("circledivide", '\x2298')
-  ,("circledot", '\x2299')
-  ,("circleminus", '\x2296')
-  ,("coproduct", '\x2A3F')
-  ,("ct", '\x0063')
-  ,("cwm", '\x200C')
-  ,("dblbracketleft", '\x27E6')
-  ,("dblbracketright", '\x27E7')
-  ,("diamond", '\x2662')
-  ,("diamondmath", '\x22C4')
-  ,("dotlessj", '\x0237')
-  ,("emptyset", '\x2205')
-  ,("emptyslot", '\xD801')
-  ,("epsilon1", '\x03F5')
-  ,("epsiloninv", '\x03F6')
-  ,("equivasymptotic", '\x224D')
-  ,("flat", '\x266D')
-  ,("floorleft", '\x230A')
-  ,("floorright", '\x230B')
-  ,("follows", '\x227B')
-  ,("followsequal", '\x2AB0')
-  ,("followsorcurly", '\x227D')
-  ,("greatermuch", '\x226B')
-  ,("heart", '\x2661')
-  ,("interrobang", '\x203D')
-  ,("interrobangdown", '\x2E18')
-  ,("intersectionsq", '\x2293')
-  ,("latticetop", '\x22A4')
-  ,("lessmuch", '\x226A')
-  ,("longdbls", '\x017F')
-  ,("longsh", '\x017F')
-  ,("longsi", '\x017F')
-  ,("longsl", '\x017F')
-  ,("longst", '\xFB05')
-  ,("lscript", '\x2113')
-  ,("natural", '\x266E')
-  ,("negationslash", '\x0338')
-  ,("ng", '\x014B')
-  ,("owner", '\x220B')
-  ,("pertenthousand", '\x2031')
-  ,("phi", '\x03D5')
-  ,("phi1", '\x03C6')
-  ,("pi1", '\x03D6')
-  ,("precedesequal", '\x2AAF')
-  ,("precedesorcurly", '\x227C')
-  ,("prime", '\x2032')
-  ,("rho1", '\x03F1')
-  ,("ringfitted", '\xD80D')
-  ,("sharp", '\x266F')
-  ,("similarequal", '\x2243')
-  ,("slurabove", '\x2322')
-  ,("slurbelow", '\x2323')
-  ,("st", '\xFB06')
-  ,("star", '\x22C6')
-  ,("subsetsqequal", '\x2291')
-  ,("supersetsqequal", '\x2292')
-  ,("triangle", '\x25B3')
-  ,("triangleinv", '\x25BD')
-  ,("triangleleft", '\x25C1')
-  ,("triangleright", '\x25B7')
-  ,("turnstileleft", '\x22A2')
-  ,("turnstileright", '\x22A3')
-  ,("twelveudash", '\xD80C')
-  ,("unionmulti", '\x228E')
-  ,("unionsq", '\x2294')
-  ,("vector", '\x20D7')
-  ,("visualspace", '\x2423')
-  ,("wreathproduct", '\x2240')
-  ,("Dbar", '\x0110')
-  ,("compwordmark", '\x200C')
-  ,("dbar", '\x0111')
-  ,("rangedash", '\x2013')
-  ,("hyphenchar", '\x002D')
-  ,("punctdash", '\x2014')
-  ,("visiblespace", '\x2423')
-  ,("Yen", '\x00A5')
-  ,("anticlockwise", '\x27F2')
-  ,("arrowparrleftright", '\x21C6')
-  ,("arrowparrrightleft", '\x21C4')
-  ,("arrowtailleft", '\x21A2')
-  ,("arrowtailright", '\x21A3')
-  ,("arrowtripleleft", '\x21DA')
-  ,("arrowtripleright", '\x21DB')
-  ,("between", '\x226C')
-  ,("check", '\x2713')
-  ,("circleR", '\x00AE')
-  ,("circleS", '\x24C8')
-  ,("circleasterisk", '\x229B')
-  ,("circleequal", '\x229C')
-  ,("circlering", '\x229A')
-  ,("clockwise", '\x27F3')
-  ,("complement", '\x2201')
-  ,("curlyleft", '\x21AB')
-  ,("curlyright", '\x21AC')
-  ,("dblarrowdwn", '\x21CA')
-  ,("dblarrowheadleft", '\x219E')
-  ,("dblarrowheadright", '\x21A0')
-  ,("dblarrowup", '\x21C8')
-  ,("defines", '\x225C')
-  ,("diamondsolid", '\x2666')
-  ,("difference", '\x224F')
-  ,("dotplus", '\x2214')
-  ,("downfall", '\x22CE')
-  ,("equaldotleftright", '\x2252')
-  ,("equaldotrightleft", '\x2253')
-  ,("equalorfollows", '\x22DF')
-  ,("equalorgreater", '\x2A96')
-  ,("equalorless", '\x2A95')
-  ,("equalorprecedes", '\x22DE')
-  ,("equalsdots", '\x2251')
-  ,("followsorequal", '\x227F')
-  ,("forces", '\x22A9')
-  ,("forcesbar", '\x22AA')
-  ,("fork", '\x22D4')
-  ,("frown", '\x2322')
-  ,("geomequivalent", '\x224E')
-  ,("greaterdbleqlless", '\x2A8C')
-  ,("greaterdblequal", '\x2267')
-  ,("greaterlessequal", '\x22DB')
-  ,("greaterorapproxeql", '\x2A86')
-  ,("greaterorequalslant", '\x2A7E')
-  ,("greaterorsimilar", '\x2273')
-  ,("harpoondownleft", '\x21C3')
-  ,("harpoondownright", '\x21C2')
-  ,("harpoonleftright", '\x21CC')
-  ,("harpoonrightleft", '\x21CB')
-  ,("harpoonupleft", '\x21BF')
-  ,("harpoonupright", '\x21BE')
-  ,("intercal", '\x22BA')
-  ,("intersectiondbl", '\x22D2')
-  ,("lessdbleqlgreater", '\x2A8B')
-  ,("lessdblequal", '\x2266')
-  ,("lessequalgreater", '\x22DA')
-  ,("lessorapproxeql", '\x2A85')
-  ,("lessorequalslant", '\x2A7D')
-  ,("lessorsimilar", '\x2272')
-  ,("maltesecross", '\x2720')
-  ,("measuredangle", '\x2221')
-  ,("multimap", '\x22B8')
-  ,("multiopenleft", '\x22CB')
-  ,("multiopenright", '\x22CC')
-  ,("nand", '\x22BC')
-  ,("orunderscore", '\x22BB')
-  ,("perpcorrespond", '\x2A5E')
-  ,("precedesorequal", '\x227E')
-  ,("primereverse", '\x2035')
-  ,("revasymptequal", '\x22CD')
-  ,("revsimilar", '\x223D')
-  ,("rightanglene", '\x231D')
-  ,("rightanglenw", '\x231C')
-  ,("rightanglese", '\x231F')
-  ,("rightanglesw", '\x231E')
-  ,("ringinequal", '\x2256')
-  ,("satisfies", '\x22A8')
-  ,("shiftleft", '\x21B0')
-  ,("shiftright", '\x21B1')
-  ,("smile", '\x2323')
-  ,("sphericalangle", '\x2222')
-  ,("square", '\x25A1')
-  ,("squaredot", '\x22A1')
-  ,("squareimage", '\x228F')
-  ,("squareminus", '\x229F')
-  ,("squaremultiply", '\x22A0')
-  ,("squareoriginal", '\x2290')
-  ,("squareplus", '\x229E')
-  ,("squaresolid", '\x25A0')
-  ,("squiggleleftright", '\x21AD')
-  ,("squiggleright", '\x21DD')
-  ,("subsetdbl", '\x22D0')
-  ,("subsetdblequal", '\x2AC5')
-  ,("supersetdbl", '\x22D1')
-  ,("supersetdblequal", '\x2AC6')
-  ,("triangledownsld", '\x25BC')
-  ,("triangleleftequal", '\x22B4')
-  ,("triangleleftsld", '\x25C0')
-  ,("trianglerightequal", '\x22B5')
-  ,("trianglerightsld", '\x25B6')
-  ,("trianglesolid", '\x25B2')
-  ,("uniondbl", '\x22D3')
-  ,("uprise", '\x22CF')
-  ,("Digamma", '\x1D7CB')
-  ,("Finv", '\x2132')
-  ,("Gmir", '\x2141')
-  ,("Omegainv", '\x2127')
-  ,("approxorequal", '\x224A')
-  ,("archleftdown", '\x21B6')
-  ,("archrightdown", '\x21B7')
-  ,("beth", '\x2136')
-  ,("daleth", '\x2138')
-  ,("dividemultiply", '\x22C7')
-  ,("downslope", '\x29F9')
-  ,("equalorsimilar", '\x2242')
-  ,("follownotdbleqv", '\x2ABA')
-  ,("follownotslnteql", '\x2AB6')
-  ,("followornoteqvlnt", '\x22E9')
-  ,("greaterdot", '\x22D7')
-  ,("greaternotdblequal", '\x2A8A')
-  ,("greaternotequal", '\x2A88')
-  ,("greaterornotdbleql", '\x2269')
-  ,("greaterornotequal", '\x2269')
-  ,("integerdivide", '\x2216')
-  ,("lessdot", '\x22D6')
-  ,("lessnotdblequal", '\x2A89')
-  ,("lessnotequal", '\x2A87')
-  ,("lessornotdbleql", '\x2268')
-  ,("lessornotequal", '\x2268')
-  ,("multicloseleft", '\x22C9')
-  ,("multicloseright", '\x22CA')
-  ,("notapproxequal", '\x2247')
-  ,("notarrowboth", '\x21AE')
-  ,("notarrowleft", '\x219A')
-  ,("notarrowright", '\x219B')
-  ,("notbar", '\x2224')
-  ,("notdblarrowboth", '\x21CE')
-  ,("notdblarrowleft", '\x21CD')
-  ,("notdblarrowright", '\x21CF')
-  ,("notexistential", '\x2204')
-  ,("notfollows", '\x2281')
-  ,("notfollowsoreql", '\x2AB0')
-  ,("notforces", '\x22AE')
-  ,("notforcesextra", '\x22AF')
-  ,("notgreaterdblequal", '\x2267')
-  ,("notgreaterequal", '\x2271')
-  ,("notgreaterorslnteql", '\x2A7E')
-  ,("notlessdblequal", '\x2266')
-  ,("notlessequal", '\x2270')
-  ,("notlessorslnteql", '\x2A7D')
-  ,("notprecedesoreql", '\x2AAF')
-  ,("notsatisfies", '\x22AD')
-  ,("notsimilar", '\x2241')
-  ,("notsubseteql", '\x2288')
-  ,("notsubsetordbleql", '\x2AC5')
-  ,("notsubsetoreql", '\x228A')
-  ,("notsuperseteql", '\x2289')
-  ,("notsupersetordbleql", '\x2AC6')
-  ,("notsupersetoreql", '\x228B')
-  ,("nottriangeqlleft", '\x22EC')
-  ,("nottriangeqlright", '\x22ED')
-  ,("nottriangleleft", '\x22EA')
-  ,("nottriangleright", '\x22EB')
-  ,("notturnstile", '\x22AC')
-  ,("planckover2pi", '\x210F')
-  ,("planckover2pi1", '\x210F')
-  ,("precedenotdbleqv", '\x2AB9')
-  ,("precedenotslnteql", '\x2AB5')
-  ,("precedeornoteqvlnt", '\x22E8')
-  ,("subsetnoteql", '\x228A')
-  ,("subsetornotdbleql", '\x2ACB')
-  ,("supersetnoteql", '\x228B')
-  ,("supersetornotdbleql", '\x2ACC')
-  ,("upslope", '\x29F8')
-  ]
diff --git a/lib/Pdf/Toolbox/Content/Transform.hs b/lib/Pdf/Toolbox/Content/Transform.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/Transform.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-
--- | 2d affine transform
-
-module Pdf.Toolbox.Content.Transform
-(
-  Transform(..),
-  Vector(..),
-  identity,
-  translation,
-  scale,
-  transform,
-  translate,
-  multiply
-)
-where
-
--- | Affine transform
-data Transform a = Transform a a a a a a
-  deriving Show
-
--- | 2d vector/point
-data Vector a = Vector a a
-  deriving Show
-
--- | Identity transform
-identity :: Num a => Transform a
-identity = Transform 1 0 0 1 0 0
-
--- | Translation
-translation :: Num a => a -> a -> Transform a
-translation tx ty = Transform 1 0 0 1 tx ty
-
--- | Scale
-scale :: Num a => a -> a -> Transform a
-scale sx sy = Transform sx 0 0 sy 0 0
-
--- | Apply transformation to vector
-transform :: Num a => Transform a -> Vector a -> Vector a
-transform (Transform a b c d e f) (Vector x y) = Vector (a * x + c * y + e) (b * x + d * y + f)
-
--- | Translate
-translate :: Num a => a -> a -> Transform a -> Transform a
-translate tx ty t = translation tx ty `multiply` t
-
--- | Combine two transformations
-multiply :: Num a => Transform a -> Transform a -> Transform a
-multiply (Transform a1 b1 c1 d1 e1 f1) (Transform a2 b2 c2 d2 e2 f2) = Transform a b c d e f
-  where
-  a = a1 * a2 + b1 * c2
-  b = a1 * b2 + b1 * d2
-  c = c1 * a2 + d1 * c2
-  d = c1 * b2 + d1 * d2
-  e = e1 * a2 + f1 * c2 + e2
-  f = e1 * b2 + f1 * d2 + f2
diff --git a/lib/Pdf/Toolbox/Content/UnicodeCMap.hs b/lib/Pdf/Toolbox/Content/UnicodeCMap.hs
deleted file mode 100644
--- a/lib/Pdf/Toolbox/Content/UnicodeCMap.hs
+++ /dev/null
@@ -1,203 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Unicode CMap defines mapping from glyphs to text
-
-module Pdf.Toolbox.Content.UnicodeCMap
-(
-  UnicodeCMap(..),
-  parseUnicodeCMap,
-  unicodeCMapNextGlyph,
-  unicodeCMapDecodeGlyph
-)
-where
-
-import Data.Monoid
-import Data.Char
-import qualified Data.List as List
-import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Base16 as Base16
-import Data.Text (Text)
-import qualified Data.Text as Text
-import qualified Data.Text.Encoding as Text
-import Data.Attoparsec.ByteString.Char8 (Parser, parseOnly)
-import qualified Data.Attoparsec.ByteString.Char8 as P
-import Control.Monad
-
--- | Unicode character map
---
--- Font dictionary can contain \"ToUnicode\" key -- reference
--- to a stream with unicode CMap
-data UnicodeCMap = UnicodeCMap {
-  unicodeCMapCodeRanges :: [(ByteString, ByteString)],
-  unicodeCMapChars :: Map Int Text,
-  unicodeCMapRanges :: [(Int, Int, Char)]
-  }
-  deriving (Show)
-
--- | Parse content of unicode CMap
-parseUnicodeCMap :: ByteString -> Either String UnicodeCMap
-parseUnicodeCMap cmap =
-  case (codeRanges, chars, ranges) of
-    (Right cr, Right cs, Right (rs, crs)) -> Right $ UnicodeCMap {
-      unicodeCMapCodeRanges = cr,
-      unicodeCMapChars = cs <> crs,
-      unicodeCMapRanges = rs
-      }
-    (Left err, _, _) -> Left $ "CMap code ranges: " ++ err
-    (_, Left err, _) -> Left $ "CMap chars: " ++ err
-    (_, _, Left err) -> Left $ "CMap ranges: " ++ err
-  where
-  codeRanges = parseOnly codeRangesParser cmap
-  chars = parseOnly charsParser cmap
-  ranges = parseOnly rangesParser cmap
-
--- | Take the next glyph code from string, also returns the rest of the string
-unicodeCMapNextGlyph :: UnicodeCMap -> ByteString -> Maybe (Int, ByteString)
-unicodeCMapNextGlyph cmap = go 1
-  where
-  go 5 _ = Nothing
-  go n str =
-    let glyph = BS.take n str in
-    if BS.length glyph /= n
-      then Nothing
-      else if any (inRange glyph) (unicodeCMapCodeRanges cmap)
-             then Just (toCode glyph, BS.drop n str)
-             else go (n + 1) str
-  inRange glyph (start, end) = glyph >= start && glyph <= end
-
-toCode :: ByteString -> Int
-toCode bs = fst $ BS.foldr (\b (sm, i) ->
-                    (sm + fromIntegral b * i, i * 255)) (0, 1) bs
-
--- | Convert glyph to text
---
--- Note: one glyph can represent more then one char, e.g. for ligatures
-unicodeCMapDecodeGlyph :: UnicodeCMap -> Int -> Maybe Text
-unicodeCMapDecodeGlyph cmap glyph =
-  case Map.lookup glyph (unicodeCMapChars cmap) of
-    Just txt -> Just txt
-    Nothing ->
-      case filter inRange (unicodeCMapRanges cmap) of
-        [(start, _, char)] -> Just (Text.singleton $ toEnum
-                                    $ (fromEnum char) + (glyph - start))
-        _ -> Nothing
-  where
-  inRange (start, end, _) = glyph >= start && glyph <= end
-
-charsParser :: Parser (Map Int Text)
-charsParser = do
-  combineChars <$> P.many' charsParser'
-  where
-  combineChars = List.foldl' Map.union Map.empty
-
-charsParser' :: Parser (Map Int Text)
-charsParser' = do
-  n <- skipTillParser $ do
-    n <- P.decimal
-    P.skipSpace
-    _ <- P.string "beginbfchar"
-    return n
-
-  chars <- replicateM n $ do
-    P.skipSpace
-    i <- parseHex
-    P.skipSpace
-    j <- parseHex
-    return (toCode i, Text.decodeUtf16BE j)
-
-  return $ Map.fromList chars
-
--- | It returns regular ranges and char map
---
--- Array ranges are converted to char map
-rangesParser :: Parser ([(Int, Int, Char)], Map Int Text)
-rangesParser =
-  combineRanges <$> P.many' rangesParser'
-  where
-  combineRanges = List.foldl' combineRange ([], Map.empty)
-  combineRange (ranges, rmap) (ranges', rmap') =
-    (ranges ++ ranges', Map.union rmap rmap')
-
-rangesParser' :: Parser ([(Int, Int, Char)], Map Int Text)
-rangesParser' = do
-  n <- skipTillParser $ do
-    n <- P.decimal
-    P.skipSpace
-    void $ P.string "beginbfrange"
-    return (n :: Int)
-
-  let go 0 rs cs = return (rs, cs)
-      go count rs cs = do
-        P.skipSpace
-        i <- toCode <$> parseHex
-        P.skipSpace
-        j <- toCode <$> parseHex
-        P.skipSpace
-        k <- P.eitherP parseHex parseHexArray
-        case k of
-          Left h -> do
-            c <- case Text.uncons $ Text.decodeUtf16BE h of
-                   Nothing -> fail "Can't decode range"
-                   Just (v, _) -> return v
-            go (pred count) ((i, j, c) : rs) cs
-          Right hs -> do
-            let cs' = zip [i..j] . map Text.decodeUtf16BE $ hs
-            go (pred count) rs (cs <> Map.fromList cs')
-
-  go n mempty mempty
-
-codeRangesParser :: Parser [(ByteString, ByteString)]
-codeRangesParser = do
-  n <- skipTillParser $ do
-    n <- P.decimal
-    P.skipSpace
-    void $ P.string "begincodespacerange"
-    return n
-
-  replicateM n $ do
-    P.skipSpace
-    i <- parseHex
-    P.skipSpace
-    j <- parseHex
-    return (i, j)
-
-parseHex :: Parser ByteString
-parseHex = do
-  void $ P.char '<'
-  -- hex can contain spaces, lets filter them out
-  res <- P.takeTill (== '>') >>= fromHex . BS.filter (/= 32)
-  void $ P.char '>'
-  return res
-
-parseHexArray :: Parser [ByteString]
-parseHexArray = do
-  void $ P.char '['
-  res <- P.many' $ do
-    P.skipSpace
-    parseHex
-  P.skipSpace
-  void $ P.char ']'
-  return res
-
--- XXX: wtf?!
-fromHex :: Monad m => ByteString -> m ByteString
-fromHex hex = do
-  let (str, rest) = Base16.decode $ bsToLower hex
-  unless (BS.null rest) $
-    fail $ "Can't decode hex" ++ show rest
-  return str
-  where
-  bsToLower = BS.map $ fromIntegral
-                     . fromEnum
-                     . toLower
-                     . toEnum
-                     . fromIntegral
-
-skipTillParser :: Parser a -> Parser a
-skipTillParser p = P.choice [
-  p,
-  P.anyChar >> skipTillParser p
-  ]
diff --git a/pdf-toolbox-content.cabal b/pdf-toolbox-content.cabal
--- a/pdf-toolbox-content.cabal
+++ b/pdf-toolbox-content.cabal
@@ -1,5 +1,5 @@
 name:                pdf-toolbox-content
-version:             0.0.5.1
+version:             0.1.1
 synopsis:            A collection of tools for processing PDF files
 license:             BSD3
 license-file:        LICENSE
@@ -8,7 +8,7 @@
 copyright:           Copyright (c) Yuras Shumovich 2013-2016
 category:            PDF
 build-type:          Simple
-cabal-version:       >=1.8
+cabal-version:       >=1.10
 homepage:            https://github.com/Yuras/pdf-toolbox
 extra-source-files:  changelog.md
 description:
@@ -22,23 +22,51 @@
   hs-source-dirs:      lib
                        compat
   exposed-modules:
-                       Pdf.Toolbox.Content
-                       Pdf.Toolbox.Content.Parser
-                       Pdf.Toolbox.Content.Ops
-                       Pdf.Toolbox.Content.Processor
-                       Pdf.Toolbox.Content.Transform
-                       Pdf.Toolbox.Content.UnicodeCMap
-                       Pdf.Toolbox.Content.FontInfo
-                       Pdf.Toolbox.Content.GlyphList
-                       Pdf.Toolbox.Content.TexGlyphList
-                       Pdf.Toolbox.Content.Encoding.WinAnsi
-                       Pdf.Toolbox.Content.Encoding.MacRoman
+                       Pdf.Content
+                       Pdf.Content.Parser
+                       Pdf.Content.Ops
+                       Pdf.Content.Processor
+                       Pdf.Content.Transform
+                       Pdf.Content.UnicodeCMap
+                       Pdf.Content.FontDescriptor
+                       Pdf.Content.FontInfo
+                       Pdf.Content.GlyphList
+                       Pdf.Content.TexGlyphList
+                       Pdf.Content.Encoding.WinAnsi
+                       Pdf.Content.Encoding.MacRoman
+                       Pdf.Content.Encoding.PdfDoc
   other-modules:       Prelude
   build-depends:       base >= 4.5 && < 5,
                        containers,
                        attoparsec >= 0.10,
                        bytestring,
-                       base16-bytestring,
+                       base16-bytestring >= 1,
                        text,
+                       scientific,
+                       vector,
                        io-streams,
-                       pdf-toolbox-core ==0.0.4.*
+                       pdf-toolbox-core ==0.1.*
+  if impl(ghc >= 8.10)
+    ghc-options:       -Wunused-packages
+  default-language:    Haskell2010
+
+test-suite test
+  type:                exitcode-stdio-1.0
+  hs-source-dirs:      test
+                       compat
+  main-is:             test.hs
+  other-modules:       Test.UnicodeCMap
+                       Test.Parser
+                       Test.FontDescriptor
+                       Prelude
+  build-depends:       base,
+                       containers,
+                       bytestring,
+                       attoparsec,
+                       io-streams,
+                       pdf-toolbox-content,
+                       pdf-toolbox-core,
+                       hspec
+  if impl(ghc >= 8.10)
+    ghc-options:       -Wunused-packages
+  default-language:    Haskell2010
diff --git a/test/Test/FontDescriptor.hs b/test/Test/FontDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/FontDescriptor.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Test.FontDescriptor
+(
+  spec,
+)
+where
+
+import Pdf.Content.FontDescriptor
+
+import Data.Int
+import Test.Hspec
+
+spec :: Spec
+spec = describe "FontDescriptor" $ do
+  testFlagSet
+
+defFD :: FontDescriptor
+defFD = FontDescriptor
+  { fdFontName = "test"
+  , fdFontFamily = Nothing
+  , fdFontStretch = Nothing
+  , fdFontWeight = Nothing
+  , fdFlags = 5
+  , fdFontBBox = Nothing
+  , fdItalicAngle = -12.5
+  , fdDescent = Nothing
+  , fdAscent = Nothing
+  , fdLeading = Nothing
+  , fdCapHeight = Nothing
+  , fdXHeight = Nothing
+  , fdStemV = Nothing
+  , fdStemH = Nothing
+  , fdAvgWidth = Nothing
+  , fdMaxWidth = Nothing
+  , fdMissingWidth = Nothing
+  , fdCharSet = Nothing
+  }
+
+testFlagSet :: Spec
+testFlagSet = describe "flagSet" $ do
+  it "should return True when testing FixedPitch on 5" $ do
+    let res = flagSet defFD FixedPitch
+    res `shouldSatisfy` (==True)
+
+  it "should return False when testing Serif on 5" $ do
+    let res = flagSet defFD Serif
+    res `shouldSatisfy` (==False)
+
+  it "should return True when testing Symbolic on 5" $ do
+    let res = flagSet defFD Symbolic
+    res `shouldSatisfy` (==True)
+
+  it "should return False when testing Script on 5" $ do
+    let res = flagSet defFD Script
+    res `shouldSatisfy` (==False)
+
+  it "should return False when testing ForceBold on 5" $ do
+    let res = flagSet defFD ForceBold
+    res `shouldSatisfy` (==False)
+
+  it "should return True when testing ForceBold on (2^32)-1" $ do
+    let res = flagSet (defFD {fdFlags = (power64 2 32)-1})  ForceBold
+    res `shouldSatisfy` (==True)
+
+  it "should return False when testing ForceBold on 0" $ do
+    let res = flagSet (defFD {fdFlags = 0}) ForceBold
+    res `shouldSatisfy` (==False)
+
+  where
+    power64 :: Int64 -> Int64 -> Int64
+    power64 _ 0 = 1
+    power64 b e = b * power64 b (e-1)
diff --git a/test/Test/Parser.hs b/test/Test/Parser.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Parser.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Test.Parser
+(
+  spec,
+)
+where
+
+import Pdf.Core
+import Pdf.Core.Exception
+import Pdf.Content.Parser
+import Pdf.Content.Ops
+
+import qualified Data.Attoparsec.ByteString as Parser
+import qualified System.IO.Streams as Streams
+import Test.Hspec
+
+spec :: Spec
+spec = describe "Parser" $ do
+  parseContentSpec
+  readNextOperatorSpec
+
+parseContentSpec :: Spec
+parseContentSpec = describe "parseContent" $ do
+  it "should parse an object" $ do
+    let input = "(hello)"
+        res = Parser.parseOnly parseContent input
+    res `shouldBe` Right (Just $ Obj $ String "hello")
+
+  it "should parse an operator" $ do
+    let input = "T*"
+        res = Parser.parseOnly parseContent input
+    res `shouldBe` Right (Just $ Op Op_T_star)
+
+  it "should return Nothing when input is empty" $ do
+    let input = ""
+        res = Parser.parseOnly parseContent input
+    res `shouldBe` Right Nothing
+
+  it "should ignore comments at the beginning" $ do
+    let input = "% comments\nTj"
+        res = Parser.parseOnly parseContent input
+    res `shouldBe` Right (Just $ Op Op_Tj)
+
+  it "should ignore multiple lines of comments at the beginning" $ do
+    let input = "% comments\nTj"
+        res = Parser.parseOnly parseContent input
+    res `shouldBe` Right (Just $ Op Op_Tj)
+
+readNextOperatorSpec :: Spec
+readNextOperatorSpec = describe "readNextOperator" $ do
+  it "should return Nothing when there is no input" $ do
+    let input = []
+    is <- Streams.fromList input
+    next <- readNextOperator is
+    next `shouldBe` Nothing
+
+  it "should collect all objects until an operator" $ do
+    let input = [Obj o1, Obj o2, Op op]
+        o1 = String "o1"
+        o2 = String "o2"
+        op = Op_Tj
+    is <- Streams.fromList input
+    next <- readNextOperator is
+    next `shouldBe` Just (op, [o1, o2])
+
+  it "should throw when there is no operator after arguments" $ do
+    let input = [Obj o1, Obj o2]
+        o1 = String "o1"
+        o2 = String "o2"
+    is <- Streams.fromList input
+    readNextOperator is
+      `shouldThrow` \Corrupted{} -> True
diff --git a/test/Test/UnicodeCMap.hs b/test/Test/UnicodeCMap.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/UnicodeCMap.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Test.UnicodeCMap
+(
+  spec,
+)
+where
+
+import Pdf.Content.UnicodeCMap
+
+import Data.Either
+import qualified Data.List as List
+import qualified Data.Map as Map
+import qualified Data.ByteString as ByteString
+import Test.Hspec
+
+spec :: Spec
+spec = describe "UnicodeCMap" $ do
+  parseUnicodeCMapSpec
+  unicodeCMapDecodeGlyphSpec
+  unicodeCMapNextGlyphSpec
+
+parseUnicodeCMapSpec :: Spec
+parseUnicodeCMapSpec = describe "parseUnicodeCMap" $ do
+  it "should parse trivial cmap" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "0 beginbfchar\n"
+          , "0 beginbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    res `shouldSatisfy` isRight
+
+  it "should parse codespace ranges" $ do
+    let input = ByteString.concat
+          [ "1 begincodespacerange\n"
+          , "<0000> <FFFF>\n"
+          , "0 beginbfchar\n"
+          , "0 beginbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapCodeRanges res `shouldBe`
+      Right [ (ByteString.pack [0, 0], ByteString.pack [255, 255])]
+
+  it "should parse chars" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "1 beginbfchar\n"
+          , "<3A51> <D840DC3E>\n"
+          , "0 beginbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapChars res `shouldBe`
+      Right (Map.fromList [(14929,"\131134")])
+
+  it "should parse multiple chars" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "1 beginbfchar\n"
+          , "<25> <00660066>\n"
+          , "endbfchar\n"
+          , "1 beginbfchar\n"
+          , "<26> <0066006c>\n"
+          , "endbfchar\n"
+          , "0 beginbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapChars res `shouldBe`
+      Right (Map.fromList [(37,"ff"), (38, "fl")])
+
+  it "should parse ranges" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "0 beginbfchar\n"
+          , "1 beginbfrange\n"
+          , "<0000> <005E> <0020>\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapRanges res `shouldBe`
+      Right [(0,94,' ')]
+
+  it "should parse multiple ranges" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "0 beginbfchar\n"
+          , "1 beginbfrange\n"
+          , "<21> <21> <0045>\n"
+          , "endbfrange\n"
+          , "1 beginbfrange\n"
+          , "<22> <22> <0073>\n"
+          , "endbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap (List.sort . unicodeCMapRanges) res `shouldBe`
+      Right (List.sort [(33,33,'E'), (34, 34, 's')])
+
+  it "should parse array ranges into char map" $ do
+    let input = ByteString.concat
+          [ "0 begincodespacerange\n"
+          , "0 beginbfchar\n"
+          , "1 beginbfrange\n"
+          , "<005F> <0061> [<00660066> <00660069> <00660066006C>]\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapChars res `shouldBe`
+      Right (Map.fromList [(95,"ff"),(96,"fi"),(97,"ffl")])
+
+  it "should allow spaces in hex numbers" $ do
+    let input = ByteString.concat
+          [ "1 begincodespacerange\n"
+          , "<0000> <FF FF>\n"
+          , "0 beginbfchar\n"
+          , "0 beginbfrange\n"
+          ]
+        res = parseUnicodeCMap input
+    fmap unicodeCMapCodeRanges res `shouldBe`
+      Right [ (ByteString.pack [0, 0], ByteString.pack [255, 255])]
+
+unicodeCMapDecodeGlyphSpec :: Spec
+unicodeCMapDecodeGlyphSpec = describe "unicodeCMapDecodeGlyph" $ do
+  it "should take glyph from char map if possible" $ do
+    let cmap = UnicodeCMap [] charMap []
+        charMap = Map.fromList [(42, "hello")]
+
+    let res = unicodeCMapDecodeGlyph cmap 42
+    res `shouldBe` Just "hello"
+
+  it "should be able to decode the first glyph from a range" $ do
+    let cmap = UnicodeCMap [] mempty [(10, 15, '1')]
+
+    let res = unicodeCMapDecodeGlyph cmap 10
+    res `shouldBe` Just "1"
+
+  it "should be able to decode the last glyph from a range" $ do
+    let cmap = UnicodeCMap [] mempty [(10, 15, '1')]
+
+    let res = unicodeCMapDecodeGlyph cmap 15
+    res `shouldBe` Just "6"
+
+  it "should be able to decode a glyph from a middle of a range" $ do
+    let cmap = UnicodeCMap [] mempty [(10, 15, '1')]
+
+    let res = unicodeCMapDecodeGlyph cmap 11
+    res `shouldBe` Just "2"
+
+  it "should not decode a glyph before a range" $ do
+    let cmap = UnicodeCMap [] mempty [(10, 15, '1')]
+
+    let res = unicodeCMapDecodeGlyph cmap 9
+    res `shouldBe` Nothing
+
+  it "should not decode a glyph after a range" $ do
+    let cmap = UnicodeCMap [] mempty [(10, 15, '1')]
+
+    let res = unicodeCMapDecodeGlyph cmap 16
+    res `shouldBe` Nothing
+
+unicodeCMapNextGlyphSpec :: Spec
+unicodeCMapNextGlyphSpec = describe "unicodeCMapNextGlyph" $ do
+  it "correctly handles multibyte ranges" $ do
+    let cmap = UnicodeCMap [("\0\0", "\1\1")] mempty []
+    let Just (code, rest) = unicodeCMapNextGlyph cmap "\1\0rest"
+    rest `shouldBe` rest
+    code `shouldBe` 256
diff --git a/test/test.hs b/test/test.hs
new file mode 100644
--- /dev/null
+++ b/test/test.hs
@@ -0,0 +1,18 @@
+
+module Main
+(
+  main
+)
+where
+
+import qualified Test.UnicodeCMap
+import qualified Test.Parser
+import qualified Test.FontDescriptor
+
+import Test.Hspec
+
+main :: IO ()
+main = hspec $ do
+  Test.UnicodeCMap.spec
+  Test.Parser.spec
+  Test.FontDescriptor.spec
